Merge "IPACM: IPANAT changes for 9x35"
diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp
index 1f1fd5a..cff8e7a 100755
--- a/ipacm/src/IPACM_ConntrackClient.cpp
+++ b/ipacm/src/IPACM_ConntrackClient.cpp
@@ -474,7 +474,8 @@
return NULL;
}
- pClient->tcp_hdl = nfct_open(CONNTRACK, NF_NETLINK_CONNTRACK_UPDATE);
+ pClient->tcp_hdl = nfct_open(CONNTRACK,
+ (NF_NETLINK_CONNTRACK_UPDATE |NF_NETLINK_CONNTRACK_DESTROY));
if(pClient->tcp_hdl == NULL)
{
PERROR("nfct_open\n");
@@ -510,7 +511,9 @@
/* Register callback with netfilter handler */
IPACMDBG("tcp handle:%p, fd:%d\n", pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl));
- nfct_callback_register(pClient->tcp_hdl, NFCT_T_UPDATE, IPAConntrackEventCB, NULL);
+ nfct_callback_register(pClient->tcp_hdl,
+ (NFCT_T_UPDATE | NFCT_T_DESTROY),
+ IPAConntrackEventCB, NULL);
/* Block to catch events from net filter connection track */
/* nfct_catch() receives conntrack events from kernel-space, by default it
@@ -556,7 +559,7 @@
}
pClient->udp_hdl = nfct_open(CONNTRACK,
- NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY);
+ (NF_NETLINK_CONNTRACK_NEW | NF_NETLINK_CONNTRACK_DESTROY));
if(pClient->udp_hdl == NULL)
{
PERROR("nfct_open\n");
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
index 87b5ec4..bfa2f37 100755
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -476,6 +476,7 @@
NatApp *na = NULL;
uint32_t orig_src_ip, orig_dst_ip;
+ IPACMDBG("Received type:%d with proto:%d", type, l4proto);
status = nfct_get_attr_u32(ct, ATTR_STATUS);
if(IPS_DST_NAT & status)
@@ -662,9 +663,11 @@
IPACMDBG("TCP state TCP_CONNTRACK_ESTABLISHED(%d)\n", tcp_state);
na->AddEntry(&rule);
}
- else if(TCP_CONNTRACK_FIN_WAIT == tcp_state)
+ else if(TCP_CONNTRACK_FIN_WAIT == tcp_state ||
+ type == NFCT_T_DESTROY)
{
- IPACMDBG("TCP state TCP_CONNTRACK_FIN_WAIT(%d)\n", tcp_state);
+ IPACMDBG("TCP state TCP_CONNTRACK_FIN_WAIT(%d) "
+ "or type NFCT_T_DESTROY(%d)\n", tcp_state, type);
na->DeleteEntry(&rule);
}
else
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 5ca7988..f7aae25 100755
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -294,6 +294,10 @@
return;
}
handle_wlan_client_route_rule(data->mac_addr, data->iptype);
+ if (data->iptype == IPA_IP_v4)
+ {
+ Nat_App->ResetPwrSaveIf(data->ipv4_addr);
+ }
}
}
break;