source: src/router/shared/utils.h @ 8955

Last change on this file since 8955 was 8955, checked in by BrainSlayer, 5 years ago

now multicast works for multiple separated interfaces

File size: 16.1 KB
Line 
1#ifndef UTILS_H
2#define UTILS_H
3
4#ifdef CDEBUG
5#include <shutils.h>
6#include <malloc.h>
7#include <cy_conf.h>
8#endif
9
10/* 2 byte router ID number; Eko 4.jul.06
11
12X X X X X X X X   R R R P N N N N   = 0xXXXX
13---------------   ----- - -------
14 router num         |   |  gpio num (1111 = f = disable resetbutton)
15                    |   |
16                    |   |--- resetbutton polarity (0: normal, 1 inversed)
17                    |
18                    |-------- reserved for future use (maybe USB supp)
19*/
20
21// Linksys WRT54G, WRT54GS and WRT54GL all models (v2 - v6) except WRT54G v1.0, v1.1 (fccid: Linksys Q87-WRT54G..., Q87_WT54G...)
22#define ROUTER_WRT54G 0x0116
23
24// Linksys WRT54Gv8, WRT54GSv7 (5354 cpu, fccid: Linksys Q87-WRT54GV8, Q87-WRT54GSV7)
25#define ROUTER_WRT54G_V8 0x0216
26
27// Linksys WRT54G v1.0 and v1.1, Alnet ALL0277 (4702 cpu, fccid: v1: Linksys PKW-WM54G; v1.1: Linksys Q87-WRT54G11)
28#define ROUTER_WRT54G1X 0x0316
29
30// Linksys WRTSL54GS (4704 cpu, BCM5325E switch, fccid: Linksys Q87-WTSLGS, same without USB: Q87-WRTH54GS)
31#define ROUTER_WRTSL54GS 0x0416
32
33// Linksys WRT55AG v1 (4702 cpu, dual minipci (Broadcom + Atheros), fccid: Linksys PKW-WRT55AG)
34#define ROUTER_LINKSYS_WRT55AG 0x0516
35
36// Asus WL-500G-Deluxe (5365 cpu), (fccid: Asus MSQWL500GD)
37#define ROUTER_ASUS_WL500GD 0x0606
38
39// Buffalo WBR-G54, WLA-G54 (4702 cpu, WLA-G54 has no switch)
40#define ROUTER_BUFFALO_WBR54G 0x0704
41
42// Buffalo WBR2-G54 (4712 + ADM6996 switch, fccid: Buffalo FDI-04600142-0),
43// Buffalo WBR2-G54S, WLA2-G54L (= WLA2-G54 in Japan)
44#define ROUTER_BUFFALO_WBR2G54S 0x0807
45
46// Buffalo WLA2-G54C == WLI3-TX1-G54 (4712 cpu, no switch, fccid: Buffalo FDI-09101669-0)
47#define ROUTER_BUFFALO_WLA2G54C 0x0910
48
49// Buffalo WHR-G54S (fccid: Buffalo FDI-04600264-0) and WHR-HP-G54 (fccid: Buffalo FDI-09101577-0)
50// Buffalo WHR-G125, WHR-HP-G125 (5354 cpu, fccid: Buffalo FDI-09101584-0)
51// Buffalo WHR-HP-G125 new (5354 cpu, fccid: FDI-09101588-0)
52#define ROUTER_BUFFALO_WHRG54S 0x0a04
53
54// Buffalo WZR-RS-G54 (4704 cpu), WZR-G54, WZR-HP-G54 (4704 cpu, fccid: Buffalo FDI-09101457-0),
55// Buffalo WHR3-AG54, WVR-G54-NF, WHR2-A54G54
56#define ROUTER_BUFFALO_WZRRSG54 0x0b04
57
58// Motorola WR850G v1 (4702 cpu, fccid Motorola ACQWR850G)
59#define ROUTER_MOTOROLA_V1 0x0c10
60
61// Motorola WR850G v2/v3, WR850GP (4712 cpu, ADM6996 switch, fccid Motorola ACQWR850GV2)
62#define ROUTER_MOTOROLA 0x0d15
63
64// RT210W and RT211W generic and branded (4702 cpu, fccid: Askey H8N-RT210W, H8N-RT211W)
65// H8N-RT210W: Siemens se505 v1, Belkin F5D7230-4 v1000, v1xxx < 1444
66// H8N-RT211W: Belkin F5D7130
67#define ROUTER_RT210W 0x0e0f
68
69// RT480W generic and branded (4712 cpu, ADM6996 switch, fccid: Askey H8NRT480W),
70// Siemens se505 v2, Belkin F5D7230-4 v1444 (2MB flash, fccid: Belkin K7S-F5D72304)
71#define ROUTER_RT480W 0x0f0f
72
73// Microtik RouterBOARD 500
74#define ROUTER_BOARD_500 0x100f
75
76// NMN A/B/G Router Protoype (266 Mhz Xscale, dual minipci)
77#define ROUTER_BOARD_XSCALE 0x1101
78
79// Generic BRCM 4702 boards: e.g. Asus WL300g (4702 cpu, fccid: Asus MSQWL300G)
80#define ROUTER_BRCM4702_GENERIC 0x120f
81
82// Buffalo WLI_TX4_G54HP bridge
83#define ROUTER_BUFFALO_WLI_TX4_G54HP 0x1304
84
85// Microsoft MN-700 (4702 cpu), (fccid: Microsoft C3KMN700)
86#define ROUTER_MICROSOFT_MN700 0x1417
87
88// Buffalo WLA-G54C == WLI-TX1-G54 (4702 cpu - no switch, fccid: QDS-BRCM1005)
89#define ROUTER_BUFFALO_WLAG54C 0x1510
90
91// Asus WL-500g Premium (4704 cpu, BCM5325E switch, (fccid: Asus MSQWL500GP)
92#define ROUTER_ASUS_WL500G_PRE 0x1600
93
94// Buffalo WZR-G300N MIMO Router (radio fccid: Buffalo FDI-09101466-0)
95#define ROUTER_BUFFALO_WZRG300N 0x1704
96
97// Linksys WRT300N v1 (4704 cpu, BCM5325F switch, fccid: Linksys Q87-WRT300N or Q87-WRT300NV1)
98#define ROUTER_WRT300N 0x1816
99
100// Buffalo WHR-AM54G54
101#define ROUTER_BUFFALO_WHRAM54G54 0x190f
102
103// Magicbox PowerPC board
104#define ROUTER_BOARD_MAGICBOX 0x1a01
105
106// Magicbox PowerPC board 2.0
107//#define ROUTER_BOARD_MAGICBOX20 0x1b01
108
109// Buffalo WLI2-TX1-G54 Access point (4702 cpu, no switch)
110#define ROUTER_BUFFALO_WLI2_TX1_G54 0x1c10
111
112// NMN A/B/G Router Protoype (266 Mhz Xscale, four minipci)
113#define ROUTER_BOARD_GATEWORX 0x1d04
114
115// Motorola WE800G v1 (4702 cpu, no switch, minipci radio, fccid: Motorola ACQWE800G, F2NWE800G)
116#define ROUTER_MOTOROLA_WE800G 0x1e10
117
118// Generic x86 PC / WRAP / Soekris
119#define ROUTER_BOARD_X86 0x1f0f
120
121// ?
122#define ROUTER_SUPERGERRY 0x200f
123
124// Linksys WRT350N (4705 cpu, Gbit switch, PCMCIA radio card, fccid: Linksys Q87-WRT350N)
125#define ROUTER_WRT350N 0x2116
126
127// Linksys WAP54G v1 and v1.1 (4702 cpu, no switch, fccid: Linksys PKW-WAP54G)
128// 2 different boards (same fccid): WX5510_Vxx and WX5541_Vxx
129#define ROUTER_WAP54G_V1 0x2210
130
131// Linksys WAP54G v2 (4712 cpu, no switch, fccid: Linksys Q87-WAP54GV2)
132#define ROUTER_WAP54G_V2 0x2310
133
134// ViewSonic WAPBR-100 (4712 cpu, no switch, fccid: Viewsonic GSS-VS10407)
135#define ROUTER_VIEWSONIC_WAPBR_100 0x2417
136
137// Dell TrueMobile 2300 v1 (4702 cpu, BCM5325 switch, mini pci radio, fccid: Gemtek MXF-R920401G)
138#define ROUTER_DELL_TRUEMOBILE_2300 0x2510
139
140// Dell TrueMobile 2300 v2 (4712 cpu, ADM6996 switch, fccid: Gemtek MXF-R921212G)
141// Sparklan WX-6615GT (4712 cpu, ADM6996 switch, fccid: Gemtek MXF-R930116G)
142#define ROUTER_DELL_TRUEMOBILE_2300_V2 0x2610
143
144// Fonera (Atheros SoC, no switch, fccid: Accton HED-FON2100)
145#define ROUTER_BOARD_FONERA 0x2701
146
147// Buffalo WHR-HP-AG108 (Atheros A+G, Kendin KS8895XA switch, fccid: Buffalo FDI-09101540-0)
148#define ROUTER_BOARD_WHRAG108 0x2801
149
150// swapped phy definition
151#define ROUTER_BOARD_GATEWORX_SWAP 0x290f
152
153// Netgear WNR834B (4704 cpu, BCM5325 switch, cardbus radio,  fccid: Netgear PY306100032)
154#define ROUTER_NETGEAR_WNR834B 0x2a17
155
156// swapped phy definition and Kendin switch
157#define ROUTER_BOARD_GATEWORX_GW2345 0x2b0f
158
159// Linksys WRT54G3G  (4712 cpu, 5325E switch, PCMCIA slot, fccid: Linksys Q87-WRT54G3G)
160#define ROUTER_WRT54G3G 0x2c16
161
162// Sitecom WL-105(b) (4702 cpu, no switch, fccid: Gemtek MXF-A910910AB - no A-band)
163#define ROUTER_SITECOM_WL105B 0x2d10
164
165// Linksys WRT150N (4704 cpu, BCM5325F switch, fccid: Linksys Q87-WRT150N)
166#define ROUTER_WRT150N 0x2e16
167
168// ?
169#define ROUTER_BOARD_LS2 0x2f01
170
171// Buffalo WAPM-HP-AM54G54 (only available on japanese market, dual radio 2.4 and 5 GHz Broadcom)
172#define ROUTER_BUFFALO_WAPM_HP_AM54G54 0x3005
173
174// Buffalo WLAH-G54 (only available on japanese market, single radio 2.4 ghz)
175#define ROUTER_BUFFALO_WLAH_G54 0x3104
176
177// Buffalo WZR-G144HH (only available on japanese market, 802.11n, Gigabit switch. similar to WRT350N)
178#define ROUTER_BUFFALO_WZRG144NH 0x3217
179
180// U.S.Robotics USR5430 bridge (4712 cpu, no switch, fccid: ?)
181#define ROUTER_USR_5430 0x3310
182
183// U.S.Robotics USR5461 (5350 cpu, fccid: ?)
184#define ROUTER_USR_5461 0x340f
185
186// Meraki Mini (Atheros SoC, no switch, fccid: Meraki UDX-MERAKI-MINI)
187#define ROUTER_BOARD_MERAKI 0x350f
188
189// Asus WL500g (4702 cpu, fccid: Asus MSQWL500G)
190#define ROUTER_ASUS_WL500G 0x3606
191
192// ?
193#define ROUTER_BOARD_CA8 0x3706
194
195// Fonera (Atheros SoC,...)
196#define ROUTER_BOARD_FONERA2200 0x3801
197
198// ?
199#define ROUTER_BOARD_TW6600 0x3901
200
201// Atheros PB42 prototype (AR5416 MIMO Wifi, 400 Mhz Mips CPU, 32 MB RAM)
202#define ROUTER_BOARD_PB42 0x3a0f
203
204// Asus WL-500W (MIMO, 4704 cpu, fccid: Asus MSQWL500W)
205#define ROUTER_ASUS_WL500W 0x3b06
206
207// Asus WL550gE (5352E cpu, fccid: Asus MSQWL550GE)
208#define ROUTER_ASUS_WL550GE 0x3c01
209
210// Sitecom WL-111 (4702 cpu, fccid: ?)
211#define ROUTER_SITECOM_WL111 0x3d10
212
213// D-Link DIR-320 (5354 cpu, fccid: D Link KA2DIR320A1)
214#define ROUTER_DLINK_DIR320 0x3e17
215
216// Linksys WTR54GS travel router (5350 cpu, fccid: v1, v2: Q87-WTR54GS; v2.1 Q87-WTR54GSV21)
217#define ROUTER_LINKSYS_WTR54GS 0x3f13
218
219// Belkin F5D7230 v2000 (4712 cpu, 5325E switch, serial flash, fccid: K7SF5D7234A)
220#define ROUTER_BELKIN_F5D7230_V2000 0x400f
221
222// Belkin F5D7231-4 v1212UK (5352E cpu, fccid: Askey H8NRT2406W)
223// Belkin F5D7231-4 v2000 (5352E cpu, fccid: Belkin K7SF5D7231B)
224#define ROUTER_BELKIN_F5D7231 0x410f
225
226// Linksys WAP54G v3, WAP54G v3.1 (5352E cpu, fccid: Linksys Q87-WAP54GV3, Q87-WAP54GV31)
227#define ROUTER_WAP54G_V3 0x4210
228
229// Asus WL-520G (5350 cpu, fccid: Asus MSQWL520G)
230#define ROUTER_ASUS_WL520G 0x430f
231
232// Asus WL-520GU / WL-520GC (5354 cpu, fccid: Asus MSQWL520GUGC)
233#define ROUTER_ASUS_WL520GUGC 0x4412
234
235// Netgear WG602 v3 (5350 cpu, fccid: Netgear PY3WG602V3)
236#define ROUTER_NETGEAR_WG602_V3 0x4511
237
238// Linksys WRT600N (4704 cpu, Gigabit switch, dual radio 2.4 and 5 GHz Broadcom, fccid: Linksys Q87-WRT600NV1, Q87-WRT600NV11)
239#define ROUTER_WRT600N 0x4617
240
241// Linksys WRH54G (5354 cpu, fccid: Q87-WRH54G)
242#define ROUTER_LINKSYS_WRH54G 0x470f
243
244// Linksys WRT150N v1.1 (4704 cpu, BCM5325F switch, fccid: Linksys Q87-WRT150NV11)
245#define ROUTER_WRT150NV11 0x4816
246
247// Linksys WRT150N v1.2 (fccid: Linksys ?)
248#define ROUTER_WRT150NV12 0x4916
249
250// Linksys WRT160N v1 (4703 cpu, ?? switch, fccid: Linksys Q87-WRT160N)
251#define ROUTER_WRT160N 0x4a16
252
253// Linksys WRT300N v1.1 (4705 cpu, 5325 switch, fccid: Linksys Q87-WRT300NV11)
254#define ROUTER_WRT300NV11 0x4b0f
255
256// Linksys WRT310N v1 (4705 cpu, fccid: Linksys Q87-WRT310N)
257#define ROUTER_WRT310N 0x4c16
258
259
260#define NVROUTER "DD_BOARD"
261
262extern char *getBridge (char *ifname);
263extern char *getRealBridge (char *ifname);
264extern char *getSTA (void);
265extern char *getWET (void);
266extern int contains (const char *string, char value);
267extern int getcpurev (void);
268extern int cpu_plltype (void);
269extern int check_vlan_support (void);
270extern int startswith (char *source, char *cmp);
271extern int count_occurences (char *source, int cmp);
272extern int pos_nthoccurence (char *source, int cmp, int which);
273extern char *substring (int start, int stop, const char *src, char *dst);
274extern unsigned int daysformonth (unsigned int month, unsigned int year);
275extern int getRouterBrand (void);
276extern int diag_led (int type, int act);
277extern int C_led (int i);
278extern int get_single_ip (char *ipaddr, int which);
279extern char *get_mac_from_ip (char *ip);
280extern struct dns_lists *get_dns_list (void);
281extern int dns_to_resolv (void);
282extern char *get_wan_face (void);
283extern int check_wan_link (int num);
284extern char *get_complete_lan_ip (char *ip);
285extern int get_int_len (int num);
286extern int file_to_buf (char *path, char *buf, int len);
287extern int buf_to_file (char *path, char *buf);
288extern pid_t *find_pid_by_name (char *pidName);
289extern int find_pid_by_ps (char *pidName);
290extern int *find_all_pid_by_ps (char *pidName);
291extern char *find_name_by_proc (int pid);
292extern int get_ppp_pid (char *file);
293extern long convert_ver (char *ver);
294extern int check_flash (void);
295extern int check_action (void);
296extern int check_now_boot (void);
297extern int check_hw_type (void);
298extern int is_exist (char *filename);
299extern void set_ip_forward (char c);
300struct mtu_lists *get_mtu (char *proto);
301extern void set_host_domain_name (void);
302
303extern void encode (char *buf, int len);
304extern void decode (char *buf, int len);
305extern char * zencrypt (char *passwd);
306
307extern void getLANMac (char *newmac);
308extern void getWirelessMac (char *newmac);
309extern void getWANMac (char *newmac);
310 
311extern int led_control (int type, int act);
312enum
313{ LED_POWER, LED_DIAG, LED_DMZ, LED_CONNECTED, LED_BRIDGE, LED_VPN,
314  LED_SES, LED_SES2, LED_WLAN
315};
316enum
317{ LED_ON, LED_OFF, LED_FLASH };
318
319#ifdef CDEBUG
320extern int mcoreleft (void);
321extern int coreleft (void);
322static void
323cdebug (char *function)
324{
325  // FILE *in = fopen ("/tmp/console.log", "a");
326  fprintf (stderr, "free ram in %s = %d (malloc %d)\n", function, coreleft (),
327           mcoreleft ());
328  // fclose (in);
329}
330
331#else
332#define cdebug(a)
333#endif
334extern int first_time (void);
335
336extern int set_register_value (unsigned short port_addr,
337                               unsigned short option_content);
338extern unsigned long get_register_value (unsigned short id,
339                                         unsigned short num);
340//extern int sys_netdev_ioctl(int family, int socket, char *if_name, int cmd, struct ifreq *ifr);
341
342int ct_openlog (const char *ident, int option, int facility, char *log_name);
343void ct_syslog (int level, int enable, const char *fmt, ...);
344void ct_logger (int level, const char *fmt, ...);
345struct wl_assoc_mac *get_wl_assoc_mac (int *c);
346
347extern struct detect_wans *detect_protocol (char *wan_face, char *lan_face,
348                                            char *type);
349
350enum
351{ WL = 0,
352  DIAG = 1,
353//  SES_LED1 = 2,
354//  SES_LED2 = 3,
355  SES_BUTTON = 4,
356  DMZ = 7
357};
358
359enum
360{ START_LED, STOP_LED, MALFUNCTION_LED };
361
362typedef enum
363{ ACT_IDLE,
364  ACT_TFTP_UPGRADE,
365  ACT_WEB_UPGRADE,
366#ifdef HAVE_HTTPS
367  ACT_WEBS_UPGRADE,
368#endif
369  ACT_SW_RESTORE,
370  ACT_HW_RESTORE,
371  ACT_ERASE_NVRAM,
372  ACT_NVRAM_COMMIT,
373  ACT_UNKNOWN
374} ACTION;
375
376enum
377{ UNKNOWN_BOOT = -1, PMON_BOOT, CFE_BOOT };
378
379enum
380{ BCM4702_CHIP, BCM4712_CHIP, BCM5325E_CHIP, BCM5350_CHIP, BCM5365_CHIP, BCM4704_BCM5325F_CHIP,
381  BCM5352E_CHIP, BCM4712_BCM5325E_CHIP, BCM4704_BCM5325F_EWC_CHIP,
382  BCM4705_BCM5397_EWC_CHIP, BCM5354G_CHIP, BCM4705L_BCM5325E_EWC_CHIP, BCM4705G_BCM5395S_EWC_CHIP,
383  NO_DEFINE_CHIP
384};
385
386enum
387{ FIRST, SECOND };
388
389enum
390{ SYSLOG_LOG = 1, SYSLOG_DEBUG, CONSOLE_ONLY, LOG_CONSOLE, DEBUG_CONSOLE };
391
392#define ACTION(cmd)     buf_to_file(ACTION_FILE, cmd)
393
394struct dns_lists
395{
396  int num_servers;
397  char dns_server[4][16];
398};
399
400#define NOT_USING       0
401#define USING           1
402
403struct wl_assoc_mac
404{
405  char mac[18];
406};
407
408struct mtu_lists
409{
410  char *proto;                  /* protocol */
411  char *min;                    /* min mtu */
412  char *max;                    /* max mtu */
413};
414
415struct detect_wans
416{
417  int proto;
418  int count;
419  char *name;
420  char desc[1024];
421};
422
423#define PROTO_DHCP      0
424#define PROTO_STATIC    1
425#define PROTO_PPPOE     2
426#define PROTO_PPTP      3
427#define PROTO_L2TP      4
428#define PROTO_HB        5
429#define PROTO_ERROR     -1
430
431#define PPP_PSEUDO_IP   "10.64.64.64"
432#define PPP_PSEUDO_NM   "255.255.255.255"
433#define PPP_PSEUDO_GW   "10.112.112.112"
434
435#define PING_TMP        "/tmp/ping.log"
436//#define TRACEROUTE_TMP        "/tmp/traceroute.log"
437#define MAX_BUF_LEN     254
438
439#define RESOLV_FILE     "/tmp/resolv.conf"
440#define RESOLV_FORW     "/tmp/resolv.dnsmasq"
441#define HOSTS_FILE      "/tmp/hosts"
442
443#define LOG_FILE        "/var/log/mess"
444
445#define ACTION_FILE     "/tmp/action"
446
447
448#define split(word, wordlist, next, delim) \
449        for (next = wordlist, \
450             strncpy(word, next, sizeof(word)), \
451             word[(next=strstr(next, delim)) ? strstr(word, delim) - word : sizeof(word) - 1] = '\0', \
452             next = next ? next + sizeof(delim) - 1 : NULL ; \
453             strlen(word); \
454             next = next ? : "", \
455             strncpy(word, next, sizeof(word)), \
456             word[(next=strstr(next, delim)) ? strstr(word, delim) - word : sizeof(word) - 1] = '\0', \
457             next = next ? next + sizeof(delim) - 1 : NULL)
458
459#define STRUCT_LEN(name)    sizeof(name)/sizeof(name[0])
460
461#define printHEX(str,len) { \
462        int i; \
463        for (i=0 ; i<len ; i++) { \
464                printf("%02X ", (unsigned char)*(str+i)); \
465                if(((i+1)%16) == 0) printf("- "); \
466                if(((i+1)%32) == 0) printf("\n"); \
467        } \
468        printf("\n\n"); \
469}
470
471
472#define printASC(str,len) { \
473        int i; \
474        for (i=0 ; i<len ; i++) { \
475                printf("%c", (unsigned char)*(str+i)); \
476                if(((i+1)%16) == 0) printf("- "); \
477                if(((i+1)%32) == 0) printf("\n"); \
478        } \
479        printf("\n\n"); \
480}
481
482#ifdef HAVE_X86
483void lcdmessage (char *message);
484void initlcd (void);
485void lcdmessaged (char *dual, char *message);
486#else
487#define initlcd()
488#define lcdmessage(a)
489#define lcdmessaged(a,b)
490#endif
491
492#ifdef HAVE_AQOS
493extern void add_usermac (char *mac, int idx, char *upstream,
494                         char *downstream);
495extern void add_userip (char *ip, int idx, char *upstream, char *downstream);
496#endif
497
498void getHostName (char *buf, char *ip);
499int ishexit (char c);
500int haswifi (void);
501int sv_valid_hwaddr (char *value);
502int sv_valid_ipaddr (char *value);
503int sv_valid_range (char *value, int low, int high);
504int sv_valid_statics (char *value);
505void get_network (char *ipaddr, char *netmask);
506void get_broadcast (char *ipaddr, char *netmask);
507int route_manip (int cmd, char *name, int metric, char *dst, char *gateway,
508                 char *genmask);
509int route_add (char *name, int metric, char *dst, char *gateway,
510               char *genmask);
511int route_del (char *name, int metric, char *dst, char *gateway,
512               char *genmask);
513extern char *psname (int pid, char *buffer, int maxlen);
514extern int pidof (const char *name);
515extern int killall (const char *name, int sig);
516extern int getifcount (const char *ifprefix);
517extern int getIfList (char *buffer, const char *ifprefix);
518extern int ifexists (const char *ifname);
519extern void getinterfacelist (const char *ifprefix, char *buffer);
520extern int count_processes (char *pidName);
521
522int isGrep (char *string, char *cmp);
523int softkill (char *name);
524
525int getmask(char *netmask);
526int doMultiCast(void);
527
528#define MAX_WDS_DEVS 10
529#endif
Note: See TracBrowser for help on using the repository browser.