diff --git a/docs/api/uci/cwmp.md b/docs/api/uci/cwmp.md
index 3b5b4de..34c80bc 100644
--- a/docs/api/uci/cwmp.md
+++ b/docs/api/uci/cwmp.md
@@ -228,9 +228,16 @@
default_lan_interface |
string |
no |
- |
+ lan |
Configure the default lan interface of the device. |
+
+ default_wan_interface |
+ string |
+ yes |
+ wan |
+ Configure the default wan interface that will be used for IPv4/IPv6 connection. |
+
log_to_console |
string |
diff --git a/docs/guide/dual_stack_ip.md b/docs/guide/dual_stack_ip.md
index b2bf979..0a51507 100644
--- a/docs/guide/dual_stack_ip.md
+++ b/docs/guide/dual_stack_ip.md
@@ -22,7 +22,4 @@ While the CPE must prioritize the IPv6, so it starts by checking if IPv6 is work
### Dual Stack configuration
-Two uci options are present to configure dual stack:
-
-- cwmp.cpe.default_wan_interface: that is the network interface that is used to check the connection with IPv4.
-- cwmp.cpe.default_wan6_interface: that is the network interface that is used to check the connection with IPv6.
\ No newline at end of file
+- cwmp.cpe.default_wan_interface: this is the interface name that is used to check the connection with IPv4/IPv6.
\ No newline at end of file
diff --git a/schemas/uci/cwmp.json b/schemas/uci/cwmp.json
index eb94c7f..9a9e9aa 100644
--- a/schemas/uci/cwmp.json
+++ b/schemas/uci/cwmp.json
@@ -183,16 +183,9 @@
{
"name": "default_wan_interface",
"type": "string",
- "required": "no",
+ "required": "yes",
"default": "wan",
- "description": "Configure the default wan interface that will be used for IPv4 connection."
- },
- {
- "name": "default_wan6_interface",
- "type": "string",
- "required": "no",
- "default": "wan6",
- "description": "Configure the default wan interface that will be used for IPv6 connection."
+ "description": "Configure the default wan interface that will be used for IPv4/IPv6 connection."
},
{
"name": "log_to_console",
diff --git a/src/common.c b/src/common.c
index ab8dae9..e9bc0a9 100755
--- a/src/common.c
+++ b/src/common.c
@@ -16,6 +16,8 @@
#include
#include
#include
+#include
+#include
#include
#include "common.h"
@@ -743,130 +745,110 @@ int copy_file(char *source_file, char *target_file)
return 0;
}
-void ubus_network_interface_callback(struct ubus_request *req __attribute__((unused)), int type __attribute__((unused)), struct blob_attr *msg)
+static void ubus_network_interface_callback(struct ubus_request *req __attribute__((unused)), int type __attribute__((unused)), struct blob_attr *msg)
{
- const struct blobmsg_policy p[1] = { { "l3_device", BLOBMSG_TYPE_STRING } };
- struct blob_attr *tb[1] = { NULL };
- char *l3_device = NULL;
- blobmsg_parse(p, 1, tb, blobmsg_data(msg), blobmsg_len(msg));
- if (tb[0] != NULL) {
- l3_device = blobmsg_get_string(tb[0]);
- }
+ struct blob_attr *tb[1] = {0};
+ struct blobmsg_policy p[1] = {
+ { "l3_device", BLOBMSG_TYPE_STRING }
+ };
- // Only update the interface if its not empty
- if (CWMP_STRLEN(l3_device)) {
- cwmp_main->net.interface = strdup(l3_device);
- }
-
- CWMP_LOG(DEBUG, "CWMP IFACE - interface: %s", cwmp_main->net.interface);
-}
-
-void set_uci_connection_interface(char* interface)
-{
- if (interface == NULL) {
- CWMP_LOG(WARNING, "%s interface is NULL", __FUNCTION__);
+ if (msg == NULL)
return;
- }
- cwmp_uci_set_varstate_value("cwmp", "cpe", "interface", interface);
- cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
-}
-int get_connection_interface()
-{
- struct blob_buf b = { 0 };
- memset(&b, 0, sizeof(struct blob_buf));
- blob_buf_init(&b, 0);
-
- char ubus_obj[100] = {0};
- if (cwmp_main->net.ipv6_status)
- snprintf(ubus_obj, sizeof(ubus_obj), "network.interface.%s", cwmp_main->conf.default_wan6_iface);
- else
- snprintf(ubus_obj, sizeof(ubus_obj), "network.interface.%s", cwmp_main->conf.default_wan_iface);
-
- FREE(cwmp_main->net.interface);
-
- int e = icwmp_ubus_invoke(ubus_obj, "status", b.head, ubus_network_interface_callback, NULL);
- blob_buf_free(&b);
-
- if (e != 0) {
- return -1;
- }
- if (cwmp_main->net.interface == NULL) {
- return -1;
- }
- set_uci_connection_interface(cwmp_main->net.interface);
- return CWMP_OK;
-}
-
-int get_connection_parameters()
-{
- int error = get_connection_interface();
- if (error != CWMP_OK) {
- CWMP_LOG(DEBUG, "Failed to get interface [%s] details", cwmp_main->net.connection_wan_iface);
- return error;
- }
-
- error = icwmp_check_http_connection();
- if (error != CWMP_OK || !cwmp_main->net.connection_wan_iface) {
- CWMP_LOG(DEBUG, "Failed to check http connection");
- return error;
- }
- return CWMP_OK;
-}
-
-void ubus_network_interface_status_callback(struct ubus_request *req __attribute__((unused)), int type __attribute__((unused)), struct blob_attr *msg)
-{
- bool *up = (bool *)req->priv;
-
- const struct blobmsg_policy p[1] = { { "up", BLOBMSG_TYPE_BOOL } };
- struct blob_attr *tb[1] = { NULL };
blobmsg_parse(p, 1, tb, blobmsg_data(msg), blobmsg_len(msg));
- if (tb[0] != NULL)
- *up = blobmsg_get_bool(tb[0]);
+
+ if (!tb[0])
+ return;
+
+ char *l3_device = blobmsg_get_string(tb[0]);
+ if (!CWMP_STRLEN(l3_device))
+ return;
+
+ cwmp_main->net.interface = strdup(l3_device);
+
+ CWMP_LOG(DEBUG, "CWMP IFACE - interface: %s && device: %s", cwmp_main->conf.default_wan_iface, cwmp_main->net.interface);
}
-bool check_ipv6_enabled()
+static bool is_ipv6_addr_available(const char *device)
{
- bool up=false;
- struct blob_buf b = { 0 };
- memset(&b, 0, sizeof(struct blob_buf));
- blob_buf_init(&b, 0);
+ struct ifaddrs *ifaddr = NULL,*ifa = NULL;
+ void *in_addr = NULL;
+ bool ipv6_addr_available = false;
+ int family, err = 0;
- char ubus_network_interface[512];
- snprintf(ubus_network_interface, sizeof(ubus_network_interface), "network.interface.%s", cwmp_main->conf.default_wan6_iface);
- icwmp_ubus_invoke(ubus_network_interface, "status", b.head, ubus_network_interface_status_callback, &up);
+ if (CWMP_STRLEN(device) == 0)
+ return false;
- blob_buf_free(&b);
+ err = getifaddrs(&ifaddr);
+ if (err != 0)
+ return false;
- return up;
+ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
+
+ if (ifa->ifa_addr == NULL || ifa->ifa_name == NULL || strcmp(ifa->ifa_name, device) != 0)
+ continue;
+
+ family = ifa->ifa_addr->sa_family;
+
+ // Skip this result, if it is not an IPv6 node
+ if (family != AF_INET6)
+ continue;
+
+ #define NOT_GLOBAL_UNICAST(addr) \
+ ( (IN6_IS_ADDR_UNSPECIFIED(addr)) || (IN6_IS_ADDR_LOOPBACK(addr)) || \
+ (IN6_IS_ADDR_MULTICAST(addr)) || (IN6_IS_ADDR_LINKLOCAL(addr)) || \
+ (IN6_IS_ADDR_SITELOCAL(addr)) )
+
+ if (family == AF_INET6) {
+
+ in_addr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
+
+ // Skip this result, if it is an IPv6 address, but not globally routable
+ if (NOT_GLOBAL_UNICAST((struct in6_addr *)in_addr))
+ continue;
+
+ ipv6_addr_available = true;
+ break;
+ }
+ }
+
+ freeifaddrs(ifaddr);
+
+ return ipv6_addr_available;
}
-bool check_connection_attributes_change()
+bool is_ipv6_enabled(void)
{
- cwmp_uci_reinit();
+ if (cwmp_main->net.interface == NULL) {
+ struct blob_buf b = {0};
+ char network_interface[64];
- char *actual_wan_interface = NULL, *actual_wan6_interface = NULL;
- uci_get_value("cwmp.cpe.default_wan_interface", &actual_wan_interface);
- uci_get_value("cwmp.cpe.default_wan6_interface", &actual_wan6_interface);
- bool wan_interface_changed = CWMP_STRCMP(actual_wan_interface, cwmp_main->conf.default_wan_iface);
- bool wan6_interface_changed = CWMP_STRCMP(actual_wan6_interface, cwmp_main->conf.default_wan_iface);
+ memset(&b, 0, sizeof(struct blob_buf));
+ blob_buf_init(&b, 0);
- if (wan_interface_changed)
- {
- FREE(cwmp_main->conf.default_wan_iface);
- cwmp_main->conf.default_wan_iface = strdup(actual_wan_interface);
+ snprintf(network_interface, sizeof(network_interface), "network.interface.%s", cwmp_main->conf.default_wan_iface);
+
+ int e = icwmp_ubus_invoke(network_interface, "status", b.head, ubus_network_interface_callback, NULL);
+
+ blob_buf_free(&b);
+
+ if (e != 0 || cwmp_main->net.interface == NULL)
+ return false;
}
- if (wan6_interface_changed)
- {
- FREE(cwmp_main->conf.default_wan6_iface);
- cwmp_main->conf.default_wan6_iface = strdup(actual_wan6_interface);
- }
- FREE(actual_wan_interface);
- FREE(actual_wan6_interface);
- bool actual_ipv6_status = check_ipv6_enabled();
- bool ipv6_status_changed = (actual_ipv6_status != cwmp_main->net.ipv6_status);
- cwmp_main->net.ipv6_status = actual_ipv6_status;
- return ipv6_status_changed || wan_interface_changed || wan6_interface_changed;
+
+ if (!is_ipv6_addr_available(cwmp_main->net.interface))
+ return false;
+
+ return true;
+}
+
+bool is_ipv6_status_changed(void)
+{
+ bool curr_ipv6_status = is_ipv6_enabled();
+ bool ipv6_status_changed = (curr_ipv6_status != cwmp_main->net.ipv6_status);
+ cwmp_main->net.ipv6_status = curr_ipv6_status;
+
+ return ipv6_status_changed;
}
char *get_time(time_t t_time)
diff --git a/src/common.h b/src/common.h
index 271e809..708d6ed 100644
--- a/src/common.h
+++ b/src/common.h
@@ -90,9 +90,8 @@ typedef struct env {
} env;
struct connection {
- char *connection_wan_iface;
char *interface;
- int ip_resolve;
+ long ip_resolve;
bool ipv6_status;
};
@@ -104,8 +103,6 @@ typedef struct config {
char *cpe_userid;
char *cpe_passwd;
char *custom_notify_json;
- char *ip;
- char *ipv6;
char *ubus_socket;
char *connection_request_path;
char *auto_tc_transfer_type;
@@ -115,7 +112,6 @@ typedef struct config {
char *auto_cdu_result_type;
char *auto_cdu_fault_code;
char *default_wan_iface;
- char *default_wan6_iface;
int connection_request_port;
int period;
int periodic_notify_interval;
@@ -613,11 +609,9 @@ bool icwmp_validate_unsignedint(char *arg);
bool icwmp_validate_int_in_range(char *arg, int min, int max);
char *string_to_hex(const unsigned char *str, size_t size);
int copy_file(char *source_file, char *target_file);
-int get_connection_interface();
-int get_connection_parameters();
-int icwmp_check_http_connection();
-bool check_ipv6_enabled();
-bool check_connection_attributes_change();
+int icwmp_check_http_connection(void);
+bool is_ipv6_enabled(void);
+bool is_ipv6_status_changed(void);
char *get_time(time_t t_time);
bool is_obj_excluded(const char *object_name);
bool is_reload_parameter(const char *object_name);
diff --git a/src/config.c b/src/config.c
index 3eed64c..a02d07e 100755
--- a/src/config.c
+++ b/src/config.c
@@ -48,7 +48,6 @@ static void config_get_cpe_elements(struct uci_section *s)
UCI_CPE_ENABLE_SYSLOG,
UCI_CPE_AMD_VERSION,
UCI_CPE_DEFAULT_WAN_IFACE,
- UCI_CPE_DEFAULT_WAN6_IFACE,
__MAX_NUM_UCI_CPE_ATTRS,
};
@@ -61,8 +60,7 @@ static void config_get_cpe_elements(struct uci_section *s)
{ .name = "log_severity", .type = UCI_TYPE_STRING },
{ .name = "log_to_syslog", .type = UCI_TYPE_STRING },
{ .name = "amd_version", .type = UCI_TYPE_STRING },
- { .name = "default_wan_interface", .type = UCI_TYPE_STRING },
- { .name = "default_wan6_interface", .type = UCI_TYPE_STRING },
+ { .name = "default_wan_interface", .type = UCI_TYPE_STRING }
};
struct uci_option *cpe_tb[__MAX_NUM_UCI_CPE_ATTRS] = {0};
@@ -99,12 +97,6 @@ static void config_get_cpe_elements(struct uci_section *s)
else
cwmp_main->conf.default_wan_iface = strdup("wan");
CWMP_LOG(DEBUG, "CWMP CONFIG - default wan interface: %s", cwmp_main->conf.default_wan_iface);
-
- if (cpe_tb[UCI_CPE_DEFAULT_WAN6_IFACE])
- cwmp_main->conf.default_wan6_iface = strdup(get_value_from_uci_option(cpe_tb[UCI_CPE_DEFAULT_WAN6_IFACE]));
- else
- cwmp_main->conf.default_wan6_iface = strdup("wan6");
- CWMP_LOG(DEBUG, "CWMP CONFIG - default wan ipv6 interface: %s", cwmp_main->conf.default_wan6_iface);
}
static void config_get_acs_elements(struct uci_section *s)
diff --git a/src/cwmp.c b/src/cwmp.c
index e6e8887..648f54d 100644
--- a/src/cwmp.c
+++ b/src/cwmp.c
@@ -283,15 +283,15 @@ static int cwmp_init(void)
INIT_LIST_HEAD(&du_uuid_list);
cwmp_main->start_time = time(NULL);
- cwmp_uci_exit();
- sleep(15);
-
- cwmp_main->net.ipv6_status = check_ipv6_enabled();
- error = get_connection_parameters();
+ cwmp_main->net.ipv6_status = is_ipv6_enabled();
+ error = icwmp_check_http_connection();
if (error != CWMP_OK) {
- CWMP_LOG(DEBUG, "Failed to get connection parameters");
+ CWMP_LOG(DEBUG, "Init: failed to check http connection");
return error;
}
+
+ cwmp_uci_exit();
+
return CWMP_OK;
}
@@ -304,17 +304,13 @@ static void cwmp_free()
FREE(cwmp_main->deviceid.oui);
FREE(cwmp_main->deviceid.softwareversion);
FREE(cwmp_main->conf.lw_notification_hostname);
- FREE(cwmp_main->conf.ip);
- FREE(cwmp_main->conf.ipv6);
FREE(cwmp_main->conf.acsurl);
FREE(cwmp_main->conf.acs_userid);
FREE(cwmp_main->conf.acs_passwd);
- FREE(cwmp_main->net.interface);
FREE(cwmp_main->conf.cpe_userid);
FREE(cwmp_main->conf.cpe_passwd);
FREE(cwmp_main->conf.ubus_socket);
FREE(cwmp_main->conf.connection_request_path);
- FREE(cwmp_main->net.connection_wan_iface);
FREE(cwmp_main->conf.custom_notify_json);
FREE(cwmp_main->conf.auto_cdu_fault_code);
FREE(cwmp_main->conf.auto_cdu_oprt_type);
@@ -323,7 +319,7 @@ static void cwmp_free()
FREE(cwmp_main->conf.auto_tc_result_type);
FREE(cwmp_main->conf.auto_tc_transfer_type);
FREE(cwmp_main->conf.default_wan_iface);
- FREE(cwmp_main->conf.default_wan6_iface);
+ FREE(cwmp_main->net.interface);
FREE(nonce_key);
clean_list_param_notify();
bkp_tree_clean();
diff --git a/src/cwmp_dm/datamodel.c b/src/cwmp_dm/datamodel.c
index 01cce21..651158c 100644
--- a/src/cwmp_dm/datamodel.c
+++ b/src/cwmp_dm/datamodel.c
@@ -431,56 +431,40 @@ static int set_management_server_periodic_inform_time(char *refparam, struct dmc
return 0;
}
-static int network_get_ipaddr(char *iface, int ipver, char **value)
-{
- json_object *res = NULL, *jobj = NULL;
-
- dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", iface, String}}, 1, &res);
- DM_ASSERT(res, *value = "");
-
-
- if (ipver == 6)
- jobj = dmjson_select_obj_in_array_idx(res, 0, 1, "ipv6-address");
- else
- jobj = dmjson_select_obj_in_array_idx(res, 0, 1, "ipv4-address");
-
- *value = dmjson_get_value(jobj, 1, "address");
-
- if ((*value)[0] == '\0')
- return -1;
-
- return 0;
-}
-
static void get_management_ip_port(char **listen_addr)
{
- char *ip = NULL, *port = NULL, *interface = NULL, *if_name = NULL, *version = NULL;
+ char *ip = NULL, *port = NULL, *interface = NULL, *ip_version = NULL;
- dmuci_get_option_value_string_varstate("cwmp", "cpe", "interface", &if_name);
- dmuci_get_option_value_string_varstate("cwmp", "acs", "ip_version", &version);
+ dmuci_get_option_value_string("cwmp", "cpe", "default_wan_interface", &interface);
dmuci_get_option_value_string("cwmp", "cpe", "port", &port);
- dmuci_get_option_value_string("cwmp", "cpe", *version == '6' ? "default_wan6_interface" : "default_wan_interface", &interface);
+ dmuci_get_option_value_string_varstate("cwmp", "acs", "ip_version", &ip_version);
- if (network_get_ipaddr(interface, *version == '6' ? 6 : 4, &ip) == -1) {
- if (if_name[0] == '\0')
- return;
+ if (!DM_STRLEN(interface))
+ return;
- ip = (*version == '6') ? get_ipv6(if_name) : ioctl_get_ipv4(if_name);
- }
+ char *l3_device = get_l3_device(interface);
+ if (!DM_STRLEN(l3_device))
+ return;
- if (ip[0] != '\0' && port[0] != '\0') {
- dmasprintf(listen_addr, (*version == '6') ? "[%s]:%s" : "%s:%s", ip, port);
- }
+ if (DM_STRCMP(ip_version, "6") == 0)
+ ip = ifaddrs_get_global_ipv6(l3_device);
+ else
+ ip = ioctl_get_ipv4(l3_device);
+
+ if (DM_STRLEN(ip) && DM_STRLEN(port))
+ dmasprintf(listen_addr, !DM_STRCMP(ip_version, "6") ? "[%s]:%s" : "%s:%s", ip, port);
}
/*#Device.ManagementServer.ConnectionRequestURL!UCI:cwmp/cpe,cpe/port*/
static int get_management_server_connection_request_url(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
char *mgmt_addr = NULL;
+
get_management_ip_port(&mgmt_addr);
- if (mgmt_addr != NULL) {
- char *path;
+ if (DM_STRLEN(mgmt_addr)) {
+ char *path = NULL;
+
dmuci_get_option_value_string("cwmp", "cpe", "path", &path);
dmasprintf(value, "http://%s/%s", mgmt_addr, path ? path : "");
}
diff --git a/src/cwmp_http.c b/src/cwmp_http.c
index 0e947c7..8e7dd6d 100644
--- a/src/cwmp_http.c
+++ b/src/cwmp_http.c
@@ -51,21 +51,21 @@ void http_server_stop(void)
pthread_join(http_cr_server_thread, NULL);
}
-void set_http_ip_resolve(int resolve)
+static void set_http_ip_resolve(long ip_resolve)
{
- cwmp_uci_set_varstate_value("cwmp", "acs", "ip_version", (resolve == CURL_IPRESOLVE_V6) ? "6" : "4");
+ cwmp_main->net.ip_resolve = ip_resolve;
+
+ cwmp_uci_set_varstate_value("cwmp", "acs", "ip_version", (ip_resolve == CURL_IPRESOLVE_V6) ? "6" : "4");
cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
- FREE(cwmp_main->net.connection_wan_iface);
- cwmp_main->net.connection_wan_iface = strdup((resolve == CURL_IPRESOLVE_V6) ? cwmp_main->conf.default_wan6_iface : cwmp_main->conf.default_wan_iface);
- cwmp_main->net.ip_resolve = resolve;
}
-int icwmp_check_http_connection()
+int icwmp_check_http_connection(void)
{
if (!cwmp_main->net.ipv6_status) {
set_http_ip_resolve(CURL_IPRESOLVE_V4);
return CWMP_OK;
}
+
long resolve = CURL_IPRESOLVE_V6;
while(1) {
CURL *c = curl_easy_init();
@@ -75,7 +75,10 @@ int icwmp_check_http_connection()
curl_easy_setopt(c, CURLOPT_URL, cwmp_main->conf.acsurl);
curl_easy_setopt(c, CURLOPT_CONNECT_ONLY, 1L);
curl_easy_setopt(c, CURLOPT_IPRESOLVE, resolve);
- curl_easy_setopt(c, CURLOPT_INTERFACE, cwmp_main->net.interface);
+
+ if (CWMP_STRLEN(cwmp_main->net.interface))
+ curl_easy_setopt(c, CURLOPT_INTERFACE, cwmp_main->net.interface);
+
ret = curl_easy_perform(c);
if(ret == CURLE_OK) {
int tmp = 1;
@@ -90,6 +93,7 @@ int icwmp_check_http_connection()
set_http_ip_resolve(CURL_IPRESOLVE_V4);
else
set_http_ip_resolve(CURL_IPRESOLVE_V6);
+
curl_easy_cleanup(c);
return CWMP_OK;
}
@@ -102,5 +106,6 @@ int icwmp_check_http_connection()
else
break;
}
+
return -1;
}
diff --git a/src/event.c b/src/event.c
index 17e5c43..42c5aa1 100644
--- a/src/event.c
+++ b/src/event.c
@@ -320,38 +320,6 @@ int cwmp_root_cause_event_periodic()
return CWMP_OK;
}
-void connection_request_ip_value_change(int version)
-{
- char *bip = NULL;
- char *ip_version = (version == IPv6) ? "ipv6" : "ip";
- char *ip_value = (version == IPv6) ? cwmp_main->conf.ipv6 : cwmp_main->conf.ip;
-
- if (version == IPv6)
- cwmp_load_saved_session(&bip, CR_IPv6);
- else
- cwmp_load_saved_session(&bip, CR_IP);
-
- if (bip == NULL) {
- CWMP_LOG(ERROR, "event %s: bip is null", __FUNCTION__);
- bkp_session_simple_insert_in_parent("connection_request", ip_version, ip_value);
- bkp_session_save();
- return;
- }
- if (ip_value && strcmp(bip, ip_value) != 0) {
- struct event_container *event_container;
- event_container = cwmp_add_event_container(EVENT_IDX_4VALUE_CHANGE, "");
- if (event_container == NULL) {
- CWMP_LOG(ERROR, "event %s: event_container is null", __FUNCTION__);
- FREE(bip);
- return;
- }
- cwmp_save_event_container(event_container);
- bkp_session_simple_insert_in_parent("connection_request", ip_version, ip_value);
- bkp_session_save();
- }
- FREE(bip);
-}
-
void connection_request_port_value_change(int port)
{
char *bport = NULL;
diff --git a/src/event.h b/src/event.h
index c539290..910e9dd 100644
--- a/src/event.h
+++ b/src/event.h
@@ -70,7 +70,6 @@ extern const struct EVENT_CONST_STRUCT EVENT_CONST[__EVENT_IDX_MAX];
int event_remove_noretry_event_container();
void cwmp_save_event_container(struct event_container *event_container);
-void connection_request_ip_value_change( int version);
void connection_request_port_value_change(int port);
int cwmp_get_int_event_code(const char *code);
bool event_exist_in_list(int event);
diff --git a/src/http.c b/src/http.c
index 4fe951e..280d579 100644
--- a/src/http.c
+++ b/src/http.c
@@ -123,14 +123,12 @@ static void http_set_connection_options()
curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
curl_easy_setopt(curl, CURLOPT_NOBODY, 0);
curl_easy_setopt(curl, CURLOPT_IPRESOLVE, cwmp_main->net.ip_resolve);
-#ifdef DEVEL
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
-#endif
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, fc_cookies);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, fc_cookies);
- curl_easy_setopt(curl, CURLOPT_INTERFACE, cwmp_main->net.interface);
+ if (CWMP_STRLEN(cwmp_main->net.interface))
+ curl_easy_setopt(curl, CURLOPT_INTERFACE, cwmp_main->net.interface);
}
static void http_set_header_list_options()
@@ -213,7 +211,7 @@ int icwmp_http_send_message(char *msg_out, int msg_out_len, char **msg_in)
FREE(*msg_in);
curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip);
- if (ip && ip[0] != '\0') {
+ if (CWMP_STRLEN(ip)) {
if (ip_acs[0] == '\0' || strcmp(ip_acs, ip) != 0) {
CWMP_STRNCPY(ip_acs, ip, sizeof(ip_acs));
tmp = inet_pton(AF_INET, ip, buf);
diff --git a/src/session.c b/src/session.c
index 3ac19d9..87cc2ad 100644
--- a/src/session.c
+++ b/src/session.c
@@ -337,9 +337,9 @@ void start_cwmp_session()
if (cwmp_main->session->session_status.last_status == SESSION_FAILURE)
cwmp_config_load();
- if (check_connection_attributes_change()) {
- if (get_connection_parameters() != CWMP_OK || cwmp_stop) {
- CWMP_LOG(INFO, "cwmp fails to get connection parameters");
+ if (is_ipv6_status_changed()) {
+ if (icwmp_check_http_connection() != CWMP_OK || cwmp_stop) {
+ CWMP_LOG(INFO, "Failed to check http connection");
return;
}
}
diff --git a/test/cmocka/icwmp_datamodel_interface_unit_test.c b/test/cmocka/icwmp_datamodel_interface_unit_test.c
index 708154f..70a85b5 100644
--- a/test/cmocka/icwmp_datamodel_interface_unit_test.c
+++ b/test/cmocka/icwmp_datamodel_interface_unit_test.c
@@ -45,8 +45,6 @@ static int dm_iface_unit_tests_clean(void **state)
FREE(cwmp_main->deviceid.oui);
FREE(cwmp_main->deviceid.softwareversion);
FREE(cwmp_main->conf.lw_notification_hostname);
- FREE(cwmp_main->conf.ip);
- FREE(cwmp_main->conf.ipv6);
FREE(cwmp_main->conf.acsurl);
FREE(cwmp_main->conf.acs_userid);
FREE(cwmp_main->conf.acs_passwd);
@@ -55,7 +53,6 @@ static int dm_iface_unit_tests_clean(void **state)
FREE(cwmp_main->conf.ubus_socket);
FREE(cwmp_main->conf.connection_request_path);
FREE(cwmp_main->conf.default_wan_iface);
- FREE(cwmp_main->conf.default_wan6_iface);
FREE(cwmp_main->conf.custom_notify_json);
cwmp_free_all_list_param_fault(&faults_array);
cwmp_free_all_dm_parameter_list(&list_set_param_value);
diff --git a/test/cmocka/icwmp_soap_msg_unit_test.c b/test/cmocka/icwmp_soap_msg_unit_test.c
index 25f731e..83aec56 100644
--- a/test/cmocka/icwmp_soap_msg_unit_test.c
+++ b/test/cmocka/icwmp_soap_msg_unit_test.c
@@ -45,8 +45,6 @@ static void clean_config()
FREE(cwmp_main->deviceid.oui);
FREE(cwmp_main->deviceid.softwareversion);
FREE(cwmp_main->conf.lw_notification_hostname);
- FREE(cwmp_main->conf.ip);
- FREE(cwmp_main->conf.ipv6);
FREE(cwmp_main->conf.acsurl);
FREE(cwmp_main->conf.acs_userid);
FREE(cwmp_main->conf.acs_passwd);
@@ -55,7 +53,6 @@ static void clean_config()
FREE(cwmp_main->conf.ubus_socket);
FREE(cwmp_main->conf.connection_request_path);
FREE(cwmp_main->conf.default_wan_iface);
- FREE(cwmp_main->conf.default_wan6_iface);
}
static void clean_name_space()
diff --git a/test/files/etc/config/cwmp b/test/files/etc/config/cwmp
index 515da45..8512886 100644
--- a/test/files/etc/config/cwmp
+++ b/test/files/etc/config/cwmp
@@ -17,7 +17,6 @@ config cpe 'cpe'
option enable '1'
option interface 'eth0'
option default_wan_interface 'wan'
- option default_wan6_interface 'wan6'
option log_to_console 'disable'
option log_to_syslog 'disable'
option log_to_file 'enable'