Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion metadata_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ enum radio_event {
RADIO_EVENT_GSM_RR_CHANNEL_CONF,
RADIO_EVENT_CELL_LOCATION_GERAN,
RADIO_EVENT_GSM_RR_CELL_SEL_RESEL_PARAM,
RADIO_EVENT_GRR_CELL_RESEL
RADIO_EVENT_GRR_CELL_RESEL,
RADIO_EVENT_WCDMA_RRC_STATE,
RADIO_EVENT_WCDMA_CELL_ID
};

#define EVENT_STR_LEN 255
Expand Down Expand Up @@ -301,6 +303,21 @@ struct md_radio_gsm_rr_channel_conf_event {
uint8_t channel_mode_2;
};

struct md_radio_wcdma_rrc_state_event {
MD_RADIO_EVENT;
uint8_t rrc_state;
};

struct md_radio_wcdma_cell_id_event {
MD_RADIO_EVENT;
uint32_t ul_uarfcn;
uint32_t dl_uarfcn;
uint32_t cell_id;
uint16_t ura_id;
uint8_t cell_access_rest;
uint8_t call_accs;
};

#define md_sysevent md_munin_event

struct md_exporter {
Expand Down
85 changes: 84 additions & 1 deletion metadata_input_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,78 @@ static void md_input_netlink_radio_gsm_rr_channel_conf(struct md_input_netlink *
free(event);
}

static void md_input_netlink_radio_wcdma_rrc_state(struct md_input_netlink *min,
struct json_object *obj)
{
struct md_radio_wcdma_rrc_state_event *event = calloc(sizeof(struct md_radio_wcdma_rrc_state_event), 1);

if (!event)
return;

json_object_object_foreach(obj, key, val) {
if (!strcmp(key, "md_seq"))
event->sequence = (uint16_t) json_object_get_int(val);
else if (!strcmp(key, "timestamp"))
event->tstamp = json_object_get_int64(val);
else if (!strcmp(key, "event_param"))
event->event_param = (uint8_t) json_object_get_int(val);
else if (!strcmp(key, "event_type"))
event->md_type = (uint8_t) json_object_get_int(val);
else if (!strcmp(key, "iccid"))
event->iccid = json_object_get_string(val);
else if (!strcmp(key, "imsi"))
event->imsi = json_object_get_string(val);
else if (!strcmp(key, "imei"))
event->imei = json_object_get_string(val);
else if (!strcmp(key, "rrc_state"))
event->rrc_state = (uint8_t) json_object_get_int(val);
}

mde_publish_event_obj(min->parent, (struct md_event*) event);
free(event);
}

static void md_input_netlink_radio_wcdma_cell_id(struct md_input_netlink *min,
struct json_object *obj)
{
struct md_radio_wcdma_cell_id_event *event = calloc(sizeof(struct md_radio_wcdma_cell_id_event), 1);

if (!event)
return;

json_object_object_foreach(obj, key, val) {
if (!strcmp(key, "md_seq"))
event->sequence = (uint16_t) json_object_get_int(val);
else if (!strcmp(key, "timestamp"))
event->tstamp = json_object_get_int64(val);
else if (!strcmp(key, "event_param"))
event->event_param = (uint8_t) json_object_get_int(val);
else if (!strcmp(key, "event_type"))
event->md_type = (uint8_t) json_object_get_int(val);
else if (!strcmp(key, "iccid"))
event->iccid = json_object_get_string(val);
else if (!strcmp(key, "imsi"))
event->imsi = json_object_get_string(val);
else if (!strcmp(key, "imei"))
event->imei = json_object_get_string(val);
else if (!strcmp(key, "ul_uarfcn"))
event->ul_uarfcn = (uint32_t) json_object_get_int(val);
else if (!strcmp(key, "dl_uarfcn"))
event->dl_uarfcn = (uint32_t) json_object_get_int(val);
else if (!strcmp(key, "cell_id"))
event->cell_id = (uint32_t) json_object_get_int(val);
else if (!strcmp(key, "ura_id"))
event->ura_id = (uint16_t) json_object_get_int(val);
else if (!strcmp(key, "cell_access_rest"))
event->cell_access_rest = (uint8_t) json_object_get_int(val);
else if (!strcmp(key, "call_accs"))
event->dl_uarfcn = (uint8_t) json_object_get_int(val);
}

mde_publish_event_obj(min->parent, (struct md_event*) event);
free(event);
}

static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
struct json_object *obj)
{
Expand All @@ -464,6 +536,8 @@ static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
return;
}

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

