From 8b8afecc19f591cb7eef6f8584877983662754a5 Mon Sep 17 00:00:00 2001 From: wuqihy Date: Wed, 18 Sep 2019 14:55:02 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Add=20aaa-12=20=E6=B7=BB=E5=8A=A0dhcp=20rel?= =?UTF-8?q?ay=20getall=20SOL=20=E6=B7=BB=E5=8A=A0dhcp=20relay=20getall=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Awuqihy=20=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E4=BA=BA=EF=BC=9Ayinbin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqihy --- .../dhcp_config/dhcp_client_config.c | 3 +- .../config-server/dhcp_config/dhcp_lib.c | 19 ++++ .../dhcp_config/dhcp_relay_config.c | 96 +++++++++++++++++-- .../configm/config-server/include/dhcp_lib.h | 1 + 4 files changed, 112 insertions(+), 7 deletions(-) mode change 100755 => 100644 Platform/user/configm/config-server/dhcp_config/dhcp_lib.c diff --git a/Platform/user/configm/config-server/dhcp_config/dhcp_client_config.c b/Platform/user/configm/config-server/dhcp_config/dhcp_client_config.c index b3403d629..9a0c3d6a3 100644 --- a/Platform/user/configm/config-server/dhcp_config/dhcp_client_config.c +++ b/Platform/user/configm/config-server/dhcp_config/dhcp_client_config.c @@ -5,6 +5,7 @@ ret_code dhcp_client_config_chk(uint source, uint *config_type, pointer output, int *output_len) { ret_code ret = RET_OK; + /* cJSON *root=NULL, *operate=NULL; root = cJSON_Parse(input); if(NULL == root) @@ -15,7 +16,7 @@ ret_code dhcp_client_config_chk(uint source, uint *config_type, operate = cJSON_GetObjectItem(root, "operate"); if(operate){ *config_type = CM_CONFIG_SET; - } + }*/ return ret; } diff --git a/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c b/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c old mode 100755 new mode 100644 index 4c8d4bb5a..53433188e --- a/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c +++ b/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c @@ -503,3 +503,22 @@ int check_mask(char *mask) return FALSE; } +char *wan_if_str(){ + char ifname[MAX_IF_NUM][INTERFACE_NAMSIZ]; + memset(ifname, 0, sizeof(ifname)); + //printf("ifname size: %d\n", sizeof(ifname)); + int wan_count = if_wan_get(ifname, MAX_IF_NUM); + char *wanif; + memset(wanif, 0, sizeof(ifname)+wan_count+1); + //printf("wan get cnt %d\n", wan_count); + for(i = 0; i < wan_count; i++) + { + strcat(wanif, " "); + strcat(wanif, ifname[i]); + } + free(ifname); + if(!strcmp(wanif, "")){ + return NULL; + } + return wanif; +} diff --git a/Platform/user/configm/config-server/dhcp_config/dhcp_relay_config.c b/Platform/user/configm/config-server/dhcp_config/dhcp_relay_config.c index 16439be66..b4c9b5f45 100644 --- a/Platform/user/configm/config-server/dhcp_config/dhcp_relay_config.c +++ b/Platform/user/configm/config-server/dhcp_config/dhcp_relay_config.c @@ -5,7 +5,7 @@ ret_code dhcp_relay_config_chk(uint source,uint *config_type, pointer output, int *output_len) { ret_code ret = RET_OK; - *config_type = CM_CONFIG_SET; + //*config_type = CM_CONFIG_SET; return ret; } @@ -44,13 +44,24 @@ ret_code dhcp_relay_config_proc(uint source, uint config_type, if(!strcmp(operate->valuestring, "close relay")){ //删除配置文件 + /* memset(cmd, 0, len + 1); snprintf(cmd, len, "sed -r -i 's/SERVERS=\"[ \\t0-9\\.]*\"/SERVERS=\"\"/g' /etc/default/isc-dhcp-relay"); //\" 不能写成\\" system(cmd); memset(cmd, 0, len + 1); snprintf(cmd, len, "sed -r -i 's/INTERFACES=\"[ \\ta-zA-Z0-9\\.]*\"/INTERFACES=\"\"/g' /etc/default/isc-dhcp-relay"); //\" 不能写成\\" system(cmd); - system("service isc-dhcp-relay stop"); + system("service isc-dhcp-relay stop"); + dhcp_relay_info_save("","");*/ + + memset(cmd, 0, len + 1); + snprintf(cmd, len, "sed -r -i 's/SERVERS=/#SERVERS/g' /etc/default/isc-dhcp-relay"); //\" 不能写成\\" + system(cmd); + memset(cmd, 0, len + 1); + snprintf(cmd, len, "sed -r -i 's/INTERFACES=/#INTERFACES=/g' /etc/default/isc-dhcp-relay"); //\" 不能写成\\" + system(cmd); + system("sed -r -i '/#/d' /etc/default/isc-dhcp-relay"); + system("systemctl stop isc-dhcp-relay.service"); } if(!strcmp(operate->valuestring, "start relay")){ interfaces = cJSON_GetObjectItem(root, "interfaces"); @@ -65,24 +76,52 @@ ret_code dhcp_relay_config_proc(uint source, uint config_type, if(!check_servers(servers->valuestring)){ ret = RET_INPUTERR; goto INPUT_ERROR; - } + } + /* memset(cmd, 0, len + 1); snprintf(cmd, len, "sed -r -i 's/SERVERS=\"[ \\t0-9\\.]*\"/SERVERS=\"%s\"/g' /etc/default/isc-dhcp-relay", servers->valuestring); //\" 不能写成\\" system(cmd); + + if(!wan_if_str()){ + ret = RET_INPUTERR; + goto INPUT_ERROR; + } memset(cmd, 0, len + 1); - snprintf(cmd, len, "sed -r -i 's/INTERFACES=\"[ \\ta-zA-Z0-9\\.]*\"/INTERFACES=\"%s\"/g' /etc/default/isc-dhcp-relay", interfaces->valuestring); //\" 不能写成\\" + snprintf(cmd, len, "sed -r -i 's/INTERFACES=\"[ \\ta-zA-Z0-9\\.]*\"/INTERFACES=\"%s%s\"/g' /etc/default/isc-dhcp-relay", interfaces->valuestring, wan_if_str()); //\" 不能写成\\" system(cmd); - /*运行配置文件*/ //system("service isc-dhcp-relay restart"); system("systemctl restart isc-dhcp-relay.service"); + dhcp_relay_info_save(servers->valuestring, interfaces->valuestring);*/ + + if(!wan_if_str()){ + ret = RET_INPUTERR; + goto INPUT_ERROR; + } + memset(cmd, 0, len + 1); + snprintf(cmd, len, "echo 'SERVERS=\"%s\"' >> /etc/default/isc-dhcp-relay", servers->valuestring); + system(cmd); + memset(cmd, 0, len + 1); + snprintf(cmd, len, "echo 'INTERFACES=\"%s%s\"' >> /etc/default/isc-dhcp-relay", interfaces->valuestring, wan_if_str()); + system(cmd); + + //save relay info + memset(cmd, 0, len + 1); + snprintf(cmd, len, "echo '#serversINFO=%s;' >> /etc/default/isc-dhcp-relay", servers->valuestring); + system(cmd); + memset(cmd, 0, len + 1); + snprintf(cmd, len, "echo '#ifINFO=%s;' >> /etc/default/isc-dhcp-relay", interfaces->valuestring); + system(cmd); + + //resatrt service + system("systemctl restart isc-dhcp-relay.service"); } INPUT_ERROR: if(cmd) { - memset(cmd, 0, len + 1); free(cmd); + cmd = NULL; } return ret; @@ -91,6 +130,51 @@ ret_code dhcp_relay_config_get_all(uint source, pointer output, int *output_len) ret_code ret = RET_OK; char *fname="/etc/default/isc-dhcp-relay"; FILE *fp; + char *servers = NULL, *interfaces = NULL; + cJSON *root = NULL; + char *out = NULL; + char line[1000] = {0}; + if ((fp=fopen(fname,"r"))==NULL){ + printf("open file %s failed\n",fname); + return RET_ERR; + } + fseek(fp,0,SEEK_END); + rewind(fp); + servers = (char *)malloc(50); + memset(servers, 0, 50); + interfaces = (char *)malloc(1000); + memset(interfaces, 0, 1000); + + root = cJSON_CreateObject(); + + while((fgets(line,1000,fp))!=NULL){ + char *startSERVERS = strstr(line, "#serversINFO="); + char *endSERVERS = strstr(line, ";"); + if((startSERVERS!=NULL) && (endSERVERS!=NULL)){ + memcpy(servers,startSERVERS+13,endSERVERS-startSERVERS-13); + cJSON_AddStringToObject(root, "servers", servers); + } + char *startIF = strstr(line, "#ifINFO="); + char *endIF = strstr(line, ";"); + if((startIF!=NULL) && (endIF!=NULL)){ + memcpy(interfaces,startIF+8,endIF-startIF-8); + cJSON_AddStringToObject(root, "interfaces", interfaces); + } + } + if(servers != NULL){ + free(servers); + servers = NULL; + } + if(interfaces!= NULL){ + free(interfaces); + interfaces= NULL; + } + fclose(fp); + out = cJSON_PrintUnformatted(root); + *output_len = strlen(out) + 1; + memcpy(output, out, *output_len); + free(out); + return ret; } diff --git a/Platform/user/configm/config-server/include/dhcp_lib.h b/Platform/user/configm/config-server/include/dhcp_lib.h index 8ec3144e5..9e44fd77b 100644 --- a/Platform/user/configm/config-server/include/dhcp_lib.h +++ b/Platform/user/configm/config-server/include/dhcp_lib.h @@ -68,6 +68,7 @@ int check_segment(char *segment, char *mask); int check_mask(char *mask); +char *wan_if_str(); #endif From bae3fc59990a13ca23353d3cea73ccb6adb39aef Mon Sep 17 00:00:00 2001 From: wuqihy Date: Wed, 18 Sep 2019 15:01:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Add=20aaa-12=20=E6=B7=BB=E5=8A=A0dhcp=20get?= =?UTF-8?q?all=20web=20SOL=20=E6=B7=BB=E5=8A=A0dhcp=20getall=20web=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Awuqihy=20=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E4=BA=BA=EF=BC=9Ayinbin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqihy --- libs/src/lighttpd-1.4.51/src/mod_webm.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libs/src/lighttpd-1.4.51/src/mod_webm.c b/libs/src/lighttpd-1.4.51/src/mod_webm.c index 8cd7ada5e..84845f9ce 100755 --- a/libs/src/lighttpd-1.4.51/src/mod_webm.c +++ b/libs/src/lighttpd-1.4.51/src/mod_webm.c @@ -47,9 +47,12 @@ typedef enum { WEBM_HANDLE_INVALID_INDEX = -1, WEBM_HANDLE_CONFIG_HOST_SET, WEBM_HANDLE_CONFIG_HOST_GET, + WEBM_HANDLE_CONFIG_HOST_GET_ALL, WEBM_HANDLE_CONFIG_SUBNET_SET, WEBM_HANDLE_CONFIG_SUBNET_GET, + WEBM_HANDLE_CONFIG_SUBNET_GET_ALL, WEBM_HANDLE_CONFIG_RELAY_SET, + WEBM_HANDLE_CONFIG_RELAY_GET_ALL, WEBM_HANDLE_CONFIG_CLIENT_SET, WEBM_HANDLE_CONFIG_CLIENT_GET, WEBM_HANDLE_CONFIG_DHCPD_LEASE_GET, @@ -241,6 +244,13 @@ extern int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg DHCP_HOST_CONFIG, \ webm_config_send_proc \ }, \ + {\ + WEBM_HANDLE_CONFIG_HOST_GET_ALL, \ + "/FSG-GF/host-get-all", \ + CM_CONFIG_GET_ALL, \ + DHCP_HOST_CONFIG, \ + webm_config_send_proc \ + }, \ {\ WEBM_HANDLE_CONFIG_SUBNET_SET, \ "/FSG-CF/subnet-set", \ @@ -255,6 +265,13 @@ extern int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg DHCP_SUBNET_CONFIG, \ webm_config_send_proc \ }, \ + {\ + WEBM_HANDLE_CONFIG_SUBNET_GET_ALL, \ + "/FSG-GF/subnet-get-all", \ + CM_CONFIG_GET_ALL, \ + DHCP_SUBNET_CONFIG, \ + webm_config_send_proc \ + }, \ {\ WEBM_HANDLE_CONFIG_RELAY_SET, \ "/FSG-CF/relay-set", \ @@ -262,6 +279,13 @@ extern int webm_config_send_proc(server *srv, uint32_t config_type, uint64 confg DHCP_RELAY_CONFIG, \ webm_config_send_proc \ }, \ + {\ + WEBM_HANDLE_CONFIG_RELAY_GET_ALL, \ + "/FSG-GF/relay-get-all", \ + CM_CONFIG_GET_ALL, \ + DHCP_RELAY_CONFIG, \ + webm_config_send_proc \ + }, \ {\ WEBM_HANDLE_CONFIG_CLIENT_SET, \ "/FSG-CF/client-set", \ From c03ca3875173ecd6ed59aa31b909af372c0ec501 Mon Sep 17 00:00:00 2001 From: wuqihy Date: Wed, 18 Sep 2019 15:24:29 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Add=20aaa-12=20=E4=BF=AE=E6=94=B9dhcp=20lib?= =?UTF-8?q?=E4=B8=AD=E7=9A=84wan=5Fif=5Fstr=E6=8E=A5=E5=8F=A3=20SOL=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9dhcp=20lib=E4=B8=AD=E7=9A=84wan=5Fif=5Fstr?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Awuqihy?= =?UTF-8?q?=20=E6=A3=80=E8=A7=86=E4=BA=BA=EF=BC=9Ayinbin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqihy --- Platform/user/configm/config-server/dhcp_config/dhcp_lib.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c b/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c index 53433188e..04e419bf0 100644 --- a/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c +++ b/Platform/user/configm/config-server/dhcp_config/dhcp_lib.c @@ -511,6 +511,7 @@ char *wan_if_str(){ char *wanif; memset(wanif, 0, sizeof(ifname)+wan_count+1); //printf("wan get cnt %d\n", wan_count); + int i; for(i = 0; i < wan_count; i++) { strcat(wanif, " ");