这是其他一些get的代码,也许你能从中知道怎么从底层获取端口的isolationenable的值,使得我们可以在函数中不变更端口的原本的allowinternet状态并更改isolation状态
static int lanIPTVGetRspJsonObj(JSON_Object *rspObj)
{
int ret = ERR_NO_ERROR;
IF_ID netIfId_down = {0};
IF_ID netIfId_up = {0};
IGMP_INTF_STATE_T igmpState = {0};
CFG_ZONE_INST **zoneCfg = NULL;
CFG_ZONE_INST cfg = {0};
char version[16];
TPCONFIG_NETIF_ST netIfEntry = {0};
//初始化result对象
JSON_Value *resultVal = json_value_init_object();
JSON_Object *result = json_value_get_object(resultVal);
UINT32 ifIndex = 0;
APPL_IF_ERR_DONE(ret, dmCfgZoneInstGet(defaultLAN, CFG_ZONE_INST_F_IFNAME, &cfg));
APPL_IF_ERR_DONE(ret, libGetIfindexByIfname(cfg.ifname, &ifIndex));
APPL_IF_ERR_DONE(ret, libNetIfIdGet(LIB_NETIF_GETMODE_SHM, ifIndex, &netIfId_down));
json_object_set_string(result, "igmp_enable", "off");
json_object_set_string(result, "igmp_interface", "");
json_object_set_string(result, "igmp_version", "");
json_object_set_string(result, "mld_enable", "off");
json_object_set_string(result, "mld_interface", "");
json_object_set_string(result, "mld_version", "");
//设置rsp基础字段
json_object_set_number(rspObj, "id", 1);
json_object_set_string(rspObj, "error_code", "0");
//设置result对象
json_object_set_value(rspObj, "result", resultVal);
APPL_IF_ERR_DONE(ret, uiIgmpProxyUpStreamGetCpn(netIfId_down, &netIfId_up));
APPL_IF_ERR_DONE(ret, uiNetIfConfigEntryGet(netIfId_up, &netIfEntry));
APPL_IF_ERR_DONE(ret, uiIgmpParseIntfFromDB(netIfId_up, &igmpState));
APPL_IF_ERR_DONE(ret, dmCfgZoneInstGetLstByField(CFG_ZONE_INST_F_IFNAME, netIfEntry.kernelName, &zoneCfg));
sprintf(version, "%d", igmpState.version);
json_object_set_string(result, "igmp_enable", igmpState.adminMode == ENABLE ? "on" : "off");
json_object_set_string(result, "igmp_interface", zoneCfg[0]->zoneName);
json_object_set_string(result, "igmp_version", version);
json_object_set_string(result, "mld_enable", igmpState.adminMode == ENABLE ? "on" : "off");
json_object_set_string(result, "mld_interface", zoneCfg[0]->zoneName);
json_object_set_string(result, "mld_version", version);
done:
if (NULL != zoneCfg) {
dmCfgZoneInstListFree(zoneCfg);
}
return ret;
}
int lanDHCPFillRspObjCb(TPCONFIG_NETIF_ST* netIfEntry, void* param)
{
IF_ADDR allIp[NETIF_MAX_IPV4_ADDR_NUM] = {};
int ret = ERR_NO_ERROR;
int ipCount = 0;
UINT32 numOfHelpAddr = 0;
char maskStr[IP_ADDRESS_MAX_LENGTH] = {"unassigned"};
char ipStr[IP_ADDRESS_MAX_LENGTH] = {};
char vlanStr[VLAN_MAX_LENGTH] = {};
char modeStr[MODE_LENGTH] = {};
int subIfIndex = 0;
GATEWAY_IF_TYPE subIfType;
int ifIndex, dhcpServerEnable = 0, dhcpRelayEnable = 0;
CFG_ZONE_INST **zoneCfg = NULL;
DHCP_SERVER_POOL poolParam = {0};
unsigned int seqnum = 0;
char seqnumStr[U32_LENGTH] = {0};
char leaseTime[U64_LENGTH] = {0};
char relayServerAddr[IP_ADDRESS_MAX_LENGTH] = {0};
DHCP_RELAY_ADDR netIfHelpAddGroup[DHCPRELAY_HELP_ADDR_MAX_NUM] = {0};
APPL_ENSURE_RET_VAL(netIfEntry, ERR_BAD_PARAM);
APPL_ENSURE_RET_VAL(param, ERR_BAD_PARAM);
APPL_ENSURE_RET_VAL((netIfEntry->netIfId.ifType == NETIF_TYPE_VLAN) || (netIfEntry->netIfId.ifType == NETIF_TYPE_GWVIRT), ERR_NO_ERROR);
JSON_Object *rspObj = (JSON_Object *)param;
JSON_Array *result = json_object_get_array(rspObj, "result");
JSON_Object *others = json_object_get_object(rspObj, "others");
JSON_Value *resultItemVal = json_value_init_object();
JSON_Object *resultItemObj = json_value_get_object(resultItemVal);
if (netIfEntry->netIfId.ifType == NETIF_TYPE_GWVIRT) {
netIfGwVirtDataParse(netIfEntry->netIfId.ifData.data, &subIfIndex, &subIfType);
if (GATEWAY_TYPE_BRIDGE != subIfType) {
return ERR_NO_ERROR;
}
uilibNetIfVlanBitmapToString(netIfEntry->vlanListBitMap, vlanStr, NULL);
sprintf(modeStr, "%s", "bridge");
} else if (netIfEntry->netIfId.ifType == NETIF_TYPE_VLAN) {
sprintf(vlanStr, "%d", netIfEntry->netIfId.ifData.vlanId);
sprintf(modeStr, "%s", "normal");
}
libNetIfIndexGet(netIfEntry->netIfId, &ifIndex);
ret = libNetIfIpv4AllIpGet(LIB_NETIF_GETMODE_TPSTATE, ifIndex, allIp, &ipCount);
if (ERR_NO_ERROR == ret)
{
inet_ntop(AF_INET, &(V4_ADDR(allIp[0])), ipStr, IP_ADDRESS_MAX_LENGTH);
ret = libNetIfMaskLenToStr(V4_SUBNET(allIp[0]), IP_ADDRESS_MAX_LENGTH, maskStr);
}
APPL_IF_ERR_DONE(ret, dmCfgZoneInstGetLstByField(CFG_ZONE_INST_F_IFNAME, netIfEntry->kernelName, &zoneCfg));
if(!zoneCfg || !zoneCfg[0]){
return ERR_NO_ERROR;
}
ret = uiDhcpServerGetPool(zoneCfg[0]->zoneName, &poolParam);
if (ERR_NO_ERROR != ret)
{
dhcpServerEnable = 0;
} else {
dhcpServerEnable = 1;
sprintf(leaseTime, "%u", poolParam.lease);
}
ret = uilibDhcpRelayNetIfHelpAddressGet(netIfEntry->netIfId, netIfHelpAddGroup, &numOfHelpAddr);
if (numOfHelpAddr == 0)
{
dhcpRelayEnable = 0;
} else {
dhcpRelayEnable = 1;
netIfHelpAddGroup[0].ipAddr.ipv4.s_addr = htonl(netIfHelpAddGroup[0].ipAddr.ipv4.s_addr);
inet_ntop(AF_INET, &netIfHelpAddGroup[0].ipAddr.ipv4.s_addr, relayServerAddr, IP_ADDRESS_MAX_LENGTH);
if (dhcpServerEnable) {
APPL_IF_ERR_DONE(ret, uiDhcpServerDelPool(zoneCfg[0]->zoneName));
dhcpServerEnable = 0;
}
}
sscanf(zoneCfg[0]->zoneName, ZONE_LAN_PREFIX"%d", &seqnum);
sprintf(seqnumStr, "%d", seqnum);
//设置resultItem对象中的字段
//LAN基础配置
json_object_set_string(resultItemObj, "ipaddr", ipStr);
json_object_set_string(resultItemObj, "vlanid", vlanStr);
json_object_set_string(resultItemObj, "netmask", maskStr);
if (0 == strcmp(zoneCfg[0]->zoneName, defaultLAN)){
json_object_set_string(resultItemObj, "default", "1");
} else {
json_object_set_string(resultItemObj, "default", "0");
}
if (((netIfEntry->isolation >> 0) & 0x3) == 2) {
json_object_set_string(resultItemObj, "isolation", "on");
} else {
json_object_set_string(resultItemObj, "isolation", "off");
}
if (((netIfEntry->isolation >> 2) & 0x3) == 1){
json_object_set_string(resultItemObj, "allowInternetAccess", "on");
} else {
json_object_set_string(resultItemObj, "allowInternetAccess", "off");
}
json_object_set_string(resultItemObj, "name", netIfEntry->description);
json_object_set_string(resultItemObj, "mode", modeStr);
json_object_set_string(resultItemObj, "cid", seqnumStr);
//dhcp相关配置
if (dhcpServerEnable && !dhcpRelayEnable) {
json_object_set_string(resultItemObj, "dhcp_mode", "dhcp_server");
json_object_set_string(resultItemObj, "enable", dhcpServerEnable?"on":"off");
UINT32 PoolRangeNum = 0;
JSON_Value *pIPRangePoolVal = json_value_init_array();
JSON_Array *pIPRangePoolArray = json_value_get_array(pIPRangePoolVal);
DHCP_SERVER_IP_RANGE rangeList[DHCP_SERVER_DEF_MAX_POOL_RANGE_NUM] = {0};
ret = uiDhcpServerPoolRangeListNumGet(zoneCfg[0]->zoneName, &PoolRangeNum);
ret = uiDhcpServerPoolRangeListGet(zoneCfg[0]->zoneName, rangeList, PoolRangeNum);
for (int i = 0; i < PoolRangeNum; i++) {
JSON_Value *pIPRangePoolItemVal = json_value_init_object();
JSON_Object *pIPRangePoolItemObj = json_value_get_object(pIPRangePoolItemVal);
char ipv4AddStartTmp[IP_ADDRESS_LENGTH] = {0};
char ipv4AddEndTmp[IP_ADDRESS_LENGTH] = {0};
struct in_addr startAddr, endAddr;
memset(&(startAddr), 0, sizeof(struct in_addr));
memset(&(endAddr), 0, sizeof(struct in_addr));
startAddr.s_addr = htonl(rangeList[i].startIp);
inet_ntop(AF_INET, &(startAddr), ipv4AddStartTmp, sizeof(char) * IP_ADDRESS_LENGTH);
endAddr.s_addr = htonl(rangeList[i].endIp);
inet_ntop(AF_INET, &(endAddr), ipv4AddEndTmp, sizeof(char) * IP_ADDRESS_LENGTH);
json_object_set_string(pIPRangePoolItemObj, "start", ipv4AddStartTmp);
json_object_set_string(pIPRangePoolItemObj, "end", ipv4AddEndTmp);
json_array_append_value(pIPRangePoolArray, pIPRangePoolItemVal);
}
json_object_set_value(resultItemObj, "ipRangePool", pIPRangePoolVal);
json_object_set_string(resultItemObj, "leasetime", leaseTime);
json_object_set_string(resultItemObj, "domain", poolParam.domainName);
if (poolParam.nextServer.s_addr != 0) {
memset(ipStr, 0, sizeof(char) * IP_ADDRESS_MAX_LENGTH);
poolParam.nextServer.s_addr = htonl(poolParam.nextServer.s_addr);
inet_ntop(AF_INET, &(poolParam.nextServer), ipStr, IP_ADDRESS_MAX_LENGTH);
json_object_set_string(resultItemObj, "next_server", ipStr);
}
APPL_IF_ERR_DONE(ret, uiDhcpServerGetOnePoolGatewayAll(zoneCfg[0]->zoneName, resultItemObj, dhcpServerPoolGateWayOutput));
APPL_IF_ERR_DONE(ret, uiDhcpServerGetOnePoolDnsAll(zoneCfg[0]->zoneName, resultItemObj, dhcpServerPoolDNSOutput));
JSON_Value *dhcpOptsOutVal = json_value_init_array();
json_object_set_value(resultItemObj, "dhcp_opts", dhcpOptsOutVal);
APPL_IF_ERR_DONE(ret, uiDhcpServerGetOnePoolOptionAll(zoneCfg[0]->zoneName, resultItemObj, dhcpServerPoolOptionOutput));
} else if (!dhcpServerEnable && dhcpRelayEnable) {
json_object_set_string(resultItemObj, "dhcp_mode", "dhcp_relay");
json_object_set_string(resultItemObj, "relay_enable", dhcpRelayEnable?"on":"off");
json_object_set_string(resultItemObj, "relay_server_ipaddr", relayServerAddr);
}
else
{
// 当dhcpServer和dhcpRelay都未启用时 返回DHCP Server模式以及禁用状态
json_object_set_string(resultItemObj, "dhcp_mode", "dhcp_server");
json_object_set_string(resultItemObj, "enable", "off");
}
json_object_set_string(resultItemObj, "maxleases", "4096");
//填充result数组
json_array_append_value(result, resultItemVal);
done:
dmCfgZoneInstListFree(zoneCfg);
return ERR_NO_ERROR;
}