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 );
4747
4848static struct nne_metadata_descr NNE_METADATA_DESCR [] = {
4949 { NNE_IDX_MODE , "mode" , 0 , NNE_TYPE_UINT8 , IFACE_EVENT_MODE_CHANGE , md_iface_parse_mode },
@@ -63,7 +63,7 @@ static struct nne_metadata_descr NNE_METADATA_DESCR[] = {
6363#define NNE_METADATA_DESCR_LEN (sizeof(NNE_METADATA_DESCR) / sizeof(struct nne_metadata_descr))
6464
6565
66- static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie )
66+ static struct nne_value md_iface_parse_mode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
6767{
6868 struct nne_value value ;
6969 value .type = NNE_TYPE_UINT8 ;
@@ -90,7 +90,7 @@ static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_i
9090 return value ;
9191}
9292
93- static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie )
93+ static struct nne_value md_iface_parse_submode (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
9494{
9595 struct nne_value value ;
9696 value .type = NNE_TYPE_NULL ;
@@ -139,7 +139,7 @@ static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct m
139139 return value ;
140140}
141141
142- static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie )
142+ static struct nne_value md_iface_parse_rssi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
143143{
144144 struct nne_value value ;
145145 value .type = NNE_TYPE_INT8 ;
@@ -150,7 +150,7 @@ static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_i
150150 return value ;
151151}
152152
153- static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie )
153+ static struct nne_value md_iface_parse_rscp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
154154{
155155 struct nne_value value ;
156156 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -163,7 +163,7 @@ static struct nne_value md_iface_parse_rscp(struct nne_modem *modem, struct md_i
163163 return value ;
164164}
165165
166- static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie )
166+ static struct nne_value md_iface_parse_ecio (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
167167{
168168 struct nne_value value ;
169169 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -176,7 +176,7 @@ static struct nne_value md_iface_parse_ecio(struct nne_modem *modem, struct md_i
176176 return value ;
177177}
178178
179- static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie )
179+ static struct nne_value md_iface_parse_rsrp (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
180180{
181181 struct nne_value value ;
182182 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -189,7 +189,7 @@ static struct nne_value md_iface_parse_rsrp(struct nne_modem *modem, struct md_i
189189 return value ;
190190}
191191
192- static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie )
192+ static struct nne_value md_iface_parse_rsrq (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
193193{
194194 struct nne_value value ;
195195 uint8_t mode = modem -> metadata [NNE_IDX_MODE ].value .u .v_uint8 ;
@@ -202,7 +202,7 @@ static struct nne_value md_iface_parse_rsrq(struct nne_modem *modem, struct md_i
202202 return value ;
203203}
204204
205- static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie )
205+ static struct nne_value md_iface_parse_lac (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
206206{
207207 int len = 16 ;
208208 size_t retval ;
@@ -222,7 +222,7 @@ static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_if
222222 return value ;
223223}
224224
225- static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie )
225+ static struct nne_value md_iface_parse_cid (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
226226{
227227 int len = 16 ;
228228 size_t retval ;
@@ -242,26 +242,34 @@ static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_if
242242 return value ;
243243}
244244
245- static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie )
245+ static struct nne_value md_iface_parse_oper (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
246246{
247247 struct nne_value value ;
248248 value .type = NNE_TYPE_UINT32 ;
249249 value .u .v_uint32 = mie -> nw_mccmnc ;
250250 return value ;
251251}
252252
253- static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie )
253+ static struct nne_value md_iface_parse_ipaddr (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
254254{
255255 struct nne_value value ;
256256 value .type = NNE_TYPE_STRING ;
257- if (mie -> ip_addr != NULL )
257+ if (mie -> ip_addr != NULL ) {
258258 value .u .v_str = strdup ("UP" );
259- else
259+ // We need to pass ip address to the event message in the extra field;
260+ // the problem is, though, that it must be the address as seen inside the
261+ // experiment container, so we construct the address here the same way
262+ // as nne-lxc-network-manager: 192.168.<netword_id>.<container_id + 100>
263+ // In the current implementation we have only one container with id 1.
264+ snprintf (extra , extra_len , "192.168.%d.101" , modem -> network_id );
265+ }
266+ else {
260267 value .u .v_str = strdup ("DOWN" );
268+ }
261269 return value ;
262270}
263271
264- static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie )
272+ static struct nne_value md_iface_parse_dev_state (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
265273{
266274 struct nne_value value ;
267275 value .type = NNE_TYPE_UINT8 ;
@@ -506,7 +514,10 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
506514 enum nne_message_source source )
507515{
508516 int i ;
509- struct nne_value value = descr -> parse_cb (modem , mie );
517+ char extra [NNE_EXTRA_FIELD_MAX_LEN ];
518+
519+ memset (extra , 0 , NNE_EXTRA_FIELD_MAX_LEN );
520+ struct nne_value value = descr -> parse_cb (modem , mie , extra , NNE_EXTRA_FIELD_MAX_LEN );
510521
511522 if (nne_value_compare (modem -> metadata [descr -> idx ].value , value ) != 0 ) {
512523
@@ -526,7 +537,7 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
526537 msg .network_id = modem -> network_id ;
527538 msg .key = descr -> key ;
528539 msg .value = value ;
529- msg .extra = NULL ;
540+ msg .extra = strlen ( extra ) > 0 ? extra : NULL ;
530541 msg .source = source ;
531542 msg .delta = 0 ;
532543
@@ -659,6 +670,7 @@ static uint32_t md_find_network_id(uint32_t imsi_mccmnc, const char *iccid)
659670 }
660671 break ;
661672 case 26001 :
673+ case 26006 :
662674 network_id = 9 ;
663675 break ;
664676 }
@@ -686,6 +698,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
686698 "ip_addr=%s, "
687699 "ifname=%s, "
688700 "iccid=%s, "
701+ "imsi=%s, "
689702 "imsi_mccmnc=%d, "
690703 "nw_mccmnc=%d, "
691704 "cid=%d, "
@@ -702,6 +715,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
702715 mie -> ip_addr ,
703716 mie -> ifname ,
704717 mie -> iccid ,
718+ mie -> imsi ,
705719 mie -> imsi_mccmnc ,
706720 mie -> nw_mccmnc ,
707721 mie -> cid ,
@@ -757,7 +771,7 @@ static void md_nne_handle_iface_event(struct md_writer_nne *mwn,
757771 msg .network_id = network_id ;
758772 msg .key = "usbmodem" ;
759773 msg .value = nne_value_init_str ("UP" );
760- msg .extra = NULL ;
774+ msg .extra = mie -> imsi ;
761775 msg .source = NNE_MESSAGE_SOURCE_REPORT ;
762776 msg .delta = 0 ;
763777
0 commit comments