diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h
index 9e3cafd..0bc5811 100644
--- a/ipacm/inc/IPACM_Iface.h
+++ b/ipacm/inc/IPACM_Iface.h
@@ -54,6 +54,7 @@
 #include "IPACM_Defs.h"
 
 /* current support 2 ipv6-address*/
+#define MAX_DEFAULT_v4_ROUTE_RULES  1
 #define MAX_DEFAULT_v6_ROUTE_RULES  2
 #define IPV4_DEFAULT_FILTERTING_RULES 3
 #define IPV6_DEFAULT_FILTERTING_RULES 1
@@ -87,7 +88,7 @@
 
 		uint32_t dft_v4fl_rule_hdl[IPV4_DEFAULT_FILTERTING_RULES];
 		uint32_t dft_v6fl_rule_hdl[IPV6_DEFAULT_FILTERTING_RULES + IPV6_DEFAULT_LAN_FILTERTING_RULES];
-		uint32_t dft_rt_rule_hdl[1+MAX_DEFAULT_v6_ROUTE_RULES]; /* 1 for ipv4 */
+		uint32_t dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+MAX_DEFAULT_v6_ROUTE_RULES];
 
 		ipa_ioc_query_intf *iface_query;
 		ipa_ioc_query_intf_tx_props *tx_prop;
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index 5177fe1..da7fd06 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -97,10 +97,10 @@
 	int handle_header_add_evt(uint8_t mac_addr[6]);
 
 	/* configure the initial firewall filter rules */
-	int config_dft_firewall_rules(ipa_ip_type ip_type);
+	int config_dft_firewall_rules(ipa_ip_type iptype);
 
 	/*clean firewall filter rules */
-	int del_dft_firewall_rules(ipa_ip_type ip_type);
+	int del_dft_firewall_rules(ipa_ip_type iptype);
 
 	/*handle wan-iface down event */
 	int handle_down_evt();
diff --git a/ipacm/src/IPACM_CmdQueue.cpp b/ipacm/src/IPACM_CmdQueue.cpp
index 632ae5d..7e48546 100644
--- a/ipacm/src/IPACM_CmdQueue.cpp
+++ b/ipacm/src/IPACM_CmdQueue.cpp
@@ -108,7 +108,7 @@
 	MsgQueue = MessageQueue::getInstance();
 	if(MsgQueue == NULL)
 	{
-		IPACMDBG("unable to start cmd queue process\n");
+		IPACMERR("unable to start cmd queue process\n");
 		return NULL;
 	}
 
@@ -154,7 +154,7 @@
 				return NULL;
 			}
 
-			IPACMDBG("Processing item %p\n",item);
+			IPACMDBG("Processing item %p event ID: %d\n",item,item->evt.data.event);
 			item->evt.callback_ptr(&item->evt.data);
 			delete item;
 			item = NULL;
diff --git a/ipacm/src/IPACM_Header.cpp b/ipacm/src/IPACM_Header.cpp
index 0ebb83d..3d3d162 100644
--- a/ipacm/src/IPACM_Header.cpp
+++ b/ipacm/src/IPACM_Header.cpp
@@ -47,7 +47,7 @@
 	m_fd = open(DEVICE_NAME, O_RDWR);
 	if (-1 == m_fd)
 	{
-		IPACMDBG("Failed to open %s in IPACM_Header test application constructor.\n", DEVICE_NAME);
+		IPACMERR("Failed to open %s in IPACM_Header test application constructor.\n", DEVICE_NAME);
 	}
 }
 
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index cc6ce13..5f4ca07 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -85,6 +85,11 @@
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
 
 	IPACMDBG("\n");
