Index: /src/router/services/tools/reset_defaults.c =================================================================== --- /src/router/services/tools/reset_defaults.c (revision 12224) +++ /src/router/services/tools/reset_defaults.c (revision 12395) @@ -79,5 +79,5 @@ }; -extern struct nvram_tuple srouter_defaults[]; +extern struct nvram_tuple *srouter_defaults; static int isCritical(char *name) @@ -92,4 +92,6 @@ return 0; } +extern void load_defaults(void); +extern void free_defaults(void); void start_defaults(void) @@ -116,7 +118,9 @@ p += len + 1; } + load_defaults(); for (t = srouter_defaults; t->name; t++) { nvram_set(t->name, t->value); } + free_defaults(); free(buf); nvram_commit(); Index: /src/router/services/sysinit/sysinit-gateworx.c =================================================================== --- /src/router/services/sysinit/sysinit-gateworx.c (revision 12235) +++ /src/router/services/sysinit/sysinit-gateworx.c (revision 12395) @@ -420,6 +420,6 @@ ioctl(s, SIOCGIFHWADDR, &ifr); nvram_set("et0macaddr_safe", - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); close(s); } @@ -471,6 +471,6 @@ ioctl(s, SIOCGIFHWADDR, &ifr); nvram_set("et0macaddr_safe", - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); close(s); } Index: /src/router/services/sysinit/sysinit-dir300.c =================================================================== --- /src/router/services/sysinit/sysinit-dir300.c (revision 12235) +++ /src/router/services/sysinit/sysinit-dir300.c (revision 12395) @@ -255,6 +255,6 @@ strcpy(macaddr, - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); nvram_set("et0macaddr", macaddr); // MAC_ADD( macaddr ); @@ -290,6 +290,6 @@ strcpy(macaddr, - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); nvram_set("et0macaddr", macaddr); // MAC_ADD (macaddr); Index: /src/router/services/sysinit/sysinit.c =================================================================== --- /src/router/services/sysinit/sysinit.c (revision 12305) +++ /src/router/services/sysinit/sysinit.c (revision 12395) @@ -80,5 +80,7 @@ void start_nvram(void); -extern struct nvram_tuple srouter_defaults[]; +extern struct nvram_tuple *srouter_defaults; +extern void load_defaults(void); +extern void free_defaults(void); int endswith(char *str, char *cmp) @@ -170,5 +172,5 @@ create_rc_file(RC_STARTUP); if (f_exists("/tmp/.rc_startup")) - system("/tmp/.rc_startup"); + system("/tmp/.rc_startup"); return; } @@ -178,5 +180,5 @@ create_rc_file(RC_SHUTDOWN); if (f_exists("/tmp/.rc_shutdown")) - system("/tmp/.rc_shutdown"); + system("/tmp/.rc_shutdown"); return; } @@ -628,5 +630,5 @@ // } // } - + load_defaults(); #ifdef HAVE_RB500 linux_overrides = generic; @@ -1028,4 +1030,5 @@ } } + free_defaults(); if (strlen(nvram_safe_get("http_username")) == 0) { nvram_set("http_username", zencrypt("root")); Index: /src/router/services/sysinit/sysinit-rcaa01.c =================================================================== --- /src/router/services/sysinit/sysinit-rcaa01.c (revision 12235) +++ /src/router/services/sysinit/sysinit-rcaa01.c (revision 12395) @@ -158,6 +158,6 @@ strcpy(macaddr, - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); nvram_set("et0macaddr", macaddr); // MAC_ADD( macaddr ); Index: /src/router/services/sysinit/defaults.c =================================================================== --- /src/router/services/sysinit/defaults.c (revision 12386) +++ /src/router/services/sysinit/defaults.c (revision 12395) @@ -39,4 +39,6 @@ #define HAVE_POWERNOC 1 #endif + +#ifdef STORE_DEFAULTS struct nvram_tuple srouter_defaults[] = { @@ -2615,4 +2617,47 @@ {0, 0, 0} }; +#else +struct nvram_tuple *srouter_defaults = NULL; +static int defaultnum; +void load_defaults(void) +{ + FILE *in = fopen("/etc/defaults.bin", "rb"); + if (in == NULL) + return; + fread(&defaultnum, 4, 1, in); + int i; + srouter_defaults = + (struct nvram_tuple *)malloc(sizeof(struct nvram_tuple) * + defaultnum); + for (i = 0; i < defaultnum; i++) { + int vl = getc(in); + if (vl) { + srouter_defaults[i].name = malloc(vl + 1); + fread(srouter_defaults[i].name, vl, 1, in); + srouter_defaults[i].name[vl] = 0; + vl = getc(in); + srouter_defaults[i].value = malloc(vl + 1); + fread(srouter_defaults[i].value, vl, 1, in); + srouter_defaults[i].value[vl] = 0; + } else { + srouter_defaults[i].name = NULL; + srouter_defaults[i].value = NULL; + } + } +} + +void free_defaults(void) +{ + int i; + for (i = defaultnum - 1; i > -1; i--) { + if (srouter_defaults[i].name) { + free(srouter_defaults[i].value); + free(srouter_defaults[i].name); + } + } + free(srouter_defaults); + +} +#endif #ifdef HAVE_SKYTEL Index: /src/router/services/sysinit/sysinit-adm5120.c =================================================================== --- /src/router/services/sysinit/sysinit-adm5120.c (revision 12235) +++ /src/router/services/sysinit/sysinit-adm5120.c (revision 12395) @@ -295,6 +295,6 @@ strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); ioctl(s, SIOCGIFHWADDR, &ifr); - memcpy((unsigned char *)ifr. - ifr_hwaddr.sa_data, mac, 6); + memcpy((unsigned char *)ifr.ifr_hwaddr. + sa_data, mac, 6); ioctl(s, SIOCSIFHWADDR, &ifr); close(s); @@ -306,6 +306,7 @@ nvram_set("et0macaddr_safe", ether_etoa((unsigned char *) - ifr.ifr_hwaddr. - sa_data, eabuf)); + ifr. + ifr_hwaddr.sa_data, + eabuf)); close(s); } @@ -342,7 +343,5 @@ ether_etoa((unsigned char *) - ifr. - ifr_hwaddr.sa_data, - eabuf)); + ifr.ifr_hwaddr.sa_data, eabuf)); close(s); } @@ -378,7 +377,6 @@ strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); ioctl(s, SIOCGIFHWADDR, &ifr); - memcpy((unsigned char *)ifr. - ifr_hwaddr.sa_data, - params.addr[0].mac, 6); + memcpy((unsigned char *)ifr.ifr_hwaddr. + sa_data, params.addr[0].mac, 6); ioctl(s, SIOCSIFHWADDR, &ifr); close(s); @@ -388,7 +386,6 @@ strncpy(ifr.ifr_name, "eth1", IFNAMSIZ); ioctl(s, SIOCGIFHWADDR, &ifr); - memcpy((unsigned char *)ifr. - ifr_hwaddr.sa_data, - params.addr[1].mac, 6); + memcpy((unsigned char *)ifr.ifr_hwaddr. + sa_data, params.addr[1].mac, 6); ioctl(s, SIOCSIFHWADDR, &ifr); close(s); @@ -400,6 +397,7 @@ nvram_set("et0macaddr_safe", ether_etoa((unsigned char *) - ifr.ifr_hwaddr. - sa_data, eabuf)); + ifr. + ifr_hwaddr.sa_data, + eabuf)); close(s); } Index: /src/router/services/sysinit/sysinit-fonera.c =================================================================== --- /src/router/services/sysinit/sysinit-fonera.c (revision 12235) +++ /src/router/services/sysinit/sysinit-fonera.c (revision 12395) @@ -166,6 +166,6 @@ strcpy(macaddr, - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); nvram_set("et0macaddr", macaddr); // MAC_ADD( macaddr ); Index: /src/router/services/sysinit/sysinit-ca8.c =================================================================== --- /src/router/services/sysinit/sysinit-ca8.c (revision 12235) +++ /src/router/services/sysinit/sysinit-ca8.c (revision 12395) @@ -141,6 +141,6 @@ strcpy(macaddr, - ether_etoa((unsigned char *)ifr. - ifr_hwaddr.sa_data, eabuf)); + ether_etoa((unsigned char *)ifr.ifr_hwaddr. + sa_data, eabuf)); nvram_set("et0macaddr", macaddr); // MAC_ADD( macaddr ); Index: /src/router/services/sysinit/sysinit-broadcom.c =================================================================== --- /src/router/services/sysinit/sysinit-broadcom.c (revision 12367) +++ /src/router/services/sysinit/sysinit-broadcom.c (revision 12395) @@ -910,5 +910,5 @@ nvram_set("wan_ifname", "vlan2"); break; - + case ROUTER_WRT610N: nvram_set("wan_ifname", "vlan2"); @@ -919,16 +919,16 @@ nvram_set("pci/1/1/boardflags2", "0x0400"); nvram_set("pci/1/2/boardflags2", "0x0602"); - - if (startswith(nvram_safe_get("pci/1/1/macaddr"), "00:90:4C") - || startswith(nvram_safe_get("pci/1/2/macaddr"), "00:90:4C")) - { - unsigned char mac[20]; - strcpy(mac, nvram_safe_get("et0macaddr")); - MAC_ADD(mac); - MAC_ADD(mac); - nvram_set("pci/1/1/macaddr", mac); - MAC_ADD(mac); - nvram_set("pci/1/2/macaddr", mac); - need_reboot = 1; + + if (startswith(nvram_safe_get("pci/1/1/macaddr"), "00:90:4C") + || startswith(nvram_safe_get("pci/1/2/macaddr"), + "00:90:4C")) { + unsigned char mac[20]; + strcpy(mac, nvram_safe_get("et0macaddr")); + MAC_ADD(mac); + MAC_ADD(mac); + nvram_set("pci/1/1/macaddr", mac); + MAC_ADD(mac); + nvram_set("pci/1/2/macaddr", mac); + need_reboot = 1; } break; @@ -1136,7 +1136,7 @@ nvram_set("boardflags", "0x0f58"); need_reboot = 1; - } - break; - + } + break; + case ROUTER_ASKEY_RT220XD: if (nvram_match("boardflags", "0x388") @@ -1144,5 +1144,5 @@ nvram_set("boardflags", "0x0208"); need_reboot = 1; - } + } break; Index: /src/router/services/Makefile =================================================================== --- /src/router/services/Makefile (revision 12269) +++ /src/router/services/Makefile (revision 12395) @@ -11,5 +11,5 @@ LDFLAGS += -lm CFLAGS += -I$(TOP)/iptables/include -I$(TOP)/rc -I$(TOP)/iptables/include/libipq -I$(TOP)/libnet/include -DL_ENDIAN -DLIBNET_LIL_ENDIAN -DLIB1X_LIL_ENDIAN -CFLAGS += $(COPTS) -fpic -I$(TOP)/services/include +CFLAGS += -fpic -I$(TOP)/services/include OBJS = services.o network.o firewall.o mssid.o wshaper.o ddns.o sysinit.o sysinit-$(ARCHITECTURE).o interface.o udhcpc.o mkfiles.o iptable.o defaults.o \ bridgetools.o igmp.o wpa.o vlantagging.o httpd.o setuserpw.o anchorfree.o gpio.o mask.o reset_defaults.o @@ -779,4 +779,6 @@ $(CC) $(CFLAGS) -DNEED_PRINTF -o switch tools/switch.c endif + gcc -o bin/defaults $(CFLAGS) bin/defaults.c + cd bin && ./defaults clean: @@ -787,5 +789,7 @@ install: all install -d $(INSTALLDIR)/services/usr/lib + install -d $(INSTALLDIR)/services/etc install services.so $(INSTALLDIR)/services/usr/lib + install bin/defaults.bin $(INSTALLDIR)/services/etc ifeq ($(CONFIG_RT2880),y) install -d $(INSTALLDIR)/services/sbin @@ -795,5 +799,5 @@ services.so: $(OBJS) # $(AR) arc -o $@.a $^ - $(CC) --shared $(CFLAGS) -o $@ $^ $(LDFLAGS) + $(CC) --shared $(COPTS) $(CFLAGS) -o $@ $^ $(LDFLAGS) # $(CC) $(CFLAGS) -o wland $^ $(LDFLAGS)