From 5eae9900639793a795777966725b66747717127c Mon Sep 17 00:00:00 2001 From: Tomasz Rozensztrauch Date: Wed, 16 May 2018 15:44:34 +0200 Subject: [PATCH 1/2] nne: Added imsi to metadata --- metadata_writer_nne.c | 22 ++++++++++++++++++++-- metadata_writer_nne.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/metadata_writer_nne.c b/metadata_writer_nne.c index 2d7bf68..0a107b7 100644 --- a/metadata_writer_nne.c +++ b/metadata_writer_nne.c @@ -44,6 +44,7 @@ static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_if static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_iface_event *mie); static struct nne_value md_iface_parse_ipaddr(struct nne_modem *modem, struct md_iface_event *mie); static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct md_iface_event *mie); +static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie); static struct nne_metadata_descr NNE_METADATA_DESCR[] = { { NNE_IDX_MODE, "mode", 0, NNE_TYPE_UINT8, IFACE_EVENT_MODE_CHANGE, md_iface_parse_mode }, @@ -57,7 +58,8 @@ static struct nne_metadata_descr NNE_METADATA_DESCR[] = { { NNE_IDX_CID, "cid", 0, NNE_TYPE_STRING, IFACE_EVENT_LOC_CHANGE, md_iface_parse_cid }, { NNE_IDX_OPER, "oper", 0, NNE_TYPE_UINT32, IFACE_EVENT_NW_MCCMNC_CHANGE, md_iface_parse_oper }, { NNE_IDX_IPADDR, "ipaddr", 0, NNE_TYPE_STRING, IFACE_EVENT_IP_ADDR_CHANGE, md_iface_parse_ipaddr }, - { NNE_IDX_DEV_STATE, "device_state", 0, NNE_TYPE_UINT8, IFACE_EVENT_DEV_STATE, md_iface_parse_dev_state } + { NNE_IDX_DEV_STATE, "device_state", 0, NNE_TYPE_UINT8, IFACE_EVENT_DEV_STATE, md_iface_parse_dev_state }, + { NNE_IDX_IMSI, "imsi", 0, NNE_TYPE_STRING, 0, md_iface_parse_imsi } }; #define NNE_METADATA_DESCR_LEN (sizeof(NNE_METADATA_DESCR) / sizeof(struct nne_metadata_descr)) @@ -269,6 +271,19 @@ static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct return value; } +static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie) +{ + struct nne_value value; + value.type = NNE_TYPE_STRING; + if (mie->imsi != NULL) { + value.u.v_str = strdup(mie->imsi); + } + else { + value.type = NNE_TYPE_NULL; + } + return value; +} + static uint8_t md_nne_handle_gps_event(struct md_writer_nne *mwn, struct md_gps_event *mge) { @@ -659,6 +674,7 @@ static uint32_t md_find_network_id(uint32_t imsi_mccmnc, const char *iccid) } break; case 26001: + case 26006: network_id = 9; break; } @@ -686,6 +702,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn, "ip_addr=%s, " "ifname=%s, " "iccid=%s, " + "imsi=%s, " "imsi_mccmnc=%d, " "nw_mccmnc=%d, " "cid=%d, " @@ -702,6 +719,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn, mie->ip_addr, mie->ifname, mie->iccid, + mie->imsi, mie->imsi_mccmnc, mie->nw_mccmnc, mie->cid, @@ -775,7 +793,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn, // Process metadata; only related to this iface event for (i = 0; i < NNE_METADATA_DESCR_LEN; i++) { - if (mie->event_param == NNE_METADATA_DESCR[i].event) { + if (NNE_METADATA_DESCR[i].event > 0 && mie->event_param == NNE_METADATA_DESCR[i].event) { md_nne_process_iface_event(mwn, &(NNE_METADATA_DESCR[i]), modem, mie, NNE_MESSAGE_SOURCE_REPORT); } } diff --git a/metadata_writer_nne.h b/metadata_writer_nne.h index cf28f55..6434ae4 100644 --- a/metadata_writer_nne.h +++ b/metadata_writer_nne.h @@ -76,6 +76,7 @@ enum nne_metadata_idx NNE_IDX_OPER, NNE_IDX_IPADDR, NNE_IDX_DEV_STATE, + NNE_IDX_IMSI, __NNE_IDX_MAX }; From 2950d8777494191dea8cf91af63a3502c99f3a8e Mon Sep 17 00:00:00 2001 From: Tomasz Rozensztrauch Date: Fri, 18 May 2018 13:10:20 +0200 Subject: [PATCH 2/2] nne: Added ip address to ip UP event --- metadata_writer_nne.c | 71 +++++++++++++++++++++++++------------------ metadata_writer_nne.h | 4 ++- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/metadata_writer_nne.c b/metadata_writer_nne.c index 0a107b7..39419a7 100644 --- a/metadata_writer_nne.c +++ b/metadata_writer_nne.c @@ -32,19 +32,19 @@ #include "backend_event_loop.h" #include "metadata_exporter_log.h" -static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_ipaddr(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct md_iface_event *mie); -static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie); +static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_ipaddr(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); +static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); static struct nne_metadata_descr NNE_METADATA_DESCR[] = { { NNE_IDX_MODE, "mode", 0, NNE_TYPE_UINT8, IFACE_EVENT_MODE_CHANGE, md_iface_parse_mode }, @@ -65,7 +65,7 @@ static struct nne_metadata_descr NNE_METADATA_DESCR[] = { #define NNE_METADATA_DESCR_LEN (sizeof(NNE_METADATA_DESCR) / sizeof(struct nne_metadata_descr)) -static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_UINT8; @@ -92,7 +92,7 @@ static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_NULL; @@ -141,7 +141,7 @@ static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct m return value; } -static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_INT8; @@ -152,7 +152,7 @@ static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; uint8_t mode = modem->metadata[NNE_IDX_MODE].value.u.v_uint8; @@ -165,7 +165,7 @@ static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; uint8_t mode = modem->metadata[NNE_IDX_MODE].value.u.v_uint8; @@ -178,7 +178,7 @@ static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; uint8_t mode = modem->metadata[NNE_IDX_MODE].value.u.v_uint8; @@ -191,7 +191,7 @@ static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; uint8_t mode = modem->metadata[NNE_IDX_MODE].value.u.v_uint8; @@ -204,7 +204,7 @@ static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { int len = 16; size_t retval; @@ -224,7 +224,7 @@ static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_if return value; } -static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { int len = 16; size_t retval; @@ -244,7 +244,7 @@ static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_if return value; } -static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_UINT32; @@ -252,18 +252,26 @@ static struct nne_value md_iface_parse_oper(struct nne_modem *modem, struct md_i return value; } -static struct nne_value md_iface_parse_ipaddr(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_ipaddr(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_STRING; - if (mie->ip_addr != NULL) + if (mie->ip_addr != NULL) { value.u.v_str = strdup("UP"); - else + // We need to pass ip address to the event message in the extra field; + // the problem is, though, that it must be the address as seen inside the + // experiment container, so we construct the address here the same way + // as nne-lxc-network-manager: 192.168.. + // In the current implementation we have only one container with id 1. + snprintf(extra, extra_len, "192.168.%d.101", modem->network_id); + } + else { value.u.v_str = strdup("DOWN"); + } return value; } -static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_UINT8; @@ -271,7 +279,7 @@ static struct nne_value md_iface_parse_dev_state(struct nne_modem *modem, struct return value; } -static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie) +static struct nne_value md_iface_parse_imsi(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len) { struct nne_value value; value.type = NNE_TYPE_STRING; @@ -521,7 +529,10 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn, enum nne_message_source source) { int i; - struct nne_value value = descr->parse_cb(modem, mie); + char extra[NNE_EXTRA_FIELD_MAX_LEN]; + + memset(extra, 0, NNE_EXTRA_FIELD_MAX_LEN); + struct nne_value value = descr->parse_cb(modem, mie, extra, NNE_EXTRA_FIELD_MAX_LEN); if (nne_value_compare(modem->metadata[descr->idx].value, value) != 0) { @@ -541,7 +552,7 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn, msg.network_id = modem->network_id; msg.key = descr->key; msg.value = value; - msg.extra = NULL; + msg.extra = strlen(extra) > 0 ? extra : NULL; msg.source = source; msg.delta = 0; diff --git a/metadata_writer_nne.h b/metadata_writer_nne.h index 6434ae4..c51491f 100644 --- a/metadata_writer_nne.h +++ b/metadata_writer_nne.h @@ -110,6 +110,8 @@ struct nne_modem struct nne_metadata metadata[NNE_IDX_MAX + 1]; }; +#define NNE_EXTRA_FIELD_MAX_LEN (500) + struct nne_metadata_descr { enum nne_metadata_idx idx; @@ -117,7 +119,7 @@ struct nne_metadata_descr int mode_dependent; enum nne_type type; enum iface_event event; // iface event that updates this metadata - struct nne_value (*parse_cb)(struct nne_modem *modem, struct md_iface_event *mie); + struct nne_value (*parse_cb)(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len); }; struct nne_radio_descr