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

Last change on this file since 9354 was 9354, checked in by eko, 5 years ago

ROUTER_NETGEAR_WG602_V4 support

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