Skip to content

Commit 8d017d8

Browse files
authored
Merge pull request #31 from lukbaj/ft-more-metadata
Export WCDMA RRC metadata
2 parents 2604dcf + f1e85c4 commit 8d017d8

File tree

5 files changed

+130
-3
lines changed

5 files changed

+130
-3
lines changed

metadata_exporter.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ enum radio_event {
9393
RADIO_EVENT_GSM_RR_CHANNEL_CONF,
9494
RADIO_EVENT_CELL_LOCATION_GERAN,
9595
RADIO_EVENT_GSM_RR_CELL_SEL_RESEL_PARAM,
96-
RADIO_EVENT_GRR_CELL_RESEL
96+
RADIO_EVENT_GRR_CELL_RESEL,
97+
RADIO_EVENT_WCDMA_RRC_STATE,
98+
RADIO_EVENT_WCDMA_CELL_ID
9799
};
98100

99101
#define EVENT_STR_LEN 255
@@ -301,6 +303,21 @@ struct md_radio_gsm_rr_channel_conf_event {
301303
uint8_t channel_mode_2;
302304
};
303305

306+
struct md_radio_wcdma_rrc_state_event {
307+
MD_RADIO_EVENT;
308+
uint8_t rrc_state;
309+
};
310+
311+
struct md_radio_wcdma_cell_id_event {
312+
MD_RADIO_EVENT;
313+
uint32_t ul_uarfcn;
314+
uint32_t dl_uarfcn;
315+
uint32_t cell_id;
316+
uint16_t ura_id;
317+
uint8_t cell_access_rest;
318+
uint8_t call_accs;
319+
};
320+
304321
#define md_sysevent md_munin_event
305322

306323
struct md_exporter {

metadata_input_netlink.c

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,78 @@ static void md_input_netlink_radio_gsm_rr_channel_conf(struct md_input_netlink *
453453
free(event);
454454
}
455455

456+
static void md_input_netlink_radio_wcdma_rrc_state(struct md_input_netlink *min,
457+
struct json_object *obj)
458+
{
459+
struct md_radio_wcdma_rrc_state_event *event = calloc(sizeof(struct md_radio_wcdma_rrc_state_event), 1);
460+
461+
if (!event)
462+
return;
463+
464+
json_object_object_foreach(obj, key, val) {
465+
if (!strcmp(key, "md_seq"))
466+
event->sequence = (uint16_t) json_object_get_int(val);
467+
else if (!strcmp(key, "timestamp"))
468+
event->tstamp = json_object_get_int64(val);
469+
else if (!strcmp(key, "event_param"))
470+
event->event_param = (uint8_t) json_object_get_int(val);
471+
else if (!strcmp(key, "event_type"))
472+
event->md_type = (uint8_t) json_object_get_int(val);
473+
else if (!strcmp(key, "iccid"))
474+
event->iccid = json_object_get_string(val);
475+
else if (!strcmp(key, "imsi"))
476+
event->imsi = json_object_get_string(val);
477+
else if (!strcmp(key, "imei"))
478+
event->imei = json_object_get_string(val);
479+
else if (!strcmp(key, "rrc_state"))
480+
event->rrc_state = (uint8_t) json_object_get_int(val);
481+
}
482+
483+
mde_publish_event_obj(min->parent, (struct md_event*) event);
484+
free(event);
485+
}
486+
487+
static void md_input_netlink_radio_wcdma_cell_id(struct md_input_netlink *min,
488+
struct json_object *obj)
489+
{
490+
struct md_radio_wcdma_cell_id_event *event = calloc(sizeof(struct md_radio_wcdma_cell_id_event), 1);
491+
492+
if (!event)
493+
return;
494+
495+
json_object_object_foreach(obj, key, val) {
496+
if (!strcmp(key, "md_seq"))
497+
event->sequence = (uint16_t) json_object_get_int(val);
498+
else if (!strcmp(key, "timestamp"))
499+
event->tstamp = json_object_get_int64(val);
500+
else if (!strcmp(key, "event_param"))
501+
event->event_param = (uint8_t) json_object_get_int(val);
502+
else if (!strcmp(key, "event_type"))
503+
event->md_type = (uint8_t) json_object_get_int(val);
504+
else if (!strcmp(key, "iccid"))
505+
event->iccid = json_object_get_string(val);
506+
else if (!strcmp(key, "imsi"))
507+
event->imsi = json_object_get_string(val);
508+
else if (!strcmp(key, "imei"))
509+
event->imei = json_object_get_string(val);
510+
else if (!strcmp(key, "ul_uarfcn"))
511+
event->ul_uarfcn = (uint32_t) json_object_get_int(val);
512+
else if (!strcmp(key, "dl_uarfcn"))
513+
event->dl_uarfcn = (uint32_t) json_object_get_int(val);
514+
else if (!strcmp(key, "cell_id"))
515+
event->cell_id = (uint32_t) json_object_get_int(val);
516+
else if (!strcmp(key, "ura_id"))
517+
event->ura_id = (uint16_t) json_object_get_int(val);
518+
else if (!strcmp(key, "cell_access_rest"))
519+
event->cell_access_rest = (uint8_t) json_object_get_int(val);
520+
else if (!strcmp(key, "call_accs"))
521+
event->dl_uarfcn = (uint8_t) json_object_get_int(val);
522+
}
523+
524+
mde_publish_event_obj(min->parent, (struct md_event*) event);
525+
free(event);
526+
}
527+
456528
static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
457529
struct json_object *obj)
458530
{
@@ -464,6 +536,8 @@ static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
464536
return;
465537
}
466538

