diff --git a/src/topologyd.c b/src/topologyd.c index c188a1df5167c5e0fb45b344c5731214e0e30cad..52bab038de10c2a6b7937c13c7e744fa71d443d0 100644 --- a/src/topologyd.c +++ b/src/topologyd.c @@ -79,7 +79,7 @@ static void ieee1905_info_response_cb(struct ubus_request *req, } } -static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, uint16_t *msg_mid, uint8_t **tlv, uint32_t *b_len, char * ingress_if_name) +static int ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, uint16_t *msg_mid, uint8_t **tlv, uint32_t *b_len, char * ingress_if_name) { json_object *jroot = NULL; char *str; @@ -105,7 +105,7 @@ static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, ui strncpy(ingress_if_name, if_name, strlen(if_name)); tlv_str = _json_obj_get_string(jroot, "tlvs"); if (tlv_str == NULL) - return; + return 1; len = strlen(tlv_str); //dbg(" The TLV string is %s LENGTH Id %d", tlv_str, len); *b_len = (len/2); @@ -113,11 +113,13 @@ static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, ui *tlv = (uint8_t *) malloc((*b_len) * sizeof(uint8_t)); if (*tlv == NULL) { err("No Memory \n"); - return; + return 1; } strtob(tlv_str, len, *tlv); json_safe_put(jroot); } + + return 0; } int topologyd_get_ieee1905_macaddr(struct topologyd_private *p) @@ -165,6 +167,7 @@ void topologyd_event_handler(struct ubus_context *ctx, struct ubus_event_handler *ev, const char *type, struct blob_attr *msg) { + int ret = 0; struct cmdu_cstruct *cstruct = NULL; uint16_t msg_type = 0; uint16_t msg_mid = 0; @@ -179,7 +182,13 @@ void topologyd_event_handler(struct ubus_context *ctx, return; //Calling the function to get the args from json msg - ieee1905_msg_from_ubus(msg, &msg_type, &msg_mid, &tlv, &len, itfr_name); + ret = ieee1905_msg_from_ubus(msg, &msg_type, &msg_mid, &tlv, &len, itfr_name); + if (ret != 0) { + err("ieee1905_msg_from_ubus error \n"); + if (tlv != NULL) + free(tlv); + return; + } dbg("Inside topology event handler %hu %hu %s", msg_type, msg_mid, itfr_name); @@ -793,6 +802,7 @@ void topologyd_dump_node(struct blob_buf *bb, struct node *p, int is_self) strcat(behind_mac_str, ","); strcat(behind_mac_str, mac_str); } + blobmsg_add_string(bb, "behind_mac_id", behind_mac_str); blobmsg_close_table(bb, table); } blobmsg_close_array(bb, l2_neighbor); @@ -1020,7 +1030,7 @@ void topologyd_print_changelog(struct blob_buf *bb, struct topologyd_private *pr blobmsg_add_string(bb, "neighbor", nbr_macstr); blobmsg_add_string(bb, "is1905_neighbor", - log->is1905_nbr ? "true" : "false"); + log->is1905_nbr ? "IEEE1905" : "Non-IEEE1905"); blobmsg_add_string(bb, "event_type", log->type ? "delete" : "add"); @@ -1274,6 +1284,9 @@ int topologyd_start(void) priv->heartbeat.cb = topologyd_start_heartbeat; priv->topo.changelog = (struct topology_changelog*) malloc ((priv->config.maxlog)*sizeof(struct topology_changelog)); + if (priv->topo.changelog == NULL) + goto out_and_exit; + topology_log_max = priv->config.maxlog; dbg("Dynamic array size %d",priv->config.maxlog);