Skip to content

Commit 720bfc1

Browse files
authored
Merge pull request #32 from MONROE-PROJECT/merge-kristrev-master
Merge MONROE changes back into master, fixes
2 parents 8d017d8 + 019e4f4 commit 720bfc1

8 files changed

+198
-57
lines changed

metadata_exporter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ struct md_radio_grr_cell_resel_event {
262262
uint8_t serving_priority_class;
263263
uint8_t serving_rxlev_avg;
264264
uint8_t serving_five_second_timer;
265-
uint8_t cell_reselet_status;
265+
uint8_t cell_reselect_status;
266266
uint8_t recent_cell_selection;
267267
};
268268

metadata_input_munin.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#include "backend_event_loop.h"
1818

1919
/* polling interval in seconds */
20-
#define MUNIN_POLLING_INTERVAL 5
20+
#define MUNIN_POLLING_INTERVAL 60
2121

2222
/* TODO
2323
- handle socket disconnect/reconnect

metadata_input_netlink.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,8 @@ static void md_input_netlink_radio_grr_cell_resel(struct md_input_netlink *min,
294294
event->serving_c32 = (uint32_t) json_object_get_int(val);
295295
else if (!strcmp(key, "serving_five_second_timer"))
296296
event->serving_five_second_timer = (uint8_t) json_object_get_int(val);
297-
else if (!strcmp(key, "cell_reselet_status"))
298-
event->cell_reselet_status = (uint8_t) json_object_get_int(val);
297+
else if (!strcmp(key, "cell_reselect_status"))
298+
event->cell_reselect_status = (uint8_t) json_object_get_int(val);
299299
else if (!strcmp(key, "recent_cell_selection"))
300300
event->recent_cell_selection = (uint8_t) json_object_get_int(val);
301301
}

metadata_writer_nne.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ struct nne_radio_descr NNE_RADIO_GRR_CELL_RESEL_DESCR[] = {
840840
{ "grr_cell_resel.serving_priority_class", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, serving_priority_class) },
841841
{ "grr_cell_resel.serving_rxlev_avg", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, serving_rxlev_avg) },
842842
{ "grr_cell_resel.serving_five_second_timer", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, serving_five_second_timer) },
843-
{ "grr_cell_resel.cell_reselet_status", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, cell_reselet_status) },
843+
{ "grr_cell_resel.cell_reselect_status", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, cell_reselect_status) },
844844
{ "grr_cell_resel.recent_cell_selection", NNE_TYPE_UINT8, offsetof(struct md_radio_grr_cell_resel_event, recent_cell_selection) },
845845
{ NULL, NNE_TYPE_NULL, 0 }
846846
};

metadata_writer_zeromq.c

Lines changed: 126 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <zmq.h>
3131
#include JSON_LOC
3232
#include <getopt.h>
33+
#include <sys/time.h>
3334
#include <sys/types.h>
3435
#include <sys/socket.h>
3536
#include <netdb.h>
@@ -44,6 +45,16 @@
4445
#include "metadata_exporter_log.h"
4546
#include "backend_event_loop.h"
4647

48+
static double override_tstamp() {
49+
/* return a current export timestamp with us precision, as the
50+
event timestamp with sec resolution is not deemed useful. */
51+
struct timeval tv;
52+
gettimeofday(&tv, NULL);
53+
54+
return (double) tv.tv_sec + (double) (tv.tv_usec / 1000000.0);
55+
}
56+
57+
4758
static json_object *md_zeromq_create_json_string(json_object *obj,
4859
const char *key, const char *value)
4960
{
@@ -53,7 +64,7 @@ static json_object *md_zeromq_create_json_string(json_object *obj,
5364

5465
if (!obj_add)
5566
return NULL;
56-
67+
5768
json_object_object_add(obj, key, obj_add);
5869
return obj;
5970
}
@@ -65,7 +76,7 @@ static json_object *md_zeromq_create_json_int(json_object *obj, const char *key,
6576

6677
if (!obj_add)
6778
return NULL;
68-
79+
6980
json_object_object_add(obj, key, obj_add);
7081
return obj;
7182
}
@@ -77,7 +88,7 @@ static json_object *md_zeromq_create_json_int64(json_object *obj,
7788

7889
if (!obj_add)
7990
return NULL;
80-
91+
8192
json_object_object_add(obj, key, obj_add);
8293
return obj;
8394
}
@@ -97,10 +108,20 @@ static json_object *md_zeromq_create_json_double(json_object *obj,
97108
static uint8_t md_zeromq_add_default_fields(const struct md_writer_zeromq *mwz,
98109
struct json_object* obj, int seq, int64_t tstamp, const char* dataid) {
99110
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
100-
seq) ||
111+
seq)) {
112+
return 0;
113+
}
114+
if ((mwz->metadata_project == MD_PROJECT_NNE) &&
101115
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
102-
tstamp) ||
103-
(mwz->keys[MD_ZMQ_KEY_DATAVERSION] &&
116+
tstamp)) {
117+
return 0;
118+
} else
119+
if ((mwz->metadata_project == MD_PROJECT_MNR) &&
120+
!md_zeromq_create_json_double(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
121+
override_tstamp())) {
122+
return 0;
123+
}
124+
if ((mwz->keys[MD_ZMQ_KEY_DATAVERSION] &&
104125
!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_DATAVERSION],
105126
MD_ZMQ_DATA_VERSION)) ||
106127
(mwz->keys[MD_ZMQ_KEY_DATAID] &&
@@ -120,6 +141,7 @@ static json_object* md_zeromq_create_json_gps(struct md_writer_zeromq *mwz,
120141
if (!(obj = json_object_new_object()))
121142
return NULL;
122143

144+
123145
if (!md_zeromq_add_default_fields(mwz, obj, mge->sequence,
124146
mge->tstamp_tv.tv_sec, mwz->topics[MD_ZMQ_TOPIC_GPS])) {
125147
json_object_put(obj);
@@ -157,7 +179,17 @@ static void md_zeromq_handle_gps(struct md_writer_zeromq *mwz,
157179
return;
158180
}
159181

160-
retval = snprintf(topic, sizeof(topic), "%s %s", mwz->topics[MD_ZMQ_TOPIC_GPS],
182+
char* suffix="";
183+
if (mge->nmea_raw) {
184+
if (strncmp(mge->nmea_raw, "$GPGGA", 6)==0) {
185+
suffix = ".GPGGA";
186+
} else if (strncmp(mge->nmea_raw, "$GPRMC", 6)==0) {
187+
suffix = ".GPRMC";
188+
}
189+
}
190+
191+
retval = snprintf(topic, sizeof(topic), "%s%s %s", mwz->topics[MD_ZMQ_TOPIC_GPS],
192+
suffix,
161193
json_object_to_json_string_ext(gps_obj, JSON_C_TO_STRING_PLAIN));
162194

163195
if (retval < sizeof(topic)) {
@@ -179,8 +211,7 @@ static void md_zeromq_handle_munin(struct md_writer_zeromq *mwz,
179211
mwz->topics[MD_ZMQ_TOPIC_SENSOR], key);
180212
if (retval >= sizeof(dataid)) continue;
181213

182-
md_zeromq_add_default_fields(mwz, val, mge->sequence, mge->tstamp,
183-
dataid);
214+
md_zeromq_add_default_fields(mwz, val, mge->sequence, mge->tstamp, dataid);
184215

185216
retval = snprintf(topic, sizeof(topic), "%s.%s %s",
186217
mwz->topics[MD_ZMQ_TOPIC_SENSOR],
@@ -199,14 +230,14 @@ static void md_zeromq_handle_sysevent(struct md_writer_zeromq *mwz,
199230
int retval;
200231

201232
md_zeromq_add_default_fields(mwz, mge->json_blob, mge->sequence,
202-
mge->tstamp, mwz->topics[MD_ZMQ_TOPIC_SYSEVENT]);
233+
mge->tstamp, mwz->topics[MD_ZMQ_TOPIC_SYSEVENT]);
203234

204235
retval = snprintf(topic, sizeof(topic), "%s %s",
205236
mwz->topics[MD_ZMQ_TOPIC_SYSEVENT],
206237
json_object_to_json_string_ext(mge->json_blob,
207238
JSON_C_TO_STRING_PLAIN));
208239
if (retval < sizeof(topic)) {
209-
zmq_send(mwz->zmq_publisher , topic, strlen(topic), 0);
240+
zmq_send(mwz->zmq_publisher, topic, strlen(topic), 0);
210241
}
211242
}
212243

@@ -264,7 +295,7 @@ static void md_zeromq_handle_conn(struct md_writer_zeromq *mwz,
264295
} else {
265296
mode = mce->connection_mode;
266297
}
267-
298+
268299
json_obj = md_zeromq_create_json_modem_default(mwz, mce);
269300

270301
if (!(obj_add = json_object_new_int(mode))) {
@@ -300,6 +331,36 @@ static void md_zeromq_handle_conn(struct md_writer_zeromq *mwz,
300331
json_object_put(json_obj);
301332
}
302333

334+
335+
char imei_mapping [10][30];
336+
int maplen=0;
337+
static int map_imei(const char* imei, const struct md_writer_zeromq *mwz) {
338+
for (int i=0;i<maplen;i++) {
339+
if (strcmp(imei_mapping[i], imei)==0) {
340+
return i;
341+
}
342+
}
343+
FILE *fp = fopen("/tmp/interfaces", "r");
344+
if (fp==NULL) return -1;
345+
char* line = NULL;
346+
int nr=0;
347+
int match=-1;
348+
size_t len = 0;
349+
ssize_t read;
350+
while ((read = getline(&line, &len, fp)) != -1) {
351+
if(len>29) len=29;
352+
strncpy(imei_mapping[nr], line, len);
353+
imei_mapping[nr][strlen(imei_mapping[nr])-1]='\0';
354+
355+
if (strcmp(imei_mapping[nr], imei)==0) match=nr;
356+
if (++nr==10) break;
357+
}
358+
maplen=nr;
359+
fclose(fp);
360+
if (line) free(line);
361+
return match;
362+
}
363+
303364
static json_object *md_zeromq_create_iface_json(const struct md_writer_zeromq *mwz,
304365
struct md_iface_event *mie)
305366
{
@@ -314,11 +375,22 @@ static json_object *md_zeromq_create_iface_json(const struct md_writer_zeromq *m
314375
return NULL;
315376
}
316377

317-
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
318-
mie->sequence) ||
319-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
320-
mie->tstamp) ||
321-
!md_zeromq_create_json_string(obj, mwz->keys[MD_ZMQ_KEY_ICCID],
378+
if (mwz->metadata_project == MD_PROJECT_MNR) {
379+
if (mie->ifname && mie->imei) {
380+
int iifindex=map_imei(mie->imei, mwz);
381+
if (iifindex > -1) {
382+
char iifname[4]="opX";
383+
iifname[2]=iifindex + '0';
384+
if (!md_zeromq_create_json_string(obj,
385+
mwz->keys[MD_ZMQ_KEY_MONROE_IIF_NAME], iifname)) {
386+
json_object_put(obj);
387+
return NULL;
388+
}
389+
}
390+
}
391+
}
392+
393+
if (!md_zeromq_create_json_string(obj, mwz->keys[MD_ZMQ_KEY_ICCID],
322394
mie->iccid) ||
323395
!md_zeromq_create_json_string(obj, mwz->keys[MD_ZMQ_KEY_IMSI],
324396
mie->imsi) ||
@@ -472,7 +544,7 @@ static void md_zeromq_handle_iface(struct md_writer_zeromq *mwz,
472544
return;
473545
}
474546

475-
retval = zmq_send(mwz->zmq_publisher, topic, strlen(topic), 0);
547+
zmq_send(mwz->zmq_publisher, topic, strlen(topic), 0);
476548
json_object_put(json_obj);
477549
}
478550

@@ -485,6 +557,12 @@ static json_object *md_zeromq_handle_radio_cell_loc_gerant(
485557
if (!(obj = json_object_new_object()))
486558
return NULL;
487559

560+
if (!md_zeromq_add_default_fields(mwz, obj, event->sequence,
561+
event->tstamp, mwz->topics[MD_ZMQ_TOPIC_RADIO_CELL_LOCATION_GERAN])) {
562+
json_object_put(obj);
563+
return NULL;
564+
}
565+
488566
if (event->iccid &&
489567
!md_zeromq_create_json_string(obj, mwz->keys[MD_ZMQ_KEY_ICCID],
490568
event->iccid)) {
@@ -506,11 +584,7 @@ static json_object *md_zeromq_handle_radio_cell_loc_gerant(
506584
return NULL;
507585
}
508586

509-
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
510-
event->sequence) ||
511-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
512-
event->tstamp) ||
513-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_RADIO_CELL_ID],
587+
if (!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_RADIO_CELL_ID],
514588
event->cell_id) ||
515589
!md_zeromq_create_json_string(obj, mwz->keys[MD_ZMQ_KEY_RADIO_PLMN],
516590
event->plmn) ||
@@ -576,11 +650,13 @@ static json_object *md_zeromq_handle_radio_cell_resel_event(
576650
return NULL;
577651
}
578652

579-
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
580-
event->sequence) ||
581-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
582-
event->tstamp) ||
583-
!md_zeromq_create_json_int(obj,
653+
if (!md_zeromq_add_default_fields(mwz, obj, event->sequence,
654+
event->tstamp, mwz->topics[MD_ZMQ_TOPIC_RADIO_GRR_CELL_RESEL])) {
655+
json_object_put(obj);
656+
return NULL;
657+
}
658+
659+
if (!md_zeromq_create_json_int(obj,
584660
mwz->keys[MD_ZMQ_KEY_RADIO_SERVING_BCCH_ARFCN],
585661
event->serving_bcch_arfcn) ||
586662
!md_zeromq_create_json_int(obj,
@@ -608,8 +684,8 @@ static json_object *md_zeromq_handle_radio_cell_resel_event(
608684
mwz->keys[MD_ZMQ_KEY_RADIO_SERVING_FIVE_SECOND_TIMER],
609685
event->serving_five_second_timer) ||
610686
!md_zeromq_create_json_int(obj,
611-
mwz->keys[MD_ZMQ_KEY_RADIO_CELL_RESELET_STATUS],
612-
event->cell_reselet_status) ||
687+
mwz->keys[MD_ZMQ_KEY_RADIO_CELL_RESELECT_STATUS],
688+
event->cell_reselect_status) ||
613689
!md_zeromq_create_json_int(obj,
614690
mwz->keys[MD_ZMQ_KEY_RADIO_RECENT_CELL_SELECTION],
615691
event->recent_cell_selection)) {
@@ -662,11 +738,13 @@ static json_object *md_zeromq_handle_radio_cipher_mode_event(
662738
return NULL;
663739
}
664740

665-
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
666-
event->sequence) ||
667-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
668-
event->tstamp) ||
669-
!md_zeromq_create_json_int(obj,
741+
if (!md_zeromq_add_default_fields(mwz, obj, event->sequence,
742+
event->tstamp, mwz->topics[MD_ZMQ_TOPIC_RADIO_GSM_RR_CIPHER_MODE])) {
743+
json_object_put(obj);
744+
return NULL;
745+
}
746+
747+
if (!md_zeromq_create_json_int(obj,
670748
mwz->keys[MD_ZMQ_KEY_RADIO_CIPHERING_STATE],
671749
event->ciphering_state) ||
672750
!md_zeromq_create_json_int(obj,
@@ -707,13 +785,15 @@ static json_object *md_zeromq_handle_cell_reset_param_event(
707785
event->imei)) {
708786
json_object_put(obj);
709787
return NULL;
788+
}
789+
790+
if (!md_zeromq_add_default_fields(mwz, obj, event->sequence,
791+
event->tstamp, mwz->topics[MD_ZMQ_TOPIC_RADIO_GSM_RR_CELL_SEL_RESEL_PARAM])) {
792+
json_object_put(obj);
793+
return NULL;
710794
}
711795

712-
if (!md_zeromq_create_json_int(obj, mwz->keys[MD_ZMQ_KEY_SEQ],
713-
event->sequence) ||
714-
!md_zeromq_create_json_int64(obj, mwz->keys[MD_ZMQ_KEY_TSTAMP],
715-
event->tstamp) ||
716-
!md_zeromq_create_json_int(obj,
796+
if (!md_zeromq_create_json_int(obj,
717797
mwz->keys[MD_ZMQ_KEY_RADIO_CELL_RESELECT_HYSTERESIS],
718798
event->cell_reselect_hysteresis) ||
719799
!md_zeromq_create_json_int(obj,
@@ -786,13 +866,13 @@ static json_object *md_zeromq_handle_rr_channel_conf_event(
786866
return NULL;
787867
}
788868

869+
if (!md_zeromq_add_default_fields(mwz, obj, event->sequence,
870+
event->tstamp, mwz->topics[MD_ZMQ_TOPIC_RADIO_GSM_RR_CHANNEL_CONF])) {
871+
json_object_put(obj);
872+
return NULL;
873+
}
874+
789875
if (!md_zeromq_create_json_int(obj,
790-
mwz->keys[MD_ZMQ_KEY_SEQ],
791-
event->sequence) ||
792-
!md_zeromq_create_json_int64(obj,
793-
mwz->keys[MD_ZMQ_KEY_TSTAMP],
794-
event->tstamp) ||
795-
!md_zeromq_create_json_int(obj,
796876
mwz->keys[MD_ZMQ_KEY_RADIO_NUM_DED_CHANS],
797877
event->num_ded_chans) ||
798878
!md_zeromq_create_json_int(obj,
@@ -983,7 +1063,6 @@ static uint8_t md_zeromq_config(struct md_writer_zeromq *mwz,
9831063
if ((mwz->zmq_publisher = zmq_socket(mwz->zmq_context, ZMQ_PUB)) == NULL)
9841064
return RETVAL_FAILURE;
9851065

986-
9871066
if ((retval = zmq_bind(mwz->zmq_publisher, mwz->zmq_addr)) != 0) {
9881067
META_PRINT_SYSLOG(mwz->parent, LOG_ERR, "zmq_bind failed (%d): %s, "
9891068
"stating timer\n", errno, zmq_strerror(errno));

metadata_writer_zeromq.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ enum md_zmq_keys {
118118
MD_ZMQ_KEY_RADIO_SERVING_C31,
119119
MD_ZMQ_KEY_RADIO_SERVING_C32,
120120
MD_ZMQ_KEY_RADIO_SERVING_FIVE_SECOND_TIMER,
121-
MD_ZMQ_KEY_RADIO_CELL_RESELET_STATUS ,
121+
MD_ZMQ_KEY_RADIO_CELL_RESELECT_STATUS ,
122122
MD_ZMQ_KEY_RADIO_RECENT_CELL_SELECTION,
123123
MD_ZMQ_KEY_RADIO_GRR_CELL_NEIGHBORS,
124124

@@ -149,6 +149,8 @@ enum md_zmq_keys {
149149
MD_ZMQ_KEY_RADIO_BEFORE_CHANNEL_CONFIG,
150150
MD_ZMQ_KEY_RADIO_CHANNEL_MODE_1,
151151
MD_ZMQ_KEY_RADIO_CHANNEL_MODE_2,
152+
153+
MD_ZMQ_KEY_MONROE_IIF_NAME,
152154
__MD_ZMQ_KEYS_MAX
153155
};
154156
#define MD_ZMQ_KEYS_MAX (__MD_ZMQ_KEYS_MAX - 1)

0 commit comments

Comments
 (0)