539+
memset(min->mre, 0, sizeof(struct md_radio_event));
540+
min->mre->md_type = META_TYPE_RADIO;
467541
event_param = (uint8_t) json_object_get_int(event_param_json);
468542

469543
switch (event_param) {
@@ -487,6 +561,15 @@ static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
487561
META_PRINT_SYSLOG(min->parent, LOG_ERR, "GRR_CELL_RESEL\n");
488562
md_input_netlink_radio_grr_cell_resel(min, obj);
489563
break;
564+
case RADIO_EVENT_WCDMA_RRC_STATE:
565+
META_PRINT_SYSLOG(min->parent, LOG_ERR, "WCDMA_RRC_STATE\n");
566+
md_input_netlink_radio_wcdma_rrc_state(min, obj);
567+
break;
568+
case RADIO_EVENT_WCDMA_CELL_ID:
569+
META_PRINT_SYSLOG(min->parent, LOG_ERR, "WCDMA_CELL_ID\n");
570+
md_input_netlink_radio_wcdma_cell_id(min, obj);
571+
break;
572+
490573
default:
491574
break;
492575
}
@@ -543,7 +626,7 @@ static void md_input_netlink_handle_gps_event(struct md_input_netlink *min,
543626

544627
if (sentence_id <= 0)
545628
return;
546-
629+
547630
gps_event.minmea_id = sentence_id;
548631

549632
//We can ignore NMEA checksum

metadata_writer_nne.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,21 @@ struct nne_radio_descr NNE_RADIO_GRR_CELL_RESEL_DESCR[] = {
845845
{ NULL, NNE_TYPE_NULL, 0 }
846846
};
847847

848+
struct nne_radio_descr NNE_RADIO_WCDMA_RRC_STATE_DESCR[] = {
849+
{ "wcdma_rrc_state.rrc_state", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_rrc_state_event, rrc_state) },
850+
{ NULL, NNE_TYPE_NULL, 0 }
851+
};
852+
853+
struct nne_radio_descr NNE_RADIO_WCDMA_CELL_ID_DESCR[] = {
854+
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, ul_uarfcn) },
855+
{ "wcdma_cell_id.dl_uarfcn", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, dl_uarfcn) },
856+
{ "wcdma_cell_id.cell_id", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, cell_id) },
857+
{ "wcdma_cell_id.ura_id", NNE_TYPE_UINT16, offsetof(struct md_radio_wcdma_cell_id_event, ura_id) },
858+
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_cell_id_event, cell_access_rest) },
859+
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_cell_id_event, call_accs) },
860+
{ NULL, NNE_TYPE_NULL, 0 }
861+
};
862+
848863
static void md_nne_send_radio_message(struct md_writer_nne *mwn,
849864
struct md_radio_event *mre,
850865
struct nne_radio_descr *descr)
@@ -914,6 +929,14 @@ static void md_nne_handle_radio(struct md_writer_nne *mwn,
914929
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_GRR_CELL_RESEL\n");
915930
md_nne_send_radio_message(mwn, mre, NNE_RADIO_GRR_CELL_RESEL_DESCR);
916931
break;
932+
case RADIO_EVENT_WCDMA_RRC_STATE:
933+
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_WCDMA_RRC_STATE\n");
934+
md_nne_send_radio_message(mwn, mre, NNE_RADIO_WCDMA_RRC_STATE_DESCR);
935+
break;
936+
case RADIO_EVENT_WCDMA_CELL_ID:
937+
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_WCDMA_CELL_ID\n");
938+
md_nne_send_radio_message(mwn, mre, NNE_RADIO_WCDMA_CELL_ID_DESCR);
939+
break;
917940
default:
918941
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: Unsupported radio event %u\n", mre->event_param);
919942
break;

metadata_writer_zeromq.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ enum md_zmq_topics {
5353
MD_ZMQ_TOPIC_RADIO_GRR_CELL_RESEL,
5454
MD_ZMQ_TOPIC_RADIO_GSM_RR_CIPHER_MODE,
5555
MD_ZMQ_TOPIC_RADIO_GSM_RR_CHANNEL_CONF,
56+
MD_ZMQ_TOPIC_RADIO_WCDMA_RRC_STATE,
57+
MD_ZMQ_TOPIC_RADIO_WCDMA_CELL_ID,
5658
__MD_ZMQ_TOPICS_MAX
5759
};
5860
#define MD_ZMQ_TOPICS_MAX (__MD_ZMQ_TOPICS_MAX - 1)

metadata_writer_zeromq_nne.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ const char *nne_topics[MD_ZMQ_TOPICS_MAX + 1] = {
1919
"RADIO.GSM_RR_CELL_SEL_RESEL_PARAM",
2020
"RADIO.GRR_CELL_RESEL",
2121
"RADIO.GSM_RR_CIPHER_MODE",
22-
"RADIO.GSM_RR_CHANNEL_CONF"
22+
"RADIO.GSM_RR_CHANNEL_CONF",
23+
"RADIO.WCDMA_RRC_STATE",
24+
"RADIO.WCDMA_CELL_ID"
2325
};
2426

2527
const char *nne_keys[MD_ZMQ_KEYS_MAX + 1] = {

0 commit comments

Comments
 (0)