source: src/router/services/sysinit/sysinit.c @ 9124

Last change on this file since 9124 was 9124, checked in by BrainSlayer, 5 years ago

t-home/t-online vdsl support for gigabit routers

File size: 31.2 KB
Line 
1/*
2 * sysinit.c
3 *
4 * Copyright (C) 2007 Sebastian Gottschall <gottschall@dd-wrt.com>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19 *
20 * $Id:
21 */
22
23#include <stdio.h>
24#include <stdlib.h>
25#include <limits.h>
26#include <time.h>
27#include <unistd.h>
28#include <errno.h>
29#include <syslog.h>
30#include <signal.h>
31#include <string.h>
32#include <termios.h>
33
34#include <sys/klog.h>
35#include <sys/types.h>
36#include <sys/mount.h>
37#include <sys/reboot.h>
38#include <sys/stat.h>
39#include <sys/sysmacros.h>
40#include <sys/time.h>
41#include <sys/utsname.h>
42#include <sys/wait.h>
43#include <dirent.h>
44
45#include <epivers.h>
46#include <bcmnvram.h>
47#include <mtd.h>
48#include <shutils.h>
49#include <rc.h>
50#include <netconf.h>
51#include <nvparse.h>
52#include <bcmdevs.h>
53
54#include <wlutils.h>
55#include <utils.h>
56#include <cyutils.h>
57#include <code_pattern.h>
58#include <cy_conf.h>
59//#include <mkfiles.h>
60#include <typedefs.h>
61#include <bcmnvram.h>
62#include <bcmutils.h>
63#include <shutils.h>
64#include <wlutils.h>
65#include <cy_conf.h>
66#include <cymac.h>
67//#include <ledcontrol.h>
68
69
70#define WL_IOCTL(name, cmd, buf, len) (ret = wl_ioctl((name), (cmd), (buf), (len)))
71
72#define TXPWR_MAX 251
73#define TXPWR_DEFAULT 28
74
75void start_restore_defaults (void);
76static void rc_signal (int sig);
77extern void start_overclocking (void);
78extern int check_cfe_nv (void);
79extern int check_pmon_nv (void);
80static void unset_nvram (void);
81int start_nvram (void);
82
83extern struct nvram_tuple srouter_defaults[];
84
85
86
87int
88endswith (char *str, char *cmp)
89{
90  int cmp_len, str_len, i;
91  cmp_len = strlen (cmp);
92  str_len = strlen (str);
93  if (cmp_len > str_len)
94    return (0);
95  for (i = 0; i < cmp_len; i++)
96    {
97      if (str[(str_len - 1) - i] != cmp[(cmp_len - 1) - i])
98        return (0);
99    }
100  return (1);
101}
102
103
104
105
106#ifdef HAVE_MACBIND
107#include "../../../opt/mac.h"
108#endif
109void
110runStartup (char *folder, char *extension)
111{
112  struct dirent *entry;
113  DIR *directory;
114  unsigned char buf[128];
115  directory = opendir (folder);
116  if (directory == NULL)
117    {
118      return;
119    }
120//list all files in this directory
121  while ((entry = readdir (directory)) != NULL)
122    {
123      if (endswith (entry->d_name, extension))
124        {
125          sprintf (buf, "%s/%s 2>&1 > /dev/null&\n", folder, entry->d_name);
126          //execute script     
127          system2 (buf);
128        }
129    }
130  closedir (directory);
131}
132
133/* SeG dd-wrt addition for module startup scripts */
134int
135start_modules (void)
136{
137  runStartup ("/etc/config", ".startup");
138#ifndef HAVE_MADWIFI
139#ifdef HAVE_RADIOOFF
140  if (nvram_match ("radiooff_button", "1")
141      && nvram_match ("radiooff_boot_off", "1"))
142    eval ("wl", "-i", get_wl_instance_name (0), "radio", "off");
143#endif
144#endif
145#ifdef HAVE_RB500
146  runStartup ("/usr/local/etc/config", ".startup");     //if available
147#elif HAVE_X86
148  runStartup ("/usr/local/etc/config", ".startup");     //if available
149#else
150  runStartup ("/jffs/etc/config", ".startup");  //if available
151  runStartup ("/mmc/etc/config", ".startup");   //if available
152#endif
153  return 0;
154}
155
156int
157start_wanup (void)
158{
159  runStartup ("/etc/config", ".wanup");
160#ifdef HAVE_RB500
161  runStartup ("/usr/local/etc/config", ".wanup");       //if available
162#elif HAVE_X86
163  runStartup ("/usr/local/etc/config", ".wanup");       //if available
164#else
165  runStartup ("/jffs/etc/config", ".wanup");    //if available
166  runStartup ("/mmc/etc/config", ".wanup");     //if available
167  runStartup ("/tmp/etc/config", ".wanup");     //if available
168#endif
169  return 0;
170}
171
172
173
174
175int
176start_create_rc_startup (void)
177{
178  create_rc_file (RC_STARTUP);
179  return 0;
180}
181
182int
183start_create_rc_shutdown (void)
184{
185  create_rc_file (RC_SHUTDOWN);
186  return 0;
187}
188
189
190int
191create_rc_file (char *name)
192{
193  FILE *fp;
194  char *p = nvram_safe_get (name);
195  char tmp_file[100] = { 0 };
196
197  if ((void *) 0 == name || 0 == p[0])
198    return -1;
199
200  snprintf (tmp_file, 100, "/tmp/.%s", name);
201  unlink (tmp_file);
202
203  fp = fopen (tmp_file, "w");
204  if (fp)
205    {
206      // filter Windows <cr>ud
207      while (*p)
208        {
209          if (*p != 0x0d)
210            fprintf (fp, "%c", *p);
211          p++;
212        }
213    }
214  fclose (fp);
215  chmod (tmp_file, 0700);
216
217  return 0;
218}
219
220static void
221ses_cleanup (void)
222{
223  /* well known event to cleanly initialize state machine */
224  nvram_set ("ses_event", "2");
225
226  /* Delete lethal dynamically generated variables */
227  nvram_unset ("ses_bridge_disable");
228}
229
230static void
231ses_restore_defaults (void)
232{
233  char tmp[100], prefix[] = "wlXXXXXXXXXX_ses_";
234  int i;
235
236  /* Delete dynamically generated variables */
237  for (i = 0; i < MAX_NVPARSE; i++)
238    {
239      sprintf (prefix, "wl%d_ses_", i);
240      nvram_unset (strcat_r (prefix, "ssid", tmp));
241      nvram_unset (strcat_r (prefix, "closed", tmp));
242      nvram_unset (strcat_r (prefix, "wpa_psk", tmp));
243      nvram_unset (strcat_r (prefix, "auth", tmp));
244      nvram_unset (strcat_r (prefix, "wep", tmp));
245      nvram_unset (strcat_r (prefix, "auth_mode", tmp));
246      nvram_unset (strcat_r (prefix, "crypto", tmp));
247      nvram_unset (strcat_r (prefix, "akm", tmp));
248    }
249}
250
251void
252start_restore_defaults (void)
253{
254
255#ifdef HAVE_RB500
256  struct nvram_tuple generic[] = {
257    {"lan_ifname", "br0", 0},
258    {"lan_ifnames",
259     "eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8 ath0 ath1 ath2 ath3 ath4 ath5",
260     0},
261    {"wan_ifname", "eth0", 0},
262    {"wan_ifnames", "eth0", 0},
263    {0, 0, 0}
264  };
265#elif HAVE_GEMTEK
266  struct nvram_tuple generic[] = {
267    {"lan_ifname", "br0", 0},
268    {"lan_ifnames", "eth1 ath0", 0},
269    {"wan_ifname", "eth0", 0},
270    {"wan_ifnames", "eth0", 0},
271    {0, 0, 0}
272  };
273#elif HAVE_GATEWORX
274  struct nvram_tuple generic[] = {
275    {"lan_ifname", "br0", 0},
276    {"lan_ifnames", "ixp0 ath0 ath1 ath2 ath3",
277     0},
278    {"wan_ifname2", "ixp1", 0},
279    {"wan_ifname", "ixp1", 0},
280    {"wan_ifnames", "ixp1", 0},
281    {0, 0, 0}
282  };
283#elif HAVE_X86
284  struct nvram_tuple generic[] = {
285    {"lan_ifname", "br0", 0},
286#ifdef HAVE_NOWIFI
287    {"lan_ifnames", "eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9 eth10", 0},
288#else
289#ifdef HAVE_GW700
290    {"lan_ifnames",
291     "eth0 eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9 eth10 ath0 ath1 ath2 ath3 ath5 ath6 ath7 ath8",
292     0},
293#else
294    {"lan_ifnames",
295     "eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9 eth10 ath0 ath1 ath2 ath3 ath5 ath6 ath7 ath8",
296     0},
297#endif
298#endif
299#ifdef HAVE_GW700
300    {"wan_ifname", "eth1", 0},
301    {"wan_ifname2", "eth1", 0},
302    {"wan_ifnames", "eth1", 0},
303#else
304    {"wan_ifname", "eth0", 0},
305    {"wan_ifname2", "eth0", 0},
306    {"wan_ifnames", "eth0", 0},
307#endif
308    {0, 0, 0}
309  };
310#elif HAVE_XSCALE
311  struct nvram_tuple generic[] = {
312    {"lan_ifname", "br0", 0},
313    {"lan_ifnames",
314     "ixp0.1 ixp0.2 ath0 ath1",
315     0},
316    {"wan_ifname", "ixp1", 0},
317    {"wan_ifnames", "ixp1", 0},
318    {0, 0, 0}
319  };
320#elif HAVE_MAGICBOX
321  struct nvram_tuple generic[] = {
322    {"lan_ifname", "br0", 0},
323    {"lan_ifnames", "eth1 ath0",
324     0},
325    {"wan_ifname", "eth0", 0},
326    {"wan_ifnames", "eth0", 0},
327    {0, 0, 0}
328  };
329#elif HAVE_FONERA
330  struct nvram_tuple generic[] = {
331    {"lan_ifname", "br0", 0},
332    {"lan_ifnames", "vlan0 ath0", 0},
333    {"wan_ifname", "", 0},
334    {"wan_ifnames", "eth0 vlan1", 0},
335    {0, 0, 0}
336  };
337#elif HAVE_LS2
338  struct nvram_tuple generic[] = {
339    {"lan_ifname", "br0", 0},
340    {"lan_ifnames", "vlan1 ath0", 0},
341    {"wan_ifname", "vlan2", 0},
342    {"wan_ifnames", "vlan2", 0},
343    {0, 0, 0}
344  };
345#elif HAVE_LS5
346  struct nvram_tuple generic[] = {
347    {"lan_ifname", "br0", 0},
348    {"lan_ifnames", "ath0", 0},
349    {"wan_ifname", "eth0", 0},
350    {"wan_ifnames", "eth0", 0},
351    {0, 0, 0}
352  };
353#elif HAVE_WHRAG108
354  struct nvram_tuple generic[] = {
355    {"lan_ifname", "br0", 0},
356    {"lan_ifnames", "eth0 ath0 ath1", 0},
357    {"wan_ifname", "eth1", 0},
358    {"wan_ifnames", "eth1", 0},
359    {0, 0, 0}
360  };
361#elif HAVE_PB42
362  struct nvram_tuple generic[] = {
363    {"lan_ifname", "br0", 0},
364    {"lan_ifnames", "eth1 ath0 ath1", 0},
365    {"wan_ifname", "eth0", 0},
366    {"wan_ifnames", "eth0", 0},
367    {0, 0, 0}
368  };
369#elif HAVE_TW6600
370  struct nvram_tuple generic[] = {
371    {"lan_ifname", "br0", 0},
372    {"lan_ifnames", "ath0 ath1", 0},
373    {"wan_ifname", "eth0", 0},
374    {"wan_ifnames", "eth0", 0},
375    {0, 0, 0}
376  };
377#elif HAVE_CA8
378  struct nvram_tuple generic[] = {
379    {"lan_ifname", "br0", 0},
380    {"lan_ifnames", "ath0", 0},
381    {"wan_ifname", "eth0", 0},
382    {"wan_ifnames", "eth0", 0},
383    {0, 0, 0}
384  };
385#else
386  struct nvram_tuple generic[] = {
387    {"lan_ifname", "br0", 0},
388    {"lan_ifnames", "eth0 eth2 eth3 eth4", 0},
389    {"wan_ifname", "eth1", 0},
390    {"wan_ifnames", "eth1", 0},
391    {0, 0, 0}
392  };
393  struct nvram_tuple vlan[] = {
394    {"lan_ifname", "br0", 0},
395    {"lan_ifnames", "vlan0 eth1 eth2 eth3", 0},
396    {"wan_ifname", "vlan1", 0},
397    {"wan_ifnames", "vlan1", 0},
398    {0, 0, 0}
399  };
400
401  struct nvram_tuple wrt350vlan[] = {
402    {"lan_ifname", "br0", 0},
403    {"lan_ifnames", "vlan1 eth0", 0},
404    {"wan_ifname", "vlan2", 0},
405    {"wan_ifnames", "vlan2", 0},
406    {0, 0, 0}
407  };
408
409  struct nvram_tuple wrt600vlan[] = {
410    {"lan_ifname", "br0", 0},
411    {"lan_ifnames", "vlan0 eth0 eth1", 0},
412    {"wan_ifname", "vlan2", 0},
413    {"wan_ifnames", "vlan2", 0},
414    {0, 0, 0}
415  };
416
417  struct nvram_tuple wzr144nhvlan[] = {
418    {"lan_ifname", "br0", 0},
419    {"lan_ifnames", "vlan2 eth0", 0},
420    {"wan_ifname", "vlan1", 0},
421    {"wan_ifnames", "vlan1", 0},
422    {0, 0, 0}
423  };
424
425  struct nvram_tuple generic_2[] = {
426    {"lan_ifname", "br0", 0},
427    {"lan_ifnames", "eth1 eth2", 0},
428    {"wan_ifname", "eth0", 0},
429    {"wan_ifnames", "eth0", 0},
430    {0, 0, 0}
431  };
432
433  struct nvram_tuple generic_3[] = {
434    {"lan_ifname", "br0", 0},
435    {"lan_ifnames", "eth0 eth1", 0},
436    {"wan_ifname", "eth2", 0},
437    {"wan_ifnames", "eth2", 0},
438    {0, 0, 0}
439  };
440#endif
441
442  struct nvram_tuple *linux_overrides;
443  struct nvram_tuple *t, *u;
444  int restore_defaults = 0;
445//      uint boardflags;
446
447  /* Restore defaults if told to.
448
449     Note: an intentional side effect is that when
450     upgrading from a firmware without the
451     sv_restore_defaults var, defaults will
452     also be restored.
453   */
454  char *et0mac = nvram_safe_get ("et0macaddr");
455  char *et1mac = nvram_safe_get ("et1macaddr");
456//  unsigned char mac[20];
457//  if (getRouterBrand () == ROUTER_BUFFALO_WZRG144NH)
458//    {
459//      if (nvram_get ("il0macaddr") == NULL)
460//      {
461//        strcpy (mac, et0mac);
462//        MAC_ADD (mac);
463//        nvram_set ("il0macaddr", mac);
464//      }
465//    }
466
467#ifdef HAVE_RB500
468  linux_overrides = generic;
469  int brand = getRouterBrand ();
470#elif HAVE_XSCALE
471  linux_overrides = generic;
472  int brand = getRouterBrand ();
473  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
474    {
475      restore_defaults = 1;
476    }
477#elif HAVE_X86
478  linux_overrides = generic;
479  int brand = getRouterBrand ();
480  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
481    {
482      restore_defaults = 1;
483    }
484#elif HAVE_MAGICBOX
485  linux_overrides = generic;
486  int brand = getRouterBrand ();
487  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
488    {
489      restore_defaults = 1;
490    }
491#elif HAVE_GATEWORX
492  linux_overrides = generic;
493  int brand = getRouterBrand ();
494  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
495    {
496      restore_defaults = 1;
497    }
498#elif HAVE_FONERA
499  linux_overrides = generic;
500  int brand = getRouterBrand ();
501  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
502    {
503      restore_defaults = 1;
504    }
505#elif HAVE_LS2
506  linux_overrides = generic;
507  int brand = getRouterBrand ();
508  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
509    {
510      restore_defaults = 1;
511    }
512#elif HAVE_LS5
513  linux_overrides = generic;
514  int brand = getRouterBrand ();
515  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
516    {
517      restore_defaults = 1;
518    }
519#elif HAVE_WHRAG108
520  linux_overrides = generic;
521  int brand = getRouterBrand ();
522  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
523    {
524      restore_defaults = 1;
525    }
526#elif HAVE_TW6600
527  linux_overrides = generic;
528  int brand = getRouterBrand ();
529  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
530    {
531      restore_defaults = 1;
532    }
533#elif HAVE_PB42
534  linux_overrides = generic;
535  int brand = getRouterBrand ();
536  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
537    {
538      restore_defaults = 1;
539    }
540#elif HAVE_CA8
541  linux_overrides = generic;
542  int brand = getRouterBrand ();
543  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
544    {
545      restore_defaults = 1;
546    }
547#elif HAVE_GEMTEK
548  linux_overrides = generic;
549  int brand = getRouterBrand ();
550#else
551  int brand = getRouterBrand ();
552
553  if (nvram_invmatch ("sv_restore_defaults", "0"))      // || nvram_invmatch("os_name", "linux"))
554    {
555//      nvram_unset("sv_restore_defaults");
556      restore_defaults = 1;
557    }
558  if (nvram_match ("product_name", "INSPECTION"))
559    {
560      nvram_unset ("product_name");
561      restore_defaults = 1;
562    }
563  if (nvram_get ("router_name") == NULL)
564    restore_defaults = 1;
565
566  if (restore_defaults)
567    cprintf ("Restoring defaults...");
568  nvram_unset ("wan_to_lan");   //important for some AP
569
570//    }
571
572/* Delete dynamically generated variables */
573  /* Choose default lan/wan i/f list. */
574  char *ds;
575  switch (brand)
576    {
577#ifndef HAVE_BUFFALO
578    case ROUTER_WRTSL54GS:
579    case ROUTER_WRT150N:
580    case ROUTER_WRT300N:
581    case ROUTER_NETGEAR_WNR834B:
582    case ROUTER_ASUS_WL500G:
583    case ROUTER_ASUS_WL500W:
584#endif
585    case ROUTER_BUFFALO_WZRG300N:
586    case ROUTER_BUFFALO_WLAH_G54:
587    case ROUTER_BUFFALO_WAPM_HP_AM54G54:
588    case ROUTER_BUFFALO_WZRRSG54:
589      linux_overrides = generic;
590      break;
591#ifndef HAVE_BUFFALO
592    case ROUTER_ASUS_WL500GD:
593    case ROUTER_ASUS_WL550GE:
594      linux_overrides = vlan;
595      break;
596    case ROUTER_WRT350N:
597      linux_overrides = wrt350vlan;
598      break;
599    case ROUTER_WRT600N:
600      linux_overrides = wrt600vlan;
601      break;
602#endif
603    case ROUTER_BUFFALO_WZRG144NH:
604      linux_overrides = wzr144nhvlan;
605      break;
606#ifndef HAVE_BUFFALO
607    case ROUTER_MOTOROLA_WE800G:
608    case ROUTER_WAP54G_V1:
609    case ROUTER_SITECOM_WL105B:
610#endif
611    case ROUTER_BUFFALO_WLI2_TX1_G54:
612    case ROUTER_BUFFALO_WLAG54C:
613      linux_overrides = generic_2;
614      break;
615#ifndef HAVE_BUFFALO
616    case ROUTER_WAP54G_V2:
617    case ROUTER_VIEWSONIC_WAPBR_100:
618    case ROUTER_USR_5430:
619    case ROUTER_BELKIN_F5D7230_V2000:
620    case ROUTER_NETGEAR_WG602_V3:
621#endif
622    case ROUTER_BUFFALO_WLA2G54C:
623    case ROUTER_BUFFALO_WLI_TX4_G54HP:
624      linux_overrides = generic_3;
625      break;
626#ifndef HAVE_BUFFALO
627    case ROUTER_RT480W:
628    case ROUTER_RT210W:
629#endif
630    case ROUTER_BRCM4702_GENERIC:
631      ds = nvram_safe_get ("dhcp_start");
632      if (ds != NULL && strlen (ds) > 3)
633        {
634          fprintf (stderr, "cleaning nvram variables\n");
635          for (t = srouter_defaults; t->name; t++)
636            {
637              nvram_unset (t->name);
638            }
639          restore_defaults = 1;
640        }
641
642/*      ds = nvram_safe_get ("http_passwd");
643      if (ds == NULL || strlen (ds) == 0)       //fix for empty default password
644        {
645          nvram_set ("http_passwd", "admin");
646        }
647      ds = nvram_safe_get ("language");
648      if (ds != NULL && strlen (ds) < 3)
649        {
650          nvram_set ("language", "english");
651        }*/
652      // fall through 
653    default:
654      if (check_vlan_support ())
655        linux_overrides = vlan;
656      else
657        linux_overrides = generic;
658      break;
659    }
660#endif
661/*  int i;
662 *  for (i=0;i<4;i++)
663 *              nvram_set(linux_overrides[i].name,linux_overrides[i].value);
664 */
665
666  /* Restore defaults */
667#ifdef HAVE_FON
668  int reset = 0;
669  char *rev = nvram_safe_get ("fon_revision");
670  if (rev == NULL || strlen (rev) == 0)
671    reset = 1;
672  if (strlen (rev) > 0)
673    {
674      int n = atoi (rev);
675      if (atoi (srouter_defaults[0].value) != n)
676        reset = 1;
677    }
678  if (reset)
679    {
680      for (t = srouter_defaults; t->name; t++)
681        {
682          for (u = linux_overrides; u && u->name; u++)
683            {
684              if (!strcmp (t->name, u->name))
685                {
686                  nvram_set (u->name, u->value);
687                  break;
688                }
689            }
690          if (!u || !u->name)
691            nvram_set (t->name, t->value);
692        }
693    }
694#endif
695#ifdef HAVE_GATEWORX
696  if (restore_defaults)
697    {
698      eval ("erase", "nvram");
699    }
700#elif HAVE_XSCALE
701  if (restore_defaults)
702    eval ("rm", "-f", "/etc/nvram/*");  // delete nvram database
703#endif
704#ifdef HAVE_MAGICBOX
705  if (restore_defaults)
706    {
707      eval ("rm", "-f", "/tmp/nvram/*");        // delete nvram database
708      eval ("rm", "-f", "/tmp/nvram/.lock");    // delete nvram database
709      eval ("erase", "nvram");
710    }
711#endif
712#ifdef HAVE_FONERA
713  if (restore_defaults)
714    {
715      eval ("erase", "nvram");
716    }
717#endif
718#ifdef HAVE_LS2
719  if (restore_defaults)
720    {
721      eval ("erase", "nvram");
722    }
723#endif
724#ifdef HAVE_LS5
725  if (restore_defaults)
726    {
727      eval ("erase", "nvram");
728    }
729#endif
730#ifdef HAVE_WHRAG108
731  if (restore_defaults)
732    {
733      eval ("erase", "nvram");
734    }
735#endif
736#ifdef HAVE_TW6600
737  if (restore_defaults)
738    {
739      eval ("erase", "nvram");
740    }
741#endif
742  int nvcnt = 0;
743//  if (!nvram_match("default_init","1"))
744  {
745    for (t = srouter_defaults; t->name; t++)
746      {
747        if (restore_defaults || !nvram_get (t->name))
748          {
749            for (u = linux_overrides; u && u->name; u++)
750              {
751                if (!strcmp (t->name, u->name))
752                  {
753                    nvcnt++;
754                    nvram_set (u->name, u->value);
755                    break;
756                  }
757              }
758            if (!u || !u->name)
759              {
760                nvcnt++;
761                nvram_set (t->name, t->value);
762              }
763          }
764      }
765  }
766#ifndef HAVE_FON
767  if (restore_defaults)
768    {
769      if (brand == ROUTER_MOTOROLA || brand == ROUTER_ASUS_WL520G)
770        {
771          nvram_set ("vlan0ports", "0 1 2 3 5*");
772          nvram_set ("vlan1ports", "4 5");
773        }
774      if (brand == ROUTER_LINKSYS_WTR54GS)
775        {
776          nvram_set ("vlan0ports", "0 5*");
777          nvram_set ("vlan1ports", "1 5");
778        }
779      if (brand == ROUTER_ASUS_WL550GE)
780        {
781          nvram_set ("vlan0ports", "1 2 3 4 5*");
782          nvram_set ("vlan1ports", "0 5");
783        }
784      if (brand == ROUTER_WRT54G_V8
785          || nvram_match ("bootnv_ver", "4")
786          || nvram_match ("boardnum", "WAP54GV3_8M_0614"))
787        {
788          nvram_set ("vlan0ports", "3 2 1 0 5*");
789          nvram_set ("vlan1ports", "4 5");
790        }
791      if (brand == ROUTER_LINKSYS_WRH54G)
792        {
793          nvram_set ("vlan0ports", "4 3 2 1 5*");
794          nvram_set ("vlan1ports", "0 5");
795        }
796#ifdef HAVE_SPUTNIK
797      nvram_set ("lan_ipaddr", "192.168.180.1");
798#elif HAVE_BUFFALO
799      nvram_set ("lan_ipaddr", "192.168.11.1");
800#else
801      nvram_set ("lan_ipaddr", "192.168.1.1");
802#endif
803    }
804#else
805  if (restore_defaults)
806    {
807      nvram_set ("lan_ipaddr", "192.168.10.1");
808    }
809#endif
810#ifdef HAVE_SKYTRON
811  if (restore_defaults)
812    {
813      nvram_set ("lan_ipaddr", "192.168.0.1");
814    }
815#endif
816  if (brand == ROUTER_WRT600N)
817    {
818
819      if (!nvram_get ("vlan0ports") || nvram_match ("vlan0ports", ""))
820        {
821          nvram_set ("vlan0ports", "1 2 3 4 8*");
822        }
823      if (nvram_invmatch ("fullswitch", "1"))
824        {
825          if (!nvram_get ("vlan2ports") || nvram_match ("vlan2ports", ""))
826            {
827              nvram_set ("vlan2ports", "0 8");
828            }
829        }
830    }
831  else if (brand == ROUTER_WRT350N)
832    {
833
834      if (!nvram_get ("vlan1ports") || nvram_match ("vlan1ports", ""))
835        {
836          nvram_set ("vlan1ports", "1 2 3 4 8*");
837        }
838      if (nvram_invmatch ("fullswitch", "1"))
839        {
840          if (!nvram_get ("vlan2ports") || nvram_match ("vlan2ports", ""))
841            {
842              nvram_set ("vlan2ports", "0 8");
843            }
844        }
845    }
846  else if (brand == ROUTER_BUFFALO_WZRG144NH)
847
848    {
849      if (!nvram_get ("vlan1ports") || nvram_match ("vlan1ports", ""))
850        {
851          nvram_set ("vlan1ports", "4 8");
852        }
853      if (nvram_invmatch ("fullswitch", "1"))
854        {
855          if (!nvram_get ("vlan2ports") || nvram_match ("vlan2ports", ""))
856            {
857              nvram_set ("vlan2ports", "0 1 2 3 8");
858            }
859        }
860
861    }
862  else
863    {
864      if (!nvram_get ("vlan0hwname") || nvram_match ("vlan0hwname", ""))
865        nvram_set ("vlan0hwname", "et0");
866      if (!nvram_get ("vlan1hwname") || nvram_match ("vlan1hwname", ""))
867        nvram_set ("vlan1hwname", "et0");
868
869      switch (brand)
870        {
871        case ROUTER_MOTOROLA:
872        case ROUTER_MOTOROLA_V1:
873        case ROUTER_MOTOROLA_WE800G:
874        case ROUTER_RT210W:
875          if (et0mac != NULL)
876            nvram_set ("et0macaddr", et0mac);
877          if (et1mac != NULL)
878            nvram_set ("et1macaddr", et1mac);
879          break;
880        }
881
882      if (!nvram_get ("vlan0ports") || nvram_match ("vlan0ports", ""))
883        {
884          switch (brand)
885            {
886            case ROUTER_LINKSYS_WTR54GS:
887              nvram_set ("vlan0ports", "0 5*");
888              break;
889            case ROUTER_ASUS_WL500G_PRE:
890              nvram_set ("vlan0ports", "1 2 3 4 5*");
891              break;
892            case ROUTER_MOTOROLA:
893            case ROUTER_LINKSYS_WRT55AG:
894            case ROUTER_RT480W:
895            case ROUTER_DELL_TRUEMOBILE_2300_V2:
896            case ROUTER_ASUS_WL520G:
897              nvram_set ("vlan0ports", "0 1 2 3 5*");
898              break;
899            case ROUTER_LINKSYS_WRH54G:
900              nvram_set ("vlan0ports", "4 3 2 1 5*");
901              break;
902            default:
903              if (brand == ROUTER_WRT54G_V8
904                  || nvram_match ("bootnv_ver", "4")
905                  || nvram_match ("boardnum", "WAP54GV3_8M_0614"))
906                nvram_set ("vlan0ports", "3 2 1 0 5*");
907              else
908                nvram_set ("vlan0ports", "1 2 3 4 5*");
909              break;
910            }
911        }
912
913      if (nvram_invmatch ("fullswitch", "1"))
914        {
915          if (!nvram_get ("vlan1ports") || nvram_match ("vlan1ports", ""))
916            {
917              switch (brand)
918                {
919                case ROUTER_LINKSYS_WTR54GS:
920                  nvram_set ("vlan1ports", "1 5");
921                  break;
922                case ROUTER_ASUS_WL500G_PRE:
923                case ROUTER_LINKSYS_WRH54G:
924                  nvram_set ("vlan1ports", "0 5");
925                  break;
926                case ROUTER_MOTOROLA:
927                case ROUTER_LINKSYS_WRT55AG:
928                case ROUTER_RT480W:
929                case ROUTER_DELL_TRUEMOBILE_2300_V2:
930                case ROUTER_ASUS_WL520G:
931                  nvram_set ("vlan1ports", "4 5");
932                  break;
933                default:
934                  if (brand == ROUTER_WRT54G_V8
935                      || nvram_match ("bootnv_ver", "4")
936                      || nvram_match ("boardnum", "WAP54GV3_8M_0614"))
937                    nvram_set ("vlan1ports", "4 5");
938                  else
939                    nvram_set ("vlan1ports", "0 5");
940                  break;
941                }
942            }
943        }
944    }
945
946  if (brand == ROUTER_WRT54G || brand == ROUTER_WRT54G1X
947      || brand == ROUTER_LINKSYS_WRT55AG)
948    {
949      if (!nvram_get ("aa0"))
950        nvram_set ("aa0", "3");
951      if (!nvram_get ("ag0"))
952        nvram_set ("ag0", "255");
953      if (!nvram_get ("gpio2"))
954        nvram_set ("gpio2", "adm_eecs");
955      if (!nvram_get ("gpio3"))
956        nvram_set ("gpio3", "adm_eesk");
957      if (!nvram_get ("gpio5"))
958        nvram_set ("gpio5", "adm_eedi");
959      if (!nvram_get ("gpio6"))
960        nvram_set ("gpio6", "adm_rc");
961      if (!nvram_get ("boardrev") || nvram_match ("boardrev", ""))
962        nvram_set ("boardrev", "0x10");
963      if (!nvram_get ("boardflags") || nvram_match ("boardflags", ""))
964        nvram_set ("boardflags", "0x0388");
965      if (!nvram_get ("boardflags2"))
966        nvram_set ("boardflags2", "0");
967    }
968  /* Always set OS defaults */
969  nvram_set ("os_name", "linux");
970  nvram_set ("os_version", EPI_VERSION_STR);
971
972#ifdef HAVE_DDLAN
973  nvram_unset ("cur_rssi");
974  nvram_unset ("cur_noise");
975  nvram_unset ("cur_bssid");
976  nvram_unset ("cur_snr");
977  nvram_set ("cur_state",
978             "<span style=\"background-color: rgb(255, 0, 0);\">Nicht Verbunden</span>");
979#endif
980#ifdef HAVE_SPUTNIK_APD
981  /* Added for Sputnik Agent */
982  nvram_unset ("sputnik_mjid");
983  nvram_unset ("sputnik_rereg");
984#endif
985  if (nvram_get ("overclocking") == NULL)
986    nvram_set ("overclocking", nvram_safe_get ("clkfreq"));
987  cprintf ("start overclocking\n");
988  start_overclocking ();
989  cprintf ("done()");
990  if (nvram_get ("http_username") != NULL)
991    {
992      if (nvram_match ("http_username", ""))
993        {
994#ifdef HAVE_POWERNOC
995          nvram_set ("http_username", "bJz7PcC1rCRJQ"); //admin
996#else
997          nvram_set ("http_username", "bJ/GddyoJuiU2"); //root
998#endif
999        }
1000    }
1001
1002  cprintf ("check CFE nv\n");
1003  if (check_now_boot () == PMON_BOOT)
1004    check_pmon_nv ();
1005  else
1006    check_cfe_nv ();
1007  cprintf ("restore defaults\n");
1008
1009  /* Commit values */
1010  if (restore_defaults)
1011    {
1012      int i;
1013      unset_nvram ();
1014      nvram_commit ();
1015      cprintf ("done\n");
1016      for (i = 0; i < MAX_NVPARSE; i++)
1017        {
1018          del_wds_wsec (0, i);
1019          del_wds_wsec (1, i);
1020        }
1021    }
1022}
1023
1024
1025
1026
1027
1028
1029/* States */
1030enum
1031{
1032  RESTART,
1033  STOP,
1034  START,
1035  TIMER,
1036  USER,
1037  IDLE,
1038};
1039static int state = START;
1040static int signalled = -1;
1041
1042/* Signal handling */
1043static void
1044rc_signal (int sig)
1045{
1046  if (state == IDLE)
1047    {
1048      if (sig == SIGHUP)
1049        {
1050          printf ("signalling RESTART\n");
1051          signalled = RESTART;
1052        }
1053      else if (sig == SIGUSR2)
1054        {
1055          printf ("signalling START\n");
1056          signalled = START;
1057        }
1058      else if (sig == SIGINT)
1059        {
1060          printf ("signalling STOP\n");
1061          signalled = STOP;
1062        }
1063      else if (sig == SIGALRM)
1064        {
1065          printf ("signalling TIMER\n");
1066          signalled = TIMER;
1067        }
1068      else if (sig == SIGUSR1)
1069        {                       // Receive from WEB
1070          printf ("signalling USER1\n");
1071          signalled = USER;
1072        }
1073
1074    }
1075}
1076
1077/* Timer procedure */
1078int
1079do_timer (void)
1080{
1081  //do_ntp();
1082  return 0;
1083}
1084
1085
1086#define CONVERT_NV(old, new) \
1087        if(nvram_get(old)) \
1088                nvram_set(new, nvram_safe_get(old));
1089
1090int
1091start_nvram (void)
1092{
1093  int i = 0;
1094
1095  /* broadcom 3.11.48.7 change some nvram name */
1096#ifdef HAVE_MSSID
1097  CONVERT_NV ("d11g_channel", "wl_channel");
1098#else
1099  CONVERT_NV ("d11g_channel", "wl0_channel");
1100#endif
1101  CONVERT_NV ("d11g_rateset", "wl_rateset");
1102  CONVERT_NV ("d11g_rts", "wl_rts");
1103  CONVERT_NV ("d11g_bcn", "wl_bcn");
1104  CONVERT_NV ("d11g_mode", "wl_gmode");
1105  CONVERT_NV ("d11g_rate", "wl_rate");
1106  CONVERT_NV ("d11g_frag", "wl_frag");
1107  CONVERT_NV ("d11g_dtim", "wl_dtim");
1108
1109  nvram_unset ("wl0_hwaddr");   // When disbale wireless, we must get null wireless mac */
1110
1111  nvram_set ("wan_get_dns", "");
1112  nvram_set ("filter_id", "1");
1113  nvram_set ("wl_active_add_mac", "0");
1114  nvram_set ("ddns_change", "");
1115  nvram_unset ("action_service");
1116  nvram_set ("wan_get_domain", "");
1117
1118
1119  //if(!nvram_get("wl_macmode1")){
1120  //      if(nvram_match("wl_macmode","disabled"))
1121  //              nvram_set("wl_macmode1","disabled");
1122  //      else
1123  //              nvram_set("wl_macmode1","other");
1124  //}
1125  if (nvram_match ("wl_gmode", "5"))    // Mixed mode had been changed to 5
1126    nvram_set ("wl_gmode", "1");
1127
1128  if (nvram_match ("wl_gmode", "4"))    // G-ONLY mode had been changed to 2, after 1.40.1 for WiFi G certication
1129    nvram_set ("wl_gmode", "2");
1130
1131//      nvram_set("wl_country","Worldwide");    // The country always Worldwide
1132
1133#ifndef AOL_SUPPORT
1134  nvram_set ("aol_block_traffic", "0");
1135  nvram_set ("aol_block_traffic1", "0");
1136  nvram_set ("aol_block_traffic2", "0");
1137#endif
1138  nvram_set ("ping_ip", "");
1139  nvram_set ("ping_times", "");
1140//  nvram_set ("traceroute_ip", "");
1141
1142  nvram_set ("filter_port", "");        // The name have been disbaled from 1.41.3
1143
1144#ifdef HAVE_UPNP
1145  if ((nvram_match ("restore_defaults", "1"))
1146      || (nvram_match ("upnpcas", "1")))
1147    {
1148      nvram_set ("upnp_clear", "1");
1149    }
1150  else
1151    {
1152      char s[32];
1153      char *nv;
1154      for (i = 0; i < MAX_NVPARSE; ++i)
1155        {
1156          sprintf (s, "forward_port%d", i);
1157          if ((nv = nvram_get (s)) != NULL)
1158            {
1159              if (strstr (nv, "msmsgs"))
1160                nvram_unset (s);
1161            }
1162        }
1163    }
1164  nvram_set ("upnp_wan_proto", "");
1165#endif
1166
1167  /* The tkip and aes already are changed to wl_crypto from v3.63.3.0 */
1168  if (nvram_match ("wl_wep", "tkip"))
1169    {
1170      nvram_set ("wl_crypto", "tkip");
1171    }
1172  else if (nvram_match ("wl_wep", "aes"))
1173    {
1174      nvram_set ("wl_crypto", "aes");
1175    }
1176  else if (nvram_match ("wl_wep", "tkip+aes"))
1177    {
1178      nvram_set ("wl_crypto", "tkip+aes");
1179    }
1180
1181  if (nvram_match ("wl_wep", "restricted"))
1182    nvram_set ("wl_wep", "enabled");    // the nas need this value, the "restricted" is no longer need. (20040624 by honor)
1183
1184
1185#ifdef HAVE_SET_BOOT
1186  if (!nvram_match ("boot_wait_web", "0"))
1187    nvram_set ("boot_wait_web", "1");
1188#endif
1189
1190#ifdef HAVE_SSHD
1191  if (!nvram_match ("sshd_web", "0"))
1192    nvram_set ("sshd_web", "1");
1193#endif
1194
1195#ifndef HAVE_MSSID
1196  nvram_set ("wl0_country_code", "JP");
1197  nvram_set ("wl0_country", "Japan");
1198#endif
1199#ifndef HAVE_BUFFALO
1200  if (check_hw_type () == BCM5352E_CHIP)
1201    {
1202      nvram_set ("opo", "0");   // OFDM power reducement in quarter dbm (2 dbm in this case)
1203      nvram_set ("ag0", "0");   // Antenna Gain definition in dbm
1204    }
1205#endif
1206
1207  if (nvram_match ("svqos_port1bw", "full"))
1208    nvram_set ("svqos_port1bw", "FULL");
1209  if (nvram_match ("svqos_port2bw", "full"))
1210    nvram_set ("svqos_port2bw", "FULL");
1211  if (nvram_match ("svqos_port3bw", "full"))
1212    nvram_set ("svqos_port3bw", "FULL");
1213  if (nvram_match ("svqos_port4bw", "full"))
1214    nvram_set ("svqos_port4bw", "FULL");
1215  //dirty fix for WBR2 units
1216
1217
1218  if (strlen (nvram_safe_get ("http_username")) == 0)
1219    {
1220      nvram_set ("http_username", zencrypt ("root"));
1221      nvram_set ("http_passwd", zencrypt ("admin"));
1222    }
1223
1224  //clean old filter_servicesX to free nvram
1225  nvram_unset ("filter_services0");
1226  nvram_unset ("filter_services1");
1227  nvram_unset ("filter_services2");
1228  nvram_unset ("filter_services3");
1229  nvram_unset ("filter_services4");
1230  nvram_unset ("filter_services5");
1231  nvram_unset ("filter_services6");
1232  nvram_unset ("filter_services7");
1233
1234#ifdef DIST
1235  nvram_set ("dist_type", DIST);
1236#endif
1237
1238  {
1239
1240#ifdef DIST
1241#ifndef HAVE_TW6600
1242#ifdef HAVE_MICRO
1243//if dist_type micro, check styles, and force to elegant if needed
1244    char *style = nvram_safe_get ("router_style");
1245    if (!strstr ("blue cyan elegant green orange red yellow", style))
1246      {
1247        nvram_set ("router_style", "elegant");
1248      }
1249#endif
1250#endif
1251#endif
1252  }
1253
1254#ifdef HAVE_WIVIZ
1255  if (!strlen (nvram_safe_get ("hopseq"))
1256      || !strlen (nvram_safe_get ("hopdwell")))
1257    {
1258#ifdef HAVE_MSSID
1259      char *channel = nvram_safe_get ("wl0_channel");
1260#else
1261      char *channel = nvram_safe_get ("wl_channel");
1262#endif
1263
1264      nvram_set ("hopdwell", "1000");
1265      nvram_set ("hopseq", channel);
1266    }
1267#endif
1268
1269
1270  return 0;
1271}
1272
1273static void
1274unset_nvram (void)
1275{
1276#ifndef MPPPOE_SUPPORT
1277  nvram_safe_unset ("ppp_username_1");
1278  nvram_safe_unset ("ppp_passwd_1");
1279  nvram_safe_unset ("ppp_idletime_1");
1280  nvram_safe_unset ("ppp_demand_1");
1281  nvram_safe_unset ("ppp_redialperiod_1");
1282  nvram_safe_unset ("ppp_service_1");
1283  nvram_safe_unset ("mpppoe_enable");
1284  nvram_safe_unset ("mpppoe_dname");
1285#endif
1286#ifndef HAVE_HTTPS
1287  nvram_safe_unset ("remote_mgt_https");
1288#endif
1289#ifndef HSIAB_SUPPORT
1290  nvram_safe_unset ("hsiab_mode");
1291  nvram_safe_unset ("hsiab_provider");
1292  nvram_safe_unset ("hsiab_device_id");
1293  nvram_safe_unset ("hsiab_device_password");
1294  nvram_safe_unset ("hsiab_admin_url");
1295  nvram_safe_unset ("hsiab_registered");
1296  nvram_safe_unset ("hsiab_configured");
1297  nvram_safe_unset ("hsiab_register_ops");
1298  nvram_safe_unset ("hsiab_session_ops");
1299  nvram_safe_unset ("hsiab_config_ops");
1300  nvram_safe_unset ("hsiab_manual_reg_ops");
1301  nvram_safe_unset ("hsiab_proxy_host");
1302  nvram_safe_unset ("hsiab_proxy_port");
1303  nvram_safe_unset ("hsiab_conf_time");
1304  nvram_safe_unset ("hsiab_stats_time");
1305  nvram_safe_unset ("hsiab_session_time");
1306  nvram_safe_unset ("hsiab_sync");
1307  nvram_safe_unset ("hsiab_config");
1308#endif
1309
1310#ifndef HEARTBEAT_SUPPORT
1311  nvram_safe_unset ("hb_server_ip");
1312  nvram_safe_unset ("hb_server_domain");
1313#endif
1314
1315#ifndef PARENTAL_CONTROL_SUPPORT
1316  nvram_safe_unset ("artemis_enable");
1317  nvram_safe_unset ("artemis_SVCGLOB");
1318  nvram_safe_unset ("artemis_HB_DB");
1319  nvram_safe_unset ("artemis_provisioned");
1320#endif
1321
1322#ifndef WL_STA_SUPPORT
1323//        nvram_safe_unset("wl_ap_ssid");
1324//        nvram_safe_unset("wl_ap_ip");
1325#endif
1326
1327
1328}
Note: See TracBrowser for help on using the repository browser.