+	if (softwarerouting_act == true)
+	{
+		IPACMDBG("already setup software_routing rule for (%s)iface ip-family %d\n", IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ip_type);
+		return IPACM_SUCCESS;
+	}
 
 	m_pFilteringTable = (struct ipa_ioc_add_flt_rule *)
 		 calloc(1,
@@ -209,7 +214,11 @@
 	ipa_ip_type ip;
 	uint32_t flt_hdl;
 
-	IPACMDBG("ip-type: %d\n", ip_type);
+	if (softwarerouting_act == false)
+	{
+		IPACMDBG("already delete AMPDU software_routing rule for (%s)iface ip-family %d\n", IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ip_type);
+		return IPACM_SUCCESS;
+	}	
 
 	if (ip_type == IPA_IP_MAX)
 	{
@@ -389,11 +398,15 @@
 
 	if (res != IPACM_FAILURE)
 	{
-		IPACMDBG("Rx property attribute mask:0x%x\n", rx_prop->rx[0].attrib.attrib_mask);
-		for(uint32_t cnt=0; cnt<tx_prop->num_tx_props; cnt++)
+		for (uint32_t cnt=0; cnt<rx_prop->num_rx_props; cnt++)
 		{
-			IPACMDBG("Tx property:%d attribute mask:0x%x, ip-type: %d\n", 
-							    cnt, tx_prop->tx[0].attrib.attrib_mask,tx_prop->tx[0].ip);
+			IPACMDBG("Rx(%d):attrib-mask:0x%x, ip-type: %d, src_pipe: %d\n",
+							 cnt, rx_prop->rx[cnt].attrib.attrib_mask, rx_prop->rx[cnt].ip, rx_prop->rx[cnt].src_pipe);
+		}
+		for (uint32_t cnt=0; cnt<tx_prop->num_tx_props; cnt++)
+		{
+			IPACMDBG("Tx(%d):attrib-mask:0x%x, ip-type: %d, dst_pipe: %d, header: %s\n",
+							 cnt, tx_prop->tx[cnt].attrib.attrib_mask, tx_prop->tx[cnt].ip, tx_prop->tx[cnt].dst_pipe, tx_prop->tx[cnt].hdr_name);
 		}
 	}
 
@@ -518,7 +531,7 @@
 				}
 				else
 				{
-					IPACMDBG("Failed adding default v4 Filtering rule %d\n", i);
+					IPACMERR("Failed adding default v4 Filtering rule %d\n", i);
 				}
 			}
 		}
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 747cbfe..36f44ca 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -60,7 +60,6 @@
 void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param) //skylar rename:event_callback
 {
 	ipacm_event_data_fid *evt_data = (ipacm_event_data_fid *)param;
-	IPACMDBG("\n");
 	switch(event)
 	{
 
@@ -98,9 +97,9 @@
 				IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, lan);
 				IPACM_EvtDispatcher::registr(IPA_SW_ROUTING_ENABLE, lan);
 				IPACM_EvtDispatcher::registr(IPA_SW_ROUTING_DISABLE, lan);
-				IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, lan);
 				IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_UP, lan);
 				IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_DOWN, lan);
+				IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, lan);
 				IPACMDBG("ipa_LAN (%s):ipa_index (%d) instance open/registr ok\n", lan->dev_name, lan->ipa_if_num);
 				registr(ipa_interface_index, lan);
 			}
@@ -119,9 +118,9 @@
 				IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, wl);
 				IPACM_EvtDispatcher::registr(IPA_SW_ROUTING_ENABLE, wl);
 				IPACM_EvtDispatcher::registr(IPA_SW_ROUTING_DISABLE, wl);
-				IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, wl);
 				IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_UP, wl);
 				IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_DOWN, wl);
+				IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, wl);
 				IPACMDBG("ipa_WLAN (%s):ipa_index (%d) instance open/registr ok\n", wl->dev_name, wl->ipa_if_num);
 				registr(ipa_interface_index, wl);
 			}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 8b47985..cc6eec1 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -103,10 +103,14 @@
 			{
 				IPACMDBG("Received IPA_ADDR_ADD_EVENT\n");
 
-				if ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) // check not setup before
+				/* check v4 not setup before, v6 can have 2 iface ip */
+				if( ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) 
+				    || ((data->iptype==IPA_IP_v6) && (num_dft_rt!=MAX_DEFAULT_v6_ROUTE_RULES))) 
 				{
+				  IPACMDBG("Got IPA_ADDR_ADD_EVENT ip-family:%d, v6 num %d: \n",data->iptype,num_dft_rt);
 					handle_addr_evt(data);
 					handle_private_subnet(data->iptype);
+				  
 					if (IPACM_Wan::isWanUP() && (data->iptype == IPA_IP_v4))
 					{
 						handle_wan_up();
@@ -320,7 +324,7 @@
 
 				if (false == m_header.GetHeaderHandle(&sRetHeader))
 				{
-					IPACMDBG(" ioctl failed\n");
+					IPACMERR(" ioctl failed\n");
 				}
 
 				rt_rule_entry->rule.hdr_hdl = sRetHeader.hdl;
@@ -396,7 +400,7 @@
 					if (m_routing.DeleteRoutingHdl(get_rt_ruleptr(route_rule, i)->rt_rule_hdl[tx_index],
 																				 IPA_IP_v4) == false)
 					{
-						IPACMDBG("Routing rule deletion failed!\n");
+						IPACMERR("Routing rule deletion failed!\n");
 						return IPACM_FAILURE;
 					}
 				}
@@ -514,8 +518,7 @@
 	memcpy(&m_pFilteringTable->rules[0], &flt_rule_entry, sizeof(flt_rule_entry));
 	if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
 	{
-		IPACMDBG("Error Adding RuleTable(0) to Filtering, aborting...\n");
-		perror("Lan: Unable to add filter rule");
+		IPACMERR("Error Adding RuleTable(0) to Filtering, aborting...\n");
 		free(m_pFilteringTable);
 		return IPACM_FAILURE;
 	}
@@ -542,7 +545,7 @@
 	if (m_filtering.DeleteFilteringHdls(&lan_wan_fl_rule_hdl[0],
 																			IPA_IP_v4, 1) == false)
 	{
-		IPACMDBG("Error Adding RuleTable(1) to Filtering, aborting...\n");
+		IPACMERR("Error Adding RuleTable(1) to Filtering, aborting...\n");
 		return IPACM_FAILURE;
 	}
 
@@ -558,7 +561,7 @@
 	const int NUM_RULES = 1;
 	int res = IPACM_SUCCESS;
 
-	/* construct ipa_ioc_add_flt_rule with 1 rules */
+	/* construct ipa_ioc_add_flt_rule with v6 rules */
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
 
 	IPACMDBG("set route/filter rule ip-type: %d \n", data->iptype);
@@ -652,7 +655,7 @@
 
 			if (false == m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_v6))
 			{
-				IPACMDBG("m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_v6=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_v6);
+				IPACMERR("m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_v6=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_v6);
 				free(m_pFilteringTable);
 				res = IPACM_FAILURE;
 				goto fail;
@@ -698,7 +701,7 @@
 			free(m_pFilteringTable);
 		}
 
-		dft_rt_rule_hdl[1 + num_dft_rt] = rt_rule_entry->rt_rule_hdl;
+		dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES + num_dft_rt] = rt_rule_entry->rt_rule_hdl;
 		num_dft_rt++;
 	}
 
