static int renew(char *ifname) { char *a, *b; int changed; _dprintf("%s: begin\n", __FUNCTION__); unlink(renewing); changed = env2nv("ip", "wan_ipaddr"); changed |= env2nv("subnet", "wan_netmask"); if (changed) { ifconfig(ifname, IFUP, nvram_safe_get("wan_ipaddr"), nvram_safe_get("wan_netmask")); } if (get_wan_proto() == WP_L2TP) { env2nv_gateway("wan_gateway_buf"); } else { a = strdup(nvram_safe_get("wan_gateway")); env2nv_gateway("wan_gateway"); b = nvram_safe_get("wan_gateway"); if ((a) && (strcmp(a, b) != 0)) { route_del(ifname, 0, "0.0.0.0", a, "0.0.0.0"); route_add(ifname, 0, "0.0.0.0", b, "0.0.0.0"); changed = 1; } free(a); } changed |= env2nv("domain", "wan_get_domain"); changed |= env2nv("dns", "wan_get_dns"); if ((a = getenv("lease")) != NULL) { nvram_set("wan_lease", a); expires(atoi(a)); } if (changed) { set_host_domain_name(); stop_dnsmasq(); dns_to_resolv(); start_dnsmasq(); } _dprintf("wan_ipaddr=%s\n", nvram_safe_get("wan_ipaddr")); _dprintf("wan_netmask=%s\n", nvram_safe_get("wan_netmask")); _dprintf("wan_gateway=%s\n", nvram_safe_get("wan_gateway")); _dprintf("wan_get_domain=%s\n", nvram_safe_get("wan_get_domain")); _dprintf("wan_get_dns=%s\n", nvram_safe_get("wan_get_dns")); _dprintf("wan_lease=%s\n", nvram_safe_get("wan_lease")); _dprintf("%s: end\n", __FUNCTION__); return 0; }
// ================================================================== static int update_value(void) { char *value; int changed = 0; if ((value = getenv("ip"))) { chomp(value); if (nvram_invmatch("wan_ipaddr", value)) { nvram_set("wan_ipaddr", value); changed++; } } if ((value = getenv("subnet"))) { chomp(value); if (nvram_invmatch("wan_netmask", value)) { nvram_set("wan_netmask", value); changed++; } } if ((value = getenv("router"))) { chomp(value); if (nvram_invmatch("wan_gateway", value)) { nvram_set("wan_gateway", value); changed++; } } if ((value = getenv("dns"))) { chomp(value); if (nvram_invmatch("wan_get_dns", value)) { nvram_set("wan_get_dns", value); changed++; } } /* * if ((value = getenv("wins"))) nvram_set("wan_wins", value); if ((value * = getenv("hostname"))) sethostname(value, strlen(value) + 1); */ if ((value = getenv("domain"))) { chomp(value); if (nvram_invmatch("wan_get_domain", value)) { nvram_set("wan_get_domain", value); changed++; } } if ((value = getenv("lease"))) { chomp(value); if (nvram_invmatch("wan_lease", value)) { nvram_set("wan_lease", value); changed++; } expires(atoi(value)); } if (changed) { set_host_domain_name(); #ifdef HAVE_UDHCPD stop_udhcpd(); start_udhcpd(); #endif } return 0; }