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")) {
193 if ((cfp
= fopen(ppp3g_chatfile
, "w")) == NULL
) {
194 perror(ppp3g_chatfile
);
198 "ABORT \"NO CARRIER\"\n"
199 "ABORT \"NO DIALTONE\"\n"
200 "ABORT \"NO ERROR\"\n"
201 "ABORT \"NO ANSWER\"\n"
205 /* moved to switch3g script
206 if (strlen(nvram_get("modem_pin")) >0 ) {
209 "OK \"AT+CPIN=%s\"\n"
211 nvram_get("modem_pin"));
215 "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
219 "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
221 "OK 'AT+CGDCONT=1,\"IP\",\"%s\"'\n"
224 nvram_safe_get("modem_apn"),
225 nvram_safe_get("modem_init")
230 if (nvram_match("usb_3g", "1")) {
232 if (strlen(nvram_get("wan_gateway")) >0 ) {
233 nvram_set("wan_gateway", "");
243 fprintf(fp
, "nomppe nomppc\n");
244 if (nvram_get_int("mtu_enable"))
245 fprintf(fp
, "mtu %d\n", nvram_get_int("wan_mtu"));
252 "demand\n" // Dial on demand
254 "ipcp-accept-remote\n"
255 "ipcp-accept-local\n"
256 "noipdefault\n" // Disables the default behaviour when no local IP address is specified
257 "ktune\n", // Set /proc/sys/net/ipv4/ip_dynaddr to 1 in demand mode if the local address changes
258 nvram_get_int("ppp_idletime") * 60);
262 switch (get_ipv6_service()) {
264 case IPV6_NATIVE_DHCP
:
265 fprintf(fp
, "+ipv6\n");
269 // User specific options
270 fprintf(fp
, "%s\n", nvram_safe_get("ppp_custom"));
279 static void stop_ppp(void)
283 unlink(ppp_linkfile
);
286 killall_tk("ip-down");
288 killall_tk("ipv6-up");
289 killall_tk("ipv6-down");
291 killall_tk("xl2tpd");
293 killall_tk("listen");
298 static void run_pppd(void)
300 eval("pppd", "file", ppp_optfile
);
302 if (nvram_get_int("ppp_demand")) {
305 Fixed issue id 7887(or 7787):
306 When DUT is PPTP Connect on Demand mode, it couldn't be trigger from LAN.
312 // Trigger Connect On Demand if user ping pptp server
313 eval("listen", nvram_safe_get("lan_ifname"));
321 // -----------------------------------------------------------------------------
323 inline void stop_pptp(void)
328 void start_pptp(int mode
)
332 if (!using_dhcpc()) stop_dhcpc();
335 if (config_pppd(WP_PPTP
, 0) != 0)
343 // -----------------------------------------------------------------------------
345 void preset_wan(char *ifname
, char *gw
, char *netmask
)
349 /* Delete all default routes */
350 route_del(ifname
, 0, NULL
, NULL
, NULL
);
352 /* try adding a route to gateway first */
353 route_add(ifname
, 0, gw
, NULL
, "255.255.255.255");
355 /* Set default route to gateway if specified */
357 while ((route_add(ifname
, 1, "0.0.0.0", gw
, "0.0.0.0") == 1) && (i
--)) {
360 _dprintf("set default gateway=%s n=%d\n", gw
, i
);
362 /* Add routes to dns servers as well for demand ppp to work */
363 char word
[100], *next
;
364 in_addr_t mask
= inet_addr(netmask
);
365 foreach(word
, nvram_safe_get("wan_get_dns"), next
) {
366 if ((inet_addr(word
) & mask
) != (inet_addr(nvram_safe_get("wan_ipaddr")) & mask
))
367 route_add(ifname
, 0, word
, gw
, "255.255.255.255");
376 // -----------------------------------------------------------------------------
379 // Get the IP, Subnetmask, Geteway from WAN interface and set nvram
380 static void start_tmp_ppp(int num
, char *ifname
)
386 TRACE_PT("begin: num=%d\n", num
);
388 if (num
!= 0) return;
390 // Wait for ppp0 to be created
392 while ((ifconfig(ifname
, IFUP
, NULL
, NULL
) != 0) && (timeout
-- > 0)) {
394 _dprintf("[%d] waiting for %s %d...\n", __LINE__
, ifname
, timeout
);
397 if ((s
= socket(AF_INET
, SOCK_RAW
, IPPROTO_RAW
)) < 0) return;
398 strlcpy(ifr
.ifr_name
, ifname
, IFNAMSIZ
);
400 // Set temporary IP address
402 while (ioctl(s
, SIOCGIFADDR
, &ifr
) && timeout
--){
403 _dprintf("[%d] waiting for %s...\n", __LINE__
, ifname
);
406 nvram_set("wan_ipaddr", inet_ntoa(sin_addr(&(ifr
.ifr_addr
))));
407 nvram_set("wan_netmask", "255.255.255.255");
409 // Set temporary P-t-P address
411 while (ioctl(s
, SIOCGIFDSTADDR
, &ifr
) && timeout
--){
412 _dprintf("[%d] waiting for %s...\n", __LINE__
, ifname
);
415 nvram_set("wan_gateway", inet_ntoa(sin_addr(&(ifr
.ifr_dstaddr
))));
419 start_wan_done(ifname
);
423 void start_pppoe(int num
)
427 TRACE_PT("begin pppoe_num=%d\n", num
);
429 if (num
!= 0) return;
433 snprintf(ifname
, sizeof(ifname
), "ppp%d", num
);
437 if (nvram_match( "wan_proto", "ppp3g") ) {
438 if (config_pppd(WP_PPP3G
, num
) != 0)
443 if (config_pppd(WP_PPPOE
, num
) != 0)
452 if (nvram_get_int("ppp_demand"))
453 start_tmp_ppp(num
, ifname
);
455 ifconfig(ifname
, IFUP
, NULL
, NULL
);
460 void stop_pppoe(void)
468 void stop_singe_pppoe(int num
)
470 _dprintf("%s pppoe_num=%d\n", __FUNCTION__
, num
);
474 if (num
!= 0) return;
476 i
= nvram_get_int("pppoe_pid0");
477 if ((i
> 1) && (kill(i
, SIGTERM
) == 0)) {
480 } while (kill(i
, SIGKILL
) == 0);
483 unlink(ppp_linkfile
);
484 nvram_unset("pppoe_ifname0");
486 nvram_set("wan_get_dns", "");
491 // -----------------------------------------------------------------------------
493 inline void stop_l2tp(void)
498 void start_l2tp(void)
507 if (config_pppd(WP_L2TP
, 0) != 0)
510 demand
= nvram_get_int("ppp_demand");
512 /* Generate XL2TPD configuration file */
513 if ((fp
= fopen("/etc/xl2tpd.conf", "w")) == NULL
)
517 "access control = no\n"
521 "tx bps = 100000000\n"
524 "max redials = 32767\n"
525 "redial timeout = %d\n"
529 nvram_safe_get("l2tp_server_ip"),
531 demand
? 30 : (nvram_get_int("ppp_redialperiod") ? : 30),
532 nvram_get_int("debug_ppp") ? "yes" : "no",
533 nvram_safe_get("xl2tpd_custom"));
534 fappend(fp
, "/etc/xl2tpd.custom");
542 eval("listen", nvram_safe_get("lan_ifname"));
552 // -----------------------------------------------------------------------------
554 char *wan_gateway(void)
556 char *gw
= nvram_safe_get("wan_gateway_get");
557 if ((*gw
== 0) || (strcmp(gw
, "0.0.0.0") == 0))
558 gw
= nvram_safe_get("wan_gateway");
562 // -----------------------------------------------------------------------------
564 // trigger connect on demand
565 void force_to_dial(void)
570 switch (get_wan_proto()) {
572 f_write_string("/var/run/l2tp-control", "c l2tp", 0, 0);
575 eval("ping", "-c", "2", "10.112.112.112");
581 eval("ping", "-c", "2", wan_gateway());
588 // -----------------------------------------------------------------------------
590 static void _do_wan_routes(char *ifname
, char *nvname
, int metric
, int add
)
597 // IP[/MASK] ROUTER IP2[/MASK2] ROUTER2 ...
598 tmp
= routes
= strdup(nvram_safe_get(nvname
));
599 while (tmp
&& *tmp
) {
600 char *ipaddr
, *gateway
, *nmask
;
602 ipaddr
= nmask
= strsep(&tmp
, " ");
603 strcpy(netmask
, "255.255.255.255");
606 ipaddr
= strsep(&nmask
, "/");
607 if (nmask
&& *nmask
) {
608 bits
= strtol(nmask
, &nmask
, 10);
609 if (bits
>= 1 && bits
<= 32) {
610 mask
.s_addr
= htonl(0xffffffff << (32 - bits
));
611 strcpy(netmask
, inet_ntoa(mask
));
615 gateway
= strsep(&tmp
, " ");
617 if (gateway
&& *gateway
) {
619 route_add(ifname
, metric
, ipaddr
, gateway
, netmask
);
621 route_del(ifname
, metric
, ipaddr
, gateway
, netmask
);
627 void do_wan_routes(char *ifname
, int metric
, int add
)
629 if (nvram_get_int("dhcp_routes")) {
630 // Static Routes: IP ROUTER IP2 ROUTER2 ...
631 // Classless Static Routes: IP/MASK ROUTER IP2/MASK2 ROUTER2 ...
632 _do_wan_routes(ifname
, "wan_routes1", metric
, add
);
633 _do_wan_routes(ifname
, "wan_routes2", metric
, add
);
637 // -----------------------------------------------------------------------------
639 const char wan_connecting
[] = "/var/lib/misc/wan.connecting";
641 static int is_sta(int idx
, int unit
, int subunit
, void *param
)
645 if (nvram_match(wl_nvname("mode", unit
, subunit
), "sta")) {
646 *p
= nvram_safe_get(wl_nvname("ifname", unit
, subunit
));
652 void start_wan(int mode
)
668 f_write(wan_connecting
, NULL
, 0, 0, 0);
672 if (!foreach_wif(1, &p
, is_sta
)) {
673 p
= nvram_safe_get("wan_ifnameX");
674 /* vlan ID mapping */
675 if (sscanf(p
, "vlan%d", &vid
) == 1) {
676 vlan0tag
= nvram_get_int("vlan0tag");
677 snprintf(buf
, sizeof(buf
), "vlan%dvid", vid
);
678 vid_map
= nvram_get_int(buf
);
679 if ((vid_map
< 1) || (vid_map
> 4094)) vid_map
= vlan0tag
| vid
;
680 snprintf(buf
, sizeof(buf
), "vlan%d", vid_map
);
683 set_mac(p
, "mac_wan", 1);
685 nvram_set("wan_ifname", p
);
686 nvram_set("wan_ifnames", p
);
690 wan_ifname
= nvram_safe_get("wan_ifname");
691 if (wan_ifname
[0] == 0) {
693 nvram_set("wan_ifname", wan_ifname
);
696 if (strcmp(wan_ifname
, "none") == 0) {
697 nvram_set("wan_proto", "disabled");
698 syslog(LOG_INFO
, "No WAN");
703 wan_proto
= get_wan_proto();
705 // set the default gateway for WAN interface
706 nvram_set("wan_gateway_get", nvram_safe_get("wan_gateway"));
708 if (wan_proto
== WP_DISABLED
) {
709 start_wan_done(wan_ifname
);
713 if ((sd
= socket(AF_INET
, SOCK_RAW
, IPPROTO_RAW
)) < 0) {
733 if (nvram_match("mtu_enable", "0")) {
737 mtu
= nvram_get_int("wan_mtu");
738 if (mtu
> max
) mtu
= max
;
739 else if (mtu
< 576) mtu
= 576;
741 sprintf(buf
, "%d", mtu
);
742 nvram_set("wan_mtu", buf
);
743 nvram_set("wan_run_mtu", buf
);
745 // 43011: zhijian 2006-12-25 for CD-Router v3.4 mtu bug of PPTP connection mode
746 /* if (wan_proto == WP_PPTP) {
748 } */ // commented out; checkme -- zzz
750 if (wan_proto
!= WP_PPTP
&& wan_proto
!= WP_L2TP
&& wan_proto
!= WP_PPPOE
) {
751 // Don't set the MTU on the port for PPP connections, it will be set on the link instead
753 strcpy(ifr
.ifr_name
, wan_ifname
);
754 ioctl(sd
, SIOCSIFMTU
, &ifr
);
759 ifconfig(wan_ifname
, IFUP
, NULL
, NULL
);
763 set_host_domain_name();
777 else if (wan_proto
!= WP_DHCP
) {
778 ifconfig(wan_ifname
, IFUP
, "0.0.0.0", NULL
);
779 ifconfig(wan_ifname
, IFUP
, nvram_safe_get("wan_ipaddr"), nvram_safe_get("wan_netmask"));
781 p
= nvram_safe_get("wan_gateway");
782 if ((*p
!= 0) && (strcmp(p
, "0.0.0.0") != 0))
783 preset_wan(wan_ifname
, p
, nvram_safe_get("wan_netmask"));
796 nvram_set("wan_iface", wan_ifname
);
797 ifconfig(wan_ifname
, IFUP
, nvram_safe_get("wan_ipaddr"), nvram_safe_get("wan_netmask"));
800 while ((!check_wanup()) && (r
-- > 0)) {
804 start_wan_done(wan_ifname
);
808 // Get current WAN hardware address
809 strlcpy(ifr
.ifr_name
, wan_ifname
, IFNAMSIZ
);
810 if (ioctl(sd
, SIOCGIFHWADDR
, &ifr
) == 0) {
811 nvram_set("wan_hwaddr", ether_etoa(ifr
.ifr_hwaddr
.sa_data
, buf
));
814 /* Set initial QoS mode again now that WAN port is ready. */
821 led(LED_DIAG
, 0); // for 4712, 5325E (?)
822 led(LED_DMZ
, nvram_match("dmz_enable", "1"));
828 void start_wan6_done(const char *wan_ifname
)
830 struct in_addr addr4
;
831 struct in6_addr addr
;
832 static char addr6
[INET6_ADDRSTRLEN
];
834 int service
= get_ipv6_service();
836 if (service
!= IPV6_DISABLED
) {
837 if ((nvram_get_int("ipv6_accept_ra") & 1) != 0)
838 accept_ra(wan_ifname
);
843 eval("ip", "route", "add", "::/0", "dev", (char *)wan_ifname
, "metric", "2048");
845 case IPV6_NATIVE_DHCP
:
846 eval("ip", "route", "add", "::/0", "dev", (char *)wan_ifname
);
850 case IPV6_ANYCAST_6TO4
:
853 if (service
== IPV6_ANYCAST_6TO4
) {
855 memset(&addr
, 0, sizeof(addr
));
856 inet_aton(get_wanip(), &addr4
);
857 addr
.s6_addr16
[0] = htons(0x2002);
858 ipv6_mapaddr4(&addr
, 16, &addr4
, 0);
859 addr
.s6_addr16
[3] = htons(0x0001);
860 inet_ntop(AF_INET6
, &addr
, addr6
, sizeof(addr6
));
861 nvram_set("ipv6_prefix", addr6
);
864 // FIXME: give it a few seconds for DAD completion
871 // ppp_demand: 0=keep alive, 1=connect on demand (run 'listen')
873 // wan_iface: ppp# (PPPOE, PPP3G, PPTP, L2TP), vlan1 (DHCP, HB, Static)
875 void start_wan_done(char *wan_ifname
)
883 TRACE_PT("begin wan_ifname=%s\n", wan_ifname
);
886 f_write("/var/lib/misc/wantime", &si
.uptime
, sizeof(si
.uptime
), 0, 0);
888 proto
= get_wan_proto();
890 // delete all default routes
891 route_del(wan_ifname
, 0, NULL
, NULL
, NULL
);
893 if (proto
!= WP_DISABLED
) {
894 // set default route to gateway if specified
897 if (proto
== WP_PPTP
&& !using_dhcpc()) {
898 // For PPTP protocol, we must use ppp_get_ip as gateway, not pptp_server_ip (why ??)
899 if (*gw
== 0 || strcmp(gw
, "0.0.0.0") == 0) gw
= nvram_safe_get("ppp_get_ip");
902 if ((*gw
!= 0) && (strcmp(gw
, "0.0.0.0") != 0)) {
903 if (proto
== WP_DHCP
|| proto
== WP_STATIC
) {
904 // possibly gateway is over the bridge, try adding a route to gateway first
905 route_add(wan_ifname
, 0, gw
, NULL
, "255.255.255.255");
909 while ((route_add(wan_ifname
, 0, "0.0.0.0", gw
, "0.0.0.0") == 1) && (n
--)) {
912 _dprintf("set default gateway=%s n=%d\n", gw
, n
);
914 // hack: avoid routing cycles, when both peer and server have the same IP
915 if (proto
== WP_PPTP
|| proto
== WP_L2TP
) {
916 // delete gateway route as it's no longer needed
917 route_del(wan_ifname
, 0, gw
, "0.0.0.0", "255.255.255.255");
921 #ifdef THREE_ARP_GRATUATOUS_SUPPORT // from 43011; checkme; commented-out -- zzz
923 // 43011: Alpha add to send Gratuitous ARP when wan_proto is Static IP 2007-04-09
924 if (proto == WP_STATIC)
928 unsigned char wan_mac[6];
930 if (read_iface(nvram_safe_get("wan_iface"), &ifindex, &wan_ip, wan_mac) >= 0)
931 arpping(wan_ip, wan_ip, wan_mac, nvram_safe_get("wan_iface"));
936 if (proto
== WP_PPTP
|| proto
== WP_L2TP
) {
937 route_del(nvram_safe_get("wan_iface"), 0, nvram_safe_get("wan_gateway_get"), NULL
, "255.255.255.255");
938 route_add(nvram_safe_get("wan_iface"), 0, nvram_safe_get("ppp_get_ip"), NULL
, "255.255.255.255");
940 if (proto
== WP_L2TP
) {
941 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
954 // and routes supplied via DHCP
955 do_wan_routes(using_dhcpc() ? nvram_safe_get("wan_ifname") : wan_ifname
, 0, 1);
960 wanup
= check_wanup();
962 if ((wanup
) || (time(0) < Y2K
)) {
967 if ((wanup
) || (proto
== WP_DISABLED
)) {
977 start_wan6_done(get_wan6face());
988 notice_set("wan", "");
990 run_nvscript("script_wanup", NULL
, 0);
993 // We don't need STP after wireless led is lighted // no idea why... toggling it if necessary -- zzz
994 if (check_hw_type() == HW_BCM4702
) {
995 eval("brctl", "stp", nvram_safe_get("lan_ifname"), "0");
996 if (nvram_match("lan_stp", "1"))
997 eval("brctl", "stp", nvram_safe_get("lan_ifname"), "1");
999 if(strcmp(nvram_safe_get("lan1_ifname"),"")!=0) {
1000 eval("brctl", "stp", nvram_safe_get("lan1_ifname"), "0");
1001 if (nvram_match("lan1_stp", "1"))
1002 eval("brctl", "stp", nvram_safe_get("lan1_ifname"), "1");
1004 if(strcmp(nvram_safe_get("lan2_ifname"),"")!=0) {
1005 eval("brctl", "stp", nvram_safe_get("lan2_ifname"), "0");
1006 if (nvram_match("lan2_stp", "1"))
1007 eval("brctl", "stp", nvram_safe_get("lan2_ifname"), "1");
1009 if(strcmp(nvram_safe_get("lan3_ifname"),"")!=0) {
1010 eval("brctl", "stp", nvram_safe_get("lan3_ifname"), "0");
1011 if (nvram_match("lan3_stp", "1"))
1012 eval("brctl", "stp", nvram_safe_get("lan3_ifname"), "1");
1020 #ifdef TCONFIG_USERPPTP
1021 if (wanup
&& nvram_get_int("pptp_client_enable"))
1022 start_pptp_client();
1025 unlink(wan_connecting
);
1035 TRACE_PT("begin\n");
1037 #ifdef TCONFIG_USERPPTP
1047 stop_upnp(); //!!TB - moved from stop_services()
1056 nvram_set("ipv6_get_dns", "");
1059 /* Kill any WAN client daemons or callbacks */
1065 nvram_set("wan_get_dns", "");
1067 /* Bring down WAN interfaces */
1068 foreach(name
, nvram_safe_get("wan_ifnames"), next
)
1069 ifconfig(name
, 0, "0.0.0.0", NULL
);
1071 SET_LED(RELEASE_IP
);
1072 //notice_set("wan", "");
1073 unlink("/var/notice/wan");
1074 unlink(wan_connecting
);