1/*
2 * Router rc control script
3 *
4 * Copyright 2005, Broadcom Corporation
5 * All Rights Reserved.
6 *
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.
11 *
12 * $Id: rc.h,v 1.39 2005/03/29 02:00:06 honor Exp $
13 */
14
15#ifndef __RC_H__
16#define __RC_H__
17
18#define _GNU_SOURCE
19
20#include <rtconfig.h>
21#include <stdio.h>
22#include <stdlib.h>
23#include <unistd.h>
24#include <ctype.h> // !!TB
25#include <string.h>
26#include <signal.h>
27#include <syslog.h>
28#include <netinet/in.h>
29#include <fcntl.h>
30#include <net/if.h>
31#include <signal.h>
32
33#include <bcmnvram.h>
34#include <bcmparams.h>
35#include <utils.h>
36#include <shutils.h>
37#include <shared.h>
38
39#include "sysdeps.h"
40#include <linux/version.h>
41
42#define IFUP (IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST)
43
44#define USBCORE_MOD	"usbcore"
45#if defined (RTCONFIG_USB_XHCI)
46#if defined(RTCONFIG_ETRON_XHCI)
47#define USB30_MOD	"etxhci-hcd"
48#else
49#define USB30_MOD	"xhci-hcd"
50#endif
51#else
52#endif
53
54#if defined(RTN56UB1) || defined(RTN56UB2) //for MT7621
55#define USB20_MOD	"xhci-hcd"
56#else
57#define USB20_MOD	"ehci-hcd"
58#endif
59
60#define USBSTORAGE_MOD	"usb-storage"
61#define SCSI_MOD	"scsi_mod"
62#define SD_MOD		"sd_mod"
63#define SG_MOD		"sg"
64#ifdef LINUX26
65#define USBOHCI_MOD	"ohci-hcd"
66#define USBUHCI_MOD	"uhci-hcd"
67#define USBPRINTER_MOD	"usblp"
68#define SCSI_WAIT_MOD	"scsi_wait_scan"
69#define USBFS		"usbfs"
70#else
71#define USBOHCI_MOD	"usb-ohci"
72#define USBUHCI_MOD	"usb-uhci"
73#define USBPRINTER_MOD	"printer"
74#define USBFS		"usbdevfs"
75#endif
76
77#ifdef RTCONFIG_IPV6
78extern char wan6face[];
79#endif
80
81/* services.c */
82extern int g_reboot;
83extern int wan_phyid;
84
85#ifdef RTCONFIG_BCMARM
86#ifndef LINUX_KERNEL_VERSION
87#define LINUX_KERNEL_VERSION LINUX_VERSION_CODE
88#endif
89
90static inline int before(int ver1, int ver2)
91{
92	return (ver1-ver2) < 0;
93}
94
95#define After(ver2, ver1)	before(ver1, ver2)
96#endif
97
98#if defined(LINUX30) || LINUX_VERSION_CODE > KERNEL_VERSION(2,6,34)
99#define DAYS_PARAM	" --kerneltz --weekdays "
100#else
101#define DAYS_PARAM	" --days "
102#endif
103
104#define LOGNAME get_productid()
105#define is_ap_mode() (nvram_match("sw_mode", "3"))
106#ifdef RTCONFIG_USB_MODEM
107#define is_phyconnected() (nvram_match("link_wan", "1") || nvram_match("link_wan1", "1"))
108#else
109#define is_phyconnected() (nvram_match("link_wan","1"))
110#endif
111
112#define NAT_RULES	"/tmp/nat_rules"
113
114#ifndef ARRAY_SIZE
115#define ARRAY_SIZE(ary) (sizeof(ary) / sizeof((ary)[0]))
116#endif
117
118#define XSTR(s) STR(s)
119#define STR(s) #s
120
121//	#define DEBUG_IPTFILE
122//	#define DEBUG_RCTEST
123//	#define DEBUG_NOISY
124
125#ifdef DEBUG_NOISY
126#define TRACE_PT(fmt, args...)		\
127do {					\
128	char psn[16];			\
129	pid_t pid;			\
130	pid = getpid();			\
131	psname(pid, psn, sizeof(psn));	\
132	_dprintf("[%d %s:%s +%ld] " fmt,\
133		pid, psn, __func__, uptime(), ##args);	\
134} while(0)
135#else
136#define TRACE_PT(args...) do { } while(0)
137#endif
138
139#ifdef RTCONFIG_RESTRICT_GUI
140#define BIT_RES_GUI	"0x100"
141#endif
142
143#define MAX_NO_BRIDGE 	2
144#define MAX_NO_MSSID	4
145#define PROC_SCSI_ROOT	"/proc/scsi"
146#define USB_STORAGE	"usb-storage"
147
148#ifndef MAX_WAIT_FILE
149#define MAX_WAIT_FILE 5
150#endif
151#define PPP_DIR "/tmp/ppp/peers"
152#define PPP_CONF_FOR_3G "/tmp/ppp/peers/3g"
153
154#ifdef RTCONFIG_USB_BECEEM
155#define BECEEM_DIR "/tmp/Beceem_firmware"
156#define WIMAX_CONF "/tmp/wimax.conf"
157#define WIMAX_LOG "/tmp/wimax.log"
158#endif
159
160#define NOTIFY_DIR "/tmp/notify"
161#define NOTIFY_TYPE_USB "usb"
162
163#define BOOT		0
164#define REDIAL		1
165#define CONNECTING	2
166
167#define PPPOE0		0
168#define PPPOE1		1
169
170#define GOT_IP			0x01
171#define RELEASE_IP		0x02
172#define	GET_IP_ERROR		0x03
173#define RELEASE_WAN_CONTROL	0x04
174#define USB_DATA_ACCESS		0x05	//For WRTSL54GS
175#define USB_CONNECT		0x06	//For WRTSL54GS
176#define USB_DISCONNECT		0x07	//For WRTSL54GS
177
178#define SERIAL_NUMBER_LENGTH	12	//ATE need
179
180#define SET_LED(val)	do { } while(0)
181
182typedef enum { IPT_TABLE_NAT, IPT_TABLE_FILTER, IPT_TABLE_MANGLE } ipt_table_t;
183
184#define IFUP (IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST)
185
186#define	IPT_V4	0x01
187#define	IPT_V6	0x02
188#define	IPT_ANY_AF	(IPT_V4 | IPT_V6)
189#define	IPT_AF_IS_EMPTY(f)	((f & IPT_ANY_AF) == 0)
190
191/* api-*.c */
192extern uint32_t get_phy_status(uint32_t portmask);
193extern uint32_t get_phy_speed(uint32_t portmask);
194extern uint32_t set_phy_ctrl(uint32_t portmask, int ctrl);
195extern uint32_t set_gpio(uint32_t gpio, uint32_t value);
196extern uint32_t get_gpio(uint32_t gpio);
197extern uint32_t gpio_dir(uint32_t gpio, int dir);
198
199/* ate.c */
200extern int asus_ate_command(const char *command, const char *value, const char *value2);
201extern int ate_dev_status(void);
202extern int isValidMacAddr(const char* mac);
203extern int isValidCountryCode(const char *Ccode);
204extern int isValidSN(const char *sn);
205extern int pincheck(const char *a);
206extern int isValidChannel(int is_2G, char *channel);
207
208/* shared/boardapi.c */
209extern int wanport_ctrl(int ctrl);
210extern int lanport_ctrl(int ctrl);
211extern int wanport_status(int wan_unit);
212
213/* board API under sysdeps directory */
214extern void ate_commit_bootlog(char *err_code);
215extern int setAllLedOn(void);
216extern int setAllLedOff(void);
217extern int setATEModeLedOn(void);
218extern int start_wps_method(void);
219extern int stop_wps_method(void);
220extern int is_wps_stopped(void);
221extern int setMAC_2G(const char *mac);
222extern int setMAC_5G(const char *mac);
223#if defined(RTCONFIG_NEW_REGULATION_DOMAIN)
224extern int getRegSpec(void);
225extern int getRegDomain_2G(void);
226extern int getRegDomain_5G(void);
227extern int setRegSpec(const char *regSpec, int do_write);
228extern int setRegDomain_2G(const char *cc);
229extern int setRegDomain_5G(const char *cc);
230#else
231extern int getCountryCode_2G(void);
232extern int setCountryCode_2G(const char *cc);
233#endif
234extern int setCountryCode_5G(const char *cc);
235extern int setSN(const char *SN);
236extern int getSN(void);
237extern int setPIN(const char *pin);
238extern int getPIN(void);
239extern int set40M_Channel_2G(char *channel);
240extern int set40M_Channel_5G(char *channel);
241extern int ResetDefault(void);
242extern int getBootVer(void);
243extern int getMAC_2G(void);
244extern int getMAC_5G(void);
245extern int GetPhyStatus(int verbose);
246extern int Get_ChannelList_2G(void);
247extern int Get_ChannelList_5G(void);
248extern void Get_fail_ret(void);
249extern void Get_fail_reboot_log(void);
250extern void Get_fail_dev_log(void);
251#ifdef RTCONFIG_ODMPID
252extern int setMN(const char *MN);
253extern int getMN(void);
254#endif
255extern int check_imagefile(char *fname);
256#if defined(RTCONFIG_RALINK)
257extern int set_wantolan(void);
258static inline void platform_start_ate_mode(void) { };
259static inline int setWlOffLed(void) { return 0; }
260#elif defined(RTCONFIG_QCA)
261extern void platform_start_ate_mode(void);
262extern void set_uuid(void);
263static inline int setWlOffLed(void) { return 0; }
264#elif defined(CONFIG_BCMWL5)
265static inline void platform_start_ate_mode(void) { };
266extern int setWlOffLed(void);
267#else
268extern int setWlOffLed(void);
269#error
270#endif
271
272/* board API under sysdeps/ralink/ralink.c */
273#ifdef RTCONFIG_RALINK
274extern int FWRITE(const char *da, const char* str_hex);
275extern int FREAD(unsigned int addr_sa, int len);
276#if defined(RTN65U)
277extern void ate_run_in(void);
278#endif
279extern int gen_ralink_config(int band, int is_iNIC);
280extern int get_channel(int band);
281extern int __need_to_start_wps_band(char *prefix);
282extern int need_to_start_wps_band(int wps_band);
283extern void start_wsc_pin_enrollee(void);
284extern void stop_wsc(void);
285extern void stop_wsc_both(void);
286extern void start_wsc(void);
287extern void wps_oob_both(void);
288extern void wsc_user_commit();
289extern int getrssi(int band);
290extern int asuscfe(const char *PwqV, const char *IF);
291extern int stainfo(int band);
292extern int Set_SwitchPort_LEDs(const char *group, const char *action);
293extern int ralink_mssid_mac_validate(const char *macaddr);
294extern int getWscStatus(int unit);
295extern int wl_WscConfigured(int unit);
296extern int Get_Device_Flags(void);
297extern int Set_Device_Flags(const char *flags_str);
298extern const char *get_wifname(int band);
299extern const char *get_wpsifname(void);
300#endif
301
302/* board API under sysdeps/qca/qca.c */
303#if defined(RTCONFIG_QCA)
304extern int FWRITE(const char *da, const char* str_hex);
305extern int FREAD(unsigned int addr_sa, int len);
306extern int gen_ath_config(int band, int is_iNIC,int subnet);
307extern int __need_to_start_wps_band(char *prefix);
308extern int need_to_start_wps_band(int wps_band);
309extern int getEEPROM(unsigned char *outbuf, unsigned short *lenpt, char *area);
310extern void hexdump(unsigned char *pt, unsigned short len);
311extern void setCTL(const char *);
312extern int verify_ctl_table(void);
313#ifdef RTCONFIG_ATEUSB3_FORCE
314extern int getForceU3(void);
315extern int setForceU3(const char *val);
316#endif
317extern char *getStaMAC(void);
318extern unsigned int getPapState(int unit);
319typedef unsigned int	u_int;
320extern u_int ieee80211_mhz2ieee(u_int freq);
321#endif
322extern int country_to_code(char *ctry, int band);
323
324/* sysdeps/dsl-*.c */
325extern int check_tc_firmware_crc(void);
326extern int truncate_trx(void);
327extern void do_upgrade_adsldrv(void);
328extern int compare_linux_image(void);
329
330// init.c
331extern int init_main(int argc, char *argv[]);
332extern int reboothalt_main(int argc, char *argv[]);
333extern int console_main(int argc, char *argv[]);
334extern int limit_page_cache_ratio(int ratio);
335extern int init_nvram(void);
336extern void wl_defaults(void);
337extern void wl_defaults_wps(void);
338extern void restore_defaults_module(char *prefix);
339extern void clean_modem_state(int flag);
340extern void clean_vlan_ifnames(void);
341
342// interface.c
343extern int _ifconfig(const char *name, int flags, const char *addr, const char *netmask, const char *dstaddr, int mtu);
344static inline int ifconfig(const char *name, int flags, const char *addr, const char *netmask)
345{
346	return _ifconfig(name, flags, addr, netmask, NULL, 0);
347}
348extern int _ifconfig_get(const char *name, int *flags, char *addr, char *netmask, char *dstaddr, int *mtu);
349extern int ifconfig_mtu(const char *name, int mtu);
350extern int route_add(char *name, int metric, char *dst, char *gateway, char *genmask);
351extern int route_del(char *name, int metric, char *dst, char *gateway, char *genmask);
352extern int start_vlan(void);
353extern int stop_vlan(void);
354extern int config_vlan(void);
355extern void config_loopback(void);
356#ifdef RTCONFIG_IPV6
357extern int ipv6_mapaddr4(struct in6_addr *addr6, int ip6len, struct in_addr *addr4, int ip4mask);
358#endif
359
360// wan.c
361extern int wan_prefix(char *ifname, char *prefix);
362extern int wan_ifunit(char *wan_ifname);
363extern int wanx_ifunit(char *wan_ifname);
364extern int preset_wan_routes(char *wan_ifname);
365extern int found_default_route(int wan_unit);
366#ifdef RTCONFIG_QCA_PLC_UTILS
367extern int autodet_plc_main(int argc, char *argv[]);
368#endif
369extern int autodet_main(int argc, char *argv[]);
370extern void start_wan(void);
371extern void stop_wan(void);
372extern int add_multi_routes(void);
373extern int add_routes(char *prefix, char *var, char *ifname);
374extern int del_routes(char *prefix, char *var, char *ifname);
375extern void start_wan_if(int unit);
376extern void stop_wan_if(int unit);
377#ifdef RTCONFIG_IPV6
378extern void stop_wan6(void);
379#if 0
380extern void start_ecmh(const char *wan_ifname);
381extern void stop_ecmh(void);
382#endif
383extern void wan6_up(const char *wan_ifname);
384extern void wan6_down(const char *wan_ifname);
385extern void start_wan6(void);
386extern void stop_wan6(void);
387#endif
388#if defined(RTCONFIG_WANRED_LED)
389extern int test_gateway(char *gw, char *wan_ifname);
390#else
391static inline int test_gateway(char *gw, char *wan_ifname) { return 0; }
392#endif
393extern int do_dns_detect();
394
395// lan.c
396extern void update_lan_state(int state, int reason);
397extern void set_et_qos_mode(void);
398extern void start_wl(void);
399extern void stop_wl(void);
400extern char *get_hwaddr(const char *ifname);
401extern void start_lan(void);
402extern void stop_lan(void);
403extern void do_static_routes(int add);
404extern void hotplug_net(void);
405extern int radio_switch(int subunit);
406extern int radio_main(int argc, char *argv[]);
407extern int wldist_main(int argc, char *argv[]);
408extern int update_lan_resolvconf(void);
409extern void lan_up(char *lan_ifname);
410extern void lan_down(char *lan_ifname);
411extern void stop_lan_wl(void);
412extern void start_lan_wl(void);
413extern void restart_wl(void);
414extern void lanaccess_mssid_ban(const char *ifname_in);
415extern void lanaccess_wl(void);
416extern void restart_wireless(void);
417#ifdef RTCONFIG_BCM_7114
418extern void stop_wl_bcm(void);
419#endif
420extern void restart_wireless_wps(void);
421extern void start_wan_port(void);
422extern void stop_wan_port(void);
423extern void start_lan_port(int dt);
424extern void stop_lan_port(void);
425extern void start_lan_wlport(void);
426extern void stop_lan_wlport(void);
427extern int wl_dev_exist(void);
428#if defined(RTCONFIG_RALINK) || defined(RTCONFIG_QCA)
429extern pid_t pid_from_file(char *pidfile);
430#endif
431extern int delay_main(int argc, char *argv[]);
432#ifdef RTCONFIG_IPV6
433extern void set_default_accept_ra(int flag);
434extern void set_intf_ipv6_accept_ra(const char *ifname, int flag);
435extern void set_intf_ipv6_dad(const char *ifname, int bridge, int flag);
436extern void config_ipv6(int enable, int incl_wan);
437extern void enable_ipv6(const char *ifname);
438extern void disable_ipv6(const char *ifname);
439#endif
440#ifdef RTCONFIG_WIRELESSREPEATER
441extern void start_lan_wlc(void);
442extern void stop_lan_wlc(void);
443#endif
444#if defined(RTCONFIG_QCA)
445extern void stavap_start(void);
446extern void qca_wif_up(const char* wif);
447extern void gen_qca_wifi_cfgs(void);
448#endif
449
450// firewall.c
451extern int start_firewall(int wanunit, int lanunit);
452extern void enable_ip_forward(void);
453extern void convert_routes(void);
454extern void start_default_filter(int lanunit);
455extern int ipt_addr_compact(const char *s, int af, int strict);
456extern void filter_setting(char *wan_if, char *wan_ip, char *lan_if, char *lan_ip, char *logaccept, char *logdrop);
457#ifdef WEB_REDIRECT
458extern void redirect_setting(void);
459#endif
460
461/* pc.c */
462#ifdef RTCONFIG_PARENTALCTRL
463extern int pc_main(int argc, char *argv[]);
464extern int count_pc_rules(void);
465extern void config_daytime_string(FILE *fp, char *logaccept, char *logdrop);
466#endif
467
468// pc_block.c
469#ifdef RTCONFIG_PARENTALCTRL
470extern int pc_block_main(int argc, char *argv[]);
471extern void config_blocking_redirect(FILE *fp);
472#endif
473
474// ppp.c
475extern int ipup_main(int argc, char **argv);
476extern int ipdown_main(int argc, char **argv);
477extern int ippreup_main(int argc, char **argv);
478#ifdef RTCONFIG_IPV6
479extern int ip6up_main(int argc, char **argv);
480extern int ip6down_main(int argc, char **argv);
481#endif
482extern int authfail_main(int argc, char **argv);
483extern int ppp_ifunit(char *ifname);
484extern int ppp_linkunit(char *linkname);
485
486// pppd.c
487extern int start_pppd(int unit);
488extern void stop_pppd(int unit);
489extern int start_demand_ppp(int unit, int wait);
490extern int start_pppoe_relay(char *wan_if);
491extern void stop_pppoe_relay(void);
492
493// vpnc.c
494#ifdef RTCONFIG_VPNC
495extern int vpnc_ipup_main(int argc, char **argv);
496extern int vpnc_ipdown_main(int argc, char **argv);
497extern int vpnc_ippreup_main(int argc, char **argv);
498extern int vpnc_authfail_main(int argc, char **argv);
499extern void update_vpnc_state(char *prefix, int state, int reason);
500#endif
501
502// network.c
503extern void set_host_domain_name(void);
504extern void start_lan(void);
505extern void stop_lan(void);
506extern void do_static_routes(int add);
507extern void start_wl(void);
508extern void wan_up(char *wan_ifname);
509#ifdef RTCONFIG_IPV6
510extern void wan6_up(const char *wan_ifname);
511#endif
512extern void wan_down(char *wan_ifname);
513extern void update_wan_state(char *prefix, int state, int reason);
514extern int update_resolvconf(void);
515
516/* qos.c */
517extern int start_iQos(void);
518extern void stop_iQos(void);
519extern void del_iQosRules(void);
520extern int add_iQosRules(char *pcWANIF);
521
522/* rtstate.c */
523extern void add_rc_support(char *feature);
524
525// udhcpc.c
526extern int udhcpc_wan(int argc, char **argv);
527extern int udhcpc_lan(int argc, char **argv);
528extern int start_udhcpc(char *wan_ifname, int unit, pid_t *ppid);
529extern void stop_udhcpc(int unit);
530extern int zcip_wan(int argc, char **argv);
531extern int start_zcip(char *wan_ifname, int unit, pid_t *ppid);
532extern void stop_zcip(int unit);
533
534#ifdef RTCONFIG_IPV6
535extern int dhcp6c_wan(int argc, char **argv);
536extern int start_dhcp6c(void);
537extern void stop_dhcp6c(void);
538#endif
539
540#ifdef RTCONFIG_WPS
541extern int wpsaide_main(int argc, char *argv[]);
542#ifdef RTCONFIG_QCA
543extern int get_wps_er_main(int argc, char *argv[]);
544#endif
545extern int stop_wpsaide();
546extern int start_wpsaide();
547#endif
548
549// auth.c
550extern int start_auth(int unit, int wan_up);
551extern int stop_auth(int unit, int wan_down);
552extern int restart_auth(int unit);
553#ifdef RTCONFIG_EAPOL
554extern int wpacli_main(int argc, char *argv[]);
555#endif
556
557// mtd.c
558extern int mtd_erase(const char *mtdname);
559extern int mtd_unlock(const char *mtdname);
560#ifdef RTCONFIG_BCMARM
561extern int mtd_erase_old(const char *mtdname);
562extern int mtd_write_main_old(int argc, char *argv[]);
563extern int mtd_unlock_erase_main_old(int argc, char *argv[]);
564extern int mtd_write(const char *path, const char *mtd);
565#else
566extern int mtd_write_main(int argc, char *argv[]);
567extern int mtd_unlock_erase_main(int argc, char *argv[]);
568#endif
569
570// jffs2.c
571#if defined(RTCONFIG_UBIFS)
572extern void start_ubifs(void);
573extern void stop_ubifs(int stop);
574static inline void start_jffs2(void) { start_ubifs(); }
575static inline void stop_jffs2(int stop) { stop_ubifs(stop); }
576#elif defined(RTCONFIG_JFFS2) || defined(RTCONFIG_JFFSV1) || defined(RTCONFIG_BRCM_NAND_JFFS2)
577extern void start_jffs2(void);
578extern void stop_jffs2(int stop);
579#else
580static inline void start_jffs2(void) { }
581static inline void stop_jffs2(int stop) { }
582#endif
583
584// watchdog.c
585extern void led_control_normal(void);
586extern void erase_nvram(void);
587extern int init_toggle(void);
588extern void btn_check(void);
589extern int watchdog_main(int argc, char *argv[]);
590extern int watchdog02_main(int argc, char *argv[]);
591extern int sw_devled_main(int argc, char *argv[]);
592extern void init_wllc(void);
593extern void rssi_check_unit(int unit);
594
595// usbled.c
596extern int usbled_main(int argc, char *argv[]);
597#ifdef RTCONFIG_FANCTRL
598// phy_tempsense.c
599extern int phy_tempsense_main(int argc, char *argv[]);
600#endif
601#if defined(RTCONFIG_BCMWL6) && defined(RTCONFIG_PROXYSTA)
602// psta_monitor.c
603extern int psta_monitor_main(int argc, char *argv[]);
604#endif
605
606#ifdef RTCONFIG_QTN
607extern int qtn_monitor_main(int argc, char *argv[]);
608#endif
609
610extern int radio_main(int argc, char *argv[]);
611
612// ntp.c
613extern int ntp_main(int argc, char *argv[]);
614
615// btnsetup.c
616extern int ots_main(int argc, char *argv[]);
617extern void stop_ots(void);
618extern int start_ots(void);
619
620// common.c
621extern in_addr_t inet_addr_(const char *cp);	// oleg patch
622extern int inet_equal(char *addr1, char *mask1, char *addr2, char *mask2);
623extern void usage_exit(const char *cmd, const char *help) __attribute__ ((noreturn));
624#define modprobe(mod, args...) ({ char *argv[] = { "modprobe", "-s", mod, ## args, NULL }; _eval(argv, NULL, 0, NULL); })
625extern int modprobe_r(const char *mod);
626#define xstart(args...)	_xstart(args, NULL)
627extern int _xstart(const char *cmd, ...);
628extern void run_nvscript(const char *nv, const char *arg1, int wtime);
629extern void run_userfile (char *folder, char *extension, const char *arg1, int wtime);
630extern void setup_conntrack(void);
631extern void inc_mac(char *mac, int plus);
632extern void set_mac(const char *ifname, const char *nvname, int plus);
633extern const char *default_wanif(void);
634//	extern const char *default_wlif(void);
635extern void simple_unlock(const char *name);
636extern void simple_lock(const char *name);
637extern void killall_tk(const char *name);
638extern void kill_pidfile_tk(const char *pidfile);
639extern long fappend(FILE *out, const char *fname);
640extern long fappend_file(const char *path, const char *fname);
641extern void logmessage(char *logheader, char *fmt, ...);
642extern char *trim_r(char *str);
643extern void restart_lfp(void);
644extern int get_meminfo_item(const char *name);
645extern void setup_timezone(void);
646extern int is_valid_hostname(const char *name);
647extern void setup_ct_timeout(int connflag);
648extern void setup_udp_timeout(int connflag);
649extern void setup_ftp_conntrack(int port);
650extern void setup_pt_conntrack(void);
651extern void remove_conntrack(void);
652extern int pppstatus(void);
653extern void time_zone_x_mapping(void);
654extern void stop_if_misc(void);
655extern int mssid_mac_validate(const char *macaddr);
656#ifdef CONFIG_BCMWL5
657extern int setup_dnsmq(int mode);
658#endif
659
660// ssh.c
661
662// usb.c
663#ifdef RTCONFIG_USB
664FILE* fopen_or_warn(const char *path, const char *mode);
665extern void hotplug_usb(void);
666extern void start_usb(void);
667extern void remove_usb_module(void);
668extern void stop_usb_program(int mode);
669extern void restart_usb(int f_stop);
670extern void stop_usb(int f_force);
671extern void start_lpd();
672extern void stop_lpd();
673extern void start_u2ec();
674extern void stop_u2ec();
675extern int ejusb_main(int argc, char *argv[]);
676extern void webdav_account_default(void);
677extern void remove_storage_main(int shutdn);
678extern int start_usbled(void);
679extern int stop_usbled(void);
680extern void restart_nas_services(int stop, int start);
681extern void stop_nas_services(int force);
682extern int sd_partition_num();
683#endif
684#ifdef RTCONFIG_CROND
685extern void start_cron(void);
686extern void stop_cron(void);
687#endif
688extern void start_webdav(void);
689#ifdef RTCONFIG_USB_PRINTER
690extern void start_usblpsrv(void);
691#endif
692#ifdef RTCONFIG_SAMBASRV
693extern void create_custom_passwd(void);
694extern void stop_samba(void);
695extern void start_samba(void);
696#endif
697#ifdef RTCONFIG_WEBDAV
698extern void stop_webdav(void);
699extern void stop_all_webdav(void);
700#else
701static inline void stop_all_webdav(void) { }
702#endif
703#ifdef RTCONFIG_FTP
704extern void stop_ftpd(void);
705extern void start_ftpd(void);
706#endif
707#ifdef RTCONFIG_CLOUDSYNC
708extern void stop_cloudsync(int type);
709extern void start_cloudsync(int fromUI);
710#endif
711#if defined(RTCONFIG_APP_PREINSTALLED) || defined(RTCONFIG_APP_NETINSTALLED)
712extern int stop_app(void);
713extern int start_app(void);
714extern void usb_notify();
715#endif
716
717#ifdef RTCONFIG_DISK_MONITOR
718extern void start_diskmon(void);
719extern void stop_diskmon(void);
720extern int diskmon_main(int argc, char *argv[]);
721extern void remove_pool_error(const char *device, const char *flag);
722#endif
723extern int diskremove_main(int argc, char *argv[]);
724
725#ifdef RTCONFIG_CIFS
726extern void start_cifs(void);
727extern void stop_cifs(void);
728extern int mount_cifs_main(int argc, char *argv[]);
729#else
730static inline void start_cifs(void) {};
731static inline void stop_cifs(void) {};
732#endif
733
734// linkmonitor.c
735extern int linkmonitor_main(int argc, char *argv[]);
736
737// vpn.c
738extern void start_pptpd(void);
739extern void stop_pptpd(void);
740
741// vpnc.c
742#ifdef RTCONFIG_VPNC
743extern int start_vpnc(void);
744extern void stop_vpnc(void);
745#endif
746
747// openvpn.c
748#ifdef RTCONFIG_OPENVPN
749extern void start_vpnclient(int clientNum);
750extern void stop_vpnclient(int clientNum);
751extern void start_vpnserver(int serverNum);
752extern void stop_vpnserver(int serverNum);
753extern void start_vpn_eas();
754extern void stop_vpn_eas();
755extern void run_vpn_firewall_scripts();
756extern void write_vpn_dnsmasq_config(FILE*);
757extern int write_vpn_resolv(FILE*);
758//static inline void start_vpn_eas() { }
759//#define write_vpn_resolv(f) (0)
760extern void create_openvpn_passwd();
761#endif
762
763// wanduck.c
764extern int update_wan_leds(int wan_unit);
765extern int wanduck_main(int argc, char *argv[]);
766
767// tcpcheck.c
768extern int setupsocket(int sock);
769extern void wakeme(int sig);
770extern void goodconnect(int i);
771extern void failedconnect(int i);
772extern void subtime(struct timeval *a, struct timeval *b, struct timeval *res);
773extern void setupset(fd_set *theset, int *numfds);
774extern void waitforconnects();
775extern int tcpcheck_main(int argc, char *argv[]);
776
777// readmem.c
778#ifdef BUILD_READMEM
779extern int readmem_main(int argc, char *argv[]);
780#endif
781
782// usb_devices.c
783#ifdef RTCONFIG_USB
784extern int asus_sd(const char *device_name, const char *action);
785extern int asus_lp(const char *device_name, const char *action);
786extern int asus_sr(const char *device_name, const char *action);
787extern int asus_tty(const char *device_name, const char *action);
788extern int asus_usb_interface(const char *device_name, const char *action);
789extern int asus_sg(const char *device_name, const char *action);
790extern int asus_usbbcm(const char *device_name, const char *action);
791#endif
792#ifdef RTCONFIG_USB_MODEM
793extern int is_create_file_dongle(const unsigned int vid, const unsigned int pid);
794#ifdef RTCONFIG_USB_BECEEM
795extern int is_beceem_dongle(const int mode, const unsigned int vid, const unsigned int pid);
796extern int is_samsung_dongle(const int mode, const unsigned int vid, const unsigned int pid);
797extern int is_gct_dongle(const int mode, const unsigned int vid, const unsigned int pid);
798extern int write_beceem_conf(const char *eth_node);
799extern int write_gct_conf(void);
800#endif
801extern int is_android_phone(const int mode, const unsigned int vid, const unsigned int pid);
802extern int is_storage_cd(const int mode, const unsigned int vid, const unsigned int pid);
803extern int write_3g_conf(FILE *fp, int dno, int aut, const unsigned int vid, const unsigned int pid);
804extern int init_3g_param(const char *port_path, const unsigned int vid, const unsigned int pid);
805extern int write_3g_ppp_conf(void);
806#endif
807
808#ifdef RTCONFIG_DSL
809//dsl.c
810extern void dsl_configure(int req);
811extern void start_dsl(void);
812extern void stop_dsl(void);
813extern void remove_dsl_autodet(void);
814extern void dsl_defaults(void);
815#endif
816
817//services.c
818extern void write_static_leases(char *file);
819#ifdef RTCONFIG_DHCP_OVERRIDE
820extern int restart_dnsmasq(int need_link_DownUp);
821#endif
822extern void start_dnsmasq(void);
823extern void stop_dnsmasq(void);
824extern void reload_dnsmasq(void);
825extern int ddns_updated_main(int argc, char *argv[]);
826#ifdef RTCONFIG_IPV6
827extern void add_ip6_lanaddr(void);
828extern void start_ipv6_tunnel(void);
829extern void stop_ipv6_tunnel(void);
830extern void start_ipv6(void);
831extern void stop_ipv6(void);
832extern void ipv6_sysconf(const char *ifname, const char *name, int value);
833extern int ipv6_getconf(const char *ifname, const char *name);
834#ifdef RTCONFIG_6RELAYD
835extern void stop_6relayd(void);
836extern int start_6relayd(void);
837#endif
838#endif
839extern int wps_band_radio_off(int wps_band);
840#ifdef CONFIG_BCMWL5
841#ifdef BCM_ASPMD
842extern int start_aspmd(void);
843extern int stop_aspmd(void);
844#endif /* BCM_ASPMD */
845extern int start_eapd(void);
846extern void stop_eapd(void);
847extern int start_nas(void);
848extern void stop_nas(void);
849extern void set_acs_ifnames();
850#endif
851extern void start_nat_rules(void);
852extern void stop_nat_rules(void);
853extern void stop_syslogd(void);
854extern void stop_klogd(void);
855extern int start_syslogd(void);
856extern int start_klogd(void);
857extern int start_logger(void);
858extern void start_dfs(void);
859extern void handle_notifications(void);
860extern void stop_watchdog(void);
861extern int start_watchdog(void);
862extern int get_apps_name(const char *string);
863extern int run_app_script(const char *pkg_name, const char *pkg_action);
864extern void set_hostname(void);
865extern int _start_telnetd(int force);
866extern int start_telnetd(void);
867extern void stop_telnetd(void);
868#ifdef RTCONFIG_SSH
869extern int start_sshd(void);
870extern void stop_sshd(void);
871#endif
872#ifdef RTCONFIG_WTFAST
873extern void start_wtfast(void);
874extern void stop_wtfast(void);
875#endif
876extern void start_hotplug2(void);
877extern void stop_services(void);
878extern void stop_logger(void);
879extern void setup_passwd(void);
880extern void create_passwd(void);
881extern int start_services(void);
882extern void check_services(void);
883extern int no_need_to_start_wps(void);
884extern int wps_band_radio_off(int wps_band);
885extern int start_wanduck(void);
886extern void stop_wanduck(void);
887extern void stop_ntpc(void);
888extern int start_ntpc(void);
889#ifdef RTCONFIG_UPNPC
890extern int start_miniupnpc(void);
891extern void stop_miniupnpc(void);
892#endif
893#ifdef RTCONFIG_BONJOUR
894extern int start_netmonitor(void);
895extern void stop_netmonitor(void);
896#endif
897extern void stop_networkmap(void);
898extern int start_networkmap(int bootwait);
899extern int stop_wps(void);
900extern int start_wps(void);
901extern void stop_upnp(void);
902extern void start_upnp(void);
903extern void reload_upnp(void);
904extern void stop_ddns(void);
905extern int start_ddns(void);
906extern void refresh_ntpc(void);
907extern void start_hotplug2(void);
908extern void stop_hotplug2(void);
909extern void stop_lltd(void);
910extern void stop_httpd(void);
911extern void stop_rstats(void);
912extern void stop_autodet(void);
913extern void start_autodet(void);
914extern int wps_band_ssid_broadcast_off(int wps_band);
915#ifdef RTCONFIG_QCA_PLC_UTILS
916extern void start_plcdet(void);
917#endif
918extern void start_httpd(void);
919extern int wl_wpsPincheck(char *pin_string);
920extern int start_wps_pbc(int unit);
921#if defined(RTCONFIG_RALINK)
922extern int exec_8021x_start(int band, int is_iNIC);
923extern int exec_8021x_stop(int band, int is_iNIC);
924extern int start_8021x(void);
925extern int stop_8021x(void);
926#endif
927#ifdef RTCONFIG_LLDP
928extern void stop_lldpd(void);
929extern int start_lldpd(void);
930#endif
931extern int firmware_check_main(int argc, char *argv[]);
932#ifdef RTCONFIG_HTTPS
933extern int rsasign_check_main(int argc, char *argv[]);
934extern char *pwdec(const char *input);
935extern char *pwdec_dsl(char *input);
936#endif
937extern int service_main(int argc, char *argv[]);
938#ifdef RTCONFIG_DSL
939extern int check_tc_upgrade(void);
940extern int start_tc_upgrade(void);
941#ifdef RTCONFIG_DSL_TCLINUX
942extern void start_dsl_autodet(void);
943extern void stop_dsl_autodet(void);
944extern void stop_dsl_diag(void);
945extern int start_dsl_diag(void);
946#endif
947#endif
948#ifdef RTCONFIG_PUSH_EMAIL
949extern void start_DSLsendmail(void);
950#ifdef RTCONFIG_DSL_TCLINUX
951extern void start_DSLsenddiagmail(void);
952#endif
953#endif
954#ifdef RTCONFIG_SNMPD
955extern void start_snmpd(void);
956extern void stop_snmpd(void);
957#endif
958#ifdef RTCONFIG_TIMEMACHINE
959extern int start_timemachine(void);
960extern void stop_timemachine(void);
961extern int start_afpd(void);
962extern void stop_afpd(void);
963extern int start_cnid_metad(void);
964extern void stop_cnid_metad(void);
965extern int start_avahi_daemon(void);
966extern void stop_avahi_daemon(void);
967#endif
968
969#if defined(RTCONFIG_MDNS)
970extern int generate_mdns_config(void);
971extern int generate_afpd_service_config(void);
972extern int generate_adisk_service_config(void);
973extern int generate_itune_service_config(void);
974extern int start_mdns(void);
975extern void stop_mdns(void);
976extern void restart_mdns(void);
977#endif
978
979#ifdef __CONFIG_NORTON__
980extern int start_norton(void);
981extern int stop_norton(void);
982#endif
983
984#ifdef RTCONFIG_MEDIA_SERVER
985void force_stop_dms(void);
986void stop_mt_daapd(void);
987void start_dms(void);
988void start_mt_daapd(void);
989void set_invoke_later(int flag);
990int get_invoke_later(void);
991#endif	/* RTCONFIG_MEDIA_SERVER */
992
993#ifdef RTCONFIG_WIRELESSREPEATER
994void start_wlcscan(void);
995void stop_wlcscan(void);
996void start_wlcconnect(void);
997void stop_wlcconnect(void);
998void repeater_nat_setting(void);
999void repeater_filter_setting(int mode);
1000#if defined(RTCONFIG_RALINK)
1001void apcli_start(void);
1002int site_survey_for_channel(int n, const char *wif, int *HT_EXT);
1003#endif
1004#endif	/* RTCONFIG_WIRELESSREPEATER */
1005
1006#ifdef RTCONFIG_PARENTALCTRL
1007extern void stop_pc_block(void);
1008extern void start_pc_block(void);
1009#endif
1010#ifdef RTCONFIG_HTTPS
1011extern int check_rsasign(char *fname);
1012#endif
1013
1014//wireless.c
1015extern int wlcscan_main(void);
1016extern void repeater_pap_disable(void);
1017extern int wlcconnect_main(void);
1018
1019//speedtest.c
1020extern int speedtest_main(int argc, char **argv);
1021extern int speedtest();
1022
1023#ifdef RTCONFIG_BWDPI
1024extern int bwdpi_main(int argc, char **argv);
1025extern int bwdpi_check_main(int argc, char **argv);
1026extern int bwdpi_wred_alive_main(int argc, char **argv);
1027extern int show_wrs_main(int argc, char **argv);
1028extern int rsasign_sig_check_main(int argc, char *argv[]);
1029extern int bwdpi_db_10_main(int argc, char **argv);
1030#endif
1031
1032// hour_monitor.c
1033extern int hour_monitor_main(int argc, char **argv);
1034extern int hour_monitor_function_check();
1035extern void check_hour_monitor_service();
1036extern void hm_traffic_analyzer_save();
1037extern void hm_traffic_limiter_save();
1038
1039// traffic_limiter.c
1040#ifdef RTCONFIG_TRAFFIC_LIMITER
1041extern void traffic_limiter_sendSMS(const char *type, int unit);
1042extern void traffic_limiter_limitdata_check(void);
1043extern int traffic_limiter_wanduck_check(int unit);
1044extern void reset_traffic_limiter_counter(int force);
1045extern void init_traffic_limiter(void);
1046#endif
1047
1048
1049#ifdef RTCONFIG_INTERNAL_GOBI
1050extern int lteled_main(int argc, char **argv);
1051extern int start_lteled(void);
1052extern void stop_lteled(void);
1053#endif
1054#ifdef RTCONFIG_TOR
1055extern void start_Tor_proxy(void);
1056#endif
1057#ifdef RTCONFIG_CLOUDCHECK
1058void stop_cloudcheck(void);
1059void start_cloudcheck(void);
1060#endif
1061
1062#ifdef RTCONFIG_IPERF
1063// monitor.c
1064extern int monitor_main(int argc, char *argv[]);
1065#endif
1066
1067#ifdef RTCONFIG_TR069
1068extern int start_tr(void);
1069extern void stop_tr(void);
1070extern int dhcpc_lease_main(int argc, char *argv[]);
1071#endif
1072
1073#if ((defined(RTCONFIG_USER_LOW_RSSI) && defined(RTCONFIG_BCMARM)) || defined(RTCONFIG_NEW_USER_LOW_RSSI))
1074extern void stop_roamast(void);
1075extern void start_roamast(void);
1076extern int roam_assistant_main(int argc, char *argv[]);
1077#endif
1078
1079#ifdef RTCONFIG_DHCP_OVERRIDE
1080extern int detectWAN_arp_main(int argc, char **argv);
1081#endif
1082
1083#ifdef RTCONFIG_PUSH_EMAIL
1084extern void am_send_mail(int type, char *path);
1085#endif
1086
1087#if defined(RTCONFIG_KEY_GUARD)
1088extern void stop_keyguard(void);
1089extern void start_keyguard(void);
1090extern int keyguard_main(int argc, char *argv[]);
1091#endif
1092
1093extern void start_ecoguard(void);
1094
1095#ifdef BTN_SETUP
1096enum BTNSETUP_STATE
1097{
1098	BTNSETUP_NONE=0,
1099	BTNSETUP_DETECT,
1100	BTNSETUP_START,
1101	BTNSETUP_DATAEXCHANGE,
1102	BTNSETUP_DATAEXCHANGE_FINISH,
1103	BTNSETUP_DATAEXCHANGE_EXTEND,
1104	BTNSETUP_FINISH
1105};
1106#endif
1107
1108#ifdef RTCONFIG_TUNNEL
1109extern void start_mastiff();
1110extern void stop_mastiff();
1111#endif
1112
1113#if defined(RTCONFIG_TCODE) && defined(CONFIG_BCMWL5)
1114extern char *cfe_nvram_get(const char *name);
1115static INLINE int
1116cfe_nvram_match(char *name, char *match) {
1117	const char *value = cfe_nvram_get(name);
1118	return (value && !strcmp(value, match));
1119}
1120extern char *cfe_nvram_safe_get(const char *name);
1121extern char *cfe_nvram_get_raw(const char *name);
1122extern char *cfe_nvram_safe_get_raw(const char *name);
1123extern int cfe_nvram_set(const char *name);
1124extern int factory_debug();
1125#if !(defined(RTCONFIG_CFEZ) && defined(RTCONFIG_BCMARM))
1126extern char *ATE_BRCM_PREFIX(void);
1127extern int ATE_BRCM_SET(const char *name, const char *value);
1128extern void ATE_BRCM_COMMIT(void);
1129#endif
1130#endif
1131
1132#if defined(RTCONFIG_LACP)
1133void config_lacp(void);
1134#endif
1135
1136#if defined(CONFIG_BCMWL5) && defined(RTCONFIG_DUALWAN)
1137void dualwan_control(void);
1138#endif
1139
1140#ifdef RTCONFIG_PORT_BASED_VLAN
1141// vlan.c
1142extern int vlan_enable(void);
1143extern int check_if_exist_vlan_ifnames(char *ifname);
1144extern void start_vlan_ifnames(void);
1145extern void stop_vlan_ifnames(void);
1146extern void start_vlan_wl_ifnames(void);
1147extern void restart_vlan_wl(void);
1148extern void vlan_lanaccess_wl(void);
1149extern void set_port_based_vlan_config(char *interface);
1150extern void set_vlan_ifnames(int index, int wlmap, char *subnet_name, char *vlan_if);
1151extern void stop_vlan_wl_ifnames(void);
1152extern void start_vlan_wl(void);
1153#endif
1154
1155#endif	/* __RC_H__ */
1156