@@ -766,7 +769,7 @@
 
 		if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
 		{
-			IPACMDBG("Error Adding RuleTable(0) to Filtering, aborting...\n");
+			IPACMERR("Error Adding RuleTable(0) to Filtering, aborting...\n");
 			free(m_pFilteringTable);
 			return IPACM_FAILURE;
 		}
@@ -816,7 +819,7 @@
 		/* may have multiple ipv6 iface-RT rules*/
 		for (i = 0; i < num_dft_rt; i++)
 		{
-			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[1 + i], IPA_IP_v6)
+			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES + i], IPA_IP_v6)
 					== false)
 			{
 				IPACMERR("Routing rule deletion failed!\n");
@@ -846,7 +849,7 @@
 	/* check software routing fl rule hdl */
 	if (softwarerouting_act == true)
 	{
-		IPACM_Iface::handle_software_routing_disable();
+		handle_software_routing_disable();
 	}
 
 
diff --git a/ipacm/src/IPACM_Neighbor.cpp b/ipacm/src/IPACM_Neighbor.cpp
index 327b681..5c04087 100644
--- a/ipacm/src/IPACM_Neighbor.cpp
+++ b/ipacm/src/IPACM_Neighbor.cpp
@@ -240,7 +240,7 @@
 				}
 				else
 				{
-					IPACMDBG("error:  neighbor client oversize!");
+					IPACMERR("error:  neighbor client oversize!");
 					return;
 				}
 			};
diff --git a/ipacm/src/IPACM_Netlink.cpp b/ipacm/src/IPACM_Netlink.cpp
index eea98ea..d9a9098 100644
--- a/ipacm/src/IPACM_Netlink.cpp
+++ b/ipacm/src/IPACM_Netlink.cpp
@@ -92,7 +92,7 @@
 					(struct sockaddr *)p_sk_addr_loc,
 					sizeof(struct sockaddr_nl)) < 0)
 	{
-		IPACMDBG("Socket bind failed\n");
+		IPACMERR("Socket bind failed\n");
 		return IPACM_FAILURE;
 	}
 
@@ -163,7 +163,7 @@
 					}
 					else
 					{
-						IPACMDBG("No read function\n");
+						IPACMERR("No read function\n");
 					}
 				}
 
@@ -341,14 +341,13 @@
 	 ipa_nl_link_info_t      *link_info
 )
 {
-	struct rtattr *rtah = NULL;
+	struct rtattr;
 	/* NL message header */
 	struct nlmsghdr *nlh = (struct nlmsghdr *)buffer;
 
 	/* Extract the header data */
 	link_info->metainfo = *(struct ifinfomsg *)NLMSG_DATA(nlh);
 	buflen -= sizeof(struct nlmsghdr);
-	rtah = IFA_RTA(NLMSG_DATA(nlh));
 
 	return IPACM_SUCCESS;
 }
