4 #include <tomato_profile.h>
5 #include <tomato_config.h>
7 #include <netinet/in.h>
14 #include <mntent.h> // !!TB
17 #define Y2K 946684800UL // seconds since 1970
19 #define ASIZE(array) (sizeof(array) / sizeof(array[0]))
22 #define MTD_DEV(arg) "/dev/mtd"#arg
23 #define MTD_BLKDEV(arg) "/dev/mtdblock"#arg
24 #define DEV_GPIO(arg) "/dev/gpio"#arg
26 #define MTD_DEV(arg) "/dev/mtd/"#arg
27 #define MTD_BLKDEV(arg) "/dev/mtdblock/"#arg
28 #define DEV_GPIO(arg) "/dev/gpio/"#arg
32 extern const char *tomato_version
;
33 extern const char *tomato_buildtime
;
34 extern const char *tomato_shortver
;
38 #define _dprintf cprintf
40 #define _dprintf(args...) do { } while(0)
45 #define WP_DISABLED 0 // order must be synced with def in misc.c
54 #define IPV6_DISABLED 0
56 #define IPV6_NATIVE_DHCP 2
57 #define IPV6_ANYCAST_6TO4 3
61 #define IPV6_6RD_DHCP 7
66 ACT_TFTP_UPGRADE_UNUSED
,
68 ACT_WEBS_UPGRADE_UNUSED
,
88 char name
[IFNAMSIZ
+ 1];
89 char ip
[sizeof("xxx.xxx.xxx.xxx") + 1];
93 extern void chld_reap(int sig
);
94 extern int get_wan_proto(void);
96 extern int get_ipv6_service(void);
97 #define ipv6_enabled() (get_ipv6_service() != IPV6_DISABLED)
98 extern const char *ipv6_router_address(struct in6_addr
*in6addr
);
99 extern int calc_6rd_local_prefix(const struct in6_addr
*prefix
,
100 int prefix_len
, int relay_prefix_len
,
101 const struct in_addr
*local_ip
,
102 struct in6_addr
*local_prefix
, int *local_prefix_len
);
104 #define ipv6_enabled() (0)
106 extern int using_dhcpc(void);
107 extern void notice_set(const char *path
, const char *format
, ...);
108 extern int check_wanup(void);
109 extern const dns_list_t
*get_dns(void);
110 extern void set_action(int a
);
111 extern int check_action(void);
112 extern int wait_action_idle(int n
);
113 extern int wl_client(int unit
, int subunit
);
114 extern const wanface_list_t
*get_wanfaces(void);
115 extern const char *get_wanface(void);
116 extern const char *get_wanip(void);
118 extern const char *get_wan6face(void);
120 extern const char *getifaddr(char *ifname
, int family
, int linklocal
);
121 extern long get_uptime(void);
122 extern char *wl_nvname(const char *nv
, int unit
, int subunit
);
123 extern int get_radio(int unit
);
124 extern void set_radio(int on
, int unit
);
125 extern int nvram_get_int(const char *key
);
126 // extern long nvram_xget_long(const char *name, long min, long max, long def);
127 extern int nvram_get_file(const char *key
, const char *fname
, int max
);
128 extern int nvram_set_file(const char *key
, const char *fname
, int max
);
129 extern int nvram_contains_word(const char *key
, const char *word
);
130 extern int nvram_is_empty(const char *key
);
131 extern void nvram_commit_x(void);
132 extern int connect_timeout(int fd
, const struct sockaddr
*addr
, socklen_t len
, int timeout
);
133 extern int mtd_getinfo(const char *mtdname
, int *part
, int *size
);
134 extern int foreach_wif(int include_vifs
, void *param
,
135 int (*func
)(int idx
, int unit
, int subunit
, void *param
));
139 extern struct mntent
*findmntents(char *file
, int swp
,
140 int (*func
)(struct mntent
*mnt
, uint flags
), uint flags
);
141 extern char *find_label_or_uuid(char *dev_name
, char *label
, char *uuid
);
142 extern void add_remove_usbhost(char *host
, int add
);
144 #define DEV_DISCS_ROOT "/dev/discs"
146 /* Flags used in exec_for_host calls
148 #define EFH_1ST_HOST 0x00000001 /* func is called for the 1st time for this host */
149 #define EFH_1ST_DISC 0x00000002 /* func is called for the 1st time for this disc */
150 #define EFH_HUNKNOWN 0x00000004 /* host is unknown */
151 #define EFH_USER 0x00000008 /* process is user-initiated - either via Web GUI or a script */
152 #define EFH_SHUTDN 0x00000010 /* exec_for_host is called at shutdown - system is stopping */
153 #define EFH_HP_ADD 0x00000020 /* exec_for_host is called from "add" hotplug event */
154 #define EFH_HP_REMOVE 0x00000040 /* exec_for_host is called from "remove" hotplug event */
155 #define EFH_PRINT 0x00000080 /* output partition list to the web response */
157 typedef int (*host_exec
)(char *dev_name
, int host_num
, char *dsc_name
, char *pt_name
, uint flags
);
158 extern int exec_for_host(int host
, int obsolete
, uint flags
, host_exec func
);
159 extern int is_no_partition(const char *discname
);
160 extern int file_lock(char *tag
);
161 extern void file_unlock(int lockfd
);
163 #define file_lock(args...) (-1)
164 #define file_unlock(args...) do { } while(0)
252 /* NOTE: Do not insert new entries in the middle of this enum,
253 * always add them to the end! The numeric Hardware ID value is
254 * stored in the configuration file, and is used to determine
255 * whether or not this config file can be restored on the router.
265 HW_BCM4704_BCM5325F_EWC
,
266 HW_BCM4705L_BCM5325E_EWC
,
283 #define SUP_SES (1 << 0)
284 #define SUP_BRAU (1 << 1)
285 #define SUP_AOSS_LED (1 << 2)
286 #define SUP_WHAM_LED (1 << 3)
287 #define SUP_HPAMP (1 << 4)
288 #define SUP_NONVE (1 << 5)
289 #define SUP_80211N (1 << 6)
290 #define SUP_1000ET (1 << 7)
291 #define SUP_80211AC (1 << 8)
293 extern int check_hw_type(void);
294 // extern int get_hardware(void) __attribute__ ((weak, alias ("check_hw_type")));
295 extern int get_model(void);
296 extern int supports(unsigned long attr
);
300 extern char *psname(int pid
, char *buffer
, int maxlen
);
301 extern int pidof(const char *name
);
302 extern int killall(const char *name
, int sig
);
303 extern int ppid(int pid
);
311 extern unsigned long f_size(const char *path
);
312 extern int f_exists(const char *file
);
313 extern int f_read(const char *file
, void *buffer
, int max
); // returns bytes read
314 extern int f_write(const char *file
, const void *buffer
, int len
, unsigned flags
, unsigned cmode
); //
315 extern int f_read_string(const char *file
, char *buffer
, int max
); // returns bytes read, not including term; max includes term
316 extern int f_write_string(const char *file
, const char *buffer
, unsigned flags
, unsigned cmode
); //
317 extern int f_read_alloc(const char *path
, char **buffer
, int max
);
318 extern int f_read_alloc_string(const char *path
, char **buffer
, int max
);
319 extern int f_wait_exists(const char *name
, int max
);
320 extern int f_wait_notexists(const char *name
, int max
);
332 #define LED_MYSTERY LED_USB // (unmarked LED between wireless and bridge on WHR-G54S)
341 extern const char *led_names
[];
343 extern int gpio_open(uint32_t mask
);
344 extern void gpio_write(uint32_t bit
, int en
);
345 extern uint32_t gpio_read(void);
346 extern uint32_t _gpio_read(int f
);
347 extern int nvget_gpio(const char *name
, int *gpio
, int *inv
);
348 extern int do_led(int which
, int mode
);
349 static inline int led(int which
, int mode
)
351 return (do_led(which
, mode
) != 255);
356 extern int base64_encode(unsigned char *in
, char *out
, int inlen
); // returns amount of out buffer used
357 extern int base64_decode(const char *in
, unsigned char *out
, int inlen
); // returns amount of out buffer used
358 extern int base64_encoded_len(int len
);
359 extern int base64_decoded_len(int len
); // maximum possible, not actual
363 extern const char *find_word(const char *buffer
, const char *word
);
364 extern int remove_word(char *buffer
, const char *word
);
367 extern char* trimstr(char *str
);