这是uilib中一些使用了dal_ado_t结构体的函数
int uilibL2PortMibPktAndOctetDataGet(user_port up, STAT_L2PORT_UTILIZATION_S *portUtilData)
{
APPL_ENSURE_RET((NULL != portUtilData));
int ret = ERR_NO_ERROR;
user_port_list uplist = {};
dal_ado_t *adoi = NULL;
void *handler = NULL;
adoi = dalAdoiCreate(DMP_DEV_NAME_SWITCHMAC, DAL_MOD_PORT, DAL_CFG_TYPE_ENTRY);
APPL_ENSURE_DONE(ret, adoi, ERR_NO_MEMORY);
PFM_IF_FAIL_DONE_RET(ret, uplist_init(&uplist), ERR_NO_MEMORY);
UP_LIST_ADD(&uplist, up);
APPL_IF_ERR_DONE(ret, uilibL2PortMibDalGet(adoi, uplist));
if (NULL != (handler = DAL_ADOI_ENTRY(adoi, DAL_PORT_K_MIB)))
{
DAL_ADOI_ENTRY_LOOP(handler)
{
char *key = NULL;
user_port up_in_TPSTATE_ITER_KEY_NEW;
L2_NOTEQUAL_CONTINUE(0, NULL == (key = DAL_ADOI_ENTRY_KEY(handler)) || !DAL_ADOI_ENTRY_KEY_MATCH(handler, DAL_PORT_K_MIB_ALL));
DAL_PORT_KEY_MIB_PARSE_TO_UP(key, up_in_TPSTATE_ITER_KEY_NEW);
if(!UP_IS_VALID(up_in_TPSTATE_ITER_KEY_NEW))
{
continue;
}
if(UP_INDEX(up_in_TPSTATE_ITER_KEY_NEW) != UP_INDEX(up))
{
continue;
}
/* KEY inner field&value loop */
if (DAL_ADOI_ENTRY_KEY_EMPTY(handler))
{
DBG("Invalid operation: deleting Fixed entries!");
}
else
{
DAL_ADOI_ENTRY_FIELD_LOOP(handler, key)
{
if (DAL_ADOI_ENTRY_FIELD_MATCH(handler, DAL_PORT_K_MIB_F_RXPKTS))
{
L2_NOTEQUAL_DONE_RETVAL(PFM_ERR_C_OK, dalAdoiGetEntryUI64(adoi, DAL_PORT_K_MIB, &portUtilData->rxPkts), ret, ERR_PORT_EXEC_TPDAL);
}
else if (DAL_ADOI_ENTRY_FIELD_MATCH(handler, DAL_PORT_K_MIB_F_RXOCTETS))
{
L2_NOTEQUAL_DONE_RETVAL(PFM_ERR_C_OK, dalAdoiGetEntryUI64(adoi, DAL_PORT_K_MIB, &portUtilData->rxOctets), ret, ERR_PORT_EXEC_TPDAL);
}
else if (DAL_ADOI_ENTRY_FIELD_MATCH(handler, DAL_PORT_K_MIB_F_TXPKTS))
{
L2_NOTEQUAL_DONE_RETVAL(PFM_ERR_C_OK, dalAdoiGetEntryUI64(adoi, DAL_PORT_K_MIB, &portUtilData->txPkts), ret, ERR_PORT_EXEC_TPDAL);
}
else if (DAL_ADOI_ENTRY_FIELD_MATCH(handler, DAL_PORT_K_MIB_F_TXOCTETS))
{
L2_NOTEQUAL_DONE_RETVAL(PFM_ERR_C_OK, dalAdoiGetEntryUI64(adoi, DAL_PORT_K_MIB, &portUtilData->txOctets), ret, ERR_PORT_EXEC_TPDAL);
}
}
}
}
}
ret = ERR_NO_ERROR;
done:
if(!uplist_is_null(&uplist))
{
uplist_free(&uplist);
}
if(adoi)
{
dalAdoiDestroy(adoi);
}
return ret;
}
我要你修改的是下面这个函数获取数据的方式,尽量不要新增函数,使用uilib提供的接口完成
int swStatisticGetHandle(UI_CTX *ctx)
{
GR_PRINT_INFO("Enter swStatisticGetHandle");
int ret = ERR_NO_ERROR;
/* 返回响应数据 */
JSON_Value *rspVal = json_value_init_object();
JSON_Object *rspObj = json_value_get_object(rspVal);
JSON_Value *retVal = json_value_init_array();
JSON_Array *retArray = json_value_get_array(retVal);
char port_str[20];
char rx_ucPkts_str[20];
char rx_mcPkts_str[20];
char rx_bcPkts_str[20];
char rx_pausePkts_str[20];
char rx_allBytes_str[20];
char rx_littPkts_str[20];
char rx_normPkts_str[20];
char rx_bigPkts_str[20];
char tx_ucPkts_str[20];
char tx_mcPkts_str[20];
char tx_bcPkts_str[20];
char tx_pausePkts_str[20];
char tx_allBytes_str[20];
TPSTATE_GET_INFO stGetMibInfo = {};
stGetMibInfo.pGetObj = tpState_objCreate();
if (NULL == stGetMibInfo.pGetObj)
{
GR_PRINT_ERROR("no memory");
return ERR_NO_MEMORY;
}
ret = uilibL2PortMibGetAll(&stGetMibInfo);
TPSTATE_ITER_KEY_NEW(&stGetMibInfo.iterName)
{
user_port up = {};
int upIdx = 0;
char *pkey = TPSTATE_GET_KEY(&stGetMibInfo.iterName);
STAT_PORT_K_MIB_PARSE_TO_UP(pkey, up);
UP_TO_IDX(up, upIdx);
UINT64 pktNum = 0;
// GR_PRINT_INFO("pKey: %s, upIdx: %d, INNER_UP_PORT_MAX: %d", pkey, upIdx, INNER_UP_PORT_MAX);
if ((!UP_IS_PHY_PORT(up)) && (!UP_IS_USB_PORT(up)) && (upIdx < INNER_UP_PORT_MAX) && (upIdx > 0))
{
sprintf(port_str, "%d", upIdx);
TPSTATE_ITER_FV_NEW(&stGetMibInfo.iterName)
{
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXUNICASTPKTS))
{
sprintf(rx_ucPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXMULTICASTPKTS))
{
sprintf(rx_mcPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXBROADCASTPKTS))
{
sprintf(rx_bcPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXPAUSE))
{
sprintf(rx_pausePkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXOCTETS))
{
sprintf(rx_allBytes_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXUNDERSIZEPKTS))
{
sprintf(rx_littPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXGOODPKTS))
{
sprintf(rx_normPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXOVERSIZEPKTS))
{
sprintf(rx_bigPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_TXUNICASTPKTS))
{
sprintf(tx_ucPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_TXMULTICASTPKTS))
{
sprintf(tx_mcPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_TXBROADCASTPKTS))
{
sprintf(tx_bcPkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_RXPAUSE))
{
sprintf(tx_pausePkts_str, "%llu", pktNum);
}
if (PFM_ERR_C_OK == tpState_iterGetNumU64(&stGetMibInfo.iterName, &pktNum, pkey, STAT_PORT_K_MIB_F_TXOCTETS))
{
sprintf(tx_allBytes_str, "%llu", pktNum);
}
}
JSON_Value *portMibVal = json_value_init_object();
JSON_Object *portMibObj = json_value_get_object(portMibVal);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_PORT, port_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_UNICAST, rx_ucPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_MULTI, rx_mcPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_BROAD, rx_bcPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_PAUSE, rx_pausePkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_ALL, rx_allBytes_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_LITTE, rx_littPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_NORMAL, rx_normPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_RX_BIG, rx_bigPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_TX_UNICAST, tx_ucPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_TX_MULTI, tx_mcPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_TX_BROAD, tx_bcPkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_TX_PAUSE, tx_pausePkts_str);
json_object_set_string(portMibObj, RSP_SWITCH_MIB_TX_ALL, tx_allBytes_str);
json_array_append_value(retArray, portMibVal);
}
}
json_object_set_number(rspObj, SWITCH_RSP_ID, 1);
json_object_set_string(rspObj, SWITCH_RSP_ERRCODE, "0");
json_object_set_value(rspObj, SWITCH_RSP_RESULT, retVal);
ctx->rsp = rspVal;
GR_PRINT_INFO("FINISH RSP swStatisticGetHandle");
return ERR_NO_ERROR;
}
最新发布