From e26748a144f831d1ec5ce784c9455ebe3ad6c61e Mon Sep 17 00:00:00 2001 From: Shibby Date: Thu, 12 Mar 2015 21:40:34 +0100 Subject: [PATCH] =?utf8?q?IPv6:=20Allow=20request=20/64=20subnet=20for=20L?= =?utf8?q?AN1/2/3=20if=20prefix=20lenght=20is=20lower=20than=2064=20?= =?utf8?q?=E2=80=93=20thx=20@tvlz?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- release/src/router/httpd/tomato.c | 3 ++- release/src/router/nvram/defaults.c | 1 + release/src/router/rc/dhcp.c | 34 +++++++++++++++++++++++++++++++--- release/src/router/www/basic-ipv6.asp | 32 +++++++++++++++++++++++++++++--- 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/release/src/router/httpd/tomato.c b/release/src/router/httpd/tomato.c index 578292decb..04c5c04fb3 100644 --- a/release/src/router/httpd/tomato.c +++ b/release/src/router/httpd/tomato.c @@ -717,7 +717,8 @@ static const nvset_t nvset_list[] = { { "ipv6_6rd_prefix_length", V_RANGE(3, 127) }, { "ipv6_6rd_borderrelay", V_IP }, { "ipv6_6rd_ipv4masklen", V_RANGE(0, 32) }, - { "ipv6_vlan", V_RANGE(0, 7) }, // Enable IPv6 on 1=LAN1 2=LAN2 4=LAN3 + { "ipv6_vlan", V_RANGE(0, 7) }, // Enable IPv6 on 1=LAN1 2=LAN2 4=LAN3 + { "ipv6_isp_opt", V_01 }, // wan.c add eval option for dhcpd #endif // basic-wfilter diff --git a/release/src/router/nvram/defaults.c b/release/src/router/nvram/defaults.c index 8eac7375ce..69297bb4c8 100644 --- a/release/src/router/nvram/defaults.c +++ b/release/src/router/nvram/defaults.c @@ -198,6 +198,7 @@ const defaults_t defaults[] = { { "ipv6_6rd_prefix_length", "32" }, // 6RD prefix length (32-62) checkme { "ipv6_6rd_borderrelay", "68.113.165.1" }, // 6RD border relay address { "ipv6_6rd_ipv4masklen", "0" }, // 6RD IPv4 mask length (0-30) checkme + { "ipv6_vlan", "0" }, // Enable IPv6 on 1=LAN1 2=LAN2 4=LAN3 { "ipv6_isp_opt", "0" }, // wan.c add eval option for dhcpd #endif diff --git a/release/src/router/rc/dhcp.c b/release/src/router/rc/dhcp.c index ccf51743f0..62d427cc97 100644 --- a/release/src/router/rc/dhcp.c +++ b/release/src/router/rc/dhcp.c @@ -479,6 +479,7 @@ void start_dhcp6c(void) char *wan6face; char *argv[] = { "dhcp6c", "-T", "LL", NULL, NULL, NULL }; int argc; + int ipv6_vlan; TRACE_PT("begin\n"); @@ -489,30 +490,57 @@ void start_dhcp6c(void) if (prefix_len < 0) prefix_len = 0; wan6face = nvram_safe_get("wan_iface"); + ipv6_vlan = nvram_get_int("ipv6_vlan"); nvram_set("ipv6_get_dns", ""); nvram_set("ipv6_rtr_addr", ""); nvram_set("ipv6_prefix", ""); // Create dhcp6c.conf + unlink("/var/dhcp6c_duid"); if ((f = fopen("/etc/dhcp6c.conf", "w"))) { fprintf(f, "interface %s {\n" + " send ia-na 0;\n" //Required to get correct WAN IP " send ia-pd 0;\n" " send rapid-commit;\n" " request domain-name-servers;\n" " script \"/sbin/dhcp6c-state\";\n" "};\n" "id-assoc pd 0 {\n" + " prefix ::/%d infinity;\n" " prefix-interface %s {\n" " sla-id 0;\n" " sla-len %d;\n" - " };\n" - "};\n" - "id-assoc na 0 { };\n", + " };\n", wan6face, + nvram_get_int("ipv6_prefix_length"), nvram_safe_get("lan_ifname"), prefix_len); + if ((ipv6_vlan & 1) && (prefix_len >= 1)) { //2 ipv6 /64 networks + fprintf(f, + " prefix-interface %s {\n" + " sla-id 1;\n" + " sla-len %d;\n" + " };\n", nvram_safe_get("lan1_ifname"), prefix_len); + }; + if ((ipv6_vlan & 2) && (prefix_len >= 2)) { //4 ipv6 /64 networks + fprintf(f, + " prefix-interface %s {\n" + " sla-id 2;\n" + " sla-len %d;\n" + " };\n", nvram_safe_get("lan2_ifname"), prefix_len); + }; + if ((ipv6_vlan & 4) && (prefix_len >= 2)) { + fprintf(f, + " prefix-interface %s {\n" + " sla-id 3;\n" + " sla-len %d;\n" + " };\n", nvram_safe_get("lan3_ifname"), prefix_len); + }; + fprintf(f, + "};\n" + "id-assoc na 0 { };\n"); fclose(f); } diff --git a/release/src/router/www/basic-ipv6.asp b/release/src/router/www/basic-ipv6.asp index 8ee3c23c38..d2b779324d 100644 --- a/release/src/router/www/basic-ipv6.asp +++ b/release/src/router/www/basic-ipv6.asp @@ -21,7 +21,7 @@ -- 2.11.4.GIT