Merge " IPACM: Fixes for Wi-Fi offload for AP-STA mode"
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index 20cde8d..a956643 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -213,7 +213,7 @@
int if_index;
uint32_t ipv4_addr;
uint32_t ipv6_addr[4];
- uint8_t mac_addr[6];
+ uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
} ipacm_event_data_all;
class IPACM_Lan;
@@ -261,7 +261,7 @@
typedef struct _ipacm_event_data_mac
{
int if_index;
- uint8_t mac_addr[6];
+ uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
} ipacm_event_data_mac;
typedef struct
@@ -287,4 +287,11 @@
ECM_WAN
} ipacm_wan_iface_type;
+typedef struct _ipacm_ifacemgr_data
+{
+ int if_index;
+ ipacm_wan_iface_type if_type;
+ uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
+}ipacm_ifacemgr_data;
+
#endif /* IPA_CM_DEFS_H */
diff --git a/ipacm/inc/IPACM_IfaceManager.h b/ipacm/inc/IPACM_IfaceManager.h
index e621067..e65c5d5 100644
--- a/ipacm/inc/IPACM_IfaceManager.h
+++ b/ipacm/inc/IPACM_IfaceManager.h
@@ -77,7 +77,7 @@
private:
- int create_iface_instance(int if_index, ipacm_wan_iface_type is_sta_mode);
+ int create_iface_instance(ipacm_ifacemgr_data *);
/* api to register instances */
int registr(int ipa_if_index, IPACM_Listener *obj);
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index 7888791..e3025b5 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -87,7 +87,7 @@
static bool wan_up;
static bool wan_up_v6;
- IPACM_Wan(int iface_index, ipacm_wan_iface_type is_sta_mode);
+ IPACM_Wan(int, ipacm_wan_iface_type, uint8_t *);
virtual ~IPACM_Wan();
static bool isWanUP()
@@ -137,6 +137,9 @@
bool header_set_v6;
bool header_partial_default_wan_v4;
bool header_partial_default_wan_v6;
+ uint8_t ext_router_mac_addr[IPA_MAC_ADDR_SIZE];
+ uint16_t eth2_ofst_v4;
+ uint16_t eth2_ofst_v6;
static int num_ipv4_modem_pdn;
@@ -273,7 +276,7 @@
int handle_route_add_evt(ipa_ip_type iptype);
/* construct complete ethernet header */
- int handle_header_add_evt(uint8_t mac_addr[6]);
+ int handle_header_add_evt(uint8_t *mac_addr);
int config_dft_firewall_rules(ipa_ip_type iptype);
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index d38a58e..0c61833 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -68,6 +68,9 @@
{
int ipa_interface_index;
ipacm_event_data_fid *evt_data = (ipacm_event_data_fid *)param;
+ ipacm_event_data_mac *StaData = (ipacm_event_data_mac *)param;
+ ipacm_ifacemgr_data ifmgr_data = {0};
+
switch(event)
{
case IPA_CFG_CHANGE_EVENT:
@@ -85,7 +88,9 @@
else if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == WAN_IF)
{
IPACMDBG_H("WAN-LTE (%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, Q6_WAN);
+ ifmgr_data.if_index = evt_data->if_index;
+ ifmgr_data.if_type = Q6_WAN;
+ create_iface_instance(&ifmgr_data);
}
break;
@@ -95,12 +100,16 @@
if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == WAN_IF)
{
/* usb-backhaul using sta_mode ECM_WAN*/
- IPACMDBG_H("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, ECM_WAN);
+ IPACMDBG_H("WAN-usb (%s) link up, iface: %d: \n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name, evt_data->if_index);
+ ifmgr_data.if_index = evt_data->if_index;
+ ifmgr_data.if_type = ECM_WAN;
+ create_iface_instance(&ifmgr_data);
}
else
{
- create_iface_instance(evt_data->if_index, Q6_WAN);
+ ifmgr_data.if_index = evt_data->if_index;
+ ifmgr_data.if_type = Q6_WAN;
+ create_iface_instance(&ifmgr_data);
}
break;
@@ -109,9 +118,11 @@
/* 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;
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat = WLAN_IF;
IPACMDBG_H("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, Q6_WAN);
+ ifmgr_data.if_index = evt_data->if_index;
+ ifmgr_data.if_type = Q6_WAN;
+ create_iface_instance(&ifmgr_data);
}
else
{
@@ -120,18 +131,25 @@
break;
case IPA_WLAN_STA_LINK_UP_EVENT:
- ipa_interface_index = IPACM_Iface::iface_ipa_index_query(evt_data->if_index);
+ ipa_interface_index = IPACM_Iface::iface_ipa_index_query(StaData->if_index);
/* change iface category from unknown to WAN_IF */
- if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat==UNKNOWN_IF)
+ if(IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat == UNKNOWN_IF)
{
/* wlan-backhaul using sta_mode WLAN_WAN */
- IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=WAN_IF;
- IPACMDBG_H("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, WLAN_WAN);
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat = WAN_IF;
+ IPACMDBG_H("WLAN STA (%s) link up, iface: %d: \n",
+ IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name, StaData->if_index);
+
+ ifmgr_data.if_index = StaData->if_index;
+ ifmgr_data.if_type = WLAN_WAN;
+ memcpy(ifmgr_data.mac_addr, StaData->mac_addr, sizeof(ifmgr_data.mac_addr));
+ create_iface_instance(&ifmgr_data);
}
else
{
- IPACMDBG_H("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);
+ IPACMDBG_H("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;
@@ -146,7 +164,9 @@
{
IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].if_cat=EMBMS_IF;
IPACMDBG("WAN eMBMS (%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, Q6_WAN);
+ ifmgr_data.if_index = StaData->if_index;
+ ifmgr_data.if_type = Q6_WAN;
+ create_iface_instance(&ifmgr_data);
}
else
{
@@ -161,8 +181,11 @@
return;
}
-int IPACM_IfaceManager::create_iface_instance(int if_index, ipacm_wan_iface_type is_sta_mode)
+int IPACM_IfaceManager::create_iface_instance(ipacm_ifacemgr_data *param)
{
+ int if_index = param->if_index;
+ ipacm_wan_iface_type is_sta_mode = param->if_type;
+
int ipa_interface_index;
ipa_interface_index = IPACM_Iface::iface_ipa_index_query(if_index);
@@ -298,13 +321,21 @@
if((IPACM_Iface::ipacmcfg->ipacm_odu_enable == false) || (IPACM_Iface::ipacmcfg->ipacm_odu_router_mode == true))
{
IPACMDBG_H("Creating Wan interface\n");
- IPACM_Wan *w = new IPACM_Wan(ipa_interface_index, is_sta_mode);
+ IPACM_Wan *w;
+ if(is_sta_mode == WLAN_WAN)
+ {
+ w = new IPACM_Wan(ipa_interface_index, is_sta_mode, param->mac_addr);
+ }
+ else
+ {
+ w = new IPACM_Wan(ipa_interface_index, is_sta_mode, NULL);
+ }
IPACM_EvtDispatcher::registr(IPA_ADDR_ADD_EVENT, w);
#ifdef FEATURE_IPA_ANDROID
- IPACM_EvtDispatcher::registr(IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT, w);
+ IPACM_EvtDispatcher::registr(IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT, w);
#else/* defined(FEATURE_IPA_ANDROID) */
- IPACM_EvtDispatcher::registr(IPA_ROUTE_ADD_EVENT, w);
- IPACM_EvtDispatcher::registr(IPA_ROUTE_DEL_EVENT, w);
+ IPACM_EvtDispatcher::registr(IPA_ROUTE_ADD_EVENT, w);
+ IPACM_EvtDispatcher::registr(IPA_ROUTE_DEL_EVENT, w);
#endif /* not defined(FEATURE_IPA_ANDROID)*/
IPACM_EvtDispatcher::registr(IPA_FIREWALL_CHANGE_EVENT, w);
IPACM_EvtDispatcher::registr(IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT, w);
@@ -331,7 +362,7 @@
case EMBMS_IF:
{
IPACMDBG("Creating Wan-eMBSM interface\n");
- IPACM_Wan *embms = new IPACM_Wan(ipa_interface_index, is_sta_mode);
+ IPACM_Wan *embms = new IPACM_Wan(ipa_interface_index, is_sta_mode, NULL);
IPACM_EvtDispatcher::registr(IPA_LINK_DOWN_EVENT, embms);
IPACMDBG("ipa_WAN (%s):ipa_index (%d) instance open/registr ok\n", embms->dev_name, embms->ipa_if_num);
registr(ipa_interface_index, embms);
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 9341ec7..cb0982f 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -351,15 +351,18 @@
IPACMDBG_H("STA Mac Address %02x:%02x:%02x:%02x:%02x:%02x\n",
event_wlan->mac_addr[0], event_wlan->mac_addr[1], event_wlan->mac_addr[2],
event_wlan->mac_addr[3], event_wlan->mac_addr[4], event_wlan->mac_addr[5]);
- data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
- if(data_fid == NULL)
+ data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
+ if(data == NULL)
{
IPACMERR("unable to allocate memory for event_wlan data_fid\n");
return NULL;
}
- ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
+ memcpy(data->mac_addr,
+ event_wlan->mac_addr,
+ sizeof(event_wlan->mac_addr));
+ ipa_get_if_index(event_wlan->name, &(data->if_index));
evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
- evt_data.evt_data = data_fid;
+ evt_data.evt_data = data;
break;
case WLAN_STA_DISCONNECT:
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index aa39d6c..c6b5291 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -69,7 +69,9 @@
uint32_t IPACM_Wan::backhaul_ipv6_prefix[2];
-IPACM_Wan::IPACM_Wan(int iface_index, ipacm_wan_iface_type is_sta_mode) : IPACM_Iface(iface_index)
+IPACM_Wan::IPACM_Wan(int iface_index,
+ ipacm_wan_iface_type is_sta_mode,
+ uint8_t *mac_addr) : IPACM_Iface(iface_index)
{
num_firewall_v4 = 0;
num_firewall_v6 = 0;
@@ -123,6 +125,12 @@
IPACMDBG_H("The new WAN interface is WLAN STA.\n");
}
+ if(m_is_sta_mode == WLAN_WAN)
+ {
+ memcpy(ext_router_mac_addr, mac_addr,
+ sizeof(ext_router_mac_addr));
+ }
+
m_fd_ipa = open(IPA_DEVICE_NAME, O_RDWR);
if(0 == m_fd_ipa)
{
@@ -341,29 +349,29 @@
rt_rule->commit = 1;
rt_rule->num_rules = NUM_RULES;
rt_rule->ip = data->iptype;
- rt_rule_entry = &rt_rule->rules[0];
- rt_rule_entry->at_rear = false;
- rt_rule_entry->rule.dst = iface_query->excp_pipe; //go to A5
- rt_rule_entry->rule.attrib.attrib_mask = IPA_FLT_DST_ADDR;
+ rt_rule_entry = &rt_rule->rules[0];
+ rt_rule_entry->at_rear = false;
+ rt_rule_entry->rule.dst = iface_query->excp_pipe; //go to A5
+ rt_rule_entry->rule.attrib.attrib_mask = IPA_FLT_DST_ADDR;
/* still need setup v4 default routing rule to A5*/
strcpy(rt_rule->rt_tbl_name, IPACM_Iface::ipacmcfg->rt_tbl_lan_v4.name);
rt_rule_entry->rule.attrib.u.v4.dst_addr = data->ipv4_addr;
rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = 0xFFFFFFFF;
- if (false == m_routing.AddRoutingRule(rt_rule))
- {
- IPACMERR("Routing rule addition failed!\n");
- res = IPACM_FAILURE;
- goto fail;
- }
- else if (rt_rule_entry->status)
+ if (false == m_routing.AddRoutingRule(rt_rule))
{
- IPACMERR("rt rule adding failed. Result=%d\n", rt_rule_entry->status);
- res = rt_rule_entry->status;
- goto fail;
- }
+ IPACMERR("Routing rule addition failed!\n");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ else if (rt_rule_entry->status)
+ {
+ IPACMERR("rt rule adding failed. Result=%d\n", rt_rule_entry->status);
+ res = rt_rule_entry->status;
+ goto fail;
+ }
dft_rt_rule_hdl[0] = rt_rule_entry->rt_rule_hdl;
- IPACMDBG_H("ipv4 wan iface rt-rule hdll=0x%x\n", dft_rt_rule_hdl[0]);
+ IPACMDBG_H("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 == Q6_WAN)
@@ -382,7 +390,7 @@
IPACMDBG_H("Receved wan address:0x%x\n",wan_v4_addr);
}
- IPACMDBG_H("number of default route rules %d\n", num_dft_rt_v6);
+ IPACMDBG_H("number of default route rules %d\n", num_dft_rt_v6);
fail:
free(rt_rule);
@@ -729,14 +737,38 @@
if (ipa_interface_index == ipa_if_num)
{
IPACMDBG_H("Received IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT in STA mode\n");
- handle_header_add_evt(data->mac_addr);
- /* new */
+ if (m_is_sta_mode == WLAN_WAN)
+ {
+ handle_header_add_evt(ext_router_mac_addr);
+ if (data->iptype == IPA_IP_v4 && data->ipv4_addr == wan_v4_addr)
+ {
+ IPACMDBG_H("Ignore IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT in STA mode\n");
+ IPACMDBG_H("for its own ipv4 address\n");
+ return;
+ }
+ else if (data->iptype == IPA_IP_v6)
+ {
+ for (int num_ipv6_addr = 0; num_ipv6_addr < num_dft_rt_v6; num_ipv6_addr++)
+ {
+ if ((ipv6_addr[num_ipv6_addr][0] == data->ipv6_addr[0]) &&
+ (ipv6_addr[num_ipv6_addr][1] == data->ipv6_addr[1]) &&
+ (ipv6_addr[num_ipv6_addr][2] == data->ipv6_addr[2]) &&
+ (ipv6_addr[num_ipv6_addr][3] == data->ipv6_addr[3]))
+ {
+ IPACMDBG_H("Ignore IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT in STA mode\n");
+ IPACMDBG_H("for its own ipv6 address\n");
+ return;
+ }
+ }
+ }
+ }
+
IPACMDBG_H("wan-iface got client \n");
/* first construc WAN-client full header */
if(memcmp(data->mac_addr,
- invalid_mac,
- sizeof(data->mac_addr)) == 0)
+ invalid_mac,
+ sizeof(data->mac_addr)) == 0)
{
IPACMDBG_H("Received invalid Client MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
data->mac_addr[0], data->mac_addr[1], data->mac_addr[2],
@@ -744,6 +776,8 @@
return;
}
+ handle_header_add_evt(data->mac_addr);
+
handle_wan_hdr_init(data->mac_addr);
IPACMDBG_H("construct wan header and route rules \n");
/* Associate with IP and construct RT-rule */
@@ -1181,7 +1215,7 @@
}
/* construct complete ethernet header */
-int IPACM_Wan::handle_header_add_evt(uint8_t mac_addr[6])
+int IPACM_Wan::handle_header_add_evt(uint8_t *mac_addr)
{
#define WAN_IFACE_INDEX_LEN 2
@@ -1197,10 +1231,10 @@
mac_addr[0], mac_addr[1], mac_addr[2],
mac_addr[3], mac_addr[4], mac_addr[5]);
- if((header_set_v4 == true) || (header_set_v6 == true))
- {
- IPACMDBG_H("Already add STA full header\n");
- return IPACM_SUCCESS;
+ if((header_set_v4 == true) || (header_set_v6 == true))
+ {
+ IPACMDBG_H("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));
@@ -1229,6 +1263,15 @@
goto fail;
}
+ if(sCopyHeader.is_eth2_ofst_valid == false)
+ {
+ eth2_ofst_v4 = 0;
+ }
+ else
+ {
+ eth2_ofst_v4 = sCopyHeader.eth2_ofst;
+ }
+
IPACMDBG_H("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
{
@@ -1244,7 +1287,7 @@
}
/* copy client mac_addr to partial header */
- memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[eth2_ofst_v4], mac_addr,
IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
pHeaderDescriptor->commit = true;
@@ -1306,14 +1349,22 @@
tx_prop->tx[cnt].hdr_name,
sizeof(sCopyHeader.name));
- IPACMDBG_H("header name: %s from tx: %d\n", sCopyHeader.name,cnt);
- if (m_header.CopyHeader(&sCopyHeader) == false)
- {
- IPACMERR("ioctl copy header failed");
- res = IPACM_FAILURE;
- goto fail;
- }
+ IPACMDBG_H("header name: %s from tx: %d\n", sCopyHeader.name,cnt);
+ if (m_header.CopyHeader(&sCopyHeader) == false)
+ {
+ IPACMERR("ioctl copy header failed");
+ res = IPACM_FAILURE;
+ goto fail;
+ }
+ if(sCopyHeader.is_eth2_ofst_valid == false)
+ {
+ eth2_ofst_v6 = 0;
+ }
+ else
+ {
+ eth2_ofst_v6 = sCopyHeader.eth2_ofst;
+ }
IPACMDBG_H("header length: %d, paritial: %d\n", sCopyHeader.hdr_len, sCopyHeader.is_partial);
if (sCopyHeader.hdr_len > IPA_HDR_MAX_SIZE)
{
@@ -1329,7 +1380,7 @@
}
/* copy client mac_addr to partial header */
- memcpy(&pHeaderDescriptor->hdr[0].hdr[IPA_WLAN_PARTIAL_HDR_OFFSET], mac_addr,
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[eth2_ofst_v6], mac_addr,
IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
pHeaderDescriptor->commit = true;
pHeaderDescriptor->num_hdrs = 1;
@@ -4280,7 +4331,7 @@
char index[WAN_IFACE_INDEX_LEN];
struct ipa_ioc_copy_hdr sCopyHeader;
struct ipa_ioc_add_hdr *pHeaderDescriptor = NULL;
- uint32_t cnt;
+ uint32_t cnt;
int clnt_indx;
clnt_indx = get_wan_client_index(mac_addr);
@@ -4363,7 +4414,9 @@
}
/* 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 */
+ IPACMDBG_H("header eth2_ofst_valid: %d, eth2_ofst: %d\n",
+ sCopyHeader.is_eth2_ofst_valid, sCopyHeader.eth2_ofst);
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[eth2_ofst_v4], mac_addr, IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
pHeaderDescriptor->commit = true;
pHeaderDescriptor->num_hdrs = 1;
@@ -4450,7 +4503,7 @@
}
/* 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 */
+ memcpy(&pHeaderDescriptor->hdr[0].hdr[eth2_ofst_v6], mac_addr, IPA_MAC_ADDR_SIZE); /* only copy 6 bytes mac-address */
pHeaderDescriptor->commit = true;
pHeaderDescriptor->num_hdrs = 1;
@@ -4601,7 +4654,6 @@
{
IPACMDBG_H("Already see this ipv6 addr for client:%d\n", clnt_indx);
return IPACM_FAILURE; /* not setup the RT rules*/
- break;
}
}