switch (event_param) {
Expand All @@ -487,6 +561,15 @@ static void md_input_netlink_handle_radio_event(struct md_input_netlink *min,
META_PRINT_SYSLOG(min->parent, LOG_ERR, "GRR_CELL_RESEL\n");
md_input_netlink_radio_grr_cell_resel(min, obj);
break;
case RADIO_EVENT_WCDMA_RRC_STATE:
META_PRINT_SYSLOG(min->parent, LOG_ERR, "WCDMA_RRC_STATE\n");
md_input_netlink_radio_wcdma_rrc_state(min, obj);
break;
case RADIO_EVENT_WCDMA_CELL_ID:
META_PRINT_SYSLOG(min->parent, LOG_ERR, "WCDMA_CELL_ID\n");
md_input_netlink_radio_wcdma_cell_id(min, obj);
break;

default:
break;
}
Expand Down Expand Up @@ -543,7 +626,7 @@ static void md_input_netlink_handle_gps_event(struct md_input_netlink *min,

if (sentence_id <= 0)
return;

gps_event.minmea_id = sentence_id;

//We can ignore NMEA checksum
Expand Down
23 changes: 23 additions & 0 deletions metadata_writer_nne.c
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,21 @@ struct nne_radio_descr NNE_RADIO_GRR_CELL_RESEL_DESCR[] = {
{ NULL, NNE_TYPE_NULL, 0 }
};

struct nne_radio_descr NNE_RADIO_WCDMA_RRC_STATE_DESCR[] = {
{ "wcdma_rrc_state.rrc_state", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_rrc_state_event, rrc_state) },
{ NULL, NNE_TYPE_NULL, 0 }
};

struct nne_radio_descr NNE_RADIO_WCDMA_CELL_ID_DESCR[] = {
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, ul_uarfcn) },
{ "wcdma_cell_id.dl_uarfcn", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, dl_uarfcn) },
{ "wcdma_cell_id.cell_id", NNE_TYPE_UINT32, offsetof(struct md_radio_wcdma_cell_id_event, cell_id) },
{ "wcdma_cell_id.ura_id", NNE_TYPE_UINT16, offsetof(struct md_radio_wcdma_cell_id_event, ura_id) },
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_cell_id_event, cell_access_rest) },
{ "wcdma_cell_id.ul_uarfcn", NNE_TYPE_UINT8, offsetof(struct md_radio_wcdma_cell_id_event, call_accs) },
{ NULL, NNE_TYPE_NULL, 0 }
};

static void md_nne_send_radio_message(struct md_writer_nne *mwn,
struct md_radio_event *mre,
struct nne_radio_descr *descr)
Expand Down Expand Up @@ -914,6 +929,14 @@ static void md_nne_handle_radio(struct md_writer_nne *mwn,
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_GRR_CELL_RESEL\n");
md_nne_send_radio_message(mwn, mre, NNE_RADIO_GRR_CELL_RESEL_DESCR);
break;
case RADIO_EVENT_WCDMA_RRC_STATE:
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_WCDMA_RRC_STATE\n");
md_nne_send_radio_message(mwn, mre, NNE_RADIO_WCDMA_RRC_STATE_DESCR);
break;
case RADIO_EVENT_WCDMA_CELL_ID:
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: RADIO_EVENT_WCDMA_CELL_ID\n");
md_nne_send_radio_message(mwn, mre, NNE_RADIO_WCDMA_CELL_ID_DESCR);
break;
default:
META_PRINT_SYSLOG(mwn->parent, LOG_ERR, "NNE writer: Unsupported radio event %u\n", mre->event_param);
break;
Expand Down
2 changes: 2 additions & 0 deletions metadata_writer_zeromq.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ enum md_zmq_topics {
MD_ZMQ_TOPIC_RADIO_GRR_CELL_RESEL,
MD_ZMQ_TOPIC_RADIO_GSM_RR_CIPHER_MODE,
MD_ZMQ_TOPIC_RADIO_GSM_RR_CHANNEL_CONF,
MD_ZMQ_TOPIC_RADIO_WCDMA_RRC_STATE,
MD_ZMQ_TOPIC_RADIO_WCDMA_CELL_ID,
__MD_ZMQ_TOPICS_MAX
};
#define MD_ZMQ_TOPICS_MAX (__MD_ZMQ_TOPICS_MAX - 1)
Expand Down
4 changes: 3 additions & 1 deletion metadata_writer_zeromq_nne.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ const char *nne_topics[MD_ZMQ_TOPICS_MAX + 1] = {
"RADIO.GSM_RR_CELL_SEL_RESEL_PARAM",
"RADIO.GRR_CELL_RESEL",
"RADIO.GSM_RR_CIPHER_MODE",
"RADIO.GSM_RR_CHANNEL_CONF"
"RADIO.GSM_RR_CHANNEL_CONF",
"RADIO.WCDMA_RRC_STATE",
"RADIO.WCDMA_CELL_ID"
};

const char *nne_keys[MD_ZMQ_KEYS_MAX + 1] = {
Expand Down