Skip to content

Commit 36b158e

Browse files
authored
Merge pull request #56 from trozensztrauch/nne-ft-imsi
Nne ft imsi
2 parents b7141ac + 2950d87 commit 36b158e

File tree

2 files changed

+63
-31
lines changed

2 files changed

+63
-31
lines changed

metadata_writer_nne.c

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,19 @@
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

4849
static 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+
272295
static 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
}

metadata_writer_nne.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ enum nne_metadata_idx
7676
NNE_IDX_OPER,
7777
NNE_IDX_IPADDR,
7878
NNE_IDX_DEV_STATE,
79+
NNE_IDX_IMSI,
7980
__NNE_IDX_MAX
8081
};
8182

@@ -109,14 +110,16 @@ struct nne_modem
109110
struct nne_metadata metadata[NNE_IDX_MAX + 1];
110111
};
111112

113+
#define NNE_EXTRA_FIELD_MAX_LEN (500)
114+
112115
struct nne_metadata_descr
113116
{
114117
enum nne_metadata_idx idx;
115118
const char *key;
116119
int mode_dependent;
117120
enum nne_type type;
118121
enum iface_event event; // iface event that updates this metadata
119-
struct nne_value (*parse_cb)(struct nne_modem *modem, struct md_iface_event *mie);
122+
struct nne_value (*parse_cb)(struct nne_modem *modem, struct md_iface_event *mie, char *extra, size_t extra_len);
120123
};
121124

122125
struct nne_radio_descr

0 commit comments

Comments
 (0)