STATUS imi_slp_vlanGet(IN IMI_PRINT_ENV *printEnv,IN IMI_ARGS* inArgs, OUT IMI_ARGS* outArgs)
{
char* filter = NULL;
char* name = NULL;
char* tableName = NULL;
char* para = NULL;
int errorCode = OK;
int start_value = 0;
int end_value = 0;
UINT16 vid = 0;
int vlanId = 0;
int countAll = 0;
VLAN_STATUS vlanStatus = VLAN_UNUSED;
VLAN_DES vlanDes;
//int len = 0;
int index = 0;
int arraySize = 0;
JSON_OBJPTR filterObj = NULL;
JSON_OBJPTR pArrayEle = NULL;
JSON_OBJPTR paraObj = NULL;
JSON_OBJPTR retArray = NULL;
JSON_OBJPTR retEleObj = NULL;
JSON_OBJPTR retObj = NULL;
JSON_OBJPTR arrayObj = NULL;
JSON_OBJPTR countObj = NULL;
char szBuff[VLAN_TABLE_LEN] = {0};
char vidStr[MAX_VLAN_ID_LEN] = {0};
VLAN_ENTRY tmpVlanEntry;
char portString[SLP_MAX_PORT_STR_LEN] = {0};
user_port up = {};
user_port_list temUpList = {};
user_port_list upList;
//char *strValuePort = NULL;
//char *strValueTport = NULL;
//char *strValueUntPort = NULL;
const char* strVlanId = NULL;
const char* strName = NULL;
/*! 获取para参数 < */
tpImiArgGetString(inArgs, "filter", (char **)&filter);
tpImiArgGetString(inArgs, "name", (char **)&name);
tpImiArgGetString(inArgs, "table", (char **)&tableName);
tpImiArgGetString(inArgs, "para", (char **)¶);
SLP_VLAN8021Q_DEBUG("filter:%s name:%s table:%s para:%s\r\n",\
filter, name, tableName, para);
filterObj = jsonObjectFromString(filter);
if(NULL != filterObj)
{
//如果是数组
if (TRUE == jsonObjectIsArray(filterObj))
{
//获取数组长度
arraySize = jsonObjectArrayLength(filterObj);
if(1 != arraySize)
{
errorCode = ERR_BAD_PARAM;
goto out;
}
//获取每一组过滤参数的值
for (index = 0; index < arraySize; index++)
{
if (NULL == (pArrayEle = jsonObjectArrayGetIdx(filterObj, index)))
{
errorCode = ERR_BAD_PARAM;
goto out;
}
if( NULL != (strVlanId = jsonObjectGetString(pArrayEle, "vlan_id")))
{
if(TRUE == slp_str_is_number((char*)strVlanId)) //如果该vlan_id不为数字或空字符串,则返回错误
{
vlanId = atoi((char*)strVlanId);
SLP_VLAN8021Q_DEBUG("filter:get vlan_id success,vlan_id is %d", vlanId);
}
else if(0 == strcmp(strVlanId, ""))
{
;
}
else
{
errorCode = ERR_BAD_PARAM;
goto out;
}
}
if( NULL != (strName = jsonObjectGetString(pArrayEle, "name")))
{
SLP_VLAN8021Q_DEBUG("filter:get name success,name is %s", name);
}
}
}
}
paraObj = jsonObjectFromString(para);
if(NULL != paraObj)
{
if( OK != jsonObjectGetInt(paraObj, "start", &start_value))
{
errorCode = ERR_BAD_PARAM;
goto out;
}
SLP_VLAN8021Q_DEBUG("start value is %d\r\n", start_value);
if( OK != jsonObjectGetInt(paraObj, "end", &end_value))
{
errorCode = ERR_BAD_PARAM;
goto out;
}
SLP_VLAN8021Q_DEBUG("end value is %d\r\n", end_value);
if (NULL == (retArray = jsonObjectNewArray()))
{
SLP_VLAN8021Q_DEBUG("malloc failed\r\n");
errorCode = ERR_NO_MEMORY;
goto out;
}
////从vid=1开始遍历,到4094;获取name、untag_ports、tag_ports,并封装为json格式
VLAN_ITER(vid)
{
vlanStatus = swVlanStatusGet(vid);
if(VLAN_UNUSED == vlanStatus)
{
continue;
}
errorCode = swVlanDscrpGet(vid, vlanDes.des);
SLP_VLAN8021Q_DEBUG("des: %s\r\n", vlanDes.des);
if(ERR_NO_ERROR != errorCode)
{
SLP_VLAN8021Q_DEBUG("errorCode:%d", errorCode);
goto out;
}
//有过滤参数时,满足相等条件
if(NULL != filterObj)
{
if(NULL != strVlanId)
{
if(0 == strcmp(strVlanId, ""))
{
continue;
}
else if(vid != vlanId)
{
continue;
}
}
else if(NULL != strName)
{
if(NULL == strstr(vlanDes.des, strName))
{
continue;
}
}
else
{
;
}
}
countAll++;
if(countAll > start_value && countAll <= end_value)
{
if (NULL == (retEleObj = jsonObjectNewObject()))
{
SLP_VLAN8021Q_DEBUG("malloc failed\r\n");
errorCode = ERR_NO_MEMORY;
goto out;
}
SLP_VLAN8021Q_DEBUG("countAll:%d", countAll);
/*! 把json对象封装成jso对象数组 < */
jsonObjectArrayAdd(retArray, retEleObj);
if (NULL == (retObj = jsonObjectNewObject()))
{
SLP_VLAN8021Q_DEBUG("malloc failed\r\n");
errorCode = ERR_NO_MEMORY;
goto out;
}
memset(szBuff, 0, VLAN_TABLE_LEN);
sprintf(szBuff, "8021q_vlan_%d", vid);
jsonObjectObjectAdd(retEleObj, szBuff, retObj);
if (0 == strlen(vlanDes.des))
{
jsonObjectAddString(retObj, "name", "");
}
else
{
jsonObjectAddString(retObj, "name", vlanDes.des);
}
//jsonObjectAddString(retObj, "name", vlanDes.des);
sprintf(vidStr, "%d", (int)vid);
jsonObjectAddString(retObj, "vlan_id", vidStr);
printf("%s:%d vid=%d\n", __FUNCTION__, __LINE__, vid);
errorCode = swGetVlanEntry(vid, &tmpVlanEntry);
if(ERR_NO_ERROR != errorCode)
{
goto out;
}
/*去除预配置端口*/
memset(&temUpList, 0, sizeof(user_port_list));
if(!UP_LIST_IS_EMPTY(tmpVlanEntry.dport))
{
UP_ITER_LIST(tmpVlanEntry.dport, index, up)
{
if(!VLAN_UP_ISVALID(up) ||UP_IS_PROVISION(up) || UP_MODE_CHK(up, UP_MODE_STACK)
|| UP_MODE_CHK(up, UP_MODE_CARD))
{
UP_LIST_ADD(temUpList, up);
}
}
UP_LIST_SUB(tmpVlanEntry.dport, temUpList, tmpVlanEntry.dport);
}
memset(&temUpList, 0, sizeof(user_port_list));
if(!UP_LIST_IS_EMPTY(tmpVlanEntry.tport))
{
UP_ITER_LIST(tmpVlanEntry.tport, index, up)
{
if(!VLAN_UP_ISVALID(up) || UP_IS_PROVISION(up) || UP_MODE_CHK(up, UP_MODE_STACK)
|| UP_MODE_CHK(up, UP_MODE_CARD))
{
UP_LIST_ADD(temUpList, up);
}
}
UP_LIST_SUB(tmpVlanEntry.tport, temUpList, tmpVlanEntry.tport);
}
memset(&temUpList, 0, sizeof(user_port_list));
if(!UP_LIST_IS_EMPTY(tmpVlanEntry.uport))
{
UP_ITER_LIST(tmpVlanEntry.uport, index, up)
{
if(!VLAN_UP_ISVALID(up) || UP_IS_PROVISION(up) || UP_MODE_CHK(up, UP_MODE_STACK)
|| UP_MODE_CHK(up, UP_MODE_CARD))
{
UP_LIST_ADD(temUpList, up);
}
}
UP_LIST_SUB(tmpVlanEntry.uport, temUpList, tmpVlanEntry.uport);
}
/*处理返回数据*/
if(UP_LIST_IS_EMPTY(tmpVlanEntry.tport) && UP_LIST_IS_EMPTY(tmpVlanEntry.dport) && UP_LIST_IS_EMPTY(tmpVlanEntry.uport))
{
printf("%s:%d\n", __FUNCTION__, __LINE__);
arrayObj = jsonObjectFromString("\"\"");
jsonObjectObjectAdd(retObj, "port", arrayObj);
}
else
{
printf("%s:%d\n", __FUNCTION__, __LINE__);
memset(portString, 0, SLP_MAX_PORT_STR_LEN);
index = 0;
VLAN_UP_ITER_LIST(tmpVlanEntry.tport, index, up)
{
if(!UP_IS_VALID(up))
{
VLAN_UP_LIST_REMOVE_UP(tmpVlanEntry.tport, up);
continue;
}
if(UP_MODE_CHK(up, UP_MODE_XG))
{
VLAN_UP_LIST_REMOVE_UP(tmpVlanEntry.tport, up);
}
if(UP_IS_LAG(up))
{
if(!swChannelGroupIsValid(VLAN_UP_TO_LAG(up)))
VLAN_UP_LIST_REMOVE_UP(tmpVlanEntry.tport, up);
}
}
VLAN_UP_ITER_LIST(tmpVlanEntry.dport, index, up)
{
VLAN_UP_LIST_ADD_UP(tmpVlanEntry.tport, up);
}
VLAN_UP_ITER_LIST(tmpVlanEntry.uport, index, up)
{
if(!UP_IS_VALID(up))
{
VLAN_UP_LIST_REMOVE_UP(tmpVlanEntry.uport, up);
没有合适的资源?快使用搜索试试~ 我知道了~
优化函数,接口优化,前端接口
资源详情
资源评论
资源推荐
收起资源包目录
sk.7z (2个子文件)
sk
优化1.txt 10KB
优化2.txt 9KB
共 2 条
- 1
特拉法尔加L
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0