4 Copyright (C) 2006-2009 Jonathan Zarate
12 // used for various testing
13 static int rctest_main(int argc
, char *argv
[])
16 printf("test what?\n");
19 printf("%s\n", argv
[1]);
21 if (strcmp(argv
[1], "foo") == 0) {
23 else if (strcmp(argv
[1], "qos") == 0) {
27 #ifdef TCONFIG_FANCTRL
28 else if (strcmp(argv
[1], "phy_tempsense") == 0) {
30 start_phy_tempsense();
35 else if (strcmp(argv
[1], "6rd") == 0) {
41 else if (strcmp(argv
[1], "iptfile") == 0) {
42 create_test_iptfile();
54 static int hotplug_main(int argc
, char *argv
[])
57 if (strcmp(argv
[1], "net") == 0) {
62 else if (strcmp(argv
[1], "usb") == 0) {
66 else if (strcmp(argv
[1], "block") == 0) {
75 static int rc_main(int argc
, char *argv
[])
77 if (argc
< 2) return 0;
78 if (strcmp(argv
[1], "start") == 0) return kill(1, SIGUSR2
);
79 if (strcmp(argv
[1], "stop") == 0) return kill(1, SIGINT
);
80 if (strcmp(argv
[1], "restart") == 0) return kill(1, SIGHUP
);
88 int (*main
)(int argc
, char *argv
[]);
91 static const applets_t applets
[] = {
92 { "preinit", init_main
},
93 { "init", init_main
},
94 { "console", console_main
},
96 { "ip-up", ipup_main
},
97 { "ip-down", ipdown_main
},
98 /* KDB - these functions do nothing why are they here?
100 { "ipv6-up", ip6up_main },
101 { "ipv6-down", ip6down_main },
104 { "ppp_event", pppevent_main
},
105 { "hotplug", hotplug_main
},
106 { "redial", redial_main
},
107 { "listen", listen_main
},
108 { "service", service_main
},
109 { "sched", sched_main
},
110 #ifdef TCONFIG_BCMARM
111 { "mtd-write", mtd_write_main_old
},
112 { "mtd-erase", mtd_unlock_erase_main_old
},
113 { "mtd-unlock", mtd_unlock_erase_main_old
},
115 { "mtd-write", mtd_write_main
},
116 { "mtd-erase", mtd_unlock_erase_main
},
117 { "mtd-unlock", mtd_unlock_erase_main
},
119 { "buttons", buttons_main
},
120 { "blink", blink_main
},
122 { "blink_5g", blink_5g_main
},
124 #ifdef TCONFIG_FANCTRL
125 { "phy_tempsense", phy_tempsense_main
},
127 { "rcheck", rcheck_main
},
128 { "dhcpc-event", dhcpc_event_main
},
129 { "dhcpc-release", dhcpc_release_main
},
130 { "dhcpc-renew", dhcpc_renew_main
},
132 { "dhcp6c-state", dhcp6c_state_main
},
134 { "radio", radio_main
},
136 { "halt", reboothalt_main
},
137 { "reboot", reboothalt_main
},
138 { "gpio", gpio_main
},
139 { "wldist", wldist_main
},
141 { "mount-cifs", mount_cifs_main
},
144 { "ddns-update", ddns_update_main
},
147 { "rctest", rctest_main
},
152 #ifdef TCONFIG_BCMARM
153 void erase_nvram(void)
155 eval("mtd-erase2", "nvram");
159 int main(int argc
, char **argv
)
165 Make sure std* are valid since several functions attempt to close these
166 handles. If nvram_*() runs first, nvram=0, nvram gets closed. - zzz
168 if ((f
= open("/dev/null", O_RDWR
)) < 3) {
176 base
= strrchr(argv
[0], '/');
177 base
= base
? base
+ 1 : argv
[0];
180 if (strcmp(base
, "rc") == 0) {
181 if (argc
< 2) return 1;
182 if (strcmp(argv
[1], "start") == 0) return kill(1, SIGUSR2
);
183 if (strcmp(argv
[1], "stop") == 0) return kill(1, SIGINT
);
184 if (strcmp(argv
[1], "restart") == 0) return kill(1, SIGHUP
);
193 #if defined(DEBUG_NOISY)
194 if (nvram_match("debug_logrc", "1")) {
197 cprintf("[rc %d] ", getpid());
198 for (i
= 0; i
< argc
; ++i
) {
199 cprintf("%s ", argv
[i
]);
206 #if defined(DEBUG_NOISY)
207 if (nvram_match("debug_ovrc", "1")) {
211 realpath(argv
[0], tmp
);
212 if ((strncmp(tmp
, "/tmp/", 5) != 0) && (argc
< 32)) {
213 sprintf(tmp
, "%s%s", "/tmp/", base
);
215 cprintf("[rc] override: %s\n", tmp
);
216 memcpy(a
, argv
, argc
* sizeof(a
[0]));
227 for (a
= applets
; a
->name
; ++a
) {
228 if (strcmp(base
, a
->name
) == 0) {
229 openlog(base
, LOG_PID
, LOG_USER
);
230 return a
->main(argc
, argv
);
234 #ifdef TCONFIG_BCMARM
235 if (!strcmp(base
, "nvram_erase")){
239 /* mtd-erase2 [device] */
240 else if (!strcmp(base
, "mtd-erase2")) {
241 if (argv
[1] && ((!strcmp(argv
[1], "boot")) ||
242 (!strcmp(argv
[1], "linux")) ||
243 (!strcmp(argv
[1], "linux2")) ||
244 (!strcmp(argv
[1], "rootfs")) ||
245 (!strcmp(argv
[1], "rootfs2")) ||
246 (!strcmp(argv
[1], "nvram")))) {
248 return mtd_erase(argv
[1]);
250 fprintf(stderr
, "usage: mtd-erase2 [device]\n");
254 /* mtd-write2 [path] [device] */
255 else if (!strcmp(base
, "mtd-write2")) {
257 return mtd_write(argv
[1], argv
[2]);
259 fprintf(stderr
, "usage: mtd-write2 [path] [device]\n");
265 printf("Unknown applet: %s\n", base
);