@@ -586,6 +585,15 @@
 				{
 					IPACMDBG("\n GOT useful newlink event\n");
 					ret_val = ipa_get_if_name(dev_name, msg_ptr->nl_link_info.metainfo.ifi_index);
+					
+					data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+					if(data_fid == NULL)
+					{
+						IPACMERR("unable to allocate memory for event data_fid\n");
+						return IPACM_FAILURE;
+					}
+					data_fid->if_index = msg_ptr->nl_link_info.metainfo.ifi_index;
+					
 					if(msg_ptr->nl_link_info.metainfo.ifi_flags & IFF_UP)
 					{
 						IPACMDBG("Interface %s bring up with IP-family: %d \n", dev_name, msg_ptr->nl_link_info.metainfo.ifi_family);
@@ -603,15 +611,6 @@
 										 data_fid->if_index);
 					}
 
-					data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
-					if(data_fid == NULL)
-					{
-						IPACMDBG("unable to allocate memory for event data_fid\n");
-						return IPACM_FAILURE;
-					}
-					data_fid->if_index = msg_ptr->nl_link_info.metainfo.ifi_index;
-
-
 					evt_data.evt_data = data_fid;
 					IPACM_EvtDispatcher::PostEvt(&evt_data);
 
@@ -643,7 +642,7 @@
 				data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
 				if(data_fid == NULL)
 				{
-					IPACMDBG("unable to allocate memory for event data_fid\n");
+					IPACMERR("unable to allocate memory for event data_fid\n");
 					return IPACM_FAILURE;
 				}
 
@@ -676,7 +675,7 @@
 				data_addr = (ipacm_event_data_addr *)malloc(sizeof(ipacm_event_data_addr));
 				if(data_addr == NULL)
 				{
-					IPACMDBG("unable to allocate memory for event data_addr\n");
+					IPACMERR("unable to allocate memory for event data_addr\n");
 					return IPACM_FAILURE;
 				}
 
@@ -696,6 +695,11 @@
 					memcpy(data_addr->ipv6_addr,
 								 msg_ptr->nl_addr_info.attr_info.prefix_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr));
+
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);								 
 				}
 				else
 				{
@@ -870,7 +874,7 @@
 					data_addr = (ipacm_event_data_addr *)malloc(sizeof(ipacm_event_data_addr));
 					if(data_addr == NULL)
 					{
-						IPACMDBG("unable to allocate memory for event data_addr\n");
+						IPACMERR("unable to allocate memory for event data_addr\n");
 						return IPACM_FAILURE;
 					}
 
@@ -921,10 +925,20 @@
 									 msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 									 sizeof(data_addr->ipv6_addr));
 
-						memcpy(data_addr->ipv6_addr_mask,
+						data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+						data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+						data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+						data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);
+
+						memcpy(data_addr->ipv6_addr_mask, 
 									 msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 									 sizeof(data_addr->ipv6_addr_mask));
 
+						data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+						data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+						data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+						data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]);		
+
 						evt_data.event = IPA_ROUTE_ADD_EVENT;
 						data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
 						data_addr->iptype = IPA_IP_v6;
@@ -1013,7 +1027,7 @@
 					data_addr = (ipacm_event_data_addr *)malloc(sizeof(ipacm_event_data_addr));
 					if(data_addr == NULL)
 					{
-						IPACMDBG("unable to allocate memory for event data_addr\n");
+						IPACMERR("unable to allocate memory for event data_addr\n");
 						return IPACM_FAILURE;
 					}
 
@@ -1021,6 +1035,11 @@
 								 msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr));
 
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);								 
+
 					mask_value_v6 = msg_ptr->nl_route_info.metainfo.rtm_dst_len;
 					for(mask_index = 0; mask_index < 4; mask_index++)
 					{
@@ -1043,6 +1062,11 @@
 									 data_addr->ipv6_addr_mask[2],
 									 data_addr->ipv6_addr_mask[3]);
 
+					data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+					data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+					data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+					data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]);		
+									 
 					evt_data.event = IPA_ROUTE_ADD_EVENT;
 					data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
 					data_addr->iptype = IPA_IP_v6;
@@ -1078,9 +1102,20 @@
 
 					memcpy(data_addr->ipv6_addr, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr));
+
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);								 
+
 					memcpy(data_addr->ipv6_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr_mask));
 
+					data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+					data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+					data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+					data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]);		
+
 					evt_data.event = IPA_ROUTE_ADD_EVENT;
 					data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
 					data_addr->iptype = IPA_IP_v6;
@@ -1098,7 +1133,7 @@
 		case RTM_DELROUTE:
 			if(IPACM_SUCCESS != ipa_nl_decode_rtm_route(buffer, buflen, &(msg_ptr->nl_route_info)))
 			{
-				IPACMDBG("Failed to decode rtm route message\n");
+				IPACMERR("Failed to decode rtm route message\n");
 				return IPACM_FAILURE;
 			}
 
@@ -1255,8 +1290,19 @@
 						}
 						memcpy(data_addr->ipv6_addr, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 									 sizeof(data_addr->ipv6_addr));
