Merge "IPACM: support usb dynamic config w.o plug-in/out"
diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h
index eb9e265..436e99e 100644
--- a/ipacm/inc/IPACM_Iface.h
+++ b/ipacm/inc/IPACM_Iface.h
@@ -73,6 +73,9 @@
/* IPACM interface id */
int ipa_if_num;
+ /* IPACM interface category */
+ int ipa_if_cate;
+
/* IPACM interface name */
char dev_name[IF_NAME_LEN];
@@ -121,6 +124,9 @@
/*Configure the initial filter rules */
virtual int init_fl_rule(ipa_ip_type iptype);
+ /* Get interface index */
+ virtual int ipa_get_if_index(char * if_name, int * if_index);
+
static IPACM_Routing m_routing;
static IPACM_Filtering m_filtering;
static IPACM_Header m_header;
diff --git a/ipacm/inc/IPACM_IfaceManager.h b/ipacm/inc/IPACM_IfaceManager.h
index a78ec4c..d37ede2 100644
--- a/ipacm/inc/IPACM_IfaceManager.h
+++ b/ipacm/inc/IPACM_IfaceManager.h
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (c) 2013, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -67,23 +67,23 @@
public:
- IPACM_IfaceManager();
-
+ IPACM_IfaceManager();
+
void event_callback(ipa_cm_event_id event,
void *data);
/* api for all iface instances to de-register instances */
static int deregistr(IPACM_Listener *param);
-
-private:
- int create_iface_instance(int if_index, bool is_sta_mode);
- /* api to register instances */
+private:
+ int create_iface_instance(int if_index, int is_sta_mode);
+
+ /* api to register instances */
int registr(int ipa_if_index, IPACM_Listener *obj);
-
+
int SearchInstance(int ipa_if_index);
-
+
static iface_instances *head;
};
diff --git a/ipacm/inc/IPACM_Lan.h b/ipacm/inc/IPACM_Lan.h
index 7f5229e..45eb9ee 100644
--- a/ipacm/inc/IPACM_Lan.h
+++ b/ipacm/inc/IPACM_Lan.h
@@ -191,6 +191,8 @@
/* dynamically allocate lan iface's unicast routing rule structure */
+ bool is_mode_switch; /* indicate mode switch, need post internal up event */
+
int eth_client_len;
ipa_eth_client *eth_client;
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index 407de2e..4d0249e 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (c) 2013, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -62,7 +62,7 @@
static bool wan_up;
static bool wan_up_v6;
- IPACM_Wan(int iface_index, bool is_sta_mode);
+ IPACM_Wan(int iface_index, int is_sta_mode);
virtual ~IPACM_Wan();
static bool isWanUP()
@@ -84,8 +84,8 @@
static int num_v4_flt_rule;
static int num_v6_flt_rule;
-
- bool m_is_sta_mode;
+
+ int m_is_sta_mode;
static bool backhaul_is_sta_mode;
static bool is_ext_prop_set;
@@ -120,23 +120,22 @@
int handle_header_add_evt(uint8_t mac_addr[6]);
int config_dft_firewall_rules(ipa_ip_type iptype);
-
+
int handle_route_del_evt(ipa_ip_type iptype);
-
+
int del_dft_firewall_rules(ipa_ip_type iptype);
-
+
int handle_down_evt();
-
-
+
/*handle wan-iface down event */
int handle_down_evt_ex();
- /* wan default route/filter rule delete */
+ /* wan default route/filter rule delete */
int handle_route_del_evt_ex(ipa_ip_type iptype);
/* configure the initial firewall filter rules */
- int config_dft_firewall_rules_ex(struct ipa_flt_rule_add* rules, int rule_offset,
+ int config_dft_firewall_rules_ex(struct ipa_flt_rule_add* rules, int rule_offset,
ipa_ip_type iptype);
/* init filtering rule in wan dl filtering table */
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index c274a3d..e55ff2f 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -47,6 +47,7 @@
#include <IPACM_Wan.h>
#include <IPACM_Wlan.h>
#include <ifaddrs.h>
+#include <string.h>
const char *IPACM_Iface::DEVICE_NAME = "/dev/ipa";
IPACM_Routing IPACM_Iface::m_routing;
@@ -61,6 +62,7 @@
num_dft_rt_v6 = 0;
softwarerouting_act = false;
ipa_if_num = iface_index;
+ ipa_if_cate = IPACM_Iface::ipacmcfg->iface_table[iface_index].if_cat;
iface_query = NULL;
tx_prop = NULL;
@@ -832,3 +834,37 @@
return res;
}
+
+
+/* get ipa interface name */
+int IPACM_Iface::ipa_get_if_index
+(
+ char * if_name,
+ int * if_index
+)
+{
+ int fd;
+ struct ifreq ifr;
+
+ if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
+ {
+ IPACMERR("get interface index socket create failed \n");
+ return IPACM_FAILURE;
+ }
+
+ memset(&ifr, 0, sizeof(struct ifreq));
+ (void)strncpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name));
+ IPACMDBG("interface name %s\n", ifr.ifr_name);
+
+ if (ioctl(fd,SIOCGIFINDEX , &ifr) < 0)
+ {
+ IPACMERR("call_ioctl_on_dev: ioctl failed:\n");
+ close(fd);
+ return IPACM_FAILURE;
+ }
+
+ *if_index = ifr.ifr_ifindex;
+ IPACMDBG("Interface index %d\n", *if_index);
+ close(fd);
+ return IPACM_SUCCESS;
+}
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index 5046fa9..535a9c7 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -73,7 +73,7 @@
break;
case IPA_LINK_UP_EVENT:
IPACMDBG("link up %d: \n", evt_data->if_index);
- create_iface_instance(evt_data->if_index, false);
+ create_iface_instance(evt_data->if_index, 0);
break;
case IPA_USB_LINK_UP_EVENT:
@@ -81,15 +81,16 @@
/* check if it's WAN_IF */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == WAN_IF)
{
+ /* usb-backhaul using sta_mode 2*/
IPACMDBG("WAN-usb (%s) link up, iface: %d: \n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,evt_data->if_index);
- create_iface_instance(evt_data->if_index, true);
+ create_iface_instance(evt_data->if_index, 2);
}
else
{
- create_iface_instance(evt_data->if_index, false);
+ create_iface_instance(evt_data->if_index, 0);
}
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 */
@@ -97,7 +98,7 @@
{
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,evt_data->if_index);
- create_iface_instance(evt_data->if_index, false);
+ create_iface_instance(evt_data->if_index, 0);
}
else
{
@@ -110,9 +111,10 @@
/* change iface category from unknown to WAN_IF */
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat==UNKNOWN_IF)
{
+ /* wlan-backhaul using sta_mode 1 */
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,evt_data->if_index);
- create_iface_instance(evt_data->if_index, true);
+ create_iface_instance(evt_data->if_index, 1);
}
else
{
@@ -126,7 +128,7 @@
return;
}
-int IPACM_IfaceManager::create_iface_instance(int if_index, bool is_sta_mode)
+int IPACM_IfaceManager::create_iface_instance(int if_index, int is_sta_mode)
{
int ipa_interface_index;
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(if_index);
@@ -161,6 +163,7 @@
IPACM_EvtDispatcher::registr(IPA_HANDLE_WAN_DOWN_V6, lan);
IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, lan);
IPACM_EvtDispatcher::registr(IPA_LAN_DELETE_SELF, lan);
+ IPACM_EvtDispatcher::registr(IPA_CFG_CHANGE_EVENT, lan); // register for IPA_CFG_CHANGE event
IPACMDBG("ipa_LAN (%s):ipa_index (%d) instance open/registr ok\n", lan->dev_name, lan->ipa_if_num);
registr(ipa_interface_index, lan);
/* solve the new_addr comes earlier issue */
@@ -224,6 +227,7 @@
IPACM_EvtDispatcher::registr(IPA_SW_ROUTING_DISABLE, w);
IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, w);
IPACM_EvtDispatcher::registr(IPA_WLAN_LINK_DOWN_EVENT, w); // for STA mode
+ IPACM_EvtDispatcher::registr(IPA_CFG_CHANGE_EVENT, w); // register for IPA_CFG_CHANGE event
IPACMDBG("ipa_WAN (%s):ipa_index (%d) instance open/registr ok\n", w->dev_name, w->ipa_if_num);
registr(ipa_interface_index, w);
/* solve the new_addr comes earlier issue */
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 008a185..ce813bb 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -92,10 +92,9 @@
memset(lan2lan_hdr_hdl_v6, 0, MAX_OFFLOAD_PAIR*sizeof(lan2lan_hdr_hdl));
is_active = true;
-
memset(tcp_ctl_flt_rule_hdl_v4, 0, NUM_TCP_CTL_FLT_RULE*sizeof(uint32_t));
memset(tcp_ctl_flt_rule_hdl_v6, 0, NUM_TCP_CTL_FLT_RULE*sizeof(uint32_t));
-
+ is_mode_switch = false;
return;
}
@@ -136,6 +135,20 @@
}
break;
+ case IPA_CFG_CHANGE_EVENT:
+ {
+ if ( IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat != ipa_if_cate)
+ {
+ IPACMDBG("Received IPA_CFG_CHANGE_EVENT and category changed\n");
+ /* delete previous instance */
+ handle_down_evt();
+ IPACM_Iface::ipacmcfg->DelNatIfaces(dev_name); // delete NAT-iface
+ is_mode_switch = true; // need post internal usb-link up event
+ return;
+ }
+ }
+ break;
+
case IPA_LAN_DELETE_SELF:
{
ipacm_event_data_fid *data = (ipacm_event_data_fid *)param;
@@ -143,6 +156,29 @@
{
IPACMDBG("Received IPA_LAN_DELETE_SELF event.\n");
IPACMDBG("ipa_LAN (%s):ipa_index (%d) instance close \n", IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ipa_if_num);
+ /* posting link-up event for cradle use-case */
+ if(is_mode_switch)
+ {
+ IPACMDBG("Posting IPA_USB_LINK_UP_EVENT event for (%s)\n", dev_name);
+ ipacm_cmd_q_data evt_data;
+ memset(&evt_data, 0, sizeof(evt_data));
+
+ ipacm_event_data_fid *data_fid = NULL;
+ data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+ if(data_fid == NULL)
+ {
+ IPACMERR("unable to allocate memory for IPA_USB_LINK_UP_EVENT data_fid\n");
+ return NULL;
+ }
+ if(IPACM_Iface::ipa_get_if_index(dev_name, &(data_fid->if_index)))
+ {
+ IPACMERR("Error while getting interface index for %s device", dev_name);
+ }
+ evt_data.event = IPA_USB_LINK_UP_EVENT;
+ evt_data.evt_data = data_fid;
+ //IPACMDBG("Posting event:%d\n", evt_data.event);
+ IPACM_EvtDispatcher::PostEvt(&evt_data);
+ }
delete this;
}
break;
diff --git a/ipacm/src/IPACM_Netlink.cpp b/ipacm/src/IPACM_Netlink.cpp
index ae3902c..012668e 100644
--- a/ipacm/src/IPACM_Netlink.cpp
+++ b/ipacm/src/IPACM_Netlink.cpp
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (c) 2013, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -147,8 +147,7 @@
if (setsockopt(*p_sk_fd, SOL_SOCKET, SO_RCVBUF, &buf_size, sizeof(int)) == -1) {
IPACMERR("Error setting socket opts\n");
}
-
-
+
/* Initialize socket addresses to null */
memset(p_sk_addr_loc, 0, sizeof(struct sockaddr_nl));
@@ -158,7 +157,7 @@
p_sk_addr_loc->nl_groups = grps;
/* Bind socket to the local address, i.e. specified groups. This ensures
- that multicast messages for these groups are delivered over this
+ that multicast messages for these groups are delivered over this
socket. */
if(bind(*p_sk_fd,
@@ -394,7 +393,7 @@
return IPACM_SUCCESS;
-/* An error occurred while receiving the message. Free all memory before
+/* An error occurred while receiving the message. Free all memory before
returning. */
error:
ipa_nl_release_msg(msgh);
@@ -433,7 +432,7 @@
{
struct nlmsghdr *nlh = (struct nlmsghdr *)buffer; /* NL message header */
struct rtattr *rtah = NULL;
-
+
/* Extract the header data */
addr_info->metainfo = *((struct ifaddrmsg *)NLMSG_DATA(nlh));
buflen -= sizeof(struct nlmsghdr);
@@ -475,7 +474,7 @@
{
struct nlmsghdr *nlh = (struct nlmsghdr *)buffer; /* NL message header */
struct rtattr *rtah = NULL;
-
+
/* Extract the header data */
neigh_info->metainfo = *((struct ndmsg *)NLMSG_DATA(nlh));
buflen -= sizeof(struct nlmsghdr);
@@ -523,7 +522,7 @@
{
struct nlmsghdr *nlh = (struct nlmsghdr *)buffer; /* NL message header */
struct rtattr *rtah = NULL;
-
+
/* Extract the header data */
route_info->metainfo = *((struct rtmsg *)NLMSG_DATA(nlh));
buflen -= sizeof(struct nlmsghdr);
@@ -632,7 +631,7 @@
{
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)
{
@@ -640,7 +639,7 @@
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);
@@ -662,8 +661,8 @@
IPACM_EvtDispatcher::PostEvt(&evt_data);
}
-
- /* Add IPACM support for ECM plug-in/plug_out */
+
+ /* Add IPACM support for ECM plug-in/plug_out */
/*--------------------------------------------------------------------------
Check if the interface is running.If its a RTM_NEWLINK and the interface
is running then it means that its a link up event
@@ -671,7 +670,7 @@
if((msg_ptr->nl_link_info.metainfo.ifi_flags & IFF_RUNNING) &&
(msg_ptr->nl_link_info.metainfo.ifi_flags & IFF_LOWER_UP))
{
-
+
data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
if(data_fid == NULL)
{
@@ -679,17 +678,17 @@
return IPACM_FAILURE;
}
data_fid->if_index = msg_ptr->nl_link_info.metainfo.ifi_index;
-
+
ret_val = ipa_get_if_name(dev_name, msg_ptr->nl_link_info.metainfo.ifi_index);
IPACMDBG("Got a ECM link_up event (Interface %s) \n", dev_name);
-
+
/*--------------------------------------------------------------------------
Post LAN iface (ECM) link up event
---------------------------------------------------------------------------*/
evt_data.event = IPA_USB_LINK_UP_EVENT;
evt_data.evt_data = data_fid;
IPACM_EvtDispatcher::PostEvt(&evt_data);
- }
+ }
else if(!(msg_ptr->nl_link_info.metainfo.ifi_flags & IFF_LOWER_UP))
{
data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
@@ -703,14 +702,14 @@
ret_val = ipa_get_if_name(dev_name, msg_ptr->nl_link_info.metainfo.ifi_index);
IPACMDBG("Got a ECM link_down event (Interface %s) \n", dev_name);
- /*--------------------------------------------------------------------------
- Post LAN iface (ECM) link down event
- ---------------------------------------------------------------------------*/
- evt_data.event = IPA_LINK_DOWN_EVENT;
+ /*--------------------------------------------------------------------------
+ Post LAN iface (ECM) link down event
+ ---------------------------------------------------------------------------*/
+ evt_data.event = IPA_LINK_DOWN_EVENT;
evt_data.evt_data = data_fid;
- IPACM_EvtDispatcher::PostEvt(&evt_data);
- }
-
+ IPACM_EvtDispatcher::PostEvt(&evt_data);
+ }
+
}
break;
@@ -783,7 +782,7 @@
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_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);
}
else
{
@@ -791,7 +790,7 @@
IPACM_NL_REPORT_ADDR( "IFA_ADDRESS:", msg_ptr->nl_addr_info.attr_info.prefix_addr );
IPACM_EVENT_COPY_ADDR_v4( data_addr->ipv4_addr, msg_ptr->nl_addr_info.attr_info.prefix_addr);
data_addr->ipv4_addr = ntohl(data_addr->ipv4_addr);
-
+
}
evt_data.event = IPA_ADDR_ADD_EVENT;
@@ -803,7 +802,7 @@
data_addr->ipv6_addr[0],
data_addr->ipv6_addr[1],
data_addr->ipv6_addr[2],
- data_addr->ipv6_addr[3]);
+ data_addr->ipv6_addr[3]);
}
else
{
@@ -832,11 +831,11 @@
IPACMDBG("rtm_table: %d\n", msg_ptr->nl_route_info.metainfo.rtm_table);
IPACMDBG("rtm_family: %d\n", msg_ptr->nl_route_info.metainfo.rtm_family);
IPACMDBG("param_mask: 0x%x\n", msg_ptr->nl_route_info.attr_info.param_mask);
-
+
/* take care of route add default route & uniroute */
- if((msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
- (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_BOOT) &&
- (msg_ptr->nl_route_info.metainfo.rtm_scope == RT_SCOPE_UNIVERSE) &&
+ if((msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_BOOT) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_scope == RT_SCOPE_UNIVERSE) &&
(msg_ptr->nl_route_info.metainfo.rtm_table == RT_TABLE_MAIN))
{
IPACMDBG("\n GOT RTM_NEWROUTE event\n");
@@ -849,8 +848,8 @@
IPACMERR("Error while getting interface name\n");
}
- IPACM_NL_REPORT_ADDR( "route add -host", msg_ptr->nl_route_info.attr_info.dst_addr );
- IPACM_NL_REPORT_ADDR( "gw", msg_ptr->nl_route_info.attr_info.gateway_addr );
+ IPACM_NL_REPORT_ADDR( "route add -host", msg_ptr->nl_route_info.attr_info.dst_addr );
+ IPACM_NL_REPORT_ADDR( "gw", msg_ptr->nl_route_info.attr_info.gateway_addr );
IPACMDBG("dev %s\n",dev_name );
/* insert to command queue */
IPACM_EVENT_COPY_ADDR_v4( if_ipv4_addr, msg_ptr->nl_route_info.attr_info.dst_addr);
@@ -917,13 +916,13 @@
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->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;
- IPACMDBG("Posting IPA_ROUTE_ADD_EVENT with if index:%d, ipv6 address\n",
+ IPACMDBG("Posting IPA_ROUTE_ADD_EVENT with if index:%d, ipv6 address\n",
data_addr->if_index);
evt_data.evt_data = data_addr;
IPACM_EvtDispatcher::PostEvt(&evt_data);
@@ -932,8 +931,8 @@
}
else
{
- IPACM_NL_REPORT_ADDR( "route add default gw", msg_ptr->nl_route_info.attr_info.gateway_addr );
- IPACMDBG("dev %s", dev_name);
+ IPACM_NL_REPORT_ADDR( "route add default gw \n", msg_ptr->nl_route_info.attr_info.gateway_addr );
+ IPACMDBG("dev %s \n", dev_name);
IPACM_NL_REPORT_ADDR( "dstIP:", msg_ptr->nl_route_info.attr_info.dst_addr );
/* insert to command queue */
@@ -944,8 +943,8 @@
return IPACM_FAILURE;
}
- IPACM_EVENT_COPY_ADDR_v4( if_ipv4_addr, msg_ptr->nl_route_info.attr_info.dst_addr);
- IPACM_EVENT_COPY_ADDR_v4( if_ipipv4_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr);
+ IPACM_EVENT_COPY_ADDR_v4( if_ipv4_addr, msg_ptr->nl_route_info.attr_info.dst_addr);
+ IPACM_EVENT_COPY_ADDR_v4( if_ipipv4_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr);
evt_data.event = IPA_ROUTE_ADD_EVENT;
data_addr->if_index = msg_ptr->nl_route_info.attr_info.oif_index;
@@ -965,9 +964,9 @@
}
/* ipv6 routing table */
- if((AF_INET6 == msg_ptr->nl_route_info.metainfo.rtm_family) &&
- (msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
- (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_KERNEL) &&
+ if((AF_INET6 == msg_ptr->nl_route_info.metainfo.rtm_family) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_KERNEL) &&
(msg_ptr->nl_route_info.metainfo.rtm_table == RT_TABLE_MAIN))
{
IPACMDBG("\n GOT valid v6-RTM_NEWROUTE event\n");
@@ -985,7 +984,7 @@
msg_ptr->nl_route_info.metainfo.rtm_dst_len,
msg_ptr->nl_route_info.attr_info.priority,
dev_name);
-
+
/* insert to command queue */
data_addr = (ipacm_event_data_addr *)malloc(sizeof(ipacm_event_data_addr));
if(data_addr == NULL)
@@ -999,7 +998,7 @@
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_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++)
@@ -1026,8 +1025,8 @@
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->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;
@@ -1044,7 +1043,7 @@
IPACMDBG(" metric %d, dev %s\n",
msg_ptr->nl_route_info.attr_info.priority,
dev_name);
-
+
/* insert to command queue */
data_addr = (ipacm_event_data_addr *)malloc(sizeof(ipacm_event_data_addr));
if(data_addr == NULL)
@@ -1055,17 +1054,17 @@
IPACM_EVENT_COPY_ADDR_v6( data_addr->ipv6_addr, msg_ptr->nl_route_info.attr_info.dst_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_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]);
IPACM_EVENT_COPY_ADDR_v6( data_addr->ipv6_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr);
- 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->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;
@@ -1087,9 +1086,9 @@
return IPACM_FAILURE;
}
/* take care of route delete of default route & uniroute */
- if((msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
- (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_BOOT) &&
- (msg_ptr->nl_route_info.metainfo.rtm_scope == 0) &&
+ if((msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_BOOT) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_scope == 0) &&
(msg_ptr->nl_route_info.metainfo.rtm_table == RT_TABLE_MAIN))
{
@@ -1162,19 +1161,19 @@
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_addr->ipv6_addr[3] = ntohl(data_addr->ipv6_addr[3]);
IPACM_EVENT_COPY_ADDR_v6( data_addr->ipv6_addr_mask, msg_ptr->nl_route_info.attr_info.dst_addr);
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->ipv6_addr_mask[3] = ntohl(data_addr->ipv6_addr_mask[3]);
data_addr->iptype = IPA_IP_v6;
}
else
{
- IPACM_NL_REPORT_ADDR( "route del default gw", msg_ptr->nl_route_info.attr_info.gateway_addr);
+ IPACM_NL_REPORT_ADDR( "route del default gw", msg_ptr->nl_route_info.attr_info.gateway_addr);
IPACMDBG("dev %s\n", dev_name);
IPACM_EVENT_COPY_ADDR_v4( data_addr->ipv4_addr, msg_ptr->nl_route_info.attr_info.dst_addr);
@@ -1198,9 +1197,9 @@
}
/* ipv6 routing table */
- if((AF_INET6 == msg_ptr->nl_route_info.metainfo.rtm_family) &&
- (msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
- (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_KERNEL) &&
+ if((AF_INET6 == msg_ptr->nl_route_info.metainfo.rtm_family) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_type == RTN_UNICAST) &&
+ (msg_ptr->nl_route_info.metainfo.rtm_protocol == RTPROT_KERNEL) &&
(msg_ptr->nl_route_info.metainfo.rtm_table == RT_TABLE_MAIN))
{
IPACMDBG("\n GOT valid v6-RTM_DELROUTE event\n");
@@ -1231,7 +1230,7 @@
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_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++)
@@ -1269,8 +1268,8 @@
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->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;
@@ -1310,21 +1309,21 @@
return IPACM_FAILURE;
}
- memset(data_all, 0, sizeof(ipacm_event_data_all));
+ memset(data_all, 0, sizeof(ipacm_event_data_all));
if(msg_ptr->nl_neigh_info.attr_info.local_addr.ss_family == AF_INET6)
{
IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
IPACM_EVENT_COPY_ADDR_v6( data_all->ipv6_addr, msg_ptr->nl_neigh_info.attr_info.local_addr);
-
- data_all->ipv6_addr[0]=ntohl(data_all->ipv6_addr[0]);
- data_all->ipv6_addr[1]=ntohl(data_all->ipv6_addr[1]);
- data_all->ipv6_addr[2]=ntohl(data_all->ipv6_addr[2]);
- data_all->ipv6_addr[3]=ntohl(data_all->ipv6_addr[3]);
+
+ data_all->ipv6_addr[0]=ntohl(data_all->ipv6_addr[0]);
+ data_all->ipv6_addr[1]=ntohl(data_all->ipv6_addr[1]);
+ data_all->ipv6_addr[2]=ntohl(data_all->ipv6_addr[2]);
+ data_all->ipv6_addr[3]=ntohl(data_all->ipv6_addr[3]);
data_all->iptype = IPA_IP_v6;
}
else if (msg_ptr->nl_neigh_info.attr_info.local_addr.ss_family == AF_INET)
{
- IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
+ IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
IPACM_EVENT_COPY_ADDR_v4( data_all->ipv4_addr, msg_ptr->nl_neigh_info.attr_info.local_addr);
data_all->ipv4_addr = ntohl(data_all->ipv4_addr);
data_all->iptype = IPA_IP_v4;
@@ -1375,7 +1374,7 @@
{
IPACMDBG("\n GOT RTM_DELNEIGH event (%s) ip %d\n",dev_name,msg_ptr->nl_neigh_info.attr_info.local_addr.ss_family);
}
-
+
/* insert to command queue */
data_all = (ipacm_event_data_all *)malloc(sizeof(ipacm_event_data_all));
if(data_all == NULL)
@@ -1384,21 +1383,21 @@
return IPACM_FAILURE;
}
- memset(data_all, 0, sizeof(ipacm_event_data_all));
+ memset(data_all, 0, sizeof(ipacm_event_data_all));
if(msg_ptr->nl_neigh_info.attr_info.local_addr.ss_family == AF_INET6)
{
- IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
+ IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
IPACM_EVENT_COPY_ADDR_v6( data_all->ipv6_addr, msg_ptr->nl_neigh_info.attr_info.local_addr);
data_all->ipv6_addr[0] = ntohl(data_all->ipv6_addr[0]);
data_all->ipv6_addr[1] = ntohl(data_all->ipv6_addr[1]);
data_all->ipv6_addr[2] = ntohl(data_all->ipv6_addr[2]);
- data_all->ipv6_addr[3] = ntohl(data_all->ipv6_addr[3]);
+ data_all->ipv6_addr[3] = ntohl(data_all->ipv6_addr[3]);
data_all->iptype = IPA_IP_v6;
}
else if (msg_ptr->nl_neigh_info.attr_info.local_addr.ss_family == AF_INET)
{
- IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
+ IPACM_NL_REPORT_ADDR( " ", msg_ptr->nl_neigh_info.attr_info.local_addr);
IPACM_EVENT_COPY_ADDR_v4( data_all->ipv4_addr, msg_ptr->nl_neigh_info.attr_info.local_addr);
data_all->ipv4_addr = ntohl(data_all->ipv4_addr);
data_all->iptype = IPA_IP_v4;
@@ -1407,7 +1406,7 @@
{
data_all->iptype = IPA_IP_v6;
}
-
+
IPACMDBG("NDA_LLADDR:MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
(unsigned char)(msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr).sa_data[0],
(unsigned char)(msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr).sa_data[1],
@@ -1415,7 +1414,6 @@
(unsigned char)(msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr).sa_data[3],
(unsigned char)(msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr).sa_data[4],
(unsigned char)(msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr).sa_data[5]);
-
memcpy(data_all->mac_addr,
msg_ptr->nl_neigh_info.attr_info.lladdr_hwaddr.sa_data,
@@ -1553,7 +1551,7 @@
return IPACM_FAILURE;
}
- /* Add NETLINK socket to the list of sockets that the listener
+ /* Add NETLINK socket to the list of sockets that the listener
thread should listen on. */
if(ipa_nl_addfd_map(sk_fdset, sk_info.sk_fd, read_f) != IPACM_SUCCESS)
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 4df0467..54e5c82 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -61,7 +61,7 @@
bool IPACM_Wan::backhaul_is_sta_mode = false;
bool IPACM_Wan::is_ext_prop_set = false;
-IPACM_Wan::IPACM_Wan(int iface_index, bool is_sta_mode) : IPACM_Iface(iface_index)
+IPACM_Wan::IPACM_Wan(int iface_index, int is_sta_mode) : IPACM_Iface(iface_index)
{
num_firewall_v4 = 0;
num_firewall_v6 = 0;
@@ -81,7 +81,7 @@
hdr_hdl_sta_v4 = 0;
hdr_hdl_sta_v6 = 0;
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
IPACMDBG("The new WAN interface is modem.\n");
query_ext_prop();
@@ -198,7 +198,7 @@
if (num_dft_rt_v6 == 0)
{
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
init_fl_rule_ex(data->iptype);
}
@@ -249,7 +249,7 @@
IPACMDBG("ipv4 wan iface rt-rule hdll=0x%x\n", dft_rt_rule_hdl[0]);
/* initial multicast/broadcast/fragment filter rule */
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
init_fl_rule_ex(data->iptype);
}
@@ -278,7 +278,7 @@
{
case IPA_WLAN_LINK_DOWN_EVENT:
{
- if(m_is_sta_mode == true)
+ if(m_is_sta_mode == 1)
{
ipacm_event_data_fid *data = (ipacm_event_data_fid *)param;
ipa_interface_index = iface_ipa_index_query(data->if_index);
@@ -297,9 +297,44 @@
}
break;
+ case IPA_CFG_CHANGE_EVENT:
+ {
+ if ( (IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat != ipa_if_cate) &&
+ (m_is_sta_mode ==2))
+ {
+ IPACMDBG("Received IPA_CFG_CHANGE_EVENT and category changed(sta_mode:%d)\n", m_is_sta_mode);
+ /* posting link-up event for cradle use-case */
+ ipacm_cmd_q_data evt_data;
+ memset(&evt_data, 0, sizeof(evt_data));
+
+ ipacm_event_data_fid *data_fid = NULL;
+ data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+ if(data_fid == NULL)
+ {
+ IPACMERR("unable to allocate memory for IPA_USB_LINK_UP_EVENT data_fid\n");
+ return NULL;
+ }
+ if(IPACM_Iface::ipa_get_if_index(dev_name, &(data_fid->if_index)))
+ {
+ IPACMERR("Error while getting interface index for %s device", dev_name);
+ }
+ evt_data.event = IPA_USB_LINK_UP_EVENT;
+ evt_data.evt_data = data_fid;
+ IPACMDBG("Posting event:%d\n", evt_data.event);
+ IPACM_EvtDispatcher::PostEvt(&evt_data);
+
+ /* delete previous instance */
+ handle_down_evt();
+ IPACM_Iface::ipacmcfg->DelNatIfaces(dev_name); // delete NAT-iface
+ delete this;
+ return;
+ }
+ }
+ break;
+
case IPA_LINK_DOWN_EVENT:
{
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
ipacm_event_data_fid *data = (ipacm_event_data_fid *)param;
ipa_interface_index = iface_ipa_index_query(data->if_index);
@@ -383,7 +418,7 @@
{
IPACMDBG("get del default v4 route (dst:0.0.0.0)\n");
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
del_wan_firewall_rule(IPA_IP_v4);
install_wan_filtering_rule();
@@ -399,7 +434,7 @@
{
IPACMDBG("get del default v6 route (dst:00.00.00.00)\n");
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
del_wan_firewall_rule(IPA_IP_v6);
install_wan_filtering_rule();
@@ -442,7 +477,7 @@
case IPA_FIREWALL_CHANGE_EVENT:
IPACMDBG("Received IPA_FIREWALL_CHANGE_EVENT\n");
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
if(ip_type == IPA_IP_v4)
{
@@ -517,7 +552,22 @@
return IPACM_SUCCESS;
}
- IPACM_Wan::backhaul_is_sta_mode = m_is_sta_mode;
+ if (m_is_sta_mode !=0)
+ {
+ IPACM_Wan::backhaul_is_sta_mode = true;
+ if((iptype==IPA_IP_v4) && (header_set_v4 != true))
+ {
+ header_partial_default_wan_v4 = true;
+ IPACMDBG("STA ipv4-header haven't constructed \n");
+ return IPACM_SUCCESS;
+ }
+ else if((iptype==IPA_IP_v6) && (header_set_v6 != true))
+ {
+ header_partial_default_wan_v6 = true;
+ IPACMDBG("STA ipv6-header haven't constructed \n");
+ return IPACM_SUCCESS;
+ }
+ }
for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
{
@@ -584,7 +634,7 @@
rt_rule_entry = &rt_rule->rules[0];
rt_rule_entry->at_rear = true;
- if(m_is_sta_mode == true)
+ if(m_is_sta_mode != 0)
{
IPACMDBG(" WAN instance is in STA mode \n");
for (tx_index = 0; tx_index < iface_query->num_tx_props; tx_index++)
@@ -715,7 +765,7 @@
IPACM_Wan::wan_up = true;
active_v4 = true;
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
config_wan_firewall_rule(IPA_IP_v4);
install_wan_filtering_rule();
@@ -727,7 +777,14 @@
memcpy(wanup_data->ifname, dev_name, sizeof(wanup_data->ifname));
wanup_data->ipv4_addr = wan_v4_addr;
- wanup_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wanup_data->is_sta = true;
+ }
+ else
+ {
+ wanup_data->is_sta = false;
+ }
IPACMDBG("Posting IPA_HANDLE_WAN_UP with below information:\n");
IPACMDBG("if_name:%s, ipv4_address:0x%x, is sta mode:%d\n",
wanup_data->ifname, wanup_data->ipv4_addr, wanup_data->is_sta);
@@ -741,7 +798,7 @@
IPACM_Wan::wan_up_v6 = true;
active_v6 = true;
- if(m_is_sta_mode == false)
+ if(m_is_sta_mode == 0)
{
config_wan_firewall_rule(IPA_IP_v6);
install_wan_filtering_rule();
@@ -752,7 +809,15 @@
}
memcpy(wanup_data->ifname, dev_name, sizeof(wanup_data->ifname));
- wanup_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wanup_data->is_sta = true;
+ }
+ else
+ {
+ wanup_data->is_sta = false;
+ }
+
IPACMDBG("Posting IPA_HANDLE_WAN_UP_V6 with below information:\n");
IPACMDBG("if_name:%s, is sta mode: %d\n", wanup_data->ifname, wanup_data->is_sta);
@@ -2772,7 +2837,14 @@
if (iptype == IPA_IP_v4)
{
wandown_data->ipv4_addr = wan_v4_addr;
- wandown_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wandown_data->is_sta = true;
+ }
+ else
+ {
+ wandown_data->is_sta = false;
+ }
evt_data.event = IPA_HANDLE_WAN_DOWN;
evt_data.evt_data = (void *)wandown_data;
/* Insert IPA_HANDLE_WAN_DOWN to command queue */
@@ -2784,7 +2856,14 @@
}
else
{
- wandown_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wandown_data->is_sta = true;
+ }
+ else
+ {
+ wandown_data->is_sta = false;
+ }
evt_data.event = IPA_HANDLE_WAN_DOWN_V6;
evt_data.evt_data = (void *)wandown_data;
/* Insert IPA_HANDLE_WAN_DOWN to command queue */
@@ -2845,7 +2924,14 @@
if (iptype == IPA_IP_v4)
{
wandown_data->ipv4_addr = wan_v4_addr;
- wandown_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wandown_data->is_sta = true;
+ }
+ else
+ {
+ wandown_data->is_sta = false;
+ }
evt_data.event = IPA_HANDLE_WAN_DOWN;
evt_data.evt_data = (void *)wandown_data;
/* Insert IPA_HANDLE_WAN_DOWN to command queue */
@@ -2858,7 +2944,14 @@
}
else
{
- wandown_data->is_sta = m_is_sta_mode;
+ if (m_is_sta_mode!=0)
+ {
+ wandown_data->is_sta = true;
+ }
+ else
+ {
+ wandown_data->is_sta = false;
+ }
evt_data.event = IPA_HANDLE_WAN_DOWN_V6;
evt_data.evt_data = (void *)wandown_data;
IPACMDBG("posting IPA_HANDLE_WAN_DOWN_V6 for IPv6 \n");