3 Copyright 2003, CyberTAN Inc. All Rights Reserved
5 This is UNPUBLISHED PROPRIETARY SOURCE CODE of CyberTAN Inc.
6 the contents of this file may not be disclosed to third parties,
7 copied or duplicated in any form without the prior written
8 permission of CyberTAN Inc.
10 This software should be used as a reference only, and it not
11 intended for production use!
13 THIS SOFTWARE IS OFFERED "AS IS", AND CYBERTAN GRANTS NO WARRANTIES OF ANY
14 KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. CYBERTAN
15 SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
16 FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE
21 Copyright 2005, Broadcom Corporation
24 THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
25 KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
26 SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
27 FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
32 Modified for Tomato Firmware
33 Portions, Copyright (C) 2006-2009 Jonathan Zarate
39 #include <sys/ioctl.h>
40 #include <arpa/inet.h>
41 #include <sys/sysinfo.h>
45 static const char ppp_linkfile
[] = "/tmp/ppp/link";
46 static const char ppp_optfile
[] = "/tmp/ppp/wanoptions";
49 static const char ppp3g_chatfile
[] = "/tmp/ppp/connect.chat";
53 static void make_secrets(void)
59 user
= nvram_safe_get("ppp_username");
60 pass
= nvram_safe_get("ppp_passwd");
61 if ((f
= fopen("/tmp/ppp/pap-secrets", "w")) != NULL
) {
62 fprintf(f
, "\"%s\" * \"%s\" *\n", user
, pass
);
65 chmod("/tmp/ppp/pap-secrets", 0600);
67 if ((f
= fopen("/tmp/ppp/chap-secrets", "w")) != NULL
) {
68 fprintf(f
, "\"%s\" * \"%s\" *\n", user
, pass
);
71 chmod("/tmp/ppp/chap-secrets", 0600);
74 // -----------------------------------------------------------------------------
76 static int config_pppd(int wan_proto
, int num
)
85 mkdir("/tmp/ppp", 0777);
86 symlink("/sbin/rc", "/tmp/ppp/ip-up");
87 symlink("/sbin/rc", "/tmp/ppp/ip-down");
89 symlink("/sbin/rc", "/tmp/ppp/ipv6-up");
90 symlink("/sbin/rc", "/tmp/ppp/ipv6-down");
92 symlink("/dev/null", "/tmp/ppp/connect-errors");
94 demand
= nvram_get_int("ppp_demand");
96 // Generate options file
97 if ((fp
= fopen(ppp_optfile
, "w")) == NULL
) {
104 if (nvram_match("wan_proto", "ppp3g") ) {
108 "connect \"/usr/sbin/chat -V -t 60 -f %s\"\n"
113 "ipcp-accept-local\n",
114 nvram_safe_get("modem_dev"),
117 if (strlen(nvram_get("ppp_username")) >0 )
118 fprintf(fp
, "user '%s'\n", nvram_get("ppp_username"));
125 "lcp-echo-adaptive\n", // Suppress LCP echo-requests if traffic was received
127 nvram_safe_get("ppp_username"));
135 "defaultroute\n" // Add a default route to the system routing tables, using the peer as the gateway
136 "usepeerdns\n" // Ask the peer for up to 2 DNS server addresses
137 "default-asyncmap\n" // Disable asyncmap negotiation
138 "nopcomp\n" // Disable protocol field compression
139 "noaccomp\n" // Disable Address/Control compression
140 "novj\n" // Disable Van Jacobson style TCP/IP header compression
141 "nobsdcomp\n" // Disable BSD-Compress compression
142 "nodeflate\n" // Disable Deflate compression
143 "noauth\n" // Do not authenticate peer
144 "refuse-eap\n" // Do not use eap
145 "maxfail 0\n" // Never give up
146 "lcp-echo-interval %d\n"// Interval between LCP echo-requests
147 "lcp-echo-failure %d\n" // Tolerance to unanswered echo-requests
149 nvram_get_int("pppoe_lei") ? : 10,
150 nvram_get_int("pppoe_lef") ? : 5,
151 nvram_get_int("debug_ppp") ? "debug\n" : "");
153 if (wan_proto
!= WP_L2TP
) {
157 demand
? 30 : (nvram_get_int("ppp_redialperiod") ? : 30));
167 nvram_safe_get("pptp_server_ip"),
168 nvram_get_int("mtu_enable") ? nvram_get_int("wan_mtu") : 1400);
173 "plugin rp-pppoe.so\n"
177 nvram_safe_get("ppp_passwd"),
178 nvram_safe_get("wan_ifname"),
179 nvram_get_int("wan_mtu"), nvram_get_int("wan_mtu"));
180 if (((p
= nvram_get("ppp_service")) != NULL
) && (*p
)) {
181 fprintf(fp
, "rp_pppoe_service '%s'\n", p
);
183 if (((p
= nvram_get("ppp_ac")) != NULL
) && (*p
)) {
184 fprintf(fp
, "rp_pppoe_ac '%s'\n", p
);
186 if (nvram_match("ppp_mlppp", "1")) {
194 if ((cfp
= fopen(ppp3g_chatfile
, "w")) == NULL
) {
195 perror(ppp3g_chatfile
);
199 "ABORT \"NO CARRIER\"\n"
200 "ABORT \"NO DIALTONE\"\n"
201 "ABORT \"NO ERROR\"\n"
202 "ABORT \"NO ANSWER\"\n"
206 /* moved to switch3g script
207 if (strlen(nvram_get("modem_pin")) >0 ) {
210 "OK \"AT+CPIN=%s\"\n"
212 nvram_get("modem_pin"));
216 "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
220 "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
222 "OK 'AT+CGDCONT=1,\"IP\",\"%s\"'\n"
225 nvram_safe_get("modem_apn"),
226 nvram_safe_get("modem_init")
231 if (nvram_match("usb_3g", "1")) {
233 if (strlen(nvram_get("wan_gateway")) >0 ) {
234 nvram_set("wan_gateway", "");
244 fprintf(fp
, "nomppe nomppc\n");
245 if (nvram_get_int("mtu_enable"))
246 fprintf(fp
, "mtu %d\n", nvram_get_int("wan_mtu"));
253 "demand\n" // Dial on demand
255 "ipcp-accept-remote\n"
256 "ipcp-accept-local\n"
257 "noipdefault\n" // Disables the default behaviour when no local IP address is specified
258 "ktune\n", // Set /proc/sys/net/ipv4/ip_dynaddr to 1 in demand mode if the local address changes
259 nvram_get_int("ppp_idletime") * 60);
263 switch (get_ipv6_service()) {
265 case IPV6_NATIVE_DHCP
:
266 fprintf(fp
, "+ipv6\n");
270 // User specific options
271 fprintf(fp
, "%s\n", nvram_safe_get("ppp_custom"));
280 static void stop_ppp(void)
284 unlink(ppp_linkfile
);
287 killall_tk("ip-down");
289 killall_tk("ipv6-up");
290 killall_tk("ipv6-down");
292 killall_tk("xl2tpd");
294 killall_tk("listen");
299 static void run_pppd(void)
301 eval("pppd", "file", ppp_optfile
);
303 if (nvram_get_int("ppp_demand")) {
306 Fixed issue id 7887(or 7787):
307 When DUT is PPTP Connect on Demand mode, it couldn't be trigger from LAN.
313 // Trigger Connect On Demand if user ping pptp server
314 eval("listen", nvram_safe_get("lan_ifname"));
322 // -----------------------------------------------------------------------------
324 inline void stop_pptp(void)
329 void start_pptp(int mode
)
333 if (!using_dhcpc()) stop_dhcpc();
336 if (config_pppd(WP_PPTP
, 0) != 0)
344 // -----------------------------------------------------------------------------
346 void preset_wan(char *ifname
, char *gw
, char *netmask
)
350 /* Delete all default routes */
351 route_del(ifname
, 0, NULL
, NULL
, NULL
);
353 /* try adding a route to gateway first */
354 route_add(ifname
, 0, gw
, NULL
, "255.255.255.255");
356 /* Set default route to gateway if specified */
358 while ((route_add(ifname
, 1, "0.0.0.0", gw
, "0.0.0.0") == 1) && (i
--)) {
361 _dprintf("set default gateway=%s n=%d\n", gw
, i
);
363 /* Add routes to dns servers as well for demand ppp to work */
364 char word
[100], *next
;
365 in_addr_t mask
= inet_addr(netmask
);
366 foreach(word
, nvram_safe_get("wan_get_dns"), next
) {
367 if ((inet_addr(word
) & mask
) != (inet_addr(nvram_safe_get("wan_ipaddr")) & mask
))
368 route_add(ifname
, 0, word
, gw
, "255.255.255.255");
377 // -----------------------------------------------------------------------------
380 // Get the IP, Subnetmask, Geteway from WAN interface and set nvram
381 static void start_tmp_ppp(int num
, char *ifname
)
387 TRACE_PT("begin: num=%d\n", num
);
389 if (num
!= 0) return;
391 // Wait for ppp0 to be created
393 while ((ifconfig(ifname
, IFUP
, NULL
, NULL
) != 0) && (timeout
-- > 0)) {
395 _dprintf("[%d] waiting for %s %d...\n", __LINE__
, ifname
, timeout
);
398 if ((s
= socket(AF_INET
, SOCK_RAW
, IPPROTO_RAW
)) < 0) return;
399 strlcpy(ifr
.ifr_name
, ifname
, IFNAMSIZ
);
401 // Set temporary IP address
403 while (ioctl(s
, SIOCGIFADDR
, &ifr
) && timeout
--){
404 _dprintf("[%d] waiting for %s...\n", __LINE__
, ifname
);
407 nvram_set("wan_ipaddr", inet_ntoa(sin_addr(&(ifr
.ifr_addr
))));
408 nvram_set("wan_netmask", "255.255.255.255");
410 // Set temporary P-t-P address
412 while (ioctl(s
, SIOCGIFDSTADDR
, &ifr
) && timeout
--){
413 _dprintf("[%d] waiting for %s...\n", __LINE__
, ifname
);
416 nvram_set("wan_gateway", inet_ntoa(sin_addr(&(ifr
.ifr_dstaddr
))));
420 start_wan_done(ifname
);
424 void start_pppoe(int num
)
428 TRACE_PT("begin pppoe_num=%d\n", num
);
430 if (num
!= 0) return;
434 snprintf(ifname
, sizeof(ifname
), "ppp%d", num
);
438 if (nvram_match( "wan_proto", "ppp3g") ) {
439 if (config_pppd(WP_PPP3G
, num
) != 0)
444 if (config_pppd(WP_PPPOE
, num
) != 0)
453 if (nvram_get_int("ppp_demand"))
454 start_tmp_ppp(num
, ifname
);
456 ifconfig(ifname
, IFUP
, NULL
, NULL
);
461 void stop_pppoe(void)
469 void stop_singe_pppoe(int num
)
471 _dprintf("%s pppoe_num=%d\n", __FUNCTION__
, num
);
475 if (num
!= 0) return;
477 i
= nvram_get_int("pppoe_pid0");
478 if ((i
> 1) && (kill(i
, SIGTERM
) == 0)) {
481 } while (kill(i
, SIGKILL
) == 0);
484 unlink(ppp_linkfile
);
485 nvram_unset("pppoe_ifname0");
487 nvram_set("wan_get_dns", "");
492 // -----------------------------------------------------------------------------
494 inline void stop_l2tp(void)
499 void start_l2tp(void)
508 if (config_pppd(WP_L2TP
, 0) != 0)
511 demand
= nvram_get_int("ppp_demand");
513 /* Generate XL2TPD configuration file */
514 if ((fp
= fopen("/etc/xl2tpd.conf", "w")) == NULL
)
518 "access control = no\n"
522 "tx bps = 100000000\n"
525 "max redials = 32767\n"
526 "redial timeout = %d\n"
528 nvram_safe_get("l2tp_server_ip"),
530 demand
? 30 : (nvram_get_int("ppp_redialperiod") ? : 30),
531 nvram_get_int("debug_ppp") ? "yes" : "no");
539 eval("listen", nvram_safe_get("lan_ifname"));
549 // -----------------------------------------------------------------------------
551 char *wan_gateway(void)
553 char *gw
= nvram_safe_get("wan_gateway_get");
554 if ((*gw
== 0) || (strcmp(gw
, "0.0.0.0") == 0))
555 gw
= nvram_safe_get("wan_gateway");
559 // -----------------------------------------------------------------------------
561 // trigger connect on demand
562 void force_to_dial(void)
567 switch (get_wan_proto()) {
569 f_write_string("/var/run/l2tp-control", "c l2tp", 0, 0);
572 eval("ping", "-c", "2", "10.112.112.112");
578 eval("ping", "-c", "2", wan_gateway());
585 // -----------------------------------------------------------------------------
587 static void _do_wan_routes(char *ifname
, char *nvname
, int metric
, int add
)
594 // IP[/MASK] ROUTER IP2[/MASK2] ROUTER2 ...
595 tmp
= routes
= strdup(nvram_safe_get(nvname
));
596 while (tmp
&& *tmp
) {
597 char *ipaddr
, *gateway
, *nmask
;
599 ipaddr
= nmask
= strsep(&tmp
, " ");
600 strcpy(netmask
, "255.255.255.255");
603 ipaddr
= strsep(&nmask
, "/");
604 if (nmask
&& *nmask
) {
605 bits
= strtol(nmask
, &nmask
, 10);
606 if (bits
>= 1 && bits
<= 32) {
607 mask
.s_addr
= htonl(0xffffffff << (32 - bits
));
608 strcpy(netmask
, inet_ntoa(mask
));
612 gateway
= strsep(&tmp
, " ");
614 if (gateway
&& *gateway
) {
616 route_add(ifname
, metric
, ipaddr
, gateway
, netmask
);
618 route_del(ifname
, metric
, ipaddr
, gateway
, netmask
);
624 void do_wan_routes(char *ifname
, int metric
, int add
)
626 if (nvram_get_int("dhcp_routes")) {
627 // Static Routes: IP ROUTER IP2 ROUTER2 ...
628 // Classless Static Routes: IP/MASK ROUTER IP2/MASK2 ROUTER2 ...
629 _do_wan_routes(ifname
, "wan_routes1", metric
, add
);
630 _do_wan_routes(ifname
, "wan_routes2", metric
, add
);
634 // -----------------------------------------------------------------------------
636 const char wan_connecting
[] = "/var/lib/misc/wan.connecting";
638 static int is_sta(int idx
, int unit
, int subunit
, void *param
)
642 if (nvram_match(wl_nvname("mode", unit
, subunit
), "sta")) {
643 *p
= nvram_safe_get(wl_nvname("ifname", unit
, subunit
));
649 void start_wan(int mode
)
665 f_write(wan_connecting
, NULL
, 0, 0, 0);
669 if (!foreach_wif(1, &p
, is_sta
)) {
670 p
= nvram_safe_get("wan_ifnameX");
671 /* vlan ID mapping */
672 if (sscanf(p
, "vlan%d", &vid
) == 1) {
673 vlan0tag
= nvram_get_int("vlan0tag");
674 snprintf(buf
, sizeof(buf
), "vlan%dvid", vid
);
675 vid_map
= nvram_get_int(buf
);
676 if ((vid_map
< 1) || (vid_map
> 4094)) vid_map
= vlan0tag
| vid
;
677 snprintf(buf
, sizeof(buf
), "vlan%d", vid_map
);
680 set_mac(p
, "mac_wan", 1);
682 nvram_set("wan_ifname", p
);
683 nvram_set("wan_ifnames", p
);
687 wan_ifname
= nvram_safe_get("wan_ifname");
688 if (wan_ifname
[0] == 0) {
690 nvram_set("wan_ifname", wan_ifname
);
693 if (strcmp(wan_ifname
, "none") == 0) {
694 nvram_set("wan_proto", "disabled");
695 syslog(LOG_INFO
, "No WAN");
700 wan_proto
= get_wan_proto();
702 // set the default gateway for WAN interface
703 nvram_set("wan_gateway_get", nvram_safe_get("wan_gateway"));
705 if (wan_proto
== WP_DISABLED
) {
706 start_wan_done(wan_ifname
);
710 if ((sd
= socket(AF_INET
, SOCK_RAW
, IPPROTO_RAW
)) < 0) {
730 if (nvram_match("mtu_enable", "0")) {
734 mtu
= nvram_get_int("wan_mtu");
735 if (mtu
> max
) mtu
= max
;
736 else if (mtu
< 576) mtu
= 576;
738 sprintf(buf
, "%d", mtu
);
739 nvram_set("wan_mtu", buf
);
740 nvram_set("wan_run_mtu", buf
);
742 // 43011: zhijian 2006-12-25 for CD-Router v3.4 mtu bug of PPTP connection mode
743 /* if (wan_proto == WP_PPTP) {
745 } */ // commented out; checkme -- zzz
747 if (wan_proto
!= WP_PPTP
&& wan_proto
!= WP_L2TP
&& wan_proto
!= WP_PPPOE
) {
748 // Don't set the MTU on the port for PPP connections, it will be set on the link instead
750 strcpy(ifr
.ifr_name
, wan_ifname
);
751 ioctl(sd
, SIOCSIFMTU
, &ifr
);
756 ifconfig(wan_ifname
, IFUP
, NULL
, NULL
);
760 set_host_domain_name();
774 else if (wan_proto
!= WP_DHCP
) {
775 ifconfig(wan_ifname
, IFUP
, "0.0.0.0", NULL
);
776 ifconfig(wan_ifname
, IFUP
, nvram_safe_get("wan_ipaddr"), nvram_safe_get("wan_netmask"));
778 p
= nvram_safe_get("wan_gateway");
779 if ((*p
!= 0) && (strcmp(p
, "0.0.0.0") != 0))
780 preset_wan(wan_ifname
, p
, nvram_safe_get("wan_netmask"));
793 nvram_set("wan_iface", wan_ifname
);
794 ifconfig(wan_ifname
, IFUP
, nvram_safe_get("wan_ipaddr"), nvram_safe_get("wan_netmask"));
797 while ((!check_wanup()) && (r
-- > 0)) {
801 start_wan_done(wan_ifname
);
805 // Get current WAN hardware address
806 strlcpy(ifr
.ifr_name
, wan_ifname
, IFNAMSIZ
);
807 if (ioctl(sd
, SIOCGIFHWADDR
, &ifr
) == 0) {
808 nvram_set("wan_hwaddr", ether_etoa(ifr
.ifr_hwaddr
.sa_data
, buf
));
811 /* Set initial QoS mode again now that WAN port is ready. */
818 led(LED_DIAG
, 0); // for 4712, 5325E (?)
819 led(LED_DMZ
, nvram_match("dmz_enable", "1"));
825 void start_wan6_done(const char *wan_ifname
)
827 struct in_addr addr4
;
828 struct in6_addr addr
;
829 static char addr6
[INET6_ADDRSTRLEN
];
831 int service
= get_ipv6_service();
833 if (service
!= IPV6_DISABLED
) {
834 if ((nvram_get_int("ipv6_accept_ra") & 1) != 0)
835 accept_ra(wan_ifname
);
840 eval("ip", "route", "add", "::/0", "dev", (char *)wan_ifname
, "metric", "2048");
842 case IPV6_NATIVE_DHCP
:
843 eval("ip", "route", "add", "::/0", "dev", (char *)wan_ifname
);
847 case IPV6_ANYCAST_6TO4
:
850 if (service
== IPV6_ANYCAST_6TO4
) {
852 memset(&addr
, 0, sizeof(addr
));
853 inet_aton(get_wanip(), &addr4
);
854 addr
.s6_addr16
[0] = htons(0x2002);
855 ipv6_mapaddr4(&addr
, 16, &addr4
, 0);
856 addr
.s6_addr16
[3] = htons(0x0001);
857 inet_ntop(AF_INET6
, &addr
, addr6
, sizeof(addr6
));
858 nvram_set("ipv6_prefix", addr6
);
861 // FIXME: give it a few seconds for DAD completion
868 // ppp_demand: 0=keep alive, 1=connect on demand (run 'listen')
870 // wan_iface: ppp# (PPPOE, PPP3G, PPTP, L2TP), vlan1 (DHCP, HB, Static)
872 void start_wan_done(char *wan_ifname
)
880 TRACE_PT("begin wan_ifname=%s\n", wan_ifname
);
883 f_write("/var/lib/misc/wantime", &si
.uptime
, sizeof(si
.uptime
), 0, 0);
885 proto
= get_wan_proto();
887 // delete all default routes
888 route_del(wan_ifname
, 0, NULL
, NULL
, NULL
);
890 if (proto
!= WP_DISABLED
) {
891 // set default route to gateway if specified
894 if (proto
== WP_PPTP
&& !using_dhcpc()) {
895 // For PPTP protocol, we must use ppp_get_ip as gateway, not pptp_server_ip (why ??)
896 if (*gw
== 0 || strcmp(gw
, "0.0.0.0") == 0) gw
= nvram_safe_get("ppp_get_ip");
899 if ((*gw
!= 0) && (strcmp(gw
, "0.0.0.0") != 0)) {
900 if (proto
== WP_DHCP
|| proto
== WP_STATIC
) {
901 // possibly gateway is over the bridge, try adding a route to gateway first
902 route_add(wan_ifname
, 0, gw
, NULL
, "255.255.255.255");
906 while ((route_add(wan_ifname
, 0, "0.0.0.0", gw
, "0.0.0.0") == 1) && (n
--)) {
909 _dprintf("set default gateway=%s n=%d\n", gw
, n
);
911 // hack: avoid routing cycles, when both peer and server have the same IP
912 if (proto
== WP_PPTP
|| proto
== WP_L2TP
) {
913 // delete gateway route as it's no longer needed
914 route_del(wan_ifname
, 0, gw
, "0.0.0.0", "255.255.255.255");
918 #ifdef THREE_ARP_GRATUATOUS_SUPPORT // from 43011; checkme; commented-out -- zzz
920 // 43011: Alpha add to send Gratuitous ARP when wan_proto is Static IP 2007-04-09
921 if (proto == WP_STATIC)
925 unsigned char wan_mac[6];
927 if (read_iface(nvram_safe_get("wan_iface"), &ifindex, &wan_ip, wan_mac) >= 0)
928 arpping(wan_ip, wan_ip, wan_mac, nvram_safe_get("wan_iface"));
933 if (proto
== WP_PPTP
|| proto
== WP_L2TP
) {
934 route_del(nvram_safe_get("wan_iface"), 0, nvram_safe_get("wan_gateway_get"), NULL
, "255.255.255.255");
935 route_add(nvram_safe_get("wan_iface"), 0, nvram_safe_get("ppp_get_ip"), NULL
, "255.255.255.255");
937 if (proto
== WP_L2TP
) {
938 route_add(nvram_safe_get("wan_ifname"), 0, nvram_safe_get("l2tp_server_ip"), nvram_safe_get("wan_gateway"), "255.255.255.255"); // fixed routing problem in Israel by kanki
949 // and routes supplied via DHCP
950 do_wan_routes(using_dhcpc() ? nvram_safe_get("wan_ifname") : wan_ifname
, 0, 1);
955 wanup
= check_wanup();
957 if ((wanup
) || (time(0) < Y2K
)) {
962 if ((wanup
) || (proto
== WP_DISABLED
)) {
972 start_wan6_done(get_wan6face());
983 notice_set("wan", "");
985 run_nvscript("script_wanup", NULL
, 0);
988 // We don't need STP after wireless led is lighted // no idea why... toggling it if necessary -- zzz
989 if (check_hw_type() == HW_BCM4702
) {
990 eval("brctl", "stp", nvram_safe_get("lan_ifname"), "0");
991 if (nvram_match("lan_stp", "1"))
992 eval("brctl", "stp", nvram_safe_get("lan_ifname"), "1");
993 if(strcmp(nvram_safe_get("lan1_ifname"),"")!=0) {
994 eval("brctl", "stp", nvram_safe_get("lan1_ifname"), "0");
995 if (nvram_match("lan1_stp", "1"))
996 eval("brctl", "stp", nvram_safe_get("lan1_ifname"), "1");
998 if(strcmp(nvram_safe_get("lan2_ifname"),"")!=0) {
999 eval("brctl", "stp", nvram_safe_get("lan2_ifname"), "0");
1000 if (nvram_match("lan2_stp", "1"))
1001 eval("brctl", "stp", nvram_safe_get("lan2_ifname"), "1");
1003 if(strcmp(nvram_safe_get("lan3_ifname"),"")!=0) {
1004 eval("brctl", "stp", nvram_safe_get("lan3_ifname"), "0");
1005 if (nvram_match("lan3_stp", "1"))
1006 eval("brctl", "stp", nvram_safe_get("lan3_ifname"), "1");
1013 #ifdef TCONFIG_USERPPTP
1014 if (wanup
&& nvram_get_int("pptp_client_enable"))
1015 start_pptp_client();
1018 unlink(wan_connecting
);
1020 new_qoslimit_start(); //!! RAF
1030 TRACE_PT("begin\n");
1032 #ifdef TCONFIG_USERPPTP
1039 new_qoslimit_stop(); //!! RAF
1042 stop_upnp(); //!!TB - moved from stop_services()
1051 nvram_set("ipv6_get_dns", "");
1054 /* Kill any WAN client daemons or callbacks */
1059 if (nvram_get_int("pptp_client_enable"))
1062 nvram_set("wan_get_dns", "");
1064 /* Bring down WAN interfaces */
1065 foreach(name
, nvram_safe_get("wan_ifnames"), next
)
1066 ifconfig(name
, 0, "0.0.0.0", NULL
);
1068 SET_LED(RELEASE_IP
);
1069 //notice_set("wan", "");
1070 unlink("/var/notice/wan");
1071 unlink(wan_connecting
);