From 8309b8268f4668d46b888e19b2a8087de8725e8a Mon Sep 17 00:00:00 2001 From: zhanglianghy Date: Thu, 26 Sep 2019 10:22:35 +0800 Subject: [PATCH] =?UTF-8?q?MOD=20aaa-12=20=E8=A7=A3=E5=86=B3=E6=98=BE?= =?UTF-8?q?=E7=A4=BAipv6=E5=9C=B0=E5=9D=80=E5=AD=98=E5=82=A8=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=E4=B8=8D=E5=A4=9F=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E5=BF=BD=E7=95=A5SIGPIPE=E4=BF=A1=E5=8F=B7=20SOL=20?= =?UTF-8?q?=20=20=20=E8=A7=A3=E5=86=B3=E6=98=BE=E7=A4=BAipv6=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E5=AD=98=E5=82=A8=E7=A9=BA=E9=97=B4=E4=B8=8D=E5=A4=9F?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E5=BF=BD=E7=95=A5?= =?UTF-8?q?SIGPIPE=E4=BF=A1=E5=8F=B7=20=E4=BF=AE=E6=94=B9=E4=BA=BA?= =?UTF-8?q?=EF=BC=9Azhangliang=20=E6=A3=80=E8=A7=86=E4=BA=BA=EF=BC=9Azhang?= =?UTF-8?q?liang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/configm/config-server/configserver.c | 14 ++++++++++-- .../configm/config-server/include/ipconfig.h | 2 +- .../netconfig/ipconfig/ipconfig.c | 22 ++++++++++++------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/Platform/user/configm/config-server/configserver.c b/Platform/user/configm/config-server/configserver.c index 1d5dcc1c2..41fe10dbb 100644 --- a/Platform/user/configm/config-server/configserver.c +++ b/Platform/user/configm/config-server/configserver.c @@ -58,7 +58,15 @@ void cm_return(rpc_conn *conn, ret_code err_code, char* err_message) snprintf(config_ret->resultCode, RET_CODE_LEN - 1, "%d", err_code); config_ret->message = (char *)rpc_code_format(err_code); - config_ret->data = null_str; + + if(err_code == RET_SYSERR) + { + config_ret->data = strerror(errno); + } + else + { + config_ret->data = null_str; + } s2j_create_json_obj(json_obj); if(json_obj == NULL) @@ -425,7 +433,9 @@ void cm_config_process(rpc_conn *conn, pointer input, int input_len, void* data) int main(int argc, char **argv) { rpc_server *server; - + + signal(SIGPIPE,SIG_IGN); + if (server= rpc_server_create_ex("ConfigManger#0")) { rpc_log_info("start server\n"); diff --git a/Platform/user/configm/config-server/include/ipconfig.h b/Platform/user/configm/config-server/include/ipconfig.h index 4464393c3..47efb8ec1 100644 --- a/Platform/user/configm/config-server/include/ipconfig.h +++ b/Platform/user/configm/config-server/include/ipconfig.h @@ -90,7 +90,7 @@ struct _ip_config_string { int config_type; char ifname[INTERFACE_NAMSIZ]; int family; - char ipaddr[DOT_IP_STR]; + char ipaddr[DOT_IPV6_STR]; int prefixlen; }; diff --git a/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c b/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c index 912ffa5b2..baac6f9de 100644 --- a/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c +++ b/Platform/user/configm/config-server/netconfig/ipconfig/ipconfig.c @@ -95,6 +95,8 @@ void ip6_save_file(ip_config_t *ip_conf, uint config_type) ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *config_buff) { + ret_code ret = RET_OK; + int err = 1; cJSON *json_obj; json_obj = cJSON_Parse(input); @@ -116,7 +118,7 @@ ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *confi s2j_struct_get_basic_element(ip_config, json_obj, int, config_type); s2j_struct_get_string_element(ip_config, json_obj, ifname, INTERFACE_NAMSIZ); s2j_struct_get_basic_element(ip_config, json_obj, int, family); - s2j_struct_get_string_element(ip_config, json_obj, ipaddr, DOT_IP_STR); + s2j_struct_get_string_element(ip_config, json_obj, ipaddr, DOT_IPV6_STR); s2j_struct_get_basic_element(ip_config, json_obj, int, prefixlen); strncpy(config_buff->ifname, ip_config->ifname, INTERFACE_NAMSIZ - 1); @@ -126,11 +128,16 @@ ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *confi if(config_buff->family == AF_INET) { - config_buff->prefix.s_addr = inet_addr(ip_config->ipaddr); + err = inet_pton(AF_INET, ip_config->ipaddr, &(config_buff->prefix)); } else if(config_buff->family == AF_INET6) { - inet_pton(AF_INET6, ip_config->ipaddr, config_buff->prefix6.s6_addr); + err = inet_pton(AF_INET6, ip_config->ipaddr, &(config_buff->prefix6)); + } + + if(err != 1) + { + ret = RET_IPINVALID; } if(ip_config->config_type) @@ -141,7 +148,7 @@ ret_code ip_config_json_parse(pointer input, uint *conf_type, ip_config_t *confi s2j_delete_struct_obj(ip_config); cJSON_Delete(json_obj); - return RET_OK; + return ret; } @@ -335,7 +342,6 @@ ret_code ip_config_getall_chk(uint source,uint config_type, return ret; } - ret_code ip_config_chk(uint source,uint *config_type, pointer input, int *input_len, pointer output, int *output_len) @@ -352,7 +358,7 @@ ret_code ip_config_chk(uint source,uint *config_type, switch (conf_type) { - case CM_CONFIG_SET: + case CM_CONFIG_SET: case CM_CONFIG_DEL: ret = ip_config_set_chk(source, conf_type, &ip_config, config_len, @@ -381,7 +387,7 @@ ret_code ip_config_chk(uint source,uint *config_type, *input_len = config_len; } else - { + { ret = RET_NOMEM; } @@ -400,6 +406,7 @@ ret_code ip_config_chk(uint source,uint *config_type, 删除ipv6地址 {"config_type":2,"ifname":"br0","family":10,"ipaddr":"2001::1","prefixlen":64} */ + ret_code ip_config_proc(uint source, uint config_type, pointer input, int input_len, pointer output, int *output_len) @@ -545,5 +552,4 @@ ret_code ip_config_get_all(uint source, pointer output, int *output_len) ASSERT_RET(ret); return RET_OK; - }