Merge "PACM: fix missing RTM_NEWLINK for ECM disconnect"
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index b5be24e..6fb037a 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -206,8 +206,9 @@
int length, fd, cnt;
char buffer[IPA_DRIVER_WLAN_BUF_LEN];
struct ipa_msg_meta *event_hdr = NULL;
- struct ipa_wlan_msg *event = NULL;
struct ipa_wlan_msg_ex *event_ex = NULL;
+ struct ipa_wlan_msg *event_wlan = NULL;
+ struct ipa_ecm_msg *event_ecm = NULL;
ipacm_cmd_q_data evt_data;
ipacm_event_data_mac *data = NULL;
@@ -245,9 +246,13 @@
{
event_ex = (struct ipa_wlan_msg_ex *)(buffer + sizeof(struct ipa_msg_meta));
}
+ else if (event_hdr->msg_type < IPA_WLAN_EVENT_MAX)
+ {
+ event_wlan = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
+ }
else
{
- event = (struct ipa_wlan_msg *)(buffer + sizeof(struct ipa_msg_meta));
+ event_ecm = (struct ipa_ecm_msg *)(buffer + sizeof(struct ipa_msg_meta));
}
}
@@ -266,65 +271,64 @@
break;
case WLAN_AP_CONNECT:
- IPACMDBG("Received WLAN_AP_CONNECT name: %s\n",event->name);
+ IPACMDBG("Received WLAN_AP_CONNECT name: %s\n",event_wlan->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]);
+ 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)
{
- IPACMERR("unable to allocate memory for event data_fid\n");
+ IPACMERR("unable to allocate memory for event_wlan data_fid\n");
return NULL;
}
- ipa_get_if_index(event->name, &(data_fid->if_index));
+ ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
evt_data.event = IPA_WLAN_AP_LINK_UP_EVENT;
evt_data.evt_data = data_fid;
break;
case WLAN_AP_DISCONNECT:
- IPACMDBG("Received WLAN_AP_DISCONNECT name: %s\n",event->name);
+ IPACMDBG("Received WLAN_AP_DISCONNECT name: %s\n",event_wlan->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]);
+ 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)
{
- IPACMERR("unable to allocate memory for event data_fid\n");
+ IPACMERR("unable to allocate memory for event_wlan data_fid\n");
return NULL;
}
- ipa_get_if_index(event->name, &(data_fid->if_index));
+ ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
evt_data.event = IPA_LINK_DOWN_EVENT;
evt_data.evt_data = data_fid;
break;
-
case WLAN_STA_CONNECT:
- IPACMDBG("Received WLAN_STA_CONNECT name: %s\n",event->name);
+ IPACMDBG("Received WLAN_STA_CONNECT name: %s\n",event_wlan->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]);
+ 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)
{
- IPACMERR("unable to allocate memory for event data_fid\n");
+ IPACMERR("unable to allocate memory for event_wlan data_fid\n");
return NULL;
}
- ipa_get_if_index(event->name, &(data_fid->if_index));
+ ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
evt_data.evt_data = data_fid;
break;
case WLAN_STA_DISCONNECT:
- IPACMDBG("Received WLAN_STA_DISCONNECT name: %s\n",event->name);
+ IPACMDBG("Received WLAN_STA_DISCONNECT name: %s\n",event_wlan->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]);
+ 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)
{
- IPACMERR("unable to allocate memory for event data_fid\n");
+ IPACMERR("unable to allocate memory for event_wlan data_fid\n");
return NULL;
}
- ipa_get_if_index(event->name, &(data_fid->if_index));
+ ipa_get_if_index(event_wlan->name, &(data_fid->if_index));
evt_data.event = IPA_LINK_DOWN_EVENT;
evt_data.evt_data = data_fid;
break;
@@ -332,18 +336,18 @@
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]);
+ 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 = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
if (data == NULL)
{
- IPACMERR("unable to allocate memory for event data\n");
+ IPACMERR("unable to allocate memory for event_wlan data\n");
return NULL;
}
memcpy(data->mac_addr,
- event->mac_addr,
- sizeof(event->mac_addr));
- ipa_get_if_index(event->name, &(data->if_index));
+ event_wlan->mac_addr,
+ sizeof(event_wlan->mac_addr));
+ ipa_get_if_index(event_wlan->name, &(data->if_index));
evt_data.event = IPA_WLAN_CLIENT_ADD_EVENT;
evt_data.evt_data = data;
break;
@@ -388,18 +392,18 @@
case WLAN_CLIENT_DISCONNECT:
IPACMDBG("Received WLAN_CLIENT_DISCONNECT\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]);
+ 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 = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
if (data == NULL)
{
- IPACMERR("unable to allocate memory for event data\n");
+ IPACMERR("unable to allocate memory for event_wlan data\n");
return NULL;
}
memcpy(data->mac_addr,
- event->mac_addr,
- sizeof(event->mac_addr));
- ipa_get_if_index(event->name, &(data->if_index));
+ event_wlan->mac_addr,
+ sizeof(event_wlan->mac_addr));
+ ipa_get_if_index(event_wlan->name, &(data->if_index));
evt_data.event = IPA_WLAN_CLIENT_DEL_EVENT;
evt_data.evt_data = data;
break;
@@ -407,18 +411,18 @@
case WLAN_CLIENT_POWER_SAVE_MODE:
IPACMDBG("Received WLAN_CLIENT_POWER_SAVE_MODE\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]);
+ 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 = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
if (data == NULL)
{
- IPACMERR("unable to allocate memory for event data\n");
+ IPACMERR("unable to allocate memory for event_wlan data\n");
return NULL;
}
memcpy(data->mac_addr,
- event->mac_addr,
- sizeof(event->mac_addr));
- ipa_get_if_index(event->name, &(data->if_index));
+ event_wlan->mac_addr,
+ sizeof(event_wlan->mac_addr));
+ ipa_get_if_index(event_wlan->name, &(data->if_index));
evt_data.event = IPA_WLAN_CLIENT_POWER_SAVE_EVENT;
evt_data.evt_data = data;
break;
@@ -426,22 +430,47 @@
case WLAN_CLIENT_NORMAL_MODE:
IPACMDBG("Received WLAN_CLIENT_NORMAL_MODE\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]);
+ 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 = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
if (data == NULL)
{
- IPACMERR("unable to allocate memory for event data\n");
+ IPACMERR("unable to allocate memory for event_wlan data\n");
return NULL;
}
memcpy(data->mac_addr,
- event->mac_addr,
- sizeof(event->mac_addr));
- ipa_get_if_index(event->name, &(data->if_index));
+ event_wlan->mac_addr,
+ sizeof(event_wlan->mac_addr));
+ ipa_get_if_index(event_wlan->name, &(data->if_index));
evt_data.evt_data = data;
evt_data.event = IPA_WLAN_CLIENT_RECOVER_EVENT;
break;
+ case ECM_CONNECT:
+ IPACMDBG("Received ECM_CONNECT name: %s\n",event_ecm->name);
+ data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+ if(data_fid == NULL)
+ {
+ IPACMERR("unable to allocate memory for event_ecm data_fid\n");
+ return NULL;
+ }
+ data_fid->if_index = event_ecm->ifindex;
+ evt_data.event = IPA_LINK_UP_EVENT;
+ evt_data.evt_data = data_fid;
+ break;
+
+ case ECM_DISCONNECT:
+ IPACMDBG("Received ECM_DISCONNECT name: %s\n",event_ecm->name);
+ data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+ if(data_fid == NULL)
+ {
+ IPACMERR("unable to allocate memory for event_ecm data_fid\n");
+ return NULL;
+ }
+ data_fid->if_index = event_ecm->ifindex;
+ evt_data.event = IPA_LINK_DOWN_EVENT;
+ evt_data.evt_data = data_fid;
+ break;
default:
IPACMDBG("Unhandled message type: %d\n", event_hdr->msg_type);
continue;