diff --git a/src/gatewayinfo.c b/src/gatewayinfo.c index 299763db5a3a289bafc559f1aa3fedc1b0783043..8fc6acadff87fabf2c27389e1caa31cc927603e7 100644 --- a/src/gatewayinfo.c +++ b/src/gatewayinfo.c @@ -13,36 +13,28 @@ static int get_manufacturer_oui(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "oui", value); - if (*value[0] == '\0') { - db_get_value_string("device", "deviceinfo", "ManufacturerOUI", value); - } - return 0; } static int get_product_class(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "class", value); - if (*value[0] == '\0') { - db_get_value_string("device", "deviceinfo", "ProductClass", value); - } - return 0; } static int get_serial_number(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "serial", value); - if (*value[0] == '\0') { - db_get_value_string("device", "deviceinfo", "SerialNumber", value); - } - return 0; } static int get_gateway_proto(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { dmuci_get_option_value_string_varstate("gwinfo", "gatewayinfo", "proto", value); + if (*value[0] == '\0') { + *value=dmstrdup("Unknown"); + } + return 0; } @@ -58,6 +50,105 @@ static int get_mac_address(char *refparam, struct dmctx *ctx, void *data, char * return 0; } +static event_args unknown_gw_args = { + .name = "gateway-info.gateway.unknown", + .param = (const char *[]) { + "MACAddress", + NULL + } +}; + +static int get_event_unknown_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = (char *)&unknown_gw_args; + return 0; +} + +static int event_unknown_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) +{ + switch (action) { + case EVENT_CHECK: + break; + case EVENT_RUN: + { + char *hwaddr = dmjson_get_value((json_object *)value, 1, "hwaddr"); + + fill_blob_param(&ctx->bb, "MACAddress", hwaddr, DMT_TYPE[DMT_STRING], 0); + break; + } + } + + return 0; +} + +static event_args usp_gw_args = { + .name = "gateway-info.gateway.usp", + .param = (const char *[]) { + "EndpointID", + NULL + } +}; + +static int get_event_usp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = (char *)&usp_gw_args; + return 0; +} + +static int event_usp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) +{ + switch (action) { + case EVENT_CHECK: + break; + case EVENT_RUN: + { + char *endpoint_id = dmjson_get_value((json_object *)value, 1, "endpoint"); + + fill_blob_param(&ctx->bb, "EndpointID", endpoint_id, DMT_TYPE[DMT_STRING], 0); + break; + } + } + + return 0; +} + +static event_args cwmp_gw_args = { + .name = "gateway-info.gateway.cwmp", + .param = (const char *[]) { + "ManufacturerOUI", + "ProductClass", + "SerialNumber", + NULL + } +}; + +static int get_event_cwmp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = (char *)&cwmp_gw_args; + return 0; +} + +static int event_cwmp_gw(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) +{ + switch (action) { + case EVENT_CHECK: + break; + case EVENT_RUN: + { + char *oui = dmjson_get_value((json_object *)value, 1, "oui"); + char *class = dmjson_get_value((json_object *)value, 1, "class"); + char *serial = dmjson_get_value((json_object *)value, 1, "serial"); + + fill_blob_param(&ctx->bb, "ManufacturerOUI", oui, DMT_TYPE[DMT_STRING], 0); + fill_blob_param(&ctx->bb, "ProductClass", class, DMT_TYPE[DMT_STRING], 0); + fill_blob_param(&ctx->bb, "SerialNumber", serial, DMT_TYPE[DMT_STRING], 0); + break; + } + } + + return 0; +} + /********************************************************************************************************************************** * OBJ & PARAM DEFINITION ***********************************************************************************************************************************/ @@ -70,6 +161,9 @@ DMLEAF tGatewayInfoParams[] = { {"ManagementProtocol", &DMREAD, DMT_STRING, get_gateway_proto, NULL, BBFDM_USP}, {"EndpointID", &DMREAD, DMT_STRING, get_endpoint_id, NULL, BBFDM_USP}, {"MACAddress", &DMREAD, DMT_STRING, get_mac_address, NULL, BBFDM_USP}, +{"UnknownGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_unknown_gw, event_unknown_gw, BBFDM_USP}, +{"USPGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_usp_gw, event_usp_gw, BBFDM_USP}, +{"CWMPGatewayDiscovered!", &DMREAD, DMT_EVENT, get_event_cwmp_gw, event_cwmp_gw, BBFDM_USP}, {0} };