3232#include "backend_event_loop.h"
3333#include "metadata_exporter_log.h"
3434
35- static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie );
36- static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie );
37- static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie );
38- static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie );
39- static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie );
40- static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie );
41- static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie );
42- static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie );
43- static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie );
44- static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie );
45- static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie );
46- static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie );
35+ static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
36+ static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
37+ static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
38+ static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
39+ static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
40+ static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
41+ static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
42+ static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
43+ static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
44+ static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
45+ static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
46+ static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
47+ static struct nne_value md_iface_parse_imsi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len );
4748
4849static struct nne_metadata_descr NNE_METADATA_DESCR [] = {
4950 { NNE_IDX_MODE , "mode" , 0 , NNE_TYPE_UINT8 , IFACE_EVENT_MODE_CHANGE , md_iface_parse_mode },
@@ -57,13 +58,14 @@ static struct nne_metadata_descr NNE_METADATA_DESCR[] = {
5758 { NNE_IDX_CID , "cid" , 0 , NNE_TYPE_STRING , IFACE_EVENT_LOC_CHANGE , md_iface_parse_cid },
5859 { NNE_IDX_OPER , "oper" , 0 , NNE_TYPE_UINT32 , IFACE_EVENT_NW_MCCMNC_CHANGE , md_iface_parse_oper },
5960 { NNE_IDX_IPADDR , "ipaddr" , 0 , NNE_TYPE_STRING , IFACE_EVENT_IP_ADDR_CHANGE , md_iface_parse_ipaddr },
60- { NNE_IDX_DEV_STATE , "device_state" , 0 , NNE_TYPE_UINT8 , IFACE_EVENT_DEV_STATE , md_iface_parse_dev_state }
61+ { NNE_IDX_DEV_STATE , "device_state" , 0 , NNE_TYPE_UINT8 , IFACE_EVENT_DEV_STATE , md_iface_parse_dev_state },
62+ { NNE_IDX_IMSI , "imsi" , 0 , NNE_TYPE_STRING , 0 , md_iface_parse_imsi }
6163};
6264
6365#define NNE_METADATA_DESCR_LEN (sizeof(NNE_METADATA_DESCR) / sizeof(struct nne_metadata_descr))
6466
6567
66- static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie )
68+ static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
6769{
6870 struct nne_value value ;
6971 value .type = NNE_TYPE_UINT8 ;
@@ -90,7 +92,7 @@ static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_i
9092 return value ;
9193}
9294
93- static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie )
95+ static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
9496{
9597 struct nne_value value ;
9698 value .type = NNE_TYPE_NULL ;
@@ -139,7 +141,7 @@ static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct m
139141 return value ;
140142}
141143
142- static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie )
144+ static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
143145{
144146 struct nne_value value ;
145147 value .type = NNE_TYPE_INT8 ;
@@ -150,7 +152,7 @@ static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_i
150152 return value ;
151153}
152154
153- static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie )
155+ static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
154156{
155157 struct nne_value value ;
156158 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -163,7 +165,7 @@ static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_i
163165 return value ;
164166}
165167
166- static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie )
168+ static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
167169{
168170 struct nne_value value ;
169171 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -176,7 +178,7 @@ static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_i
176178 return value ;
177179}
178180
179- static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie )
181+ static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
180182{
181183 struct nne_value value ;
182184 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -189,7 +191,7 @@ static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_i
189191 return value ;
190192}
191193
192- static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie )
194+ static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
193195{
194196 struct nne_value value ;
195197 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -202,7 +204,7 @@ static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_i
202204 return value ;
203205}
204206
205- static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie )
207+ static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
206208{
207209 int len = 16 ;
208210 size_t retval ;
@@ -222,7 +224,7 @@ static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_if
222224 return value ;
223225}
224226
225- static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie )
227+ static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
226228{
227229 int len = 16 ;
228230 size_t retval ;
@@ -242,33 +244,54 @@ static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_if
242244 return value ;
243245}
244246
245- static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie )
247+ static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
246248{
247249 struct nne_value value ;
248250 value .type = NNE_TYPE_UINT32 ;
249251 value .u .v_uint32 = mie -> nw_mccmnc ;
250252 return value ;
251253}
252254
253- static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie )
255+ static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
254256{
255257 struct nne_value value ;
256258 value .type = NNE_TYPE_STRING ;
257- if (mie -> ip_addr != NULL )
259+ if (mie -> ip_addr != NULL ) {
258260 value .u .v_str = strdup ("UP" );
259- else
261+ // We need to pass ip address to the event message in the extra field;
262+ // the problem is, though, that it must be the address as seen inside the
263+ // experiment container, so we construct the address here the same way
264+ // as nne-lxc-network-manager: 192.168.<netword_id>.<container_id + 100>
265+ // In the current implementation we have only one container with id 1.
266+ snprintf (extra , extra_len , "192.168.%d.101" , modem -> network_id );
267+ }
268+ else {
260269 value .u .v_str = strdup ("DOWN" );
270+ }
261271 return value ;
262272}
263273
264- static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie )
274+ static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
265275{
266276 struct nne_value value ;
267277 value .type = NNE_TYPE_UINT8 ;
268278 value .u .v_int8 = mie -> device_state ;
269279 return value ;
270280}
271281
282+ static struct nne_value md_iface_parse_imsi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
283+ {
284+ struct nne_value value ;
285+ value .type = NNE_TYPE_STRING ;
286+ if (mie -> imsi != NULL ) {
287+ value .u .v_str = strdup (mie -> imsi );
288+ }
289+ else {
290+ value .type = NNE_TYPE_NULL ;
291+ }
292+ return value ;
293+ }
294+
272295static uint8_t md_nne_handle_gps_event (struct md_writer_nne * mwn ,
273296 struct md_gps_event * mge )
274297{
@@ -506,7 +529,10 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
506529 enum nne_message_source source )
507530{
508531 int i ;
509- struct nne_value value = descr -> parse_cb (modem , mie );
532+ char extra [NNE_EXTRA_FIELD_MAX_LEN ];
533+
534+ memset (extra , 0 , NNE_EXTRA_FIELD_MAX_LEN );
535+ struct nne_value value = descr -> parse_cb (modem , mie , extra , NNE_EXTRA_FIELD_MAX_LEN );
510536
511537 if (nne_value_compare (modem -> metadata [descr -> idx ].value , value ) != 0 ) {
512538
@@ -526,7 +552,7 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
526552 msg .network_id = modem -> network_id ;
527553 msg .key = descr -> key ;
528554 msg .value = value ;
529- msg .extra = NULL ;
555+ msg .extra = strlen ( extra ) > 0 ? extra : NULL ;
530556 msg .source = source ;
531557 msg .delta = 0 ;
532558
@@ -659,6 +685,7 @@ static uint32_t md_find_network_id(uint32_t imsi_mccmnc, const char *iccid)
659685 }
660686 break ;
661687 case 26001 :
688+ case 26006 :
662689 network_id = 9 ;
663690 break ;
664691 }
@@ -686,6 +713,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
686713 "ip_addr=%s, "
687714 "ifname=%s, "
688715 "iccid=%s, "
716+ "imsi=%s, "
689717 "imsi_mccmnc=%d, "
690718 "nw_mccmnc=%d, "
691719 "cid=%d, "
@@ -702,6 +730,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
702730 mie -> ip_addr ,
703731 mie -> ifname ,
704732 mie -> iccid ,
733+ mie -> imsi ,
705734 mie -> imsi_mccmnc ,
706735 mie -> nw_mccmnc ,
707736 mie -> cid ,
@@ -775,7 +804,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
775804
776805 // Process metadata; only related to this iface event
777806 for (i = 0 ; i < NNE_METADATA_DESCR_LEN ; i ++ ) {
778- if (mie -> event_param == NNE_METADATA_DESCR [i ].event ) {
807+ if (NNE_METADATA_DESCR [ i ]. event > 0 && mie -> event_param == NNE_METADATA_DESCR [i ].event ) {
779808 md_nne_process_iface_event (mwn , & (NNE_METADATA_DESCR [i ]), modem , mie , NNE_MESSAGE_SOURCE_REPORT );
780809 }
781810 }
0 commit comments