Additional fixes from bring-up:
1. added support for wlan events
2. disabled wlan power events
3. fixed issues found during testing
4. changed dump messages format of ipa nat table
Change-Id: I6d2b3caeb2061db0a59ccd843606e05901533f76
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index 19ddbec..12887ce 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -57,6 +57,7 @@
#define IPA_WLAN_PARTIAL_HDR_OFFSET 12 // dst mac first then src mac
#define IPA_VIRTUAL_IFACE_NAME "bridge0"
#define IPA_WLAN_PARTIAL_HDR_NAME "IEEE802_3"
+#define IPA_WAN_PARTIAL_HDR_NAME "IEEE802_3STA"
#define IPA_MAX_IFACE_ENTRIES 15
#define IPA_MAX_PRIVATE_SUBNET_ENTRIES 3
#define IPA_MAX_ALG_ENTRIES 10
@@ -86,28 +87,30 @@
===========================================================================*/
typedef enum
{
- IPA_LINK_UP_EVENT = 1, /* ipacm_event_data_fid */
+ IPA_LINK_UP_EVENT = 1, /* 1 ipacm_event_data_fid */
IPA_LINK_DOWN_EVENT, /* 2 ipacm_event_data_fid */
IPA_ADDR_ADD_EVENT, /* 3 ipacm_event_data_addr */
IPA_ADDR_DEL_EVENT, /* 4 no use */
IPA_ROUTE_ADD_EVENT, /* 5 ipacm_event_data_addr */
IPA_ROUTE_DEL_EVENT, /* 6 ipacm_event_data_addr */
IPA_FIREWALL_CHANGE_EVENT, /* 7 NULL */
- IPA_WLAN_CLIENT_ADD_EVENT, /* 8 ipacm_event_data_mac */
- IPA_WLAN_CLIENT_DEL_EVENT, /* 9 ipacm_event_data_mac */
- IPA_WLAN_CLIENT_POWER_SAVE_EVENT, /* 10 ipacm_event_data_mac */
- IPA_WLAN_CLIENT_RECOVER_EVENT, /* 11 ipacm_event_data_mac */
- IPA_NEW_NEIGH_EVENT, /* 12 ipacm_event_data_all */
- IPA_DEL_NEIGH_EVENT, /* 13 ipacm_event_data_all */
- IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, /* 14 ipacm_event_data_all */
- IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, /* 15 ipacm_event_data_all */
- IPA_SW_ROUTING_ENABLE, /* 16 NULL */
- IPA_SW_ROUTING_DISABLE, /* 17 NULL */
- IPA_PROCESS_CT_MESSAGE, /* 18 ipacm_ct_evt_data */
- IPA_HANDLE_WAN_UP, /* 19 unsigned long */
- IPA_HANDLE_WAN_DOWN, /* 20 unsigned long */
- IPA_HANDLE_WLAN_UP, /* 21 unsigned long */
- IPA_HANDLE_LAN_UP /* 22 unsigned long */
+ IPA_WLAN_AP_LINK_UP_EVENT, /* 8 ipacm_event_data_mac */
+ IPA_WLAN_STA_LINK_UP_EVENT, /* 9 ipacm_event_data_mac */
+ IPA_WLAN_CLIENT_ADD_EVENT, /* 10 ipacm_event_data_mac */
+ IPA_WLAN_CLIENT_DEL_EVENT, /* 11 ipacm_event_data_mac */
+ IPA_WLAN_CLIENT_POWER_SAVE_EVENT, /* 12 ipacm_event_data_mac */
+ IPA_WLAN_CLIENT_RECOVER_EVENT, /* 13 ipacm_event_data_mac */
+ IPA_NEW_NEIGH_EVENT, /* 14 ipacm_event_data_all */
+ IPA_DEL_NEIGH_EVENT, /* 15 ipacm_event_data_all */
+ IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, /* 16 ipacm_event_data_all */
+ IPA_NEIGH_CLIENT_IP_ADDR_DEL_EVENT, /* 17 ipacm_event_data_all */
+ IPA_SW_ROUTING_ENABLE, /* 18 NULL */
+ IPA_SW_ROUTING_DISABLE, /* 19 NULL */
+ IPA_PROCESS_CT_MESSAGE, /* 20 ipacm_ct_evt_data */
+ IPA_HANDLE_WAN_UP, /* 21 unsigned long */
+ IPA_HANDLE_WAN_DOWN, /* 22 unsigned long */
+ IPA_HANDLE_WLAN_UP, /* 23 unsigned long */
+ IPA_HANDLE_LAN_UP /* 24 unsigned long */
} ipa_cm_event_id;
typedef enum
@@ -115,7 +118,8 @@
LAN_IF = 0,
WLAN_IF,
WAN_IF,
- VIRTUAL_IF
+ VIRTUAL_IF,
+ UNKNOWN_IF
} ipacm_iface_type;
typedef struct
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index da7fd06..bedc75d 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -77,9 +77,12 @@
uint32_t firewall_hdl_v6[IPACM_MAX_FIREWALL_ENTRIES];
uint32_t dft_wan_fl_hdl[IPA_NUM_DEFAULT_WAN_FILTER_RULES];
int num_firewall_v4,num_firewall_v6;
+ uint32_t wan_v4_addr;
bool active_v4;
bool active_v6;
- uint32_t wan_v4_addr;
+ bool header_set;
+ bool header_partial_default_wan_v4;
+ bool header_partial_default_wan_v6;
/* IPACM firewall Configuration file*/
IPACM_firewall_conf_t firewall_config;
@@ -88,7 +91,7 @@
int handle_addr_evt(ipacm_event_data_addr *data);
/* wan default route/filter rule configuration */
- int handle_route_add_evt(ipacm_event_data_addr *data);
+ int handle_route_add_evt(ipa_ip_type iptype);
/* wan default route/filter rule delete */
int handle_route_del_evt(ipa_ip_type iptype);
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index 0535584..a720046 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -64,6 +64,7 @@
bool route_rule_set_v6;
bool ipv4_set;
bool ipv6_set;
+ bool power_save_set;
wlan_client_rt_hdl wifi_rt_hdl[0]; /* depends on number of tx properties */
}ipa_wlan_client;
diff --git a/ipacm/inc/IPACM_Xml.h b/ipacm/inc/IPACM_Xml.h
index 84f6c6f..14fc7ff 100644
--- a/ipacm/inc/IPACM_Xml.h
+++ b/ipacm/inc/IPACM_Xml.h
@@ -88,6 +88,7 @@
#define LANIF_TAG "LAN"
#define WLANIF_TAG "WLAN"
#define VIRTUALIF_TAG "VIRTUAL"
+#define UNKNOWNIF_TAG "UNKNOWN"
#define IPACMALG_TAG "IPACMALG"
#define ALG_TAG "ALG"
#define Protocol_TAG "Protocol"
diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp
index 7e48822..3ef2f5e 100644
--- a/ipacm/src/IPACM_ConntrackClient.cpp
+++ b/ipacm/src/IPACM_ConntrackClient.cpp
@@ -399,7 +399,7 @@
if(pClient == NULL)
{
IPACMERR("unable to get conntrack client instance\n");
- return -1;
+ return NULL;
}
pClient->tcp_hdl = nfct_open(CONNTRACK, NF_NETLINK_CONNTRACK_UPDATE);
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
index 391c20a..f11e9be 100644
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -65,13 +65,19 @@
case IPA_HANDLE_WAN_UP:
IPACMDBG("Received IPA_HANDLE_WAN_UP event\n");
- TriggerWANUp(data);
+ if(isWanUp == false)
+ {
+ TriggerWANUp(data);
+ }
break;
case IPA_HANDLE_WAN_DOWN:
IPACMDBG("Received IPA_HANDLE_WAN_DOWN event\n");
pub_addr = (uint32_t *)data;
- TriggerWANDown(*pub_addr);
+ if(isWanUp == true)
+ {
+ TriggerWANDown(*pub_addr);
+ }
break;
/* if wlan or lan comes up after wan interface, modify
@@ -100,6 +106,12 @@
IPACMDBG("if_name:%s, ipv4_address:0x%x\n",
wanup_data->ifname, wanup_data->ipv4_addr);
+ if(wanup_data->ipv4_addr == 0)
+ {
+ IPACMERR("Invalid ipv4 address,ignoring IPA_HANDLE_WAN_UP event\n");
+ return;
+ }
+
isWanUp = true;
wan_ipaddr = wanup_data->ipv4_addr;
IPACM_ConntrackClient::iptodot("public ip address", wanup_data->ipv4_addr);
@@ -125,7 +137,7 @@
if(0 != ret)
{
IPACMERR("unable to create TCP conntrack event listner thread\n");
- PERROR("unable to create TCP conntrack");
+ PERROR("unable to create TCP conntrack\n");
return -1;
}
@@ -138,7 +150,7 @@
if(0 != ret)
{
IPACMERR("unable to create UDP conntrack event listner thread\n");
- PERROR("unable to create UDP conntrack");
+ PERROR("unable to create UDP conntrack\n");
goto error;
}
@@ -151,7 +163,7 @@
if(0 != ret)
{
IPACMERR("unable to create udp conn timeout thread\n");
- PERROR("unable to create udp conn timeout");
+ PERROR("unable to create udp conn timeout\n");
goto error;
}
diff --git a/ipacm/src/IPACM_Conntrack_NATApp.cpp b/ipacm/src/IPACM_Conntrack_NATApp.cpp
index 63b158c..8e5ee41 100644
--- a/ipacm/src/IPACM_Conntrack_NATApp.cpp
+++ b/ipacm/src/IPACM_Conntrack_NATApp.cpp
@@ -53,6 +53,7 @@
int NatApp::Init(void)
{
IPACM_Config *pConfig;
+ int size = 0;
pConfig = IPACM_Config::GetInstance();
if(pConfig == NULL)
@@ -63,13 +64,15 @@
max_entries = pConfig->GetNatMaxEntries();
- cache = (nat_table_entry *)malloc(sizeof(nat_table_entry) * max_entries);
+ size = (sizeof(nat_table_entry) * max_entries);
+ cache = (nat_table_entry *)malloc(size);
if(cache == NULL)
{
IPACMERR("Unable to allocate memory for cache\n");
goto fail;
}
- memset(cache, 0, sizeof(nat_table_entry) * max_entries);
+ IPACMDBG("Allocated %d bytes for config manager nat cache\n", size);
+ memset(cache, 0, size);
nALGPort = pConfig->GetAlgPortCnt();
pALGPorts = (ipacm_alg *)malloc(sizeof(ipacm_alg) * nALGPort);
diff --git a/ipacm/src/IPACM_EvtDispatcher.cpp b/ipacm/src/IPACM_EvtDispatcher.cpp
index aa72dd6..60f0e8d 100644
--- a/ipacm/src/IPACM_EvtDispatcher.cpp
+++ b/ipacm/src/IPACM_EvtDispatcher.cpp
@@ -121,10 +121,13 @@
if(data->event == tmp->event)
{
tmp->obj->event_callback(data->event, data->evt_data);
+ IPACMDBG(" Find matched registered events\n");
}
tmp = tmp->next;
}
+ IPACMDBG(" Finished process events\n");
+
if(data->evt_data != NULL)
{
IPACMDBG("free the event:%d data: %p\n", data->event, data->evt_data);
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 36f44ca..114c90c 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -53,12 +53,15 @@
IPACM_IfaceManager::IPACM_IfaceManager()
{
- IPACM_EvtDispatcher::registr(IPA_LINK_UP_EVENT, this); // skylar fix register name, class name
- return; //skylar no interface_id
+ IPACM_EvtDispatcher::registr(IPA_LINK_UP_EVENT, this);
+ IPACM_EvtDispatcher::registr(IPA_WLAN_AP_LINK_UP_EVENT, this); // register for wlan AP-iface
+ IPACM_EvtDispatcher::registr(IPA_WLAN_STA_LINK_UP_EVENT, this); // register for wlan STA-iface
+ return;
}
-void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param) //skylar rename:event_callback
+void IPACM_IfaceManager::event_callback(ipa_cm_event_id event, void *param)
{
+ int ipa_interface_index;
ipacm_event_data_fid *evt_data = (ipacm_event_data_fid *)param;
switch(event)
{
@@ -68,6 +71,39 @@
create_iface_instance(evt_data->if_index);
break;
+ case IPA_WLAN_AP_LINK_UP_EVENT:
+ ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* change iface category from unknown to WLAN_IF */
+ if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == UNKNOWN_IF)
+ {
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=WLAN_IF;
+ IPACMDBG("WLAN AP (%s) link up, iface: %d: \n",
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ create_iface_instance(evt_data->if_index);
+ }
+ else
+ {
+ IPACMDBG("iface %s already up and act as %d mode: \n",
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat);
+ }
+ break;
+
+ case IPA_WLAN_STA_LINK_UP_EVENT:
+ ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ /* change iface category from unknown to WAN_IF */
+ if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat==UNKNOWN_IF)
+ {
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=WAN_IF;
+ IPACMDBG("WLAN STA (%s) link up, iface: %d: \n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+ create_iface_instance(evt_data->if_index);
+ }
+ else
+ {
+ IPACMDBG("iface %s already up and act as %d mode: \n",IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat);
+ }
+ break;
+
default:
break;
}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index cc6eec1..b5f178c 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -99,6 +99,17 @@
{
ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
ipa_interface_index = iface_ipa_index_query(data->if_index);
+
+ if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+ (data->iptype == IPA_IP_v6 &&
+ data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 &&
+ data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+ {
+ IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+ return;
+ }
+
+
if (ipa_interface_index == ipa_if_num)
{
IPACMDBG("Received IPA_ADDR_ADD_EVENT\n");
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 446cd6a..42be223 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -12,7 +12,7 @@
with the distribution.
* Neither the name of The Linux Foundation nor the names of its
contributors may be used to endorse or promote products derived
- from this software without specific prior written permission. from this software without specific prior written permission.
+ from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
@@ -130,7 +130,7 @@
if (length < 0)
{
- IPACMDBG("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event->mask, mask);
+ IPACMERR("inotify read() error return length: %d and mask: 0x%x 0x%x\n", length, event->mask, mask);
return NULL;
}
@@ -218,21 +218,46 @@
case SW_ROUTING_ENABLE:
IPACMDBG("Received SW_ROUTING_ENABLE\n");
evt_data.event = IPA_SW_ROUTING_ENABLE;
- evt_data.evt_data = NULL;
break;
case SW_ROUTING_DISABLE:
IPACMDBG("Received SW_ROUTING_DISABLE\n");
evt_data.event = IPA_SW_ROUTING_DISABLE;
- evt_data.evt_data = NULL;
break;
+ case WLAN_AP_CONNECT:
+ IPACMDBG("Received WLAN_AP_CONNECT name: %s\n",event->name);
+ IPACMDBG("AP Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
+ event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
+ event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
+
+ memcpy(data->mac_addr,
+ event->mac_addr,
+ sizeof(event->mac_addr));
+ ipa_get_if_index(event->name, &(data->if_index));
+ evt_data.event = IPA_WLAN_AP_LINK_UP_EVENT;
+ evt_data.evt_data = data;
+ break;
+
+ case WLAN_STA_CONNECT:
+ IPACMDBG("Received WLAN_STA_CONNECT name: %s\n",event->name);
+ IPACMDBG("STA Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
+ event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
+ event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
+ memcpy(data->mac_addr,
+ event->mac_addr,
+ sizeof(event->mac_addr));
+ ipa_get_if_index(event->name, &(data->if_index));
+
+ evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
+ evt_data.evt_data = data;
+ break;
+
case WLAN_CLIENT_CONNECT:
IPACMDBG("Received WLAN_CLIENT_CONNECT\n");
IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
-
evt_data.event = IPA_WLAN_CLIENT_ADD_EVENT;
evt_data.evt_data = data;
ipa_get_if_index(event->name, &(data->if_index));
@@ -246,20 +271,19 @@
IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
-
memcpy(data->mac_addr,
event->mac_addr,
sizeof(event->mac_addr));
ipa_get_if_index(event->name, &(data->if_index));
evt_data.event = IPA_WLAN_CLIENT_DEL_EVENT;
- evt_data.evt_data = data;
-
+ evt_data.evt_data = data;
break;
case WLAN_CLIENT_POWER_SAVE_MODE:
+#if 0
IPACMDBG("Received WLAN_CLIENT_POWER_SAVE_MODE\n");
- IPACMDBG("Mac Address [0]:%2d [1]:%2d [2]:%2d [3]:%2d [4]:%2d [5]%2d\n",
+ IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
@@ -269,13 +293,14 @@
evt_data.evt_data = data;
memcpy(data->mac_addr,
event->mac_addr,
- sizeof(event->mac_addr));
-
+ sizeof(event->mac_addr));
+#endif
break;
case WLAN_CLIENT_NORMAL_MODE:
+#if 0
IPACMDBG("Received WLAN_CLIENT_NORMAL_MODE\n");
- IPACMDBG("Mac Address [0]:%2d [1]:%2d [2]:%2d [3]:%2d [4]:%2d [5]%2d\n",
+ IPACMDBG("Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
event->mac_addr[0], event->mac_addr[1], event->mac_addr[2],
event->mac_addr[3], event->mac_addr[4], event->mac_addr[5]);
@@ -285,18 +310,27 @@
ipa_get_if_index(event->name, &(data->if_index));
evt_data.evt_data = data;
evt_data.event = IPA_WLAN_CLIENT_RECOVER_EVENT;
+#endif
+ break;
+
+ case WLAN_AP_DISCONNECT:
+ IPACMDBG("Ignoring WLAN_AP_DISCONNECT\n");
+ break;
+
+ case WLAN_STA_DISCONNECT:
+ IPACMDBG("Ignoring WLAN_STA_DISCONNET\n");
break;
default:
- IPACMDBG("Invalid message\n");
- free(data);
- continue;
+ IPACMERR("Unhandled message type: %d\n", event_hdr->msg_type);
+ break;
}
/* finish command queue */
if (evt_data.evt_data == NULL)
{
+ IPACMDBG("free the event data memory as there is no data\n");
free(data);
}
@@ -416,6 +450,7 @@
if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0)
{
PERROR("call_ioctl_on_dev: ioctl failed:");
+ *if_index = -1;
close(fd);
return IPACM_FAILURE;
}
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 237c4d9..aae30ed 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -58,7 +58,10 @@
active_v4 = false;
active_v6 = false;
-
+ header_set = false;
+ header_partial_default_wan_v4 = false;
+ header_partial_default_wan_v6 = false;
+
IPACMDBG(" IPACM->IPACM_Wan(%d) constructor: Tx:%d\n", ipa_if_num, iface_query->num_tx_props);
return;
}
@@ -197,6 +200,16 @@
{
ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
ipa_interface_index = iface_ipa_index_query(data->if_index);
+
+ if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+ (data->iptype == IPA_IP_v6 &&
+ data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 &&
+ data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+ {
+ IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+ return;
+ }
+
if (ipa_interface_index == ipa_if_num)
{
/* check v4 not setup before, v6 can have 2 iface ip */
@@ -224,7 +237,7 @@
if ((data->iptype == IPA_IP_v4) && (!data->ipv4_addr) && (!data->ipv4_addr_mask))
{
IPACMDBG("adding routing table\n");
- handle_route_add_evt(data);
+ handle_route_add_evt(data->iptype);
IPACM_Wan::wan_up = true;
active_v4 = true;
config_dft_firewall_rules(IPA_IP_v4);
@@ -235,7 +248,7 @@
IPACMDBG("\n get default v6 route (dst:00.00.00.00)\n");
IPACMDBG(" IPV6 value: %08x:%08x:%08x:%08x \n",
data->ipv6_addr[0], data->ipv6_addr[1], data->ipv6_addr[2], data->ipv6_addr[3]);
- handle_route_add_evt(data);
+ handle_route_add_evt(data->iptype);
active_v6 = true;
config_dft_firewall_rules(IPA_IP_v6);
}
@@ -273,7 +286,7 @@
ipa_interface_index = iface_ipa_index_query(data->if_index);
if (ipa_interface_index == ipa_if_num)
{
- IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT\n");
+ IPACMDBG("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT in STA mode\n");
handle_header_add_evt(data->mac_addr);
}
}
@@ -315,7 +328,7 @@
}
/* wan default route/filter rule configuration */
-int IPACM_Wan::handle_route_add_evt(ipacm_event_data_addr *data)
+int IPACM_Wan::handle_route_add_evt(ipa_ip_type iptype)
{
/* add default WAN route */
@@ -325,8 +338,52 @@
uint32_t tx_index;
const int NUM = 1;
ipacm_cmd_q_data evt_data;
+ struct ipa_ioc_copy_hdr sCopyHeader; /* checking if partial header*/
- IPACMDBG(" ip-type:%d\n", data->iptype);
+ IPACMDBG(" ip-type:%d\n", iptype);
+
+ /* copy header from tx-property, see if partial or not */
+ /* assume all tx-property uses the same header name */
+
+ if(tx_prop->tx[0].hdr_name != NULL)
+ {
+ memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+ memcpy(sCopyHeader.name,
+ tx_prop->tx[0].hdr_name,
+ sizeof(sCopyHeader.name));
+
+ IPACMDBG("header name: %s\n", sCopyHeader.name);
+ if (m_header.CopyHeader(&sCopyHeader) == false)
+ {
+ IPACMERR("ioctl copy header failed");
+ return IPACM_FAILURE;
+ }
+ IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+ if(sCopyHeader.is_partial)
+ {
+ IPACMDBG("Not setup default WAN routing rules cuz the header is not complete\n");
+ if(iptype==IPA_IP_v4)
+ {
+ header_partial_default_wan_v4 = true;
+ }
+ else
+ {
+ header_partial_default_wan_v6 = true;
+ }
+ return IPACM_SUCCESS;
+ }
+ {
+ if(iptype==IPA_IP_v4)
+ {
+ header_partial_default_wan_v4 = false;
+ }
+ else
+ {
+ header_partial_default_wan_v6 = false;
+ }
+
+ }
+ }
rt_rule = (struct ipa_ioc_add_rt_rule *)
calloc(1, sizeof(struct ipa_ioc_add_rt_rule) +
@@ -340,9 +397,9 @@
rt_rule->commit = 1;
rt_rule->num_rules = (uint8_t)NUM;
- rt_rule->ip = data->iptype;
+ rt_rule->ip = iptype;
- if (data->iptype == IPA_IP_v4)
+ if (iptype == IPA_IP_v4)
{
strcpy(rt_rule->rt_tbl_name, IPACM_Iface::ipacmcfg->rt_tbl_wan_v4.name);
}
@@ -357,10 +414,10 @@
for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
{
- if (data->iptype != tx_prop->tx[tx_index].ip)
+ if(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);
+ tx_index, tx_prop->tx[tx_index].ip,iptype);
continue;
}
@@ -387,21 +444,21 @@
sizeof(rt_rule_entry->rule.attrib));
rt_rule_entry->rule.attrib.attrib_mask |= IPA_FLT_DST_ADDR;
- if (data->iptype == IPA_IP_v4)
+ if (iptype == IPA_IP_v4)
{
- rt_rule_entry->rule.attrib.u.v4.dst_addr = data->ipv4_addr;
- rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = data->ipv4_addr_mask;
+ rt_rule_entry->rule.attrib.u.v4.dst_addr = 0;
+ rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = 0;
}
else
{
- rt_rule_entry->rule.attrib.u.v6.dst_addr[0] = data->ipv6_addr[0];
- rt_rule_entry->rule.attrib.u.v6.dst_addr[1] = data->ipv6_addr[1];
- rt_rule_entry->rule.attrib.u.v6.dst_addr[2] = data->ipv6_addr[2];
- rt_rule_entry->rule.attrib.u.v6.dst_addr[3] = data->ipv6_addr[3];
- rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[0] = data->ipv6_addr_mask[0];
- rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[1] = data->ipv6_addr_mask[1];
- rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[2] = data->ipv6_addr_mask[2];
- rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[3] = data->ipv6_addr_mask[3];
+ rt_rule_entry->rule.attrib.u.v6.dst_addr[0] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr[1] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr[2] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr[3] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[0] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[1] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[2] = 0;
+ rt_rule_entry->rule.attrib.u.v6.dst_addr_mask[3] = 0;
}
if (false == m_routing.AddRoutingRule(rt_rule))
@@ -411,13 +468,13 @@
return IPACM_FAILURE;
}
- if (data->iptype == IPA_IP_v4)
+ if (iptype == IPA_IP_v4)
{
wan_route_rule_v4_hdl[tx_index] = rt_rule_entry->rt_rule_hdl;
IPACMDBG("Got ipv4 wan-route rule hdl:0x%x,tx:%d,ip-type: %d \n",
wan_route_rule_v4_hdl[tx_index],
tx_index,
- data->iptype);
+ iptype);
}
else
{
@@ -425,12 +482,12 @@
IPACMDBG("Got ipv6 wan-route rule hdl:0x%x,tx:%d,ip-type: %d \n",
wan_route_rule_v6_hdl[tx_index],
tx_index,
- data->iptype);
+ iptype);
}
}
free(rt_rule);
- if (data->iptype == IPA_IP_v4)
+ if (iptype == IPA_IP_v4)
{
ipacm_event_iface_up *wanup_data;
@@ -539,85 +596,124 @@
/* construct complete ethernet header */
int IPACM_Wan::handle_header_add_evt(uint8_t mac_addr[6])
{
- char index[2];
+ #define WAN_IFACE_INDEX_LEN 2
+
+ uint32_t tx_index;
+ int res = IPACM_SUCCESS, len = 0;
+ char index[WAN_IFACE_INDEX_LEN];
struct ipa_ioc_copy_hdr sCopyHeader;
struct ipa_ioc_add_hdr *pHeaderDescriptor = NULL;
- uint32_t tx_index;
- int len = 0;
- IPACMDBG("construct header\n");
+ /* start of adding header */
+
+ IPACMDBG("Received Client MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
+ mac_addr[0], mac_addr[1], mac_addr[2],
+ mac_addr[3], mac_addr[4], mac_addr[5]);
- /* start of add header */
+ if(header_set == true)
+ {
+ IPACMDBG("Already add STA full header\n");
+ return IPACM_SUCCESS;
+ }
+
+ /* add header to IPA */
+ len = sizeof(struct ipa_ioc_add_hdr) + (1 * sizeof(struct ipa_hdr_add));
+ pHeaderDescriptor = (struct ipa_ioc_add_hdr *)calloc(1, len);
+ if (pHeaderDescriptor == NULL)
+ {
+ IPACMERR("calloc failed to allocate pHeaderDescriptor\n");
+ return IPACM_FAILURE;
+ }
+
+ /* copy partial header */
+ memset(&sCopyHeader, 0, sizeof(sCopyHeader));
+ memcpy(sCopyHeader.name,
+ tx_prop->tx[0].hdr_name,
+ sizeof(sCopyHeader.name));
+
+ IPACMDBG("header name: %s\n", sCopyHeader.name);
+ if (m_header.CopyHeader(&sCopyHeader) == false)
+ {
+ PERROR("ioctl copy header failed");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+
+ IPACMDBG("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
+ if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
+ {
+ IPACMERR("header oversize\n");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else
+ {
+ memcpy(pHeaderDescriptor->hdr[0].hdr,
+ sCopyHeader.hdr,
+ sCopyHeader.hdr_len);
+ }
+
+
+ /* copy client mac_addr to partial header */
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
+ IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
+
+ pHeaderDescriptor->commit = true;
+ pHeaderDescriptor->num_hdrs = 1;
+
+ memset(pHeaderDescriptor->hdr[0].name, 0,
+ sizeof(pHeaderDescriptor->hdr[0].name));
+
+ sprintf(index, "%d", ipa_if_num);
+ strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
+
+ strncat(pHeaderDescriptor->hdr[0].name,
+ IPA_WAN_PARTIAL_HDR_NAME,
+ sizeof(IPA_WAN_PARTIAL_HDR_NAME));
+
+ pHeaderDescriptor->hdr[0].hdr_len = sCopyHeader.hdr_len;
+ pHeaderDescriptor->hdr[0].hdr_hdl = -1;
+ pHeaderDescriptor->hdr[0].is_partial = 0;
+ pHeaderDescriptor->hdr[0].status = -1;
+
+ if (m_header.AddHeader(pHeaderDescriptor) == false ||
+ pHeaderDescriptor->hdr[0].status != 0)
+ {
+ IPACMERR("ioctl IPA_IOC_ADD_HDR failed: %d\n", pHeaderDescriptor->hdr[0].status);
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else
+ {
+ IPACMDBG("add full header name: %s (%x)\n", pHeaderDescriptor->hdr[0].name, pHeaderDescriptor->hdr[0].hdr_hdl);
+ }
+
+ /* copy full header to each TX endpoint property*/
for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
{
- /* add header to IPA */
- len = sizeof(struct ipa_ioc_add_hdr) + (1 * sizeof(struct ipa_hdr_add));
- pHeaderDescriptor = (struct ipa_ioc_add_hdr *)calloc(1, len);
- if (!pHeaderDescriptor)
- {
- IPACMERR("calloc failed to allocate pHeaderDescriptor\n");
- return IPACM_FAILURE;
- }
-
- /* copy partial header */
- memset(&sCopyHeader, 0, sizeof(sCopyHeader));
- memcpy(sCopyHeader.name, tx_prop->tx[tx_index].hdr_name,
- sizeof(tx_prop->tx[tx_index].hdr_name));
-
- IPACMDBG("header name: %s\n", sCopyHeader.name);
- if (false == m_header.CopyHeader(&sCopyHeader))
- {
- IPACMERR("ioctl copy header failed\n");
- free(pHeaderDescriptor);
- return IPACM_FAILURE;
- };
-
- if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
- {
- IPACMERR("header oversize\n");
- free(pHeaderDescriptor);
- return IPACM_FAILURE;
- }
- else
- {
- memcpy(pHeaderDescriptor->hdr[0].hdr, sCopyHeader.hdr,
- sCopyHeader.hdr_len);
- }
-
- /* copy client mac_addr to partial header */
- memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
- IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
-
- pHeaderDescriptor->commit = true;
- pHeaderDescriptor->num_hdrs = 1;
- sprintf(index, "%d", ipa_if_num);
- strncpy(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
- strncat(pHeaderDescriptor->hdr[0].name, IPA_WLAN_PARTIAL_HDR_NAME, sizeof(IPA_WLAN_PARTIAL_HDR_NAME));
- strncat(pHeaderDescriptor->hdr[0].name, "tx", sizeof("tx"));
- sprintf(index, "%d", tx_index);
- strncat(pHeaderDescriptor->hdr[0].name, index, sizeof(index));
-
- pHeaderDescriptor->hdr[0].hdr_len = sizeof(sCopyHeader.hdr_len);
- pHeaderDescriptor->hdr[0].hdr_hdl = -1;
- pHeaderDescriptor->hdr[0].is_partial = false;
- pHeaderDescriptor->hdr[0].status = -1;
-
- if (false == m_header.AddHeader(pHeaderDescriptor))
- {
- IPACMERR("ioctl add header failed\n");
- free(pHeaderDescriptor);
- return IPACM_FAILURE;
- }
-
+
memcpy(tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].name,
sizeof(tx_prop->tx[tx_index].hdr_name));
IPACMDBG("add full header name: %s (%x)\n", tx_prop->tx[tx_index].hdr_name, pHeaderDescriptor->hdr[0].hdr_hdl);
+ }
+ /* see if default routes are setup before constructing full header */
+ if( (header_partial_default_wan_v4== true) && (header_set == false))
+ {
+ handle_route_add_evt(IPA_IP_v4);
+ }
- free(pHeaderDescriptor);
- }
+ if( (header_partial_default_wan_v6== true) && (header_set == false))
+ {
+ handle_route_add_evt(IPA_IP_v6);
+ }
+
+ header_set = true;
+
+fail:
+ free(pHeaderDescriptor);
- return IPACM_SUCCESS;
+ return res;
}
/* configure the initial firewall filter rules */
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 4ed66b4..9584733 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -94,6 +94,7 @@
void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
{
int ipa_interface_index;
+ int wlan_index;
switch (event)
{
@@ -108,6 +109,8 @@
handle_down_evt();
IPACMDBG("ipa_WLAN (%s):ipa_index (%d) instance close \n",
IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ipa_if_num);
+ /* reset the iface category to unknown*/
+ IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat=UNKNOWN_IF;
delete this;
return;
}
@@ -119,14 +122,22 @@
ipacm_event_data_addr *data = (ipacm_event_data_addr *)param;
ipa_interface_index = iface_ipa_index_query(data->if_index);
+ if ( (data->iptype == IPA_IP_v4 && data->ipv4_addr == 0) ||
+ (data->iptype == IPA_IP_v6 &&
+ data->ipv6_addr[0] == 0 && data->ipv6_addr[1] == 0 &&
+ data->ipv6_addr[2] == 0 && data->ipv6_addr[3] == 0) )
+ {
+ IPACMDBG("Invalid address, ignore IPA_ADDR_ADD_EVENT event\n");
+ return;
+ }
+
if (ipa_interface_index == ipa_if_num)
{
/* 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)))
+ 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);
+ 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)
{
@@ -228,6 +239,14 @@
if (ipa_interface_index == ipa_if_num)
{
IPACMDBG("Received IPA_WLAN_CLIENT_RECOVER_EVENT\n");
+ wlan_index = get_wlan_client_index(data->mac_addr);
+
+ if ((wlan_index != IPACM_INVALID_INDEX) && (get_client_memptr(wlan_client, wlan_index)->power_save_set == true))
+ {
+ IPACMDBG("change wlan client out of power safe mode \n");
+ get_client_memptr(wlan_client, wlan_index)->power_save_set = false;
+ }
+
if (ip_type != IPA_IP_v6) /* for ipv4 */
{
handle_wlan_client_route_rule(data->mac_addr, IPA_IP_v4);
@@ -395,7 +414,7 @@
get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v6 = false;
get_client_memptr(wlan_client, num_wifi_client)->ipv4_set = false;
get_client_memptr(wlan_client, num_wifi_client)->ipv6_set = false;
-
+ get_client_memptr(wlan_client, num_wifi_client)->power_save_set=false;
num_wifi_client++;
header_name_count++; //keep increasing header_name_count
IPACM_Wlan::total_num_wifi_clients++;
@@ -492,6 +511,12 @@
return IPACM_SUCCESS;
}
+ if (get_client_memptr(wlan_client, wlan_index)->power_save_set == true)
+ {
+ IPACMDBG("wlan client is in power safe mode \n");
+ return IPACM_SUCCESS;
+ }
+
IPACMDBG("wlan client index: %d, ip-type: %d, ipv4_set:%d, ipv4_rule_set:%d \n", wlan_index, iptype,
get_client_memptr(wlan_client, wlan_index)->ipv4_set,
get_client_memptr(wlan_client, wlan_index)->route_rule_set_v4);
@@ -622,17 +647,16 @@
return IPACM_SUCCESS;
}
- /*check if got duplicate power-save mode*/
- if ((ip_type != IPA_IP_v6 && get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 == true)
- || (ip_type != IPA_IP_v4 && get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 == true))
+ if (get_client_memptr(wlan_client, clt_indx)->power_save_set == false)
{
- return delete_default_qos_rtrules(clt_indx);
+ delete_default_qos_rtrules(clt_indx);
+ get_client_memptr(wlan_client, clt_indx)->power_save_set = true;
}
else
{
IPACMDBG("wlan client already in power-save mode\n");
- return IPACM_SUCCESS;
}
+ return IPACM_SUCCESS;
}
/*handle wifi client del mode*/
diff --git a/ipacm/src/IPACM_Xml.cpp b/ipacm/src/IPACM_Xml.cpp
index 8871b1d..6af108c 100644
--- a/ipacm/src/IPACM_Xml.cpp
+++ b/ipacm/src/IPACM_Xml.cpp
@@ -250,6 +250,11 @@
config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat = VIRTUAL_IF;
IPACMDBG("Category %d\n", config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat);
}
+ else if (0 == strncasecmp(content_buf, UNKNOWNIF_TAG, str_size))
+ {
+ config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat = UNKNOWN_IF;
+ IPACMDBG("Category %d\n", config->iface_config.iface_entries[config->iface_config.num_iface_entries - 1].if_cat);
+ }
}
}
else if (IPACM_util_icmp_string((char*)xml_node->name,
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
index 551c178..1dd0f28 100644
--- a/ipacm/src/IPACM_cfg.xml
+++ b/ipacm/src/IPACM_cfg.xml
@@ -8,11 +8,15 @@
</Iface>
<Iface>
<Name>rmnet1</Name>
- <Category>LAN</Category>
+ <Category>WAN</Category>
</Iface>
<Iface>
<Name>wlan0</Name>
- <Category>WLAN</Category>
+ <Category>UNKNOWN</Category>
+ </Iface>
+ <Iface>
+ <Name>wlan1</Name>
+ <Category>UNKNOWN</Category>
</Iface>
<Iface>
<Name>bridge0</Name>
@@ -21,7 +25,7 @@
</IPACMIface>
<IPACMPrivateSubnet>
<Subnet>
- <SubnetAddress>192.168.1.0</SubnetAddress>
+ <SubnetAddress>192.168.225.0</SubnetAddress>
<SubnetMask>255.255.255.0</SubnetMask>
</Subnet>
</IPACMPrivateSubnet>
diff --git a/ipanat/inc/ipa_nat_drvi.h b/ipanat/inc/ipa_nat_drvi.h
index 9b56cf1..25309e1 100644
--- a/ipanat/inc/ipa_nat_drvi.h
+++ b/ipanat/inc/ipa_nat_drvi.h
@@ -466,9 +466,8 @@
========================================================*/
#ifdef NAT_DUMP
void ipa_nati_print_rule(struct ipa_nat_rule *rule, uint32_t rule_id);
-void ipa_nati_dump_rule_buf(void *param1, uint8_t size, uint32_t rule_id);
void ipa_nat_dump_ipv4_table(uint32_t tbl_hdl);
-void ipa_nati_dump_index_rule_buf(void *param1, uint8_t size, uint32_t rule_id);
+void ipa_nati_print_index_rule(struct ipa_nat_indx_tbl_rule *param, uint32_t rule_id);
#endif
#endif /* #ifndef IPA_NAT_DRVI_H */
diff --git a/ipanat/inc/ipa_nat_logi.h b/ipanat/inc/ipa_nat_logi.h
index 0ffa672..e98445a 100644
--- a/ipanat/inc/ipa_nat_logi.h
+++ b/ipanat/inc/ipa_nat_logi.h
@@ -69,6 +69,12 @@
log_nat_message(nat_log_buf);\
}
+#define IPADUMP(fmt, ...) {\
+ int n =0; \
+ snprintf((nat_log_buf+n), (sizeof(nat_log_buf)-1), fmt, ##__VA_ARGS__);\
+ log_nat_message(nat_log_buf);\
+ }
+
extern void log_nat_message(char *msg);
extern char nat_log_buf[NAT_LOG_SIZE];
diff --git a/ipanat/src/ipa_nat_drvi.c b/ipanat/src/ipa_nat_drvi.c
index d542a88..106abac 100644
--- a/ipanat/src/ipa_nat_drvi.c
+++ b/ipanat/src/ipa_nat_drvi.c
@@ -797,7 +797,9 @@
/* Calclate the memory size for both table and index table entries */
mem->size = (IPA_NAT_TABLE_ENTRY_SIZE * total_entries);
+ IPADBG("Nat Table size: %d\n", mem->size);
mem->size += (IPA_NAT_INDEX_TABLE_ENTRY_SIZE * total_entries);
+ IPADBG("Nat Base and Index Table size: %d\n", mem->size);
if (!ipv4_nat_cache.ipa_fd)
{
@@ -2220,9 +2222,6 @@
{
atl_one = 1;
ipa_nati_print_rule(&tbl_ptr[cnt], cnt);
- ipa_nati_dump_rule_buf(&tbl_ptr[cnt],
- sizeof(struct ipa_nat_rule),
- cnt);
}
}
if(!atl_one)
@@ -2243,9 +2242,6 @@
ENABLE_FIELD))
{
ipa_nati_print_rule(&tbl_ptr[cnt], cnt);
- ipa_nati_dump_rule_buf(&tbl_ptr[cnt],
- sizeof(struct ipa_nat_rule),
- cnt);
}
}
if(!atl_one)
@@ -2265,9 +2261,8 @@
if (Read16BitFieldValue(indx_tbl_ptr[cnt].tbl_entry_nxt_indx,
INDX_TBL_TBL_ENTRY_FIELD))
{
- ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt],
- sizeof(struct ipa_nat_indx_tbl_rule),
- cnt);
+ ipa_nati_print_index_rule(&indx_tbl_ptr[cnt], cnt);
+ //ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], sizeof(struct ipa_nat_indx_tbl_rule), cnt);
}
}
if(!atl_one)
@@ -2288,9 +2283,8 @@
if (Read16BitFieldValue(indx_tbl_ptr[cnt].tbl_entry_nxt_indx,
INDX_TBL_TBL_ENTRY_FIELD))
{
- ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt],
- sizeof(struct ipa_nat_indx_tbl_rule),
- cnt);
+ ipa_nati_print_index_rule(&indx_tbl_ptr[cnt], cnt);
+ //ipa_nati_dump_index_rule_buf(&indx_tbl_ptr[cnt], sizeof(struct ipa_nat_indx_tbl_rule), cnt);
}
}
if(!atl_one)
@@ -2301,87 +2295,29 @@
}
-
-void ipa_nati_dump_rule_buf(void *param1, uint8_t size, uint32_t rule_id)
-{
- int cnt = 0;
- uint8_t temp[IPA_NAT_TABLE_ENTRY_SIZE];
- uint64_t *rule = NULL;
-
- memcpy(&temp, param1, sizeof(temp));
- rule = (uint64_t *)temp;
-
- IPADBG("Address :%p, rule id: %d size: %d\n",
- rule, rule_id, size);
- for(; cnt<size; )
- {
- uint8_t *byte = (uint8_t *)rule;
-
- IPADBG("uint64[%d]: 0x%x:\n", cnt, (unsigned int)rule);
- IPADBG("%02x\t%02x\t%02x\t%02x\n", byte[0], byte[1], byte[2], byte[3]);
- IPADBG("%02x\t%02x\t%02x\t%02x\n", byte[4], byte[5], byte[6], byte[7]);
-
- cnt += 8;
- rule++;
- }
-
- return;
-}
-
-void ipa_nati_dump_index_rule_buf(void *param1, uint8_t size, uint32_t rule_id)
-{
- int cnt = 0;
- uint8_t temp[IPA_NAT_INDEX_TABLE_ENTRY_SIZE];
- uint16_t *rule = NULL;
-
- memcpy(&temp, param1, sizeof(temp));
- rule = (uint16_t *)temp;
-
- IPADBG("Address :%p, rule id: %d size: %d\n",
- rule, rule_id, size);
-
- for(; cnt<size; )
- {
- uint8_t *byte = (uint8_t *)rule;
-
- IPADBG("uint64[%d]: 0x%x:\n", cnt, (unsigned int)rule);
- IPADBG("%02x\t%02x\n", byte[0], byte[1]);
- IPADBG("\n");
-
- cnt += 2;
- rule++;
- }
-
- return;
-}
-
void ipa_nati_print_rule(struct ipa_nat_rule *param, uint32_t rule_id)
{
struct ipa_nat_sw_rule sw_rule;
memcpy(&sw_rule, param, sizeof(sw_rule));
- IPADBG("Printing NAT Rule:%d at memory location:%p\n", rule_id, param);
+ IPADUMP("rule-id:%d Trgt-IP:0x%x Trgt-Port:0x%x ",rule_id, sw_rule.target_ip, sw_rule.target_port);
+ IPADUMP("Priv-IP:0x%x Priv-Port:0x%x ", sw_rule.private_ip, sw_rule.private_port);
+ IPADUMP("Pub-Port:0x%x Nxt-indx:0x%x ", sw_rule.public_port, sw_rule.next_index);
+ IPADUMP("IP-cksm:0x%x En-bit:0x%x ", sw_rule.ip_chksum, sw_rule.enable);
+ IPADUMP("TS:0x%x Proto:0x%x ", sw_rule.time_stamp, sw_rule.protocol);
+ IPADUMP("Prv-indx:0x%x nxt-indx:0x%x Tcp-udp-cksum:0x%x", sw_rule.prev_index, sw_rule.next_index, sw_rule.tcp_udp_chksum);
+ IPADUMP("\n");
+ return;
+}
- IPADBG("Target IP: 0x%x Target Port: 0x%x\n",
- sw_rule.target_ip, sw_rule.target_port);
+void ipa_nati_print_index_rule(struct ipa_nat_indx_tbl_rule *param, uint32_t rule_id)
+{
+ struct ipa_nat_sw_indx_tbl_rule sw_rule;
+ memcpy(&sw_rule, param, sizeof(sw_rule));
- IPADBG("Private IP: 0x%x Private Port: 0x%x\n",
- sw_rule.private_ip, sw_rule.private_port);
-
- IPADBG("Public Port: 0x%x Next index: 0x%x\n",
- sw_rule.public_port, sw_rule.next_index);
-
- IPADBG("IP ChkSum: 0x%x Enable bit: 0x%x\n",
- sw_rule.ip_chksum, sw_rule.enable);
-
- IPADBG("Time Stamp: 0x%x Protocol: 0x%x\n",
- sw_rule.time_stamp, sw_rule.protocol);
-
- IPADBG("Prev Index: 0x%x Next Index: 0x%x\n",
- sw_rule.prev_index, sw_rule.next_index);
-
- IPADBG("TCP UDP Chksum: 0x%x\n", sw_rule.tcp_udp_chksum);
-
+ IPADUMP("rule-id:%d Table_entry:0x%x Next_index:0x%x",
+ rule_id, sw_rule.tbl_entry, sw_rule.next_index);
+ IPADUMP("\n");
return;
}
#endif