[APMSG_ID] = { .type = BLOB_ATTR_INT32 },
[APMSG_SEQ] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODES] = { .type = BLOB_ATTR_NESTED },
+ [APMSG_HOST_INFO] = { .type = BLOB_ATTR_NESTED },
};
struct blob_attr *tb[__APMSG_MAX];
msg->id = blob_get_int32(tb[APMSG_ID]);
msg->seq = blob_get_int32(tb[APMSG_SEQ]);
msg->nodes = tb[APMSG_NODES];
+ msg->host_info = tb[APMSG_HOST_INFO];
return true;
}
{
static const struct blob_attr_info policy[__APMSG_NODE_MAX] = {
[APMSG_NODE_NAME] = { .type = BLOB_ATTR_STRING },
+ [APMSG_NODE_BSSID] = { .type = BLOB_ATTR_BINARY },
[APMSG_NODE_FREQ] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODE_N_ASSOC] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODE_MAX_ASSOC] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODE_NOISE] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODE_LOAD] = { .type = BLOB_ATTR_INT32 },
[APMSG_NODE_RRM_NR] = { .type = BLOB_ATTR_NESTED },
- [APMSG_NODE_SCRIPT_DATA] = { .type = BLOB_ATTR_NESTED },
+ [APMSG_NODE_NODE_INFO] = { .type = BLOB_ATTR_NESTED },
+ [APMSG_NODE_CHANNEL] = { .type = BLOB_ATTR_INT32 },
+ [APMSG_NODE_OP_CLASS] = { .type = BLOB_ATTR_INT32 },
};
struct blob_attr *tb[__APMSG_NODE_MAX];
struct blob_attr *cur;
blob_parse(data, tb, policy, __APMSG_NODE_MAX);
if (!tb[APMSG_NODE_NAME] ||
+ !tb[APMSG_NODE_BSSID] ||
+ blob_len(tb[APMSG_NODE_BSSID]) != 6 ||
!tb[APMSG_NODE_FREQ] ||
!tb[APMSG_NODE_N_ASSOC] ||
!tb[APMSG_NODE_STATIONS] ||
msg->freq = blob_get_int32(tb[APMSG_NODE_FREQ]);
msg->stations = tb[APMSG_NODE_STATIONS];
msg->ssid = blob_data(tb[APMSG_NODE_SSID]);
+ msg->bssid = blob_data(tb[APMSG_NODE_BSSID]);
msg->noise = get_int32(tb[APMSG_NODE_NOISE]);
msg->load = get_int32(tb[APMSG_NODE_LOAD]);
msg->max_assoc = get_int32(tb[APMSG_NODE_MAX_ASSOC]);
msg->rrm_nr = NULL;
+ if (tb[APMSG_NODE_CHANNEL] && tb[APMSG_NODE_OP_CLASS]) {
+ msg->channel = blob_get_int32(tb[APMSG_NODE_CHANNEL]);
+ msg->op_class = blob_get_int32(tb[APMSG_NODE_OP_CLASS]);
+ }
+
cur = tb[APMSG_NODE_RRM_NR];
if (cur && blob_len(cur) >= sizeof(struct blob_attr) &&
blob_len(cur) >= blob_pad_len(blob_data(cur))) {
msg->rrm_nr = NULL;
}
- msg->script_data = tb[APMSG_NODE_SCRIPT_DATA];
+ msg->node_info = tb[APMSG_NODE_NODE_INFO];
return true;
}
[APMSG_STA_SEEN] = { .type = BLOB_ATTR_INT32 },
[APMSG_STA_TIMEOUT] = { .type = BLOB_ATTR_INT32 },
[APMSG_STA_CONNECTED] = { .type = BLOB_ATTR_INT8 },
+ [APMSG_STA_LAST_CONNECTED] = { .type = BLOB_ATTR_INT32 },
};
struct blob_attr *tb[__APMSG_STA_MAX];
!tb[APMSG_STA_SIGNAL] ||
!tb[APMSG_STA_SEEN] ||
!tb[APMSG_STA_TIMEOUT] ||
- !tb[APMSG_STA_CONNECTED])
+ !tb[APMSG_STA_CONNECTED] ||
+ !tb[APMSG_STA_LAST_CONNECTED])
return false;
if (blob_len(tb[APMSG_STA_ADDR]) != sizeof(msg->addr))
msg->seen = blob_get_int32(tb[APMSG_STA_SEEN]);
msg->timeout = blob_get_int32(tb[APMSG_STA_TIMEOUT]);
msg->connected = blob_get_int8(tb[APMSG_STA_CONNECTED]);
+ msg->last_connected = blob_get_int32(tb[APMSG_STA_LAST_CONNECTED]);
return true;
}