allow coexistance of N build and AC build.
[tomato.git] / release / src / router / rc / rc.h
blob379f4b9aa3205f9fead43a1971e5b0621a7d0e9d
1 /*
2 * Router rc control script
4 * Copyright 2005, Broadcom Corporation
5 * All Rights Reserved.
7 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 * $Id: rc.h,v 1.39 2005/03/29 02:00:06 honor Exp $
15 #ifndef __RC_H__
16 #define __RC_H__
18 #define _GNU_SOURCE
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <unistd.h>
23 #include <ctype.h> // !!TB
24 #include <string.h>
25 #include <signal.h>
26 #include <syslog.h>
27 #include <netinet/in.h>
28 #include <fcntl.h>
29 #include <net/if.h>
31 #include <bcmnvram.h>
32 #include <utils.h>
33 #include <shutils.h>
34 #include <shared.h>
36 #include <tomato_profile.h>
37 #include <tomato_config.h>
39 // #define DEBUG_IPTFILE
40 // #define DEBUG_RCTEST
41 // #define DEBUG_NOISY
43 #ifdef DEBUG_NOISY
44 #define TRACE_PT(args...) do { _dprintf("[%d:%s +%ld] ", getpid(), __FUNCTION__, get_uptime()); _dprintf(args); } while(0)
45 #else
46 #define TRACE_PT(args...) do { } while(0)
47 #endif
49 #define MOUNT_ROOT "/tmp/mnt"
50 #define PROC_SCSI_ROOT "/proc/scsi"
51 #define USB_STORAGE "usb-storage"
53 #define BOOT 0
54 #define REDIAL 1
55 #define CONNECTING 2
57 #define PPPOE0 0
58 #define PPPOE1 1
60 #define GOT_IP 0x01
61 #define RELEASE_IP 0x02
62 #define GET_IP_ERROR 0x03
63 #define RELEASE_WAN_CONTROL 0x04
64 #define USB_DATA_ACCESS 0x05 //For WRTSL54GS
65 #define USB_CONNECT 0x06 //For WRTSL54GS
66 #define USB_DISCONNECT 0x07 //For WRTSL54GS
69 // ?
70 #define SET_LED(val) \
71 { \
72 int filep; \
73 if(check_hw_type() == BCM4704_BCM5325F_CHIP) { \
74 if ((filep = open("/dev/ctmisc", O_RDWR,0))) \
75 { \
76 ioctl(filep, val, 0); \
77 close(filep); \
78 } \
79 } \
83 #define SET_LED(val) do { } while(0)
85 typedef enum { IPT_TABLE_NAT, IPT_TABLE_FILTER, IPT_TABLE_MANGLE } ipt_table_t;
87 #define IFUP (IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST)
89 #define sin_addr(s) (((struct sockaddr_in *)(s))->sin_addr)
90 #define sin6_addr(s) (((struct sockaddr_in6 *)(s))->sin6_addr)
92 #define IPT_V4 0x01
93 #define IPT_V6 0x02
94 #define IPT_ANY_AF (IPT_V4 | IPT_V6)
95 #define IPT_AF_IS_EMPTY(f) ((f & IPT_ANY_AF) == 0)
97 // init.c
98 extern int init_main(int argc, char *argv[]);
99 extern int reboothalt_main(int argc, char *argv[]);
100 extern int console_main(int argc, char *argv[]);
102 // interface.c
103 extern int _ifconfig(const char *name, int flags, const char *addr, const char *netmask, const char *dstaddr);
104 #define ifconfig(name, flags, addr, netmask) _ifconfig(name, flags, addr, netmask, NULL)
105 extern int route_add(char *name, int metric, char *dst, char *gateway, char *genmask);
106 extern void route_del(char *name, int metric, char *dst, char *gateway, char *genmask);
107 extern void config_loopback(void);
108 extern int start_vlan(void);
109 extern int stop_vlan(void);
110 extern int config_vlan(void);
111 extern void config_loopback(void);
112 #ifdef TCONFIG_IPV6
113 extern int ipv6_mapaddr4(struct in6_addr *addr6, int ip6len, struct in_addr *addr4, int ip4mask);
114 #endif
116 // listen.c
117 extern int listen_main(int argc, char **argv);
119 // ppp.c
120 extern int ipup_main(int argc, char **argv);
121 extern int ipdown_main(int argc, char **argv);
122 extern int pppevent_main(int argc, char **argv);
123 #ifdef TCONFIG_IPV6
124 extern int ip6up_main(int argc, char **argv);
125 extern int ip6down_main(int argc, char **argv);
126 #endif
128 // rc.c
129 extern void restore_defaults(void);
131 // redial.c
132 extern int start_redial(void);
133 extern int stop_redial(void);
134 extern int redial_main(int argc, char **argv);
136 // wan.c
137 extern void start_pptp(int mode);
138 extern void stop_pptp(void);
139 extern void start_pppoe(int);
140 extern void stop_pppoe(void);
141 extern void start_l2tp(void);
142 extern void stop_l2tp(void);
143 extern void start_wan(int mode);
144 extern void start_wan_done(char *ifname);
145 extern char *wan_gateway(void);
146 #ifdef TCONFIG_IPV6
147 extern void start_wan6_done(const char *wan_ifname);
148 #endif
149 extern void stop_wan(void);
150 extern void force_to_dial(void);
151 extern void do_wan_routes(char *ifname, int metric, int add);
152 extern void preset_wan(char *ifname, char *gw, char *netmask);
154 // network.c
155 extern void set_host_domain_name(void);
156 extern void set_et_qos_mode(int sfd);
157 extern void start_lan(void);
158 extern void stop_lan(void);
159 extern void hotplug_net(void);
160 extern void do_static_routes(int add);
161 extern int radio_main(int argc, char *argv[]);
162 extern int wldist_main(int argc, char *argv[]);
163 extern void stop_wireless(void);
164 extern void start_wireless(void);
165 extern void start_wl(void);
166 extern void unload_wl(void);
167 extern void load_wl(void);
168 #ifdef TCONFIG_IPV6
169 extern void enable_ipv6(int enable);
170 extern void accept_ra(const char *ifname);
171 #else
172 #define enable_ipv6(enable) do {} while (0)
173 #define accept_ra(ifname) do {} while (0)
174 #endif
176 // dhcpc.c
177 extern int dhcpc_event_main(int argc, char **argv);
178 extern int dhcpc_release_main(int argc, char **argv);
179 extern int dhcpc_renew_main(int argc, char **argv);
180 extern void start_dhcpc(void);
181 extern void stop_dhcpc(void);
182 #ifdef TCONFIG_IPV6
183 extern int dhcp6c_state_main(int argc, char **argv);
184 extern void start_dhcp6c(void);
185 extern void stop_dhcp6c(void);
186 #endif
188 // services.c
189 extern void start_cron(void);
190 extern void stop_cron(void);
191 extern void start_zebra(void);
192 extern void stop_zebra(void);
193 extern void start_upnp(void);
194 extern void stop_upnp(void);
195 extern void start_syslog(void);
196 extern void stop_syslog(void);
197 extern void start_igmp_proxy(void);
198 extern void stop_igmp_proxy(void);
199 extern void start_udpxy(void);
200 extern void stop_udpxy(void);
201 extern void start_httpd(void);
202 extern void stop_httpd(void);
203 extern void clear_resolv(void);
204 extern void dns_to_resolv(void);
205 extern void start_dnsmasq(void);
206 extern void stop_dnsmasq(void);
207 extern void set_tz(void);
208 extern void start_ntpc(void);
209 extern void stop_ntpc(void);
210 extern void check_services(void);
211 extern void exec_service(void);
212 extern int service_main(int argc, char *argv[]);
213 extern void start_service(const char *name);
214 extern void stop_service(const char *name);
215 extern void restart_service(const char *name);
216 extern void start_services(void);
217 extern void stop_services(void);
218 // !!TB - USB and NAS
219 #ifdef TCONFIG_USB
220 extern void restart_nas_services(int stop, int start);
221 #else
222 #define restart_nas_services(args...) do { } while(0)
223 #endif
224 #ifdef LINUX26
225 extern void start_hotplug2();
226 extern void stop_hotplug2(void);
227 #endif
228 #ifdef TCONFIG_IPV6
229 extern void start_ipv6_tunnel(void);
230 extern void stop_ipv6_tunnel(void);
231 extern void start_6rd_tunnel(void);
232 extern void stop_6rd_tunnel(void);
233 extern void start_radvd(void);
234 extern void stop_radvd(void);
235 extern void start_ipv6(void);
236 extern void stop_ipv6(void);
237 #endif
239 // !!TB - USB Support
240 // usb.c
241 #ifdef TCONFIG_USB
242 extern void start_usb(void);
243 extern void stop_usb(void);
244 extern int dir_is_mountpoint(const char *root, const char *dir);
245 extern void hotplug_usb(void);
246 extern void remove_storage_main(int shutdn);
247 #else
248 #define start_usb(args...) do { } while(0)
249 #define stop_usb(args...) do { } while(0)
250 #define dir_is_mountpoint(args...) (0)
251 #define hotplug_usb(args...) do { } while(0)
252 #define remove_storage_main(args...) do { } while(0)
253 #endif
255 // wnas.c
256 extern int wds_enable(void);
257 extern int wl_security_on(void);
258 extern void start_nas(void);
259 extern void stop_nas(void);
260 extern void notify_nas(const char *ifname);
262 // firewall.c
263 extern wanface_list_t wanfaces;
264 extern char lanface[];
265 #ifdef TCONFIG_IPV6
266 extern char wan6face[];
267 #endif
268 extern char lan_cclass[];
269 extern const char *chain_in_accept;
270 extern const char *chain_out_drop;
271 extern const char *chain_out_accept;
272 extern const char *chain_out_reject;
273 extern char **layer7_in;
275 extern void enable_ip_forward(void);
276 extern void enable_ip6_forward(void);
277 extern void ipt_write(const char *format, ...);
278 extern void ip6t_write(const char *format, ...);
279 #if defined(TCONFIG_IPV6) && defined(LINUX26)
280 #define ip46t_write(args...) do { ipt_write(args); ip6t_write(args); } while(0)
281 //#define ip46t_flagged_write(do_ip4t, do_ip6t, args...) do { if (do_ip4t) ipt_write(args); if (do_ip6t) ip6t_write(args); } while(0)
282 #define ip46t_flagged_write(do_ip46t, args...) do { if (do_ip46t & IPT_V4) ipt_write(args); if (do_ip46t & IPT_V6) ip6t_write(args); } while(0)
283 #define ip46t_cond_write(do_ip6t, args...) do { if (do_ip6t) ip6t_write(args); else ipt_write(args); } while(0)
284 #else
285 #define ip46t_write ipt_write
286 //#define ip46t_flagged_write(do_ip4t, do_ip6t, args...) do { if (do_ip4t) ipt_write(args); } while(0)
287 #define ip46t_flagged_write(do_ip46t, args...) do { if (do_ip46t & IPT_V4) ipt_write(args); } while(0)
288 #define ip46t_cond_write(do_ip6t, args...) ipt_write(args)
289 #endif
290 extern void ipt_log_unresolved(const char *addr, const char *addrtype, const char *categ, const char *name);
291 extern int ipt_addr(char *addr, int maxlen, const char *s, const char *dir, int af, int strict, const char *categ, const char *name);
292 extern int ipt_dscp(const char *v, char *opt);
293 extern int ipt_ipp2p(const char *v, char *opt);
294 extern int ipt_layer7(const char *v, char *opt);
295 extern void ipt_layer7_inbound(void);
296 extern int start_firewall(void);
297 extern int stop_firewall(void);
298 #ifdef DEBUG_IPTFILE
299 extern void create_test_iptfile(void);
300 #endif
301 #ifdef LINUX26
302 extern void allow_fastnat(const char *service, int allow);
303 extern void try_enabling_fastnat(void);
304 #endif
306 // forward.c
307 extern void ipt_forward(ipt_table_t table);
308 extern void ipt_triggered(ipt_table_t table);
310 #ifdef TCONFIG_IPV6
311 extern void ip6t_forward(void);
312 #endif
314 // restrict.c
315 extern int rcheck_main(int argc, char *argv[]);
316 extern void ipt_restrictions(void);
317 extern void sched_restrictions(void);
319 // qos.c
320 extern void ipt_qos(void);
321 extern void start_qos(void);
322 extern void stop_qos(void);
324 // cifs.c
325 #ifdef TCONFIG_CIFS
326 extern void start_cifs(void);
327 extern void stop_cifs(void);
328 extern int mount_cifs_main(int argc, char *argv[]);
329 #else
330 static inline void start_cifs(void) { };
331 static inline void stop_cifs(void) { };
332 #endif
334 // jffs2.c
335 #ifdef TCONFIG_JFFS2
336 extern void init_jffs2(void);
337 extern void start_jffs2(void);
338 extern void stop_jffs2(void);
339 #else
340 static inline void init_jffs2(void) { };
341 static inline void start_jffs2(void) { };
342 static inline void stop_jffs2(void) { };
343 #endif
345 // ddns.c
346 #ifdef TCONFIG_DDNS
347 extern void start_ddns(void);
348 extern void stop_ddns(void);
349 extern int ddns_update_main(int argc, char **argv);
350 #else
351 static inline void start_ddns(void) { };
352 static inline void stop_ddns(void) { };
353 #endif
355 // misc.c
356 extern void usage_exit(const char *cmd, const char *help) __attribute__ ((noreturn));
357 #define modprobe(mod, args...) ({ char *argv[] = { "modprobe", "-s", mod, ## args, NULL }; _eval(argv, NULL, 0, NULL); })
358 extern int modprobe_r(const char *mod);
359 #define xstart(args...) _xstart(args, NULL)
360 extern int _xstart(const char *cmd, ...);
361 extern void run_nvscript(const char *nv, const char *arg1, int wtime);
362 extern void run_userfile (char *folder, char *extension, const char *arg1, int wtime);
363 extern void setup_conntrack(void);
364 extern int host_addr_info(const char *name, int af, struct sockaddr_storage *buf);
365 extern int host_addrtypes(const char *name, int af);
366 extern void inc_mac(char *mac, int plus);
367 extern void set_mac(const char *ifname, const char *nvname, int plus);
368 extern const char *default_wanif(void);
369 // extern const char *default_wlif(void);
370 #define vstrsep(buf, sep, args...) _vstrsep(buf, sep, args, NULL)
371 extern int _vstrsep(char *buf, const char *sep, ...);
372 extern void simple_unlock(const char *name);
373 extern void simple_lock(const char *name);
374 extern void killall_tk(const char *name);
375 extern int mkdir_if_none(const char *path);
376 extern long fappend(FILE *out, const char *fname);
377 extern long fappend_file(const char *path, const char *fname);
379 // telssh.c
380 extern void create_passwd(void);
381 extern void start_sshd(void);
382 extern void stop_sshd(void);
383 extern void start_telnetd(void);
384 extern void stop_telnetd(void);
386 // mtd.c
387 extern int mtd_erase(const char *mtdname);
388 extern int mtd_unlock(const char *mtdname);
389 extern int mtd_write_main(int argc, char *argv[]);
390 extern int mtd_unlock_erase_main(int argc, char *argv[]);
392 // buttons.c
393 extern int buttons_main(int argc, char *argv[]);
395 #ifdef CONFIG_BCMWL6
396 // blink_5g.c
397 extern int blink_5g_main(int argc, char *argv[]);
398 #endif
400 // led.c
401 extern int led_main(int argc, char *argv[]);
403 // gpio.c
404 extern int gpio_main(int argc, char *argv[]);
406 // sched.c
407 extern int sched_main(int argc, char *argv[]);
408 extern void start_sched(void);
409 extern void stop_sched(void);
411 #ifdef TCONFIG_PPTPD
412 // pptp_client.c
413 extern void start_pptp_client(void);
414 extern void stop_pptp_client(void);
415 extern int write_pptpvpn_resolv(FILE*);
416 extern void clear_pptp_route(void);
417 #else
418 #define write_pptpvpn_resolv(f) (0)
419 #endif
421 //nvram
422 extern int nvram_file2nvram(const char *name, const char *filename);
423 extern int nvram_nvram2file(const char *name, const char *filename);
425 #ifdef TOMATO_SL
426 // usb.c
427 extern void hotplug_usb(void);
428 extern int usbevent_main(int argc, char *argv[]);
429 extern void start_usbevent(void);
430 extern void stop_usbevent(void);
431 extern int usbrescan_main(int argc, char *argv[]);
432 extern int hotdiskadd_main(int argc, char *argv[]);
433 extern int hotdiskremove_main(int argc, char *argv[]);
434 extern int hotdiskerror_main(int argc, char *argv[]);
435 extern int umountx_main(int argc, char *argv[]);
437 void start_test_1(void);
438 void stop_test_1(void);
440 // samba.c
441 extern void start_smbd(void);
442 extern void stop_smbd(void);
443 #endif
445 // transmission.c
446 #ifdef TCONFIG_BT
447 extern void start_bittorrent();
448 extern void stop_bittorrent();
449 #endif
451 // nfs.c
452 #ifdef TCONFIG_NFS
453 extern void start_nfs();
454 extern void stop_nfs();
455 #endif
457 // snmp.c
458 #ifdef TCONFIG_SNMP
459 extern void start_snmp();
460 extern void stop_snmp();
461 #endif
463 //tor.c
464 #ifdef TCONFIG_TOR
465 extern void start_tor();
466 extern void stop_tor();
467 #endif
469 // apcupsd.c
470 #ifdef TCONFIG_UPS
471 extern void start_ups();
472 extern void stop_ups();
473 #endif
475 // pptp.c
476 #ifdef TCONFIG_PPTPD
477 extern void start_pptpd(void);
478 extern void stop_pptpd(void);
479 extern void write_pptpd_dnsmasq_config(FILE* f);
480 #endif
482 // vpn.c
483 #ifdef TCONFIG_OPENVPN
484 extern void start_vpnclient(int clientNum);
485 extern void stop_vpnclient(int clientNum);
486 extern void start_vpnserver(int serverNum);
487 extern void stop_vpnserver(int serverNum);
488 extern void start_vpn_eas();
489 extern void stop_vpn_eas();
490 extern void run_vpn_firewall_scripts();
491 extern void write_vpn_dnsmasq_config(FILE*);
492 extern int write_vpn_resolv(FILE*);
493 #else
495 static inline void start_vpnclient(int clientNum) {}
496 static inline void stop_vpnclient(int clientNum) {}
497 static inline void start_vpnserver(int serverNum) {}
498 static inline void stop_vpnserver(int serverNum) {}
499 static inline void run_vpn_firewall_scripts() {}
500 static inline void write_vpn_dnsmasq_config(FILE*) {}
502 static inline void start_vpn_eas() { }
503 static inline void stop_vpn_eas() { }
504 #define write_vpn_resolv(f) (0)
505 #endif
507 // new_qoslimit.c
508 extern void ipt_qoslimit(int chain);
509 extern void new_qoslimit_start(void);
510 extern void new_qoslimit_stop(void);
512 // arpbind.c
513 extern void start_arpbind(void);
514 extern void stop_arpbind(void);
516 // mmc.c
517 #ifdef TCONFIG_SDHC
518 extern void start_mmc(void);
519 extern void stop_mmc(void);
520 #endif
522 #ifdef TCONFIG_NOCAT
523 // nocat.c
524 extern void start_nocat();
525 extern void stop_nocat();
526 extern void reset_nocat();
527 #endif
529 // tomatoanon.c
530 extern void start_tomatoanon();
531 extern void stop_tomatoanon();
533 #endif