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 );
47- static struct nne_value md_iface_parse_imsi (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 );
4848
4949static struct nne_metadata_descr NNE_METADATA_DESCR [] = {
5050 { 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[] = {
6565#define NNE_METADATA_DESCR_LEN (sizeof(NNE_METADATA_DESCR) / sizeof(struct nne_metadata_descr))
6666
6767
68- 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 )
6969{
7070 struct nne_value value ;
7171 value .type = NNE_TYPE_UINT8 ;
@@ -92,7 +92,7 @@ static struct nne_value md_iface_parse_mode(struct nne_modem *modem, struct md_i
9292 return value ;
9393}
9494
95- 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 )
9696{
9797 struct nne_value value ;
9898 value .type = NNE_TYPE_NULL ;
@@ -141,7 +141,7 @@ static struct nne_value md_iface_parse_submode(struct nne_modem *modem, struct m
141141 return value ;
142142}
143143
144- 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 )
145145{
146146 struct nne_value value ;
147147 value .type = NNE_TYPE_INT8 ;
@@ -152,7 +152,7 @@ static struct nne_value md_iface_parse_rssi(struct nne_modem *modem, struct md_i
152152 return value ;
153153}
154154
155- 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 )
156156{
157157 struct nne_value value ;
158158 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
165165 return value ;
166166}
167167
168- 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 )
169169{
170170 struct nne_value value ;
171171 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
178178 return value ;
179179}
180180
181- 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 )
182182{
183183 struct nne_value value ;
184184 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
191191 return value ;
192192}
193193
194- 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 )
195195{
196196 struct nne_value value ;
197197 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
204204 return value ;
205205}
206206
207- 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 )
208208{
209209 int len = 16 ;
210210 size_t retval ;
@@ -224,7 +224,7 @@ static struct nne_value md_iface_parse_lac(struct nne_modem *modem, struct md_if
224224 return value ;
225225}
226226
227- 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 )
228228{
229229 int len = 16 ;
230230 size_t retval ;
@@ -244,34 +244,42 @@ static struct nne_value md_iface_parse_cid(struct nne_modem *modem, struct md_if
244244 return value ;
245245}
246246
247- 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 )
248248{
249249 struct nne_value value ;
250250 value .type = NNE_TYPE_UINT32 ;
251251 value .u .v_uint32 = mie -> nw_mccmnc ;
252252 return value ;
253253}
254254
255- 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 )
256256{
257257 struct nne_value value ;
258258 value .type = NNE_TYPE_STRING ;
259- if (mie -> ip_addr != NULL )
259+ if (mie -> ip_addr != NULL ) {
260260 value .u .v_str = strdup ("UP" );
261- 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 {
262269 value .u .v_str = strdup ("DOWN" );
270+ }
263271 return value ;
264272}
265273
266- 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 )
267275{
268276 struct nne_value value ;
269277 value .type = NNE_TYPE_UINT8 ;
270278 value .u .v_int8 = mie -> device_state ;
271279 return value ;
272280}
273281
274- static struct nne_value md_iface_parse_imsi (struct nne_modem * modem , struct md_iface_event * mie )
282+ static struct nne_value md_iface_parse_imsi (struct nne_modem * modem , struct md_iface_event * mie , char * extra , size_t extra_len )
275283{
276284 struct nne_value value ;
277285 value .type = NNE_TYPE_STRING ;
@@ -521,7 +529,10 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
521529 enum nne_message_source source )
522530{
523531 int i ;
524- 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 );
525536
526537 if (nne_value_compare (modem -> metadata [descr -> idx ].value , value ) != 0 ) {
527538
@@ -541,7 +552,7 @@ static void md_nne_process_iface_event(struct md_writer_nne *mwn,
541552 msg .network_id = modem -> network_id ;
542553 msg .key = descr -> key ;
543554 msg .value = value ;
544- msg .extra = NULL ;
555+ msg .extra = strlen ( extra ) > 0 ? extra : NULL ;
545556 msg .source = source ;
546557 msg .delta = 0 ;
547558
0 commit comments