OCT 修改接口增加的地址池配置写入options
This commit is contained in:
parent
d56098caca
commit
4219626caa
|
@ -22,6 +22,8 @@ using namespace std;
|
||||||
#include <zlog.h>
|
#include <zlog.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#define STR2INT(val) ((int)strtol((val), nullptr, 10))
|
||||||
|
|
||||||
extern data2 cfig;
|
extern data2 cfig;
|
||||||
extern bool kRunning;
|
extern bool kRunning;
|
||||||
extern dhcpMap dhcpCache;
|
extern dhcpMap dhcpCache;
|
||||||
|
@ -165,8 +167,95 @@ static void sendAllLists(data19 *req) {
|
||||||
req->bytes = (int)(fp - req->dp);
|
req->bytes = (int)(fp - req->dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_options(OBJ_DHCP_RNG pRange, data20* optionData){
|
||||||
|
MYBYTE *dp = optionData->options;
|
||||||
|
MYBYTE opTag = 0;
|
||||||
|
MYBYTE valSize = 0;
|
||||||
|
MYWORD buffSize = sizeof(dhcp_packet) - sizeof(dhcp_header);
|
||||||
|
char value[512] = {0};
|
||||||
|
bool map_Flag[3]= {false};
|
||||||
|
*dp = 0;
|
||||||
|
dp++;
|
||||||
|
|
||||||
|
//dhcp_range
|
||||||
|
addDHCPRange(pRange.rangAddr);
|
||||||
|
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
char buff[1024];
|
||||||
|
MYBYTE hoption[256];
|
||||||
|
|
||||||
|
if(strlen(pRange.subnet) != 0 && !map_Flag[0]){
|
||||||
|
map_Flag[0] = true;
|
||||||
|
opTag = DHCP_OPTION_NETMASK;
|
||||||
|
strcpy(value, pRange.subnet);
|
||||||
|
}else if(strlen(pRange.dnsSvr) != 0 && !map_Flag[1]){
|
||||||
|
map_Flag[1] = true;
|
||||||
|
opTag = DHCP_OPTION_DNS;
|
||||||
|
strcpy(value, pRange.dnsSvr);
|
||||||
|
}else if(strlen(pRange.gateway) != 0 && !map_Flag[2]){
|
||||||
|
map_Flag[2] = true;
|
||||||
|
opTag = DHCP_OPTION_ROUTER;
|
||||||
|
strcpy(value, pRange.gateway);
|
||||||
|
}else
|
||||||
|
break;
|
||||||
|
|
||||||
|
int numbytes = myTokenize(buff, value, "/,.", true);
|
||||||
|
if(numbytes > 255)
|
||||||
|
break;
|
||||||
|
else{
|
||||||
|
char *ptr = buff;
|
||||||
|
valSize = 0;
|
||||||
|
for (; *ptr; ptr = myGetToken(ptr, 1)) {
|
||||||
|
if (isInt(ptr)) {
|
||||||
|
hoption[valSize] = STR2INT(ptr);
|
||||||
|
valSize++;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(value, hoption, valSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(opTag == DHCP_OPTION_NETMASK && map_Flag[0]){
|
||||||
|
optionData->mask = (*((MYDWORD *)value));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(buffSize > valSize + 2){
|
||||||
|
*dp = opTag;
|
||||||
|
dp++;
|
||||||
|
*dp = valSize;
|
||||||
|
dp++;
|
||||||
|
memcpy(dp, value, valSize);
|
||||||
|
dp += valSize;
|
||||||
|
buffSize -= (valSize + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//lease
|
||||||
|
if (pRange.lease != 0) {
|
||||||
|
MYDWORD j;
|
||||||
|
j = pRange.lease;
|
||||||
|
opTag = 51;
|
||||||
|
if (buffSize > 6) {
|
||||||
|
*dp = DHCP_OPTION_IPADDRLEASE;
|
||||||
|
dp++;
|
||||||
|
*dp = 4;
|
||||||
|
dp++;
|
||||||
|
dp += pUInt(dp, j);
|
||||||
|
buffSize -= 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*dp = DHCP_OPTION_END;
|
||||||
|
dp++;
|
||||||
|
optionData->optionSize = (dp - optionData->options);
|
||||||
|
}
|
||||||
|
|
||||||
static void expand_range_set(data19 *req, const char *pRequest) {
|
static void expand_range_set(data19 *req, const char *pRequest) {
|
||||||
char logBuff[512];
|
char logBuff[512];
|
||||||
|
OBJ_DHCP_RNG pRange;
|
||||||
|
memset(&pRange, 0, sizeof(OBJ_DHCP_RNG));
|
||||||
|
|
||||||
dzlog_debug("Input: %s\n", pRequest);
|
dzlog_debug("Input: %s\n", pRequest);
|
||||||
|
|
||||||
|
@ -206,45 +295,34 @@ static void expand_range_set(data19 *req, const char *pRequest) {
|
||||||
|
|
||||||
cJSON *pRspRoot = cJSON_CreateObject();
|
cJSON *pRspRoot = cJSON_CreateObject();
|
||||||
|
|
||||||
|
strcpy(pRange.rangAddr, pdhcp_range->valuestring);
|
||||||
|
|
||||||
vector dhcp_rang = config_get_dhcp_server_range_set();
|
if (psubnet_mask) {
|
||||||
|
strcpy(pRange.subnet, psubnet_mask->valuestring);
|
||||||
for(int i = 0; i < vect_size(dhcp_rang); i++) {
|
|
||||||
add_array_obj("", (POBJ_DHCP_RNG)vect_get_at(dhcp_rang, i), pRange);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// //写入CONFIG_ITEM
|
if (pdomain_server){
|
||||||
// PCONFIG_ITEM pItem, pTmp;
|
strcpy(pRange.dnsSvr, pdomain_server->valuestring);
|
||||||
// HASH_ITER(hh, g_pConfigItem, pItem, pTmp) {
|
}
|
||||||
// if (pItem->valType == VALUE_TYPE_ARRAY_OBJ) {
|
|
||||||
// add_array_obj(pItem->pcfgKey, pItem, pRange);
|
if (pgateway){
|
||||||
// }
|
strcpy(pRange.gateway, pgateway->valuestring);
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
if (please_time){
|
||||||
|
pRange.lease = STR2INT(please_time->valuestring);
|
||||||
|
}
|
||||||
|
|
||||||
//写入cfig
|
//写入cfig
|
||||||
MYBYTE m = cfig.rangeCount;
|
MYBYTE m = cfig.rangeCount;
|
||||||
data20 optionData {};
|
data20 optionData {};
|
||||||
optionData.rangeSetInd = m;
|
optionData.rangeSetInd = m;
|
||||||
|
|
||||||
data20 *opData = &optionData;
|
|
||||||
MYBYTE *dp = opData->options;
|
|
||||||
*dp = 0;
|
|
||||||
dp++;
|
|
||||||
|
|
||||||
addDHCPRange(pRange.rangAddr);
|
|
||||||
opData->mask = (*((MYDWORD *)pRange.subnet));
|
|
||||||
if (please_time) {
|
|
||||||
MYDWORD j;
|
|
||||||
j = strtol(please_time->valuestring, nullptr, 10);
|
|
||||||
cfig.lease = j;
|
|
||||||
}
|
|
||||||
*dp = DHCP_OPTION_END;
|
|
||||||
dp++;
|
|
||||||
opData->optionSize = (dp - opData->options);
|
|
||||||
|
|
||||||
MYBYTE *options = nullptr;
|
MYBYTE *options = nullptr;
|
||||||
cfig.rangeSet[optionData.rangeSetInd].active = true;
|
cfig.rangeSet[optionData.rangeSetInd].active = true;
|
||||||
|
|
||||||
|
add_options(pRange, &optionData);
|
||||||
|
|
||||||
if (optionData.optionSize > 3) {
|
if (optionData.optionSize > 3) {
|
||||||
options = (MYBYTE *)calloc(1, optionData.optionSize);
|
options = (MYBYTE *)calloc(1, optionData.optionSize);
|
||||||
memcpy(options, optionData.options, optionData.optionSize);
|
memcpy(options, optionData.options, optionData.optionSize);
|
||||||
|
|
Loading…
Reference in New Issue