+
+						data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+						data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+						data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+						data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);								 
+
 						memcpy(data_addr->ipv6_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 									 sizeof(data_addr->ipv6_addr_mask));
+
+						data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+						data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+						data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+						data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]);								
 						data_addr->iptype = IPA_IP_v6;
 					}
 					else
@@ -1331,6 +1377,11 @@
 					memcpy(data_addr->ipv6_addr, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr));
 
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);	
+
 					mask_value_v6 = msg_ptr->nl_route_info.metainfo.rtm_dst_len;
 					for(mask_index = 0; mask_index < 4; mask_index++)
 					{
@@ -1364,6 +1415,11 @@
 					IPACMDBG("3st: %08x \n",
 									 data_addr->ipv6_addr_mask[3]);
 
+					data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+					data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+					data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+					data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]); 
+						
 					evt_data.event = IPA_ROUTE_DEL_EVENT;
 					data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
 					data_addr->iptype = IPA_IP_v6;
@@ -1398,9 +1454,21 @@
 					}
 					memcpy(data_addr->ipv6_addr, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr));
+
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);						
+																						 
+
 					memcpy(data_addr->ipv6_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr.__ss_padding,
 								 sizeof(data_addr->ipv6_addr_mask));
 
+					data_addr->ipv6_addr_mask[0] = ntohl(data_addr->ipv6_addr_mask[0]);
+					data_addr->ipv6_addr_mask[1] = ntohl(data_addr->ipv6_addr_mask[1]);
+					data_addr->ipv6_addr_mask[2] = ntohl(data_addr->ipv6_addr_mask[2]);
+					data_addr->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]); 
+
 					evt_data.event = IPA_ROUTE_DEL_EVENT;
 					data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
 					data_addr->iptype = IPA_IP_v6;
@@ -1449,6 +1517,11 @@
 					memcpy(data_all->ipv6_addr, 
 								 msg_ptr->nl_neigh_info.attr_info.local_addr.__ss_padding,
 								 sizeof(data_all->ipv6_addr));
+
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);	
 					data_all->iptype = IPA_IP_v6;
 				}
 				else
@@ -1531,6 +1604,11 @@
 
 					memcpy(data_all->ipv6_addr, msg_ptr->nl_neigh_info.attr_info.local_addr.__ss_padding,
 								 sizeof(data_all->ipv6_addr));
+
+					data_addr->ipv6_addr[0] = ntohl(data_addr->ipv6_addr[0]);
+					data_addr->ipv6_addr[1] = ntohl(data_addr->ipv6_addr[1]);
+					data_addr->ipv6_addr[2] = ntohl(data_addr->ipv6_addr[2]);
+					data_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);	
 					data_all->iptype = IPA_IP_v6;
 				}
 				else
@@ -1686,7 +1764,7 @@
 	 ipa_sock_thrd_fd_read_f read_f
 	 )
 {
-	ipa_nl_sk_info_t sk_info, sk_info2;
+	ipa_nl_sk_info_t sk_info;
 	int ret_val;
 
 	memset(&sk_info, 0, sizeof(ipa_nl_sk_info_t));
diff --git a/ipacm/src/IPACM_Routing.cpp b/ipacm/src/IPACM_Routing.cpp
index 1351fbe..43f42bf 100644
--- a/ipacm/src/IPACM_Routing.cpp
+++ b/ipacm/src/IPACM_Routing.cpp
@@ -53,7 +53,7 @@
 	m_fd = open(DEVICE_NAME, O_RDWR);
 	if (0 == m_fd)
 	{
-		IPACMDBG("Failed opening %s.\n", DEVICE_NAME);
+		IPACMERR("Failed opening %s.\n", DEVICE_NAME);
 	}
 }
 
@@ -77,7 +77,7 @@
 
 	if (!DeviceNodeIsOpened())
 	{
-		IPACMDBG("Device is not opened\n");
+		IPACMERR("Device is not opened\n");
 		return false;
 	}
 
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 1a45dc5..237c4d9 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -78,9 +78,6 @@
 	const int NUM_RULES = 1;
 	int res = IPACM_SUCCESS;
 
-	/* initial multicast/broadcast/fragment filter rule */
-	init_fl_rule(data->iptype);
-
 	rt_rule = (struct ipa_ioc_add_rt_rule *)
 		 calloc(1, sizeof(struct ipa_ioc_add_rt_rule) +
 						NUM_RULES * sizeof(struct ipa_rt_rule_add));
@@ -105,7 +102,7 @@
 	}
 
 	rt_rule_entry = &rt_rule->rules[0];
-	rt_rule_entry->at_rear = 1;
+	rt_rule_entry->at_rear = false;
 	rt_rule_entry->rule.dst = IPA_CLIENT_A5_LAN_WAN_CONS;  //go to A5
 	rt_rule_entry->rule.attrib.attrib_mask = IPA_FLT_DST_ADDR;
 
@@ -149,12 +146,21 @@
 	if (data->iptype == IPA_IP_v4)
 	{
 		dft_rt_rule_hdl[0] = rt_rule_entry->rt_rule_hdl;
-		IPACMDBG("ipv4 wan rt rule hdl1=0x%x\n", dft_rt_rule_hdl[0]);
+		IPACMDBG("ipv4 wan iface rt-rule hdl1=0x%x\n", dft_rt_rule_hdl[0]);
+		
+		/* initial multicast/broadcast/fragment filter rule */
+		init_fl_rule(data->iptype); 
 	}
 	else
 	{
-		dft_rt_rule_hdl[1 + num_dft_rt] = rt_rule_entry->rt_rule_hdl;
-		IPACMDBG("ipv6 wan rt rule hdl1=0x%x\n", dft_rt_rule_hdl[1 + num_dft_rt]);
+		if (num_dft_rt == 0)
+		{
+			/* initial multicast/broadcast/fragment filter rule */
+			init_fl_rule(data->iptype);
+		}
+
+		dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES + num_dft_rt] = rt_rule_entry->rt_rule_hdl;
+		IPACMDBG("ipv6 wan iface rt-rule hdl1=0x%x\n", dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES + num_dft_rt]);
 		num_dft_rt++;
 	}
 
@@ -193,9 +199,11 @@
 			ipa_interface_index = iface_ipa_index_query(data->if_index);
 			if (ipa_interface_index == ipa_if_num)
 			{
-				if ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) // check not setup before
+				/* check v4 not setup before, v6 can have 2 iface ip */
+				if( ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) 
+				    || ((data->iptype==IPA_IP_v6) && (num_dft_rt!=MAX_DEFAULT_v6_ROUTE_RULES))) 
 				{
-					IPACMDBG("Received IPA_ADDR_ADD_EVENT\n");
+				        IPACMDBG("Got IPA_ADDR_ADD_EVENT ip-family:%d, v6 num %d: \n",data->iptype,num_dft_rt);
 					handle_addr_evt(data);
 				}
 			}
@@ -266,7 +274,6 @@
 			if (ipa_interface_index == ipa_if_num)
 			{
 				IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT\n");
-				IPACMDBG("I'm in the WAN\n");
 				handle_header_add_evt(data->mac_addr);
 			}
 		}
@@ -346,12 +353,14 @@
 
 	IPACMDBG(" WAN table created %s \n", rt_rule->rt_tbl_name);
 	rt_rule_entry = &rt_rule->rules[0];
-	rt_rule_entry->at_rear = 1;
+	rt_rule_entry->at_rear = true;
 
 	for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
 	{
 		if (data->iptype != tx_prop->tx[tx_index].ip)
 		{
+			IPACMDBG("Tx:%d, ip-type: %d conflict ip-type: %d no RT-rule added\n", 
+							    tx_index, tx_prop->tx[tx_index].ip,data->iptype);		
 			continue;
 		}
 
@@ -447,6 +456,7 @@
 	return IPACM_SUCCESS;
 }
 
+
 /* wan default route/filter rule delete */
 int IPACM_Wan::handle_route_del_evt(ipa_ip_type iptype)
 {
@@ -461,6 +471,14 @@
 
 		for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
 		{
+		
+		    if(iptype != tx_prop->tx[tx_index].ip)
+		    {
+		    	IPACMDBG("Tx:%d, ip-type: %d conflict ip-type: %d, no RT-rule deleted\n", 
+		    					    tx_index, tx_prop->tx[tx_index].ip,iptype);		
+		    	continue;
+		    }		
+		
 			if (iptype == IPA_IP_v4)
 			{
 
@@ -477,7 +495,7 @@
 				if (m_routing.DeleteRoutingHdl(wan_route_rule_v6_hdl[tx_index], IPA_IP_v6)
 						== false)
 				{
-					IPACMERR("IP-family:%d, Routing rule(hdl:0x%x) deletion failed with tx_index %d!\n", IPA_IP_v6, wan_route_rule_v6_hdl[tx_index], tx_index);
+					IPACMDBG("IP-family:%d, Routing rule(hdl:0x%x) deletion failed with tx_index %d!\n", IPA_IP_v6, wan_route_rule_v6_hdl[tx_index], tx_index);
 					return IPACM_FAILURE;
 				}
 			}
@@ -500,12 +518,14 @@
 			/* Insert IPA_HANDLE_WAN_DOWN to command queue */
 			IPACMDBG("posting IPA_HANDLE_WAN_DOWN for IPv4 \n");
 			IPACM_EvtDispatcher::PostEvt(&evt_data);
+			IPACMDBG("setup wan_up/active_v4= false \n"); 
 			IPACM_Wan::wan_up = false;
 			active_v4 = false;
 		}
 		else
 		{
-			active_v6 = false;
+			IPACMDBG("setup active_v6= false \n");
+			active_v6 = false; 
 		}
 	}
 	else
@@ -743,7 +763,7 @@
 				{
 					memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
 
-					flt_rule_entry.at_rear = true;
+					flt_rule_entry.at_rear = false;
 					flt_rule_entry.flt_rule_hdl = -1;
 					flt_rule_entry.status = -1;
 					flt_rule_entry.rule.action = IPA_PASS_TO_EXCEPTION; //Matched the firewall rule, go exception
@@ -946,7 +966,7 @@
 
 			if (!m_pFilteringTable)
 			{
-				IPACMDBG("Error Locate ipa_flt_rule_add memory...\n");
+				IPACMERR("Error Locate ipa_flt_rule_add memory...\n");
 				return IPACM_FAILURE;
 			}
 			m_pFilteringTable->commit = 1;
@@ -969,11 +989,11 @@
 				{
 					memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
 
-					flt_rule_entry.at_rear = true;
+					flt_rule_entry.at_rear = false;
 					flt_rule_entry.flt_rule_hdl = -1;
 					flt_rule_entry.status = -1;
 
-					flt_rule_entry.rule.action = IPA_PASS_TO_DST_NAT;
+					flt_rule_entry.rule.action = IPA_PASS_TO_EXCEPTION;
 					flt_rule_entry.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_v6.hdl;
 					memcpy(&flt_rule_entry.rule.attrib,
 								 &firewall_config.extd_firewall_entries[i].attrib,
@@ -1049,7 +1069,7 @@
 			flt_rule_entry.at_rear = true;
 			flt_rule_entry.flt_rule_hdl = -1;
 			flt_rule_entry.status = -1;
-			flt_rule_entry.rule.action = IPA_PASS_TO_EXCEPTION;
+			flt_rule_entry.rule.action = IPA_PASS_TO_ROUTING;
 			memcpy(&flt_rule_entry.rule.attrib,
 						 &rx_prop->rx[0].attrib,
 						 sizeof(struct ipa_rule_attrib));
@@ -1119,7 +1139,7 @@
 		if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[0], IPA_IP_v4)
 				== false)
 		{
-			IPACMDBG("Routing rule deletion failed!\n");
+		   IPACMERR("Routing rule deletion failed!\n");
 			res = IPACM_FAILURE;
 			goto fail;
 		}
@@ -1132,7 +1152,7 @@
 		/* May have multiple ipv6 iface-routing rules*/
 		for (i = 0; i < num_dft_rt; i++)
 		{
-			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[1 + i], IPA_IP_v6)
+			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+i], IPA_IP_v6)
 					== false)
 			{
 				IPACMERR("Routing rule deletion failed!\n");
@@ -1147,7 +1167,6 @@
 	/* check software routing fl rule hdl */
 	if (softwarerouting_act == true)
 	{
-		IPACM_Iface::handle_software_routing_disable();
 		handle_software_routing_disable();
 	}
 
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 0160406..4ed66b4 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -121,8 +121,12 @@
 
 			if (ipa_interface_index == ipa_if_num)
 			{
-				if ((data->iptype != ip_type) && (ip_type != IPA_IP_MAX)) // check not setup before
+				/* check v4 not setup before, v6 can have 2 iface ip */
+				if (((data->iptype != ip_type) && (ip_type != IPA_IP_MAX))
+						|| ((data->iptype == IPA_IP_v6) && (num_dft_rt != MAX_DEFAULT_v6_ROUTE_RULES)))
 				{
+
+					IPACMDBG("Got IPA_ADDR_ADD_EVENT ip-family:%d, v6 num %d: \n", data->iptype, num_dft_rt);
 					/* Post event to NAT */
 					if (data->iptype == IPA_IP_v4)
 					{
@@ -253,18 +257,18 @@
 		}
 		break;
 
-		/* handle software routing enable event*/
+		/* handle software routing enable event, iface will update softwarerouting_act to true*/
 	case IPA_SW_ROUTING_ENABLE:
 		IPACMDBG("Received IPA_SW_ROUTING_ENABLE\n");
-		IPACM_Iface::handle_software_routing_enable();
 		handle_software_routing_enable();
+		IPACM_Iface::handle_software_routing_enable();
 		break;
 
-		/* handle software routing disable event*/
+		/* handle software routing disable event, iface will update softwarerouting_act to false*/
 	case IPA_SW_ROUTING_DISABLE:
 		IPACMDBG("Received IPA_SW_ROUTING_DISABLE\n");
-		IPACM_Iface::handle_software_routing_disable();
 		handle_software_routing_disable();
+		IPACM_Iface::handle_software_routing_disable();
 		break;
 
 	default:
@@ -424,7 +428,7 @@
 	{
 		if (clnt_indx == IPACM_INVALID_INDEX)
 		{
-			IPACMDBG("wlan client not found/attached \n");
+			IPACMERR("wlan client not found/attached \n");
 			return IPACM_FAILURE;
 		}
 	}
@@ -649,7 +653,7 @@
 
 	if (delete_default_qos_rtrules(clt_indx))
 	{
-		IPACMDBG("unbale to delete default qos route rules\n");
+		IPACMERR("unbale to delete default qos route rules\n");
 		return IPACM_FAILURE;
 	}
 
@@ -729,7 +733,7 @@
 
 	if (false == m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_wan_v4))
 	{
-		IPACMDBG("m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_wan_v4=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_wan_v4);
+		IPACMERR("m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_wan_v4=0x%p) Failed.\n", &IPACM_Iface::ipacmcfg->rt_tbl_wan_v4);
 		return IPACM_FAILURE;
 	}
 
@@ -751,8 +755,7 @@
 	memcpy(&m_pFilteringTable->rules[0], &flt_rule_entry, sizeof(flt_rule_entry));
 	if (m_filtering.AddFilteringRule(m_pFilteringTable) == false)
 	{
-		IPACMDBG("Error Adding Filtering Rule, aborting...\n");
-		perror("Wlan: Unable to add filtering table");
+		IPACMERR("Error Adding Filtering Rule, aborting...\n");
 		free(m_pFilteringTable);
 		return IPACM_FAILURE;
 	}
@@ -792,7 +795,12 @@
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
 	int res = IPACM_SUCCESS;
 
-	IPACMDBG("\n");
+	if (softwarerouting_act == true)
+	{
+		IPACMDBG("already setup AMPDU software_routing rule for (%s)iface ip-family %d\n", 
+						      IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ip_type);
+		return IPACM_SUCCESS;
+	}
 
 	m_pFilteringTable = (struct ipa_ioc_add_flt_rule *)
 		 calloc(1,
@@ -839,7 +847,7 @@
 		}
 		else if (m_pFilteringTable->rules[0].status)
 		{
-			IPACMDBG("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
+			IPACMERR("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
 			res = IPACM_FAILURE;
 			goto fail;
 		}
@@ -860,7 +868,7 @@
 		}
 		else if (m_pFilteringTable->rules[0].status)
 		{
-			IPACMDBG("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
+			IPACMERR("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
 			res = IPACM_FAILURE;
 			goto fail;
 		}
@@ -883,7 +891,7 @@
 		}
 		else if (m_pFilteringTable->rules[0].status)
 		{
-			IPACMDBG("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
+			IPACMERR("adding flt rule failed status=0x%x\n", m_pFilteringTable->rules[0].status);
 			res = IPACM_FAILURE;
 			goto fail;
 		}
@@ -904,6 +912,14 @@
 /*delete ampdu filter rules for disabling software_routing event*/
 int IPACM_Wlan::handle_software_routing_disable(void)
 {
+	
+	if (softwarerouting_act == false)
+	{
+		IPACMDBG("already delete AMPDU software_routing rule for (%s)iface ip-family %d\n", 
+						      IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ip_type);
+		return IPACM_SUCCESS;
+	}
+
 
 	if (ip_type == IPA_IP_MAX)
 	{
@@ -1260,7 +1276,7 @@
 	if (ip_type == IPACM_IP_NULL)
 	{
 		IPACMERR("Invalid iptype: 0x%x\n", ip_type);
-		return IPACM_FAILURE;
+		goto fail;
 	}
 
 	/* Delete v6 filtering rules */
@@ -1337,7 +1353,7 @@
 		/* May have multiple ipv6 iface-RT rules */
 		for (i = 0; i < num_dft_rt; i++)
 		{
-			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[i + 1], IPA_IP_v6)
+			if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+i], IPA_IP_v6)
 					== false)
 			{
 				IPACMERR("Routing rule deletion failed!\n");
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
index 06f20b6..551c178 100644
--- a/ipacm/src/IPACM_cfg.xml
+++ b/ipacm/src/IPACM_cfg.xml
@@ -28,11 +28,11 @@
 		<IPACMALG>
 			<ALG>
   			   <Protocol>TCP</Protocol>
-  			   <Port>23</Port>
+  			   <Port>21</Port>
 		    </ALG>		
 			<ALG>
-  			   <Protocol>UDP</Protocol>
-  			   <Port>250</Port>
+  			   <Protocol>TCP</Protocol>
+  			   <Port>554</Port>
 		    </ALG>		
 		</IPACMALG>
 		<IPACMNAT>		
