From 9595330e0a42d467b03f8551f33b3725bbab2869 Mon Sep 17 00:00:00 2001 From: zhanglianghy Date: Thu, 8 Aug 2019 11:57:20 +0800 Subject: [PATCH] =?UTF-8?q?MOD=20aaa-12=20=E6=A1=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=87=AA=E6=B5=8B=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3,?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96interface=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20SOL=20=20=E6=A1=A5=E6=8E=A5=E5=8F=A3=E8=87=AA?= =?UTF-8?q?=E6=B5=8B=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=BA=EF=BC=9Azhangliang=20=E6=A3=80=E8=A7=86?= =?UTF-8?q?=E4=BA=BA=EF=BC=9Azhangliang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configm/config-server/include/configm.h | 1 - .../configm/config-server/include/netconfig.h | 3 - .../configm/config-server/include/parsefile.h | 9 +- .../config-server/netconfig/ifconfig.c | 61 ------- .../netconfig/ipconfig/ipconfig.c | 2 +- .../configm/config-server/netconfig/netmain.c | 5 +- .../config-server/netconfig/parsefile.c | 158 ++++++++++++++---- 7 files changed, 136 insertions(+), 103 deletions(-) diff --git a/Platform/user/configm/config-server/include/configm.h b/Platform/user/configm/config-server/include/configm.h index c89051294..5649506af 100755 --- a/Platform/user/configm/config-server/include/configm.h +++ b/Platform/user/configm/config-server/include/configm.h @@ -188,7 +188,6 @@ NAT4_CONFIG, \ CONFIG_FROM_WEB|CONFIG_FROM_NETOPEER, \ FALSE, \ - FALSE, \ nat_config_chk, \ nat_config_proc, \ NULL, \ diff --git a/Platform/user/configm/config-server/include/netconfig.h b/Platform/user/configm/config-server/include/netconfig.h index 204c00622..727779e88 100644 --- a/Platform/user/configm/config-server/include/netconfig.h +++ b/Platform/user/configm/config-server/include/netconfig.h @@ -3,12 +3,9 @@ #include "ipconfig.h" #include "brconfig.h" -#define PATH_PROCNET_DEV "/proc/net/dev" - ret_code if_ioctl(unsigned long request, caddr_t ifreq, int *ret); ret_code if_set_up(char *ifname, int *code); ret_code if_set_down(char *ifname, int *code); -int if_readlist(caddr_t ifcfg, int max_port); ret_code net_main(); #endif diff --git a/Platform/user/configm/config-server/include/parsefile.h b/Platform/user/configm/config-server/include/parsefile.h index 92b5bdbe5..e6f47a98f 100644 --- a/Platform/user/configm/config-server/include/parsefile.h +++ b/Platform/user/configm/config-server/include/parsefile.h @@ -1,9 +1,14 @@ #ifndef PARSEFILE_H_ #define PARSEFILE_H_ +#include + #include "rpc_common.h" -#define IFCONFIG_PATH "/etc/network/interfaces" +#define PROC_NET_DEV "/proc/net/dev" +#define ETC_NETWORK_IFS "/etc/network/interfaces" +#define ETC_PRODUCT "/etc/product.conf" + #define IF_BUFF_LEN 128 ret_code if_conf_file_add(char *if_name); @@ -15,5 +20,7 @@ void ip_conf_file_set(char *if_name, char *conf_name, char *conf_buff); void ip_conf_file_del(char *if_name, char *conf_buff); ret_code del_sub_string(char *str_in,char *str_sub); +int if_read_from_file(struct ifreq *ifcfg, int max_port); +ret_code if_conf_file_init(); #endif diff --git a/Platform/user/configm/config-server/netconfig/ifconfig.c b/Platform/user/configm/config-server/netconfig/ifconfig.c index ded4f4ca4..8349d91d8 100644 --- a/Platform/user/configm/config-server/netconfig/ifconfig.c +++ b/Platform/user/configm/config-server/netconfig/ifconfig.c @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -16,34 +15,6 @@ #include "rpc.h" #include "netconfig.h" -static char *if_parse_name(char *name, char *p) -{ - while (isspace(*p)) - p++; - while (*p) { - if (isspace(*p)) - break; - if (*p == ':') { /* could be an alias */ - char *dot = p, *dotname = name; - *name++ = *p++; - while (isdigit(*p)) - *name++ = *p++; - if (*p != ':') { /* it wasn't, backup */ - p = dot; - name = dotname; - } - if (*p == '\0') - return NULL; - p++; - break; - } - *name++ = *p++; - } - *name++ = '\0'; - return p; -} - - /* call ioctl system call */ ret_code if_ioctl(unsigned long request, caddr_t ifreq, int *ret) { @@ -133,36 +104,4 @@ ret_code if_set_down(char *ifname, int *code) return if_clear_flag(ifname, IFF_UP, code); } -int if_readlist(caddr_t ifcfg, int max_port) -{ - struct ifreq *ifreq = (struct ifreq *)ifcfg; - char name[128] = {0}; - char buf[512] = {0}; - int i = 0; - FILE *fh; - - fh = fopen(PATH_PROCNET_DEV, "r"); - if (!fh) { - return 0; - } - - fgets(buf, sizeof buf, fh); /* eat line */ - fgets(buf, sizeof buf, fh); - - while (fgets(buf, sizeof buf, fh)) { - if(i >= max_port){ - break; - } - - memset(name, 0, 128); - if_parse_name(name, buf); - if(strlen(name) != 0){ - strncpy(ifreq[i].ifr_name, name, sizeof(ifreq[i].ifr_name)); - i++; - } - } - - fclose(fh); - return i; -} diff --git a/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c b/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c index 8e3eab730..66ddae84c 100644 --- a/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c +++ b/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c @@ -339,7 +339,7 @@ ret_code if_get_prefix_all(pointer output, int *output_len, int *code) ifc.ifc_len = MAX_IF_NUM * sizeof(struct ifreq); ifc.ifc_buf = (char *)ifreq; - if_count = if_readlist((caddr_t)&ifreq, MAX_IF_NUM); + if_count = if_read_from_file(&ifreq, MAX_IF_NUM); if(if_count == 0) { diff --git a/Platform/user/configm/config-server/netconfig/netmain.c b/Platform/user/configm/config-server/netconfig/netmain.c index 5d989c5a8..fad21b18b 100644 --- a/Platform/user/configm/config-server/netconfig/netmain.c +++ b/Platform/user/configm/config-server/netconfig/netmain.c @@ -1,9 +1,12 @@ #include "rpc.h" +#include "parsefile.h" #include "netconfig.h" ret_code net_main() { - br_bridge_init(); + /* 初始化/etc/network/interfaces配置文件 */ + if_conf_file_init(); + br_bridge_init(); } diff --git a/Platform/user/configm/config-server/netconfig/parsefile.c b/Platform/user/configm/config-server/netconfig/parsefile.c index 635c55d5e..14fe59fd2 100644 --- a/Platform/user/configm/config-server/netconfig/parsefile.c +++ b/Platform/user/configm/config-server/netconfig/parsefile.c @@ -5,9 +5,94 @@ #include #include #include +#include + +#include "rpc.h" #include "parsefile.h" -#include "rpc.h" +#include "netconfig.h" + +static char *if_parse_name(char *name, char *p) +{ + while (isspace(*p)) + p++; + while (*p) { + if (isspace(*p)) + break; + if (*p == ':') { /* could be an alias */ + char *dot = p, *dotname = name; + *name++ = *p++; + while (isdigit(*p)) + *name++ = *p++; + if (*p != ':') { /* it wasn't, backup */ + p = dot; + name = dotname; + } + if (*p == '\0') + return NULL; + p++; + break; + } + *name++ = *p++; + } + *name++ = '\0'; + return p; +} + +int if_read_from_file(struct ifreq *ifcfg, int max_port) +{ + struct ifreq *ifreq = (struct ifreq *)ifcfg; + char name[128] = {0}; + char buf[512] = {0}; + int i = 0; + FILE *fh; + + fh = fopen(PROC_NET_DEV, "r"); + if (!fh) { + return 0; + } + + fgets(buf, sizeof buf, fh); /* eat line */ + fgets(buf, sizeof buf, fh); + + while (fgets(buf, sizeof buf, fh)) { + if(i >= max_port){ + break; + } + + memset(name, 0, 128); + if_parse_name(name, buf); + if(strlen(name) != 0){ + strncpy(ifreq[i].ifr_name, name, sizeof(ifreq[i].ifr_name)); + i++; + } + } + + fclose(fh); + return i; +} + +ret_code del_sub_string(char *str_in,char *str_sub) +{ + char* str_out = (char *)malloc(strlen(str_in) + 1); + char* p; + + if(str_out == NULL) + { + return RET_NULLP; + } + + while((p = strstr(str_in, str_sub)) != NULL) + { + *p = '\0'; + + strcpy(str_out, p + strlen(str_sub)); + strcat(str_in, str_out); + } + + return RET_OK; +} + /* 缓存字符串保存到配置文件中 */ int conf_file_write(char *conf_path, char *sum_buf) @@ -152,7 +237,7 @@ int conf_value_in_block_exist(char *conf_path, char *conf_buff) } /* 设置指定配置块中的配置 */ -int conf_value_in_block_set_ex(char *conf_path, +int conf_value_in_block_set(char *conf_path, char *start_str, char *end_str, char *conf_name, char *conf_buff) { @@ -270,8 +355,8 @@ next_while: return conf_file_write(conf_path, sum_buf); } -/* 设置指定配置块中的配置 */ -int conf_value_in_block_set(char *conf_path, +/* 设置指定配置块中的配置, 如果整个接口配置块都没有,则添加接口配置块 */ +int conf_value_in_block_set_add(char *conf_path, char *start_str, char *end_str, char *conf_name, char *conf_buff) { @@ -654,7 +739,7 @@ ret_code if_conf_file_add(char *if_name) sprintf(auto_str, "auto %s", if_name); - return conf_value_block_add(IFCONFIG_PATH, auto_str); + return conf_value_block_add(ETC_NETWORK_IFS, auto_str); } /* 删除整个接口配置块 */ @@ -664,7 +749,7 @@ ret_code if_conf_file_del(char *if_name) sprintf(auto_str, "auto %s", if_name); - return conf_value_block_del(IFCONFIG_PATH, auto_str, "auto"); + return conf_value_block_del(ETC_NETWORK_IFS, auto_str, "auto"); } /* 设置接口中的配置 */ @@ -674,8 +759,8 @@ ret_code if_conf_file_set(char *if_name, char *conf_name, char *conf_buff) sprintf(auto_str, "auto %s", if_name); - return conf_value_in_block_set_ex(IFCONFIG_PATH, auto_str, - "auto", conf_name, conf_buff); + return conf_value_in_block_set(ETC_NETWORK_IFS, auto_str, + "auto", conf_name, conf_buff); } /* 获取接口中的配置 */ @@ -685,18 +770,10 @@ ret_code if_conf_file_get(char *if_name, char *conf_name, char *conf_buff) sprintf(auto_str, "auto %s", if_name); - return conf_value_in_block_get(IFCONFIG_PATH, auto_str, + return conf_value_in_block_get(ETC_NETWORK_IFS, auto_str, "auto", conf_name, conf_buff); } -ret_code if_conf_file_exist(char *if_name, char *conf_buff) -{ - char auto_str[IF_BUFF_LEN] = {0}; - - sprintf(auto_str, "auto %s", if_name); - - return conf_value_in_block_exist(IFCONFIG_PATH, auto_str); -} /* *添加修改文件(当配置文件中存在标记字段,则进行修改,若不存在则进行添加) @@ -715,8 +792,8 @@ void ip_conf_file_set(char *if_name, char *conf_name, char *conf_buff) sprintf(iface_str, "iface %s inet", if_name); sprintf(static_name, "iface %s inet static\n", if_name); - conf_value_in_block_set(IFCONFIG_PATH, auto_str, "auto", iface_str, static_name); - conf_value_in_block_set(IFCONFIG_PATH, auto_str, "auto", conf_name, conf_buff); + conf_value_in_block_set_add(ETC_NETWORK_IFS, auto_str, "auto", iface_str, static_name); + conf_value_in_block_set_add(ETC_NETWORK_IFS, auto_str, "auto", conf_name, conf_buff); return; } @@ -733,30 +810,41 @@ void ip_conf_file_del(char *if_name, char *conf_buff) sprintf(auto_str, "auto %s", if_name); - conf_value_in_block_del(IFCONFIG_PATH, auto_str, "auto", conf_buff); + conf_value_in_block_del(ETC_NETWORK_IFS, auto_str, "auto", conf_buff); return; } -ret_code del_sub_string(char *str_in,char *str_sub) +/* 获取接口中的配置 */ +ret_code if_role_file_get(char *if_name, char *conf_buff) { - char* str_out = (char *)malloc(strlen(str_in) + 1); - char* p; - - if(str_out == NULL) - { - return RET_NULLP; - } + char start_str[IF_BUFF_LEN] = {0}; - while((p = strstr(str_in, str_sub)) != NULL) - { - *p = '\0'; + sprintf(start_str, "interface %s", if_name); - strcpy(str_out, p + strlen(str_sub)); - strcat(str_in, str_out); + if(conf_value_in_block_get(ETC_PRODUCT, start_str, + "interface", "role", conf_buff) == RET_NOTFOUND) + { + strcpy(conf_buff, "lan"); } - - return RET_OK; + return RET_OK; } +ret_code if_conf_file_init() +{ + struct ifreq ifreq[MAX_IF_NUM]; + int if_count = 0; + int i; + + memset(&ifreq, 0, MAX_IF_NUM * sizeof(struct ifreq)); + + if_count = if_read_from_file(ifreq, MAX_IF_NUM); + for(i = 0; i < if_count; i++) + { + if_conf_file_add(ifreq[i].ifr_name); + } +} + + +