1#ifndef __SHARED_H__ 2#define __SHARED_H__ 3 4#include <rtconfig.h> 5#include <netinet/in.h> 6#include <stdint.h> 7#include <errno.h> 8#include <net/if.h> 9#include <rtstate.h> 10#include <stdarg.h> 11 12#ifdef RTCONFIG_USB 13#include <mntent.h> // !!TB 14#endif 15 16/* btn_XXX_gpio, led_XXX_gpio */ 17#define GPIO_ACTIVE_LOW 0x1000 18#define GPIO_BLINK_LED 0x2000 19#define GPIO_PIN_MASK 0x00FF 20 21#define GPIO_DIR_IN 0 22#define GPIO_DIR_OUT 1 23 24#ifdef RTCONFIG_INTERNAL_GOBI 25#define DEF_SECOND_WANIF "usb" 26#else 27#define DEF_SECOND_WANIF "none" 28#endif 29 30#define ACTION_LOCK "/var/lock/action" 31 32#ifdef RTCONFIG_PUSH_EMAIL 33//#define logmessage logmessage_push 34#define logmessage logmessage_normal //tmp 35#else 36#define logmessage logmessage_normal 37#endif 38 39#ifdef RTCONFIG_DSL 40#define SYNC_LOG_FILE "/tmp/adsl/sync_status_log.txt" 41#define LOG_RECORD_FILE "/tmp/adsl/log_record.txt" 42#endif 43 44#define Y2K 946684800UL // seconds since 1970 45 46#define ASIZE(array) (sizeof(array) / sizeof(array[0])) 47 48#ifdef LINUX26 49#define MTD_DEV(arg) "/dev/mtd"#arg 50#define MTD_BLKDEV(arg) "/dev/mtdblock"#arg 51#define DEV_GPIO(arg) "/dev/gpio"#arg 52#else 53#define MTD_DEV(arg) "/dev/mtd/"#arg 54#define MTD_BLKDEV(arg) "/dev/mtdblock/"#arg 55#define DEV_GPIO(arg) "/dev/gpio/"#arg 56#endif 57 58#if defined(RTCONFIG_DEFAULT_AP_MODE) 59#define DUT_DOMAIN_NAME "ap.asus.com" 60#else 61#define DUT_DOMAIN_NAME "router.asus.com" 62#endif 63#define OLD_DUT_DOMAIN_NAME1 "www.asusnetwork.net" 64#define OLD_DUT_DOMAIN_NAME2 "www.asusrouter.com" 65 66//version.c 67extern const char *rt_version; 68extern const char *rt_serialno; 69extern const char *rt_extendno; 70extern const char *rt_buildname; 71extern const char *rt_buildinfo; 72extern const char *rt_swpjverno; 73 74#ifdef DEBUG_NOISY 75#define _dprintf cprintf 76#define csprintf cprintf 77#else 78#define _dprintf(args...) do { } while(0) 79#define csprintf(args...) do { } while(0) 80#endif 81 82#define ASUS_STOP_COMMIT "asus_stop_commit" 83#define LED_CTRL_HIPRIO "LED_CTRL_HIPRIO" 84 85#ifdef RTCONFIG_IPV6 86enum { 87 IPV6_DISABLED = 0, 88 IPV6_NATIVE_DHCP, 89#ifdef RTCONFIG_6RELAYD 90 IPV6_PASSTHROUGH, 91#endif 92 IPV6_6TO4, 93 IPV6_6IN4, 94 IPV6_6RD, 95 IPV6_MANUAL 96}; 97 98#ifndef RTF_UP 99/* Keep this in sync with /usr/src/linux/include/linux/route.h */ 100#define RTF_UP 0x0001 /* route usable */ 101#define RTF_GATEWAY 0x0002 /* destination is a gateway */ 102#define RTF_HOST 0x0004 /* host entry (net otherwise) */ 103#define RTF_REINSTATE 0x0008 /* reinstate route after tmout */ 104#define RTF_DYNAMIC 0x0010 /* created dyn. (by redirect) */ 105#define RTF_MODIFIED 0x0020 /* modified dyn. (by redirect) */ 106#endif 107#ifndef RTF_DEFAULT 108#define RTF_DEFAULT 0x00010000 /* default - learned via ND */ 109#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */ 110#define RTF_CACHE 0x01000000 /* cache entry */ 111#endif 112#define IPV6_MASK (RTF_GATEWAY|RTF_HOST|RTF_DEFAULT|RTF_ADDRCONF|RTF_CACHE) 113#endif 114 115#define GIF_LINKLOCAL 0x0001 /* return link-local addr */ 116#define GIF_PREFIXLEN 0x0002 /* return prefix length */ 117#define GIF_PREFIX 0x0004 /* return prefix, not addr */ 118 119#define EXTEND_AIHOME_API_LEVEL 6 120#define EXTEND_HTTPD_AIHOME_VER 0 121 122#define EXTEND_ASSIA_API_LEVEL 1 123 124enum { 125 FROM_BROWSER, 126 FROM_ASUSROUTER, 127 FROM_DUTUtil, 128 FROM_ASSIA, 129 FROM_IFTTT, 130 FROM_UNKNOWN 131}; 132 133enum { 134 ACT_IDLE, 135 ACT_TFTP_UPGRADE_UNUSED, 136 ACT_WEB_UPGRADE, 137 ACT_WEBS_UPGRADE_UNUSED, 138 ACT_SW_RESTORE, 139 ACT_HW_RESTORE, 140 ACT_ERASE_NVRAM, 141 ACT_NVRAM_COMMIT, 142 ACT_REBOOT, 143 ACT_UNKNOWN 144}; 145 146typedef struct { 147 int count; 148 struct { 149 struct in_addr addr; 150 unsigned short port; 151 } dns[3]; 152} dns_list_t; 153 154typedef struct { 155 int count; 156 struct { 157 char name[IFNAMSIZ + 1]; 158 char ip[sizeof("xxx.xxx.xxx.xxx") + 1]; 159 } iface[2]; 160} wanface_list_t; 161 162extern char *read_whole_file(const char *target); 163extern char *get_line_from_buffer(const char *buf, char *line, const int line_size); 164extern char *get_upper_str(const char *const str, char **target); 165extern int upper_strcmp(const char *const str1, const char *const str2); 166extern int upper_strncmp(const char *const str1, const char *const str2, int count); 167extern char *upper_strstr(const char *const str, const char *const target); 168 169extern void chld_reap(int sig); 170extern int get_wan_proto(void); 171#ifdef RTCONFIG_IPV6 172extern char *ipv6_nvname(const char *name); 173extern char *ipv6_nvname_by_unit(const char *name, int unit); 174extern int get_ipv6_service(void); 175extern int get_ipv6_service_by_unit(int unit); 176#define ipv6_enabled() (get_ipv6_service() != IPV6_DISABLED) 177extern const char *ipv6_router_address(struct in6_addr *in6addr); 178extern const char *ipv6_gateway_address(void); 179#else 180#define ipv6_enabled() (0) 181#endif 182extern void notice_set(const char *path, const char *format, ...); 183#if defined(RTAC1200HP) 184extern void led_5g_onoff(void); 185#endif 186extern void set_action(int a); 187extern int check_action(void); 188extern int wait_action_idle(int n); 189extern int wl_client(int unit, int subunit); 190extern const char *_getifaddr(const char *ifname, int family, int flags, char *buf, int size); 191extern const char *getifaddr(const char *ifname, int family, int flags); 192extern long uptime(void); 193extern char *wl_nvname(const char *nv, int unit, int subunit); 194extern int get_radio(int unit, int subunit); 195extern void set_radio(int on, int unit, int subunit); 196extern int nvram_get_int(const char *key); 197extern int nvram_set_int(const char *key, int value); 198extern double nvram_get_double(const char *key); 199extern int nvram_set_double(const char *key, double value); 200 201// extern long nvram_xget_long(const char *name, long min, long max, long def); 202#ifdef RTCONFIG_SSH 203extern int nvram_get_file(const char *key, const char *fname, int max); 204extern int nvram_set_file(const char *key, const char *fname, int max); 205#endif 206extern int nvram_contains_word(const char *key, const char *word); 207extern int nvram_is_empty(const char *key); 208extern void nvram_commit_x(void); 209extern int connect_timeout(int fd, const struct sockaddr *addr, socklen_t len, int timeout); 210extern int mtd_getinfo(const char *mtdname, int *part, int *size); 211#if defined(RTCONFIG_UBIFS) 212extern int ubi_getinfo(const char *ubiname, int *dev, int *part, int *size); 213#endif 214extern int foreach_wif(int include_vifs, void *param, 215 int (*func)(int idx, int unit, int subunit, void *param)); 216 217//shutils.c 218extern void dbgprintf (const char * format, ...); //Ren 219extern void cprintf(const char *format, ...); 220extern int _eval(char *const argv[], const char *path, int timeout, int *ppid); 221extern char *enc_str(char *str, char *enc_buf); 222extern char *dec_str(char *ec_str, char *dec_buf); 223 224// usb.c 225#ifdef RTCONFIG_USB 226extern char *detect_fs_type(char *device); 227extern struct mntent *findmntents(char *file, int swp, 228 int (*func)(struct mntent *mnt, uint flags), uint flags); 229extern int find_label_or_uuid(char *dev_name, char *label, char *uuid); 230extern void add_remove_usbhost(char *host, int add); 231 232#define DEV_DISCS_ROOT "/dev/discs" 233 234/* Flags used in exec_for_host calls 235 */ 236#define EFH_1ST_HOST 0x00000001 /* func is called for the 1st time for this host */ 237#define EFH_1ST_DISC 0x00000002 /* func is called for the 1st time for this disc */ 238#define EFH_HUNKNOWN 0x00000004 /* host is unknown */ 239#define EFH_USER 0x00000008 /* process is user-initiated - either via Web GUI or a script */ 240#define EFH_SHUTDN 0x00000010 /* exec_for_host is called at shutdown - system is stopping */ 241#define EFH_HP_ADD 0x00000020 /* exec_for_host is called from "add" hotplug event */ 242#define EFH_HP_REMOVE 0x00000040 /* exec_for_host is called from "remove" hotplug event */ 243#define EFH_PRINT 0x00000080 /* output partition list to the web response */ 244 245typedef int (*host_exec)(char *dev_name, int host_num, char *dsc_name, char *pt_name, uint flags); 246extern int exec_for_host(int host, int obsolete, uint flags, host_exec func); 247extern int is_no_partition(const char *discname); 248#endif //RTCONFIG_USB 249 250// id.c 251enum { 252 MODEL_UNKNOWN = 0, 253 MODEL_DSLN55U, 254 MODEL_DSLAC68U, 255 MODEL_EAN66, 256 MODEL_RTN11P, 257 MODEL_RTN300, 258 MODEL_RTN13U, 259 MODEL_RTN14U, 260 MODEL_RTAC52U, 261 MODEL_RTAC51U, 262 MODEL_RTN54U, 263 MODEL_RTAC54U, 264 MODEL_RTN56UB1, 265 MODEL_RTN56UB2, 266 MODEL_RTAC1200HP, 267 MODEL_RTAC55U, 268 MODEL_RTAC55UHP, 269 MODEL_RT4GAC55U, 270 MODEL_PLN12, 271 MODEL_PLAC56, 272 MODEL_PLAC66U, 273 MODEL_RTN36U3, 274 MODEL_RTN56U, 275 MODEL_RTN65U, 276 MODEL_RTN67U, 277 MODEL_RTN12, 278 MODEL_RTN12B1, 279 MODEL_RTN12C1, 280 MODEL_RTN12D1, 281 MODEL_RTN12VP, 282 MODEL_RTN12HP, 283 MODEL_RTN12HP_B1, 284 MODEL_APN12, 285 MODEL_APN12HP, 286 MODEL_RTN16, 287 MODEL_RTN18U, 288 MODEL_RTN15U, 289 MODEL_RTN53, 290 MODEL_RTN66U, 291 MODEL_RTAC66U, 292 MODEL_RTAC68U, 293 MODEL_RPAC68U, 294 MODEL_RTAC87U, 295 MODEL_RTAC56S, 296 MODEL_RTAC56U, 297 MODEL_RTAC53U, 298 MODEL_RTAC3200, 299 MODEL_RTAC88U, 300 MODEL_RTAC3100, 301 MODEL_RTAC5300, 302 MODEL_RTAC5300R, 303 MODEL_RTN14UHP, 304 MODEL_RTN10U, 305 MODEL_RTN10P, 306 MODEL_RTN10D1, 307 MODEL_RTN10PV2, 308 MODEL_RTAC1200G, 309 MODEL_RTAC1200GP, 310 MODEL_GENERIC 311}; 312 313enum { 314 SWITCH_UNKNOWN, 315 SWITCH_BCM5325, 316 SWITCH_BCM53115, 317 SWITCH_BCM53125, 318 SWITCH_BCM5301x, 319 SWITCH_GENERIC 320}; 321 322#define RTCONFIG_NVRAM_VER "1" 323 324/* NOTE: Do not insert new entries in the middle of this enum, 325 * always add them to the end! The numeric Hardware ID value is 326 * stored in the configuration file, and is used to determine 327 * whether or not this config file can be restored on the router. 328 */ 329enum { 330 HW_BCM4702, 331 HW_BCM4712, 332 HW_BCM5325E, 333 HW_BCM4704_BCM5325F, 334 HW_BCM5352E, 335 HW_BCM5354G, 336 HW_BCM4712_BCM5325E, 337 HW_BCM4704_BCM5325F_EWC, 338 HW_BCM4705L_BCM5325E_EWC, 339 HW_BCM5350, 340 HW_BCM5356, 341 HW_BCM4716, 342 HW_BCM4718, 343 HW_BCM4717, 344 HW_BCM5365, 345 HW_BCM4785, 346 HW_UNKNOWN 347}; 348 349#define SUP_SES (1 << 0) 350#define SUP_BRAU (1 << 1) 351#define SUP_AOSS_LED (1 << 2) 352#define SUP_WHAM_LED (1 << 3) 353#define SUP_HPAMP (1 << 4) 354#define SUP_NONVE (1 << 5) 355#define SUP_80211N (1 << 6) 356#define SUP_1000ET (1 << 7) 357 358extern int check_hw_type(void); 359// extern int get_hardware(void) __attribute__ ((weak, alias ("check_hw_type"))); 360extern int get_model(void); 361extern char *get_modelid(int model); 362extern char *get_productid(void); 363extern int get_switch(void); 364extern int supports(unsigned long attr); 365 366// pids.c 367extern int pids(char *appname); 368 369// process.c 370extern char *psname(int pid, char *buffer, int maxlen); 371extern int pidof(const char *name); 372extern int killall(const char *name, int sig); 373extern int process_exists(pid_t pid); 374extern int module_loaded(const char *module); 375 376// files.c 377extern int check_if_dir_empty(const char *dirpath); 378extern int file_lock(char *tag); 379extern void file_unlock(int lockfd); 380 381 382#define FW_CREATE 0 383#define FW_APPEND 1 384#define FW_NEWLINE 2 385 386#define ACTION_LOCK_FILE "/var/lock/a_w_l" // action write lock 387 388extern unsigned long f_size(const char *path); 389extern int f_exists(const char *file); 390extern int d_exists(const char *path); 391extern int f_read_excl(const char *path, void *buffer, int max); 392extern int f_read(const char *file, void *buffer, int max); // returns bytes read 393extern int f_write_excl(const char *path, const void *buffer, int len, unsigned flags, unsigned cmode); 394extern int f_write(const char *file, const void *buffer, int len, unsigned flags, unsigned cmode); // 395extern int f_read_string(const char *file, char *buffer, int max); // returns bytes read, not including term; max includes term 396extern int f_write_string(const char *file, const char *buffer, unsigned flags, unsigned cmode); // 397extern int f_read_alloc(const char *path, char **buffer, int max); 398extern int f_read_alloc_string(const char *path, char **buffer, int max); 399extern int f_wait_exists(const char *name, int max); 400extern int f_wait_notexists(const char *name, int max); 401 402 403// button & led 404#define BTN_RESET 0 405#define BTN_WPS 1 406#define BTN_FAN 2 407#define BTN_HAVE_FAN 3 408#define BTN_WIFI_SW 4 409#define BTN_SWMODE_SW_ROUTER 5 410#define BTN_SWMODE_SW_REPEATER 6 411#define BTN_SWMODE_SW_AP 7 412#define BTN_WIFI_TOG 8 413#define BTN_TURBO 9 414#define BTN_LED 0xA 415#define BTN_LTE 11 416 417enum led_id { 418 LED_POWER = 0, 419 LED_USB, 420 LED_WPS, 421 FAN, 422 HAVE_FAN, 423 LED_LAN, 424 LED_WAN, 425 LED_2G, 426 LED_5G, 427 LED_USB3, 428#ifdef RTCONFIG_LAN4WAN_LED 429 LED_LAN1, 430 LED_LAN2, 431 LED_LAN3, 432 LED_LAN4, 433#endif 434 LED_TURBO, 435 LED_WAN_RED, 436#ifdef RTCONFIG_QTN 437 BTN_QTN_RESET, /* QTN platform uses led_control() to control this gpio. */ 438#endif 439#ifdef RTCONFIG_LED_ALL 440 LED_ALL, 441#endif 442#ifdef RTCONFIG_INTERNAL_GOBI 443 LED_3G, 444 LED_LTE, 445 LED_SIG1, 446 LED_SIG2, 447 LED_SIG3, 448 LED_SIG4, 449#endif 450#if (defined(PLN12) || defined(PLAC56)) 451 PLC_WAKE, 452 LED_POWER_RED, 453 LED_2G_GREEN, 454 LED_2G_ORANGE, 455 LED_2G_RED, 456 LED_5G_GREEN, 457 LED_5G_ORANGE, 458 LED_5G_RED, 459#endif 460#ifdef RTCONFIG_MMC_LED 461 LED_MMC, 462#endif 463#ifdef RTCONFIG_RESET_SWITCH 464 LED_RESET_SWITCH, 465#endif 466#if defined(RTAC5300) || defined(RTAC5300R) 467 RPM_FAN, /* use to control FAN RPM (Hi/Lo) */ 468#endif 469 LED_ID_MAX, /* last item */ 470}; 471 472enum led_fan_mode_id { 473 LED_OFF = 0, 474 LED_ON, 475 FAN_OFF, 476 FAN_ON, 477 HAVE_FAN_OFF, 478 HAVE_FAN_ON, 479 480 LED_FAN_MODE_MAX, /* last item */ 481}; 482 483static inline int have_usb3_led(int model) 484{ 485 switch (model) { 486 case MODEL_RTN18U: 487 case MODEL_RTAC56U: 488 case MODEL_RTAC56S: 489 case MODEL_RTAC68U: 490#ifndef RTCONFIG_ETRON_XHCI_USB3_LED 491 case MODEL_RTAC55U: 492 case MODEL_RTAC55UHP: 493#endif 494 case MODEL_DSLAC68U: 495 case MODEL_RTAC3200: 496 case MODEL_RTAC88U: 497 case MODEL_RTAC3100: 498 case MODEL_RTAC5300: 499 case MODEL_RTAC5300R: 500 return 1; 501 } 502 return 0; 503} 504 505#define MAX_NR_WLVIF 3 506enum iface_id { 507 IFACE_INTERNET = 0, /* INTERNET: Only one interface can be considered as INTERNET. */ 508 IFACE_WIRED, 509 IFACE_BRIDGE, 510 511 IFACE_WL0, /* WIRELESS0 */ 512 IFACE_WL1, /* WIRELESS1, may not exist. */ 513 514 IFACE_MAIN_IF_MAX, 515 516 IFACE_WL0_0, /* WIRELESS0.0 */ 517 IFACE_WL1_0 = IFACE_WL0_0 + MAX_NR_WLVIF, /* WIRELESS1.0, may not exist. */ 518 519 IFACE_MAX, /* last item */ 520}; 521 522struct if_stats { 523 char ifname[IFNAMSIZ]; 524 unsigned long rx, tx; 525}; 526 527/* INTERNET interface may varies at run-time. 528 * The rx_shift and tx_shirt are used to report 529 * continuously statistice information to upper-level code, 530 * e.g. Web UI 531 */ 532struct ifaces_stats { 533 struct if_stats iface[IFACE_MAIN_IF_MAX]; 534 unsigned long rx_shift, tx_shift; 535}; 536 537 538#ifndef ARRAY_SIZE 539#define ARRAY_SIZE(ary) (sizeof(ary) / sizeof((ary)[0])) 540#endif 541 542#if defined(RTCONFIG_HAS_5G) 543#define MAX_NR_WL_IF 2 544#else /* ! RTCONFIG_HAS_5G */ 545#define MAX_NR_WL_IF 1 /* Single 2G */ 546#endif /* ! RTCONFIG_HAS_5G */ 547 548#if defined(RTCONFIG_RALINK) || defined(RTCONFIG_QCA) 549static inline int __access_point_mode(int sw_mode) 550{ 551 return (sw_mode == SW_MODE_AP); 552} 553 554static inline int access_point_mode(void) 555{ 556 return __access_point_mode(nvram_get_int("sw_mode")); 557} 558 559#if defined(RTCONFIG_WIRELESSREPEATER) 560static inline int __repeater_mode(int sw_mode) 561{ 562 return (sw_mode == SW_MODE_REPEATER 563#if defined(RTCONFIG_PROXYSTA) 564 && nvram_get_int("wlc_psta") != 1 565#endif 566 ); 567} 568static inline int repeater_mode(void) 569{ 570 return __repeater_mode(nvram_get_int("sw_mode")); 571} 572#else 573static inline int __repeater_mode(int sw_mode) { return 0; } 574static inline int repeater_mode(void) { return 0; } 575#endif 576 577#if defined(RTCONFIG_WIRELESSREPEATER) && defined(RTCONFIG_PROXYSTA) 578static inline int __mediabridge_mode(int sw_mode) 579{ 580 return (sw_mode == SW_MODE_REPEATER && nvram_get_int("wlc_psta") == 1); 581} 582static inline int mediabridge_mode(void) 583{ 584 return __mediabridge_mode(nvram_get_int("sw_mode")); 585} 586#else 587static inline int __mediabridge_mode(int sw_mode) { return 0; } 588static inline int mediabridge_mode(void) { return 0; } 589#endif 590#else 591/* Should be Broadcom platform. */ 592static inline int __access_point_mode(int sw_mode) 593{ 594 return (sw_mode == SW_MODE_AP 595#if defined(RTCONFIG_PROXYSTA) 596 && !nvram_get_int("wlc_psta") 597#endif 598 ); 599} 600 601static inline int access_point_mode(void) 602{ 603 return __access_point_mode(nvram_get_int("sw_mode")); 604} 605 606#if defined(RTCONFIG_WIRELESSREPEATER) 607static inline int __repeater_mode(int sw_mode) 608{ 609 return (sw_mode == SW_MODE_REPEATER); 610} 611static inline int repeater_mode(void) 612{ 613 return __repeater_mode(nvram_get_int("sw_mode")); 614} 615#else 616static inline int __repeater_mode(int sw_mode) { return 0; } 617static inline int repeater_mode(void) { return 0; } 618#endif 619 620#if defined(RTCONFIG_WIRELESSREPEATER) && defined(RTCONFIG_PROXYSTA) 621static inline int __mediabridge_mode(int sw_mode) 622{ 623 return (sw_mode == SW_MODE_AP && nvram_get_int("wlc_psta") == 1); 624} 625static inline int mediabridge_mode(void) 626{ 627 return __mediabridge_mode(nvram_get_int("sw_mode")); 628} 629#else 630static inline int __mediabridge_mode(int sw_mode) { return 0; } 631static inline int mediabridge_mode(void) { return 0; } 632#endif 633#endif /* RTCONFIG_RALINK || RTCONFIG_QCA */ 634 635static inline int get_wps_multiband(void) 636{ 637#if defined(RTCONFIG_WPSMULTIBAND) 638 return nvram_get_int("wps_multiband"); 639#else 640 return 0; 641#endif 642} 643 644static inline int get_radio_band(int band) 645{ 646#if defined(RTCONFIG_WPSMULTIBAND) 647 (void) band; 648 return -1; 649#else 650 return band; 651#endif 652} 653 654#ifdef RTCONFIG_DUALWAN 655static inline int dualwan_unit__usbif(int unit) 656{ 657 return (get_dualwan_by_unit(unit) == WANS_DUALWAN_IF_USB); 658} 659 660static inline int dualwan_unit__nonusbif(int unit) 661{ 662 int type = get_dualwan_by_unit(unit); 663#ifdef RTCONFIG_MULTICAST_IPTV 664 return (type == WANS_DUALWAN_IF_WAN || type == WANS_DUALWAN_IF_DSL || type == WANS_DUALWAN_IF_LAN || 665 type == WAN_UNIT_IPTV || type == WAN_UNIT_VOIP); 666#else 667 return (type == WANS_DUALWAN_IF_WAN || type == WANS_DUALWAN_IF_DSL || type == WANS_DUALWAN_IF_LAN); 668#endif 669} 670extern int get_usbif_dualwan_unit(void); 671extern int get_primaryif_dualwan_unit(void); 672#else 673static inline int dualwan_unit__usbif(int unit) 674{ 675#ifdef RTCONFIG_USB_MODEM 676 return (unit == WAN_UNIT_SECOND); 677#else 678 return 0; 679#endif 680} 681 682static inline int dualwan_unit__nonusbif(int unit) 683{ 684#ifdef RTCONFIG_MULTICAST_IPTV 685 return (unit == WAN_UNIT_FIRST || unit == WAN_UNIT_IPTV || unit == WAN_UNIT_VOIP); 686#else 687 return (unit == WAN_UNIT_FIRST); 688#endif 689} 690static inline int get_usbif_dualwan_unit(void) 691{ 692#ifdef RTCONFIG_USB_MODEM 693 return WAN_UNIT_SECOND; 694#else 695 return -1; 696#endif 697} 698static inline int get_primaryif_dualwan_unit(void) 699{ 700 return wan_primary_ifunit(); 701} 702#endif 703 704#if defined RTCONFIG_RALINK 705static inline int guest_wlif(char *ifname) 706{ 707 return strncmp(ifname, "ra", 2) == 0 && !strchr(ifname, '0'); 708} 709#elif defined(RTCONFIG_QCA) 710static inline int guest_wlif(char *ifname) 711{ 712 return strncmp(ifname, "ath00",5)==0 || strncmp(ifname, "ath10",5)==0; 713} 714#else 715/* Broadcom platform. */ 716static inline int guest_wlif(char *ifname) 717{ 718 return strncmp(ifname, "wl", 2) == 0 && strchr(ifname, '.'); 719} 720#endif 721 722extern int init_gpio(void); 723extern int set_pwr_usb(int boolOn); 724extern int button_pressed(int which); 725extern int led_control(int which, int mode); 726 727/* api-*.c */ 728extern uint32_t gpio_dir(uint32_t gpio, int dir); 729extern uint32_t set_gpio(uint32_t gpio, uint32_t value); 730extern uint32_t get_gpio(uint32_t gpio); 731extern int get_switch_model(void); 732extern uint32_t get_phy_speed(uint32_t portmask); 733#if defined(RTCONFIG_RALINK_MT7620) 734extern int get_mt7620_wan_unit_bytecount(int unit, unsigned long *tx, unsigned long *rx); 735#elif defined(RTCONFIG_RALINK_MT7621) 736extern int get_mt7621_wan_unit_bytecount(int unit, unsigned long *tx, unsigned long *rx); 737#endif 738/* sysdeps/ralink/ *.c */ 739#if defined(RTCONFIG_RALINK) 740extern int rtkswitch_ioctl(int val, int val2); 741extern unsigned int rtkswitch_wanPort_phyStatus(int wan_unit); 742extern unsigned int rtkswitch_lanPorts_phyStatus(void); 743extern unsigned int rtkswitch_WanPort_phySpeed(void); 744extern int rtkswitch_WanPort_linkUp(void); 745extern int rtkswitch_WanPort_linkDown(void); 746extern int rtkswitch_LanPort_linkUp(void); 747extern int rtkswitch_LanPort_linkDown(void); 748extern int rtkswitch_AllPort_linkUp(void); 749extern int rtkswitch_AllPort_linkDown(void); 750extern int rtkswitch_Reset_Storm_Control(void); 751extern int ralink_gpio_read_bit(int idx); 752extern int ralink_gpio_write_bit(int idx, int value); 753extern char *wif_to_vif(char *wif); 754extern int ralink_gpio_init(unsigned int idx, int dir); 755extern int config_rtkswitch(int argc, char *argv[]); 756extern int get_channel_list_via_driver(int unit, char *buffer, int len); 757extern int get_channel_list_via_country(int unit, const char *country_code, char *buffer, int len); 758#if defined(RTCONFIG_RALINK_MT7620) 759extern int __mt7620_wan_bytecount(int unit, unsigned long *tx, unsigned long *rx); 760#elif defined(RTCONFIG_RALINK_MT7620) 761extern int __mt7621_wan_bytecount(int unit, unsigned long *tx, unsigned long *rx); 762#endif 763 764#elif defined(RTCONFIG_QCA) 765extern char *wif_to_vif(char *wif); 766extern int config_rtkswitch(int argc, char *argv[]); 767extern unsigned int rtkswitch_wanPort_phyStatus(int wan_unit); 768extern unsigned int rtkswitch_lanPorts_phyStatus(void); 769extern unsigned int rtkswitch_WanPort_phySpeed(void); 770extern void ATE_qca8337_port_status(void); 771#else 772#define wif_to_vif(wif) (wif) 773extern int config_rtkswitch(int argc, char *argv[]); 774extern unsigned int rtkswitch_lanPorts_phyStatus(void); 775#endif 776 777#if defined(RTCONFIG_QCA) 778extern unsigned int rtkswitch_wanPort_phyStatus(int wan_unit); 779extern unsigned int rtkswitch_lanPorts_phyStatus(void); 780extern unsigned int rtkswitch_WanPort_phySpeed(void); 781extern int rtkswitch_WanPort_linkUp(void); 782extern int rtkswitch_WanPort_linkDown(void); 783extern int rtkswitch_LanPort_linkUp(void); 784extern int rtkswitch_LanPort_linkDown(void); 785extern int rtkswitch_AllPort_linkUp(void); 786extern int rtkswitch_AllPort_linkDown(void); 787extern int rtkswitch_Reset_Storm_Control(void); 788extern int get_qca8337_PHY_power(int port); 789#endif 790 791// base64.c 792extern int base64_encode(unsigned char *in, char *out, int inlen); // returns amount of out buffer used 793extern int base64_decode(const char *in, unsigned char *out, int inlen); // returns amount of out buffer used 794extern int base64_encoded_len(int len); 795extern int base64_decoded_len(int len); // maximum possible, not actual 796 797/* boardapi.c */ 798extern int extract_gpio_pin(const char *gpio); 799extern int lanport_status(void); 800 801/* discover.c */ 802extern int discover_all(void); 803 804// strings.c 805extern int char_to_ascii_safe(const char *output, const char *input, int outsize); 806extern void char_to_ascii(const char *output, const char *input); 807extern int ascii_to_char_safe(const char *output, const char *input, int outsize); 808extern void ascii_to_char(const char *output, const char *input); 809extern const char *find_word(const char *buffer, const char *word); 810extern int remove_word(char *buffer, const char *word); 811 812// file.c 813extern int check_if_file_exist(const char *file); 814extern int check_if_dir_exist(const char *file); 815extern int check_if_dir_writable(const char *dir); 816 817/* misc.c */ 818extern char *get_productid(void); 819extern void logmessage_normal(char *logheader, char *fmt, ...); 820extern char *get_logfile_path(void); 821extern char *get_syslog_fname(unsigned int idx); 822#ifdef RTCONFIG_USB_MODEM 823extern char *get_modemlog_fname(void); 824#endif 825#if defined(RTCONFIG_SSH) || defined(RTCONFIG_HTTPS) 826extern int nvram_get_file(const char *key, const char *fname, int max); 827extern int nvram_set_file(const char *key, const char *fname, int max); 828#endif 829extern int free_caches(const char *clean_mode, const int clean_time, const unsigned int threshold); 830extern void iface_name_str(enum iface_id id, char *str); 831extern int load_ifaces_stats(struct ifaces_stats *old, struct ifaces_stats *new, char *exclude); 832extern int update_6rd_info(void); 833extern int is_private_subnet(const char *ip); 834extern const char *get_wanface(void); 835extern const char *get_wanip(void); 836extern int is_intf_up(const char* ifname); 837extern uint32_t crc_calc(uint32_t crc, const char *buf, int len); 838#ifdef RTCONFIG_IPV6 839extern const char *get_wan6face(void); 840extern const char *ipv6_router_address(struct in6_addr *in6addr); 841extern const char *ipv6_address(const char *ipaddr6); 842extern const char *ipv6_prefix(struct in6_addr *in6addr); 843#if 0 /* unused */ 844extern const char *ipv6_prefix(const char *ifname); 845extern int ipv6_prefix_len(const char *ifname); 846#endif 847extern void reset_ipv6_linklocal_addr(const char *ifname, int flush); 848extern int with_ipv6_linklocal_addr(const char *ifname); 849#if 1 /* temporary till httpd route table redo */ 850extern void ipv6_set_flags(char *flagstr, int flags); 851extern char* INET6_rresolve(struct sockaddr_in6 *sin6, int numeric); 852#endif 853extern const char *ipv6_gateway_address(void); 854#endif 855#ifdef RTCONFIG_OPENVPN 856#if defined(RTCONFIG_JFFS2) || defined(RTCONFIG_BRCM_NAND_JFFS2) || defined(RTCONFIG_UBIFS) 857#define OVPN_FS_PATH "/jffs/openvpn" 858#define MAX_OVPN_CLIENT 5 859#else 860#define MAX_OVPN_CLIENT 1 861#endif 862extern char *get_parsed_crt(const char *name, char *buf, size_t buf_len); 863extern int set_crt_parsed(const char *name, char *file_path); 864extern int ovpn_crt_is_empty(const char *name); 865#endif 866extern int get_wifi_unit(char *wif); 867extern int is_psta(int unit); 868extern int is_psr(int unit); 869extern int psta_exist(); 870extern int psta_exist_except(int unit); 871extern int psr_exist(); 872extern int psr_exist_except(int unit); 873extern unsigned int netdev_calc(char *ifname, char *ifname_desc, unsigned long *rx, unsigned long *tx, char *ifname_desc2, unsigned long *rx2, unsigned long *tx2); 874extern int check_bwdpi_nvram_setting(); 875extern void StampToDate(unsigned long timestamp, char *date); 876extern int check_filesize_over(char *path, long int size); 877extern time_t get_last_month_timestamp(); 878extern int get_iface_hwaddr(char *name, unsigned char *hwaddr); 879#ifdef RTCONFIG_TRAFFIC_LIMITER 880extern int TL_UNIT_S; // traffic limiter dual wan unit start 881extern int TL_UNIT_E; // traffic limiter dual wan unit end 882extern unsigned int traffic_limiter_read_bit(const char *type); 883extern void traffic_limiter_set_bit(const char *type, int unit); 884extern void traffic_limiter_clear_bit(const char *type, int unit); 885extern double traffic_limiter_get_realtime(int unit); 886extern int traffic_limiter_dualwan_check(char *dualwan_mode); 887#endif 888 889/* mt7620.c */ 890#if defined(RTCONFIG_RALINK_MT7620) 891extern void ATE_mt7620_esw_port_status(void); 892#elif defined(RTCONFIG_RALINK_MT7621) 893extern void ATE_mt7621_esw_port_status(void); 894#endif 895 896/* notify_rc.c */ 897extern int notify_rc(const char *event_name); 898extern int notify_rc_after_wait(const char *event_name); 899extern int notify_rc_after_period_wait(const char *event_name, int wait); 900extern int notify_rc_and_wait(const char *event_name); 901extern int notify_rc_and_wait_1min(const char *event_name); 902extern int notify_rc_and_wait_2min(const char *event_name); 903extern int notify_rc_and_period_wait(const char *event_name, int wait); 904 905/* rtstate.c */ 906extern char *get_wanx_ifname(int unit); 907extern int get_lanports_status(void); 908extern int set_wan_primary_ifunit(const int unit); 909#ifdef RTCONFIG_USB 910extern char *get_usb_xhci_port(int port); 911extern char *get_usb_ehci_port(int port); 912extern char *get_usb_ohci_port(int port); 913extern int get_usb_port_number(const char *usb_port); 914extern int get_usb_port_host(const char *usb_port); 915#endif 916#ifdef RTCONFIG_DUALWAN 917extern void set_wanscap_support(char *feature); 918extern void add_wanscap_support(char *feature); 919extern int get_wans_dualwan(void) ; 920extern int get_dualwan_by_unit(int unit) ; 921extern int get_dualwan_primary(void); 922extern int get_dualwan_secondary(void) ; 923#else 924static inline int get_wans_dualwan(void) { return WANS_DUALWAN_IF_WAN; } 925static inline int get_dualwan_by_unit(int unit) { 926#ifdef RTCONFIG_USB_MODEM 927 return ((unit == WAN_UNIT_FIRST)? WANS_DUALWAN_IF_WAN:WANS_DUALWAN_IF_USB); 928#else 929 return ((unit == WAN_UNIT_FIRST)? WANS_DUALWAN_IF_WAN:WANS_DUALWAN_IF_NONE); 930#endif 931} 932#endif 933extern void set_lan_phy(char *phy); 934extern void add_lan_phy(char *phy); 935extern void set_wan_phy(char *phy); 936extern void add_wan_phy(char *phy); 937 938/* semaphore.c */ 939extern void init_spinlock(void); 940 941#if defined(RTCONFIG_WPS_LED) 942static inline int wps_led_control(int onoff) 943{ 944 return led_control(LED_WPS, onoff); 945} 946 947static inline int __wps_led_control(int onoff) 948{ 949 return led_control(LED_WPS, onoff); 950} 951#else 952static inline int wps_led_control(int onoff) 953{ 954 if (nvram_get_int("led_pwr_gpio") != nvram_get_int("led_wps_gpio")) 955 return led_control(LED_WPS, onoff); 956 else 957 return led_control(LED_POWER, onoff); 958} 959 960/* If individual WPS LED absents, don't do anything. */ 961static inline int __wps_led_control(int onoff) { return 0; } 962#endif 963 964enum { 965 YADNS_DISABLED = -1, 966 YADNS_BASIC, 967 YADNS_SAFE, 968 YADNS_FAMILY, 969 YADNS_COUNT, 970 YADNS_FIRST = YADNS_DISABLED + 1, 971}; 972 973#ifdef RTCONFIG_YANDEXDNS 974#define YADNS_DNSPORT 1253 975int get_yandex_dns(int family, int mode, char **server, int max_count); 976#endif 977 978#if defined(RTCONFIG_WANRED_LED) 979static inline int wan_red_led_control(int onoff) 980{ 981 return led_control(LED_WAN_RED, onoff); 982} 983#else 984static inline int wan_red_led_control(int onoff) { return 0; } 985#endif 986 987/* bled.c */ 988#if defined(RTCONFIG_BLINK_LED) 989extern int __config_netdev_bled(const char *led_gpio, const char *ifname, unsigned int min_blink_speed, unsigned int interval); 990extern int config_netdev_bled(const char *led_gpio, const char *ifname); 991extern int set_bled_udef_pattern(const char *led_gpio, unsigned int interval, const char *pattern); 992extern int set_bled_normal_mode(const char *led_gpio); 993extern int set_bled_udef_pattern_mode(const char *led_gpio); 994extern int start_bled(unsigned int gpio_nr); 995extern int stop_bled(unsigned int gpio_nr); 996extern int del_bled(unsigned int gpio_nr); 997extern int append_netdev_bled_if(const char *led_gpio, const char *ifname); 998extern int remove_netdev_bled_if(const char *led_gpio, const char *ifname); 999extern int __config_swports_bled(const char *led_gpio, unsigned int port_mask, unsigned int min_blink_speed, unsigned int interval, int sleep); 1000extern int update_swports_bled(const char *led_gpio, unsigned int port_mask); 1001extern int __config_usbbus_bled(const char *led_gpio, char *bus_list, unsigned int min_blink_speed, unsigned int interval); 1002extern int is_swports_bled(const char *led_gpio); 1003#if (defined(PLN12) || defined(PLAC56)) 1004extern void set_wifiled(int mode); 1005#endif 1006 1007static inline void enable_wifi_bled(char *ifname) 1008{ 1009 int unit; 1010 int v = LED_ON; 1011 1012 if (!ifname || *ifname == '\0') 1013 return; 1014 unit = get_wifi_unit(ifname); 1015 if (unit < 0 || unit > 1) { 1016 return; 1017 } 1018 1019 if (!guest_wlif(ifname)) { 1020#if defined(RTCONFIG_QCA) 1021 v = LED_OFF; /* WiFi not ready. Don't turn on WiFi LED here. */ 1022#endif 1023#if defined(RTAC1200HP) || defined(RTN56UB1) || defined(RTN56UB2) 1024 if(!get_radio(1, 0) && unit==1) //*5G WiFi not ready. Don't turn on WiFi GPIO LED . */ 1025 v=LED_OFF; 1026#endif 1027#if defined(RTN56UB1) || defined(RTN56UB2) 1028 if(!get_radio(0, 0) && unit==0) //*2G WiFi not ready. Don't turn on WiFi GPIO LED . */ 1029 v=LED_OFF; 1030#endif 1031 led_control((!unit)? LED_2G:LED_5G, v); 1032 } else { 1033 append_netdev_bled_if((!unit)? "led_2g_gpio":"led_5g_gpio", ifname); 1034 } 1035} 1036 1037static inline void disable_wifi_bled(char *ifname) 1038{ 1039 int unit; 1040 1041 if (!ifname || *ifname == '\0') 1042 return; 1043 unit = get_wifi_unit(ifname); 1044 if (unit < 0 || unit > 1) 1045 return; 1046 1047 if (!guest_wlif(ifname)) { 1048 led_control((!unit)? LED_2G:LED_5G, LED_OFF); 1049 } else { 1050 remove_netdev_bled_if((!unit)? "led_2g_gpio":"led_5g_gpio", ifname); 1051 } 1052} 1053 1054static inline int config_swports_bled(const char *led_gpio, unsigned int port_mask) 1055{ 1056 unsigned int min_blink_speed = 10; /* KB/s */ 1057 unsigned int interval = 100; /* ms */ 1058 1059 return __config_swports_bled(led_gpio, port_mask, min_blink_speed, interval, 0); 1060} 1061 1062static inline int config_swports_bled_sleep(const char *led_gpio, unsigned int port_mask) 1063{ 1064 unsigned int min_blink_speed = 10; /* KB/s */ 1065 unsigned int interval = 100; /* ms */ 1066 1067 return __config_swports_bled(led_gpio, port_mask, min_blink_speed, interval, 1); 1068} 1069 1070static inline int config_usbbus_bled(const char *led_gpio, char *bus_list) 1071{ 1072 unsigned int min_blink_speed = 50; /* KB/s */ 1073 unsigned int interval = 100; /* ms */ 1074 1075 return __config_usbbus_bled(led_gpio, bus_list, min_blink_speed, interval); 1076} 1077#else /* !RTCONFIG_BLINK_LED */ 1078static inline int __config_netdev_bled(const char *led_gpio, const char *ifname, unsigned int min_blink_speed, unsigned int interval) { return 0; } 1079static inline int config_netdev_bled(const char *led_gpio, const char *ifname) { return 0; } 1080static inline int set_bled_udef_pattern(const char *led_gpio, unsigned int interval, const char *pattern) { return 0; } 1081static inline int set_bled_normal_mode(const char *led_gpio) { return 0; } 1082static inline int set_bled_udef_pattern_mode(const char *led_gpio) { return 0; } 1083static inline int start_bled(unsigned int gpio_nr) { return 0; } 1084static inline int stop_bled(unsigned int gpio_nr) { return 0; } 1085static inline int chg_bled_state(unsigned int gpio_nr) { return 0; } 1086static inline int del_bled(unsigned int gpio_nr) { return 0; } 1087static inline int append_netdev_bled_if(const char *led_gpio, const char *ifname) { return 0; } 1088static inline int remove_netdev_bled_if(const char *led_gpio, const char *ifname) { return 0; } 1089static inline int __config_swports_bled(const char *led_gpio, unsigned int port_mask, unsigned int min_blink_speed, unsigned int interval, int sleep) { return 0; } 1090static inline int update_swports_bled(const char *led_gpio, unsigned int port_mask) { return 0; } 1091static inline int __config_usbbus_bled(const char *led_gpio, char *bus_list, unsigned int min_blink_speed, unsigned int interval) { return 0; } 1092 1093static inline void enable_wifi_bled(char *ifname) { } 1094static inline void disable_wifi_bled(char *ifname) { } 1095static inline int config_swports_bled(const char *led_gpio, unsigned int port_mask) { return 0; } 1096static inline int config_swports_bled_sleep(const char *led_gpio, unsigned int port_mask) { return 0; } 1097static inline int config_usbbus_bled(const char *led_gpio, char *bus_list) { return 0; } 1098static inline int is_swports_bled(const char *led_gpio) { return 0; } 1099 1100#endif /* RTCONFIG_BLINK_LED */ 1101 1102#if defined(RTCONFIG_USB) 1103static inline int is_usb3_port(char *usb_node) 1104{ 1105 if (!usb_node) 1106 return 0; 1107 1108 if (strstr(usb_node, get_usb_xhci_port(0)) || strstr(usb_node, get_usb_xhci_port(1))) 1109 return 1; 1110 1111#if defined(RTAC55U) || defined(RTAC55UHP) 1112 /* RT-AC55U equips external Etron XHCI host and enables QCA9557 internal EHCI host. 1113 * To make sure port1 maps to physical USB3 port and port2 maps to physical USB2 port respectively, 1114 * one of xhci usb bus is put to first item of ehci_ports whether USB2-only mode is enabled or not. 1115 * Thus, we have to check first item of ehci_ports here. 1116 */ 1117 if (strstr(usb_node, get_usb_ehci_port(0))) 1118 return 1; 1119#endif 1120 1121 return 0; 1122} 1123#endif 1124 1125#ifdef RTCONFIG_BCM5301X_TRAFFIC_MONITOR 1126 1127#if defined(RTN18U) || defined(RTAC56U) || defined(RTAC56S) || defined(RTAC68U) || defined(RTAC3200) || defined(DSL_AC68U) 1128#define WAN0DEV "vlan2" 1129#endif 1130 1131#if defined(RTAC5300) || defined(RTAC5300R) 1132#define WAN0DEV "vlan2" 1133#endif 1134 1135#if defined(RTAC88U) || defined(RTAC3100)/* || defined(RTAC5300)*/ 1136#ifdef RTCONFIG_EXT_RTL8365MB 1137#define WAN0DEV "vlan2" 1138#else 1139#define WAN0DEV "vlan2" 1140#endif 1141#endif 1142 1143#ifdef RTAC87U 1144#define WAN0DEV "vlan2" 1145#endif 1146#endif /* RTCONFIG_BCM5301X_TRAFFIC_MONITOR */ 1147 1148#endif /* !__SHARED_H__ */ 1149