Skip to content

Commit 2950d87

Browse files
nne: Added ip address to ip UP event
1 parent 5eae990 commit 2950d87

File tree

2 files changed

+44
-31
lines changed

2 files changed

+44
-31
lines changed

metadata_writer_nne.c

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

4949
static 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

metadata_writer_nne.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,16 @@ struct nne_modem
110110
struct nne_metadata metadata[NNE_IDX_MAX + 1];
111111
};
112112

113+
#define NNE_EXTRA_FIELD_MAX_LEN (500)
114+
113115
struct nne_metadata_descr
114116
{
115117
enum nne_metadata_idx idx;
116118
const char *key;
117119
int mode_dependent;
118120
enum nne_type type;
119121
enum iface_event event; // iface event that updates this metadata
120-
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);
121123
};
122124

123125
struct nne_radio_descr

0 commit comments

Comments
 (0)