update #4 - router
[tomato.git] / release / src / router / shared / shared.h
blob08983d77970ff3215f59a3bea6ad89a1d5e9513d
1 #ifndef __SHARED_H__
2 #define __SHARED_H__
4 #include <tomato_profile.h>
5 #include <tomato_config.h>
7 #include <netinet/in.h>
8 #include <stdint.h>
9 #include <errno.h>
10 #include <net/if.h>
11 #include <string.h>
13 #ifdef TCONFIG_USB
14 #include <mntent.h> // !!TB
15 #endif
17 #define Y2K 946684800UL // seconds since 1970
19 #define ASIZE(array) (sizeof(array) / sizeof(array[0]))
21 #ifdef LINUX26
22 #define MTD_DEV(arg) "/dev/mtd"#arg
23 #define MTD_BLKDEV(arg) "/dev/mtdblock"#arg
24 #define DEV_GPIO(arg) "/dev/gpio"#arg
25 #else
26 #define MTD_DEV(arg) "/dev/mtd/"#arg
27 #define MTD_BLKDEV(arg) "/dev/mtdblock/"#arg
28 #define DEV_GPIO(arg) "/dev/gpio/"#arg
29 #endif
31 //version.c
32 extern const char *tomato_version;
33 extern const char *tomato_buildtime;
34 extern const char *tomato_shortver;
37 #ifdef DEBUG_NOISY
38 #define _dprintf cprintf
39 #else
40 #define _dprintf(args...) do { } while(0)
41 #endif
44 // misc.c
45 #define WP_DISABLED 0 // order must be synced with def in misc.c
46 #define WP_STATIC 1
47 #define WP_DHCP 2
48 #define WP_L2TP 3
49 #define WP_PPPOE 4
50 #define WP_PPTP 5
51 #define WP_PPP3G 6
53 #ifdef TCONFIG_IPV6
54 #define IPV6_DISABLED 0
55 #define IPV6_NATIVE 1
56 #define IPV6_NATIVE_DHCP 2
57 #define IPV6_ANYCAST_6TO4 3
58 #define IPV6_6IN4 4
59 #define IPV6_MANUAL 5
60 #define IPV6_6RD 6
61 #define IPV6_6RD_DHCP 7
62 #endif
64 enum {
65 ACT_IDLE,
66 ACT_TFTP_UPGRADE_UNUSED,
67 ACT_WEB_UPGRADE,
68 ACT_WEBS_UPGRADE_UNUSED,
69 ACT_SW_RESTORE,
70 ACT_HW_RESTORE,
71 ACT_ERASE_NVRAM,
72 ACT_NVRAM_COMMIT,
73 ACT_REBOOT,
74 ACT_UNKNOWN
77 typedef struct {
78 int count;
79 struct {
80 struct in_addr addr;
81 unsigned short port;
82 } dns[6];
83 } dns_list_t;
85 typedef struct {
86 int count;
87 struct {
88 char name[IFNAMSIZ + 1];
89 char ip[sizeof("xxx.xxx.xxx.xxx") + 1];
90 } iface[2];
91 } wanface_list_t;
93 extern void chld_reap(int sig);
94 extern int get_wan_proto(void);
95 #ifdef TCONFIG_IPV6
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);
103 #else
104 #define ipv6_enabled() (0)
105 #endif
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);
117 #ifdef TCONFIG_IPV6
118 extern const char *get_wan6face(void);
119 #endif
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));
137 // usb.c
138 #ifdef TCONFIG_USB
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);
162 #else
163 #define file_lock(args...) (-1)
164 #define file_unlock(args...) do { } while(0)
165 #endif //TCONFIG_USB
167 // id.c
168 enum {
169 MODEL_UNKNOWN,
170 MODEL_WRT54G,
171 MODEL_WRTSL54GS,
172 MODEL_WHRG54S,
173 MODEL_WHRHPG54,
174 MODEL_WR850GV1,
175 MODEL_WR850GV2,
176 MODEL_WZRG54,
177 MODEL_WL500W,
178 MODEL_WL500GP,
179 MODEL_WL500GPv2,
180 MODEL_WL500GE,
181 MODEL_WL500GD,
182 MODEL_WL520GU,
183 MODEL_DIR320,
184 MODEL_L600N,
185 MODEL_DIR620C1,
186 MODEL_H618B,
187 MODEL_CW5358U,
188 MODEL_HG320,
189 MODEL_RG200E_CA,
190 MODEL_H218N,
191 MODEL_TDN60,
192 MODEL_TDN6,
193 MODEL_WL1600GL,
194 MODEL_WBRG54,
195 MODEL_WBR2G54,
196 MODEL_WX6615GT,
197 MODEL_WZRHPG54,
198 MODEL_WZRRSG54,
199 MODEL_WZRRSG54HP,
200 MODEL_WVRG54NF,
201 MODEL_WHR2A54G54,
202 MODEL_WHR3AG54,
203 MODEL_RT390W,
204 MODEL_RTN10,
205 MODEL_RTN10U,
206 MODEL_RTN10P,
207 MODEL_RTN12,
208 MODEL_RTN12B1,
209 MODEL_RTN15U,
210 MODEL_RTN16,
211 MODEL_RTN53,
212 MODEL_RTN53A1,
213 MODEL_RTN66U,
214 MODEL_RTAC56U,
215 MODEL_RTAC68U,
216 MODEL_WNR3500L,
217 MODEL_WNR3500LV2,
218 MODEL_WNR2000v2,
219 MODEL_F7D3301,
220 MODEL_F7D3302,
221 MODEL_F7D4301,
222 MODEL_F7D4302,
223 MODEL_F5D8235v3,
224 MODEL_WRT160Nv1,
225 MODEL_WRT160Nv3,
226 MODEL_WRT320N,
227 MODEL_WRT610Nv2,
228 MODEL_WRT310Nv1,
229 MODEL_E900,
230 MODEL_E1000v2,
231 MODEL_E1500,
232 MODEL_E1550,
233 MODEL_E2500,
234 MODEL_E3200,
235 MODEL_E4200,
236 MODEL_MN700,
237 MODEL_WRH54G,
238 MODEL_WHRG125,
239 MODEL_WZRG108,
240 MODEL_WTR54GS,
241 MODEL_WR100,
242 MODEL_WLA2G54L,
243 MODEL_TM2300,
244 MODEL_WZRG300N,
245 MODEL_WRT300N,
246 MODEL_WL330GE,
247 MODEL_W1800R,
248 MODEL_D1800H,
249 MODEL_EA6500V1
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.
257 enum {
258 HW_BCM4702,
259 HW_BCM4712,
260 HW_BCM5325E,
261 HW_BCM4704_BCM5325F,
262 HW_BCM5352E,
263 HW_BCM5354G,
264 HW_BCM4712_BCM5325E,
265 HW_BCM4704_BCM5325F_EWC,
266 HW_BCM4705L_BCM5325E_EWC,
267 HW_BCM5350,
268 HW_BCM5356,
269 HW_BCM5357,
270 HW_BCM53572,
271 HW_BCM5358U,
272 HW_BCM4716,
273 HW_BCM4718,
274 HW_BCM47186,
275 HW_BCM4717,
276 HW_BCM5365,
277 HW_BCM4785,
278 HW_BCM4706,
279 HW_BCM4708,
280 HW_UNKNOWN
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);
299 // process.c
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);
306 // files.c
307 #define FW_CREATE 0
308 #define FW_APPEND 1
309 #define FW_NEWLINE 2
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);
323 // led.c
324 #define LED_WLAN 0
325 #define LED_DIAG 1
326 #define LED_WHITE 2
327 #define LED_AMBER 3
328 #define LED_DMZ 4
329 #define LED_AOSS 5
330 #define LED_BRIDGE 6
331 #define LED_USB 7
332 #define LED_MYSTERY LED_USB // (unmarked LED between wireless and bridge on WHR-G54S)
333 #define LED_5G 8
334 #define LED_COUNT 9
336 #define LED_OFF 0
337 #define LED_ON 1
338 #define LED_BLINK 2
339 #define LED_PROBE 3
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);
355 // base64.c
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
362 // strings.c
363 extern const char *find_word(const char *buffer, const char *word);
364 extern int remove_word(char *buffer, const char *word);
366 //bwq518
367 extern char* trimstr(char *str);
369 #endif