June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
001: /***************************************************************************** 002: * wanrouter.h Definitions for the WAN Multiprotocol Router Module. 003: * This module provides API and common services for WAN Link 004: * Drivers and is completely hardware-independent. 005: * 006: * Author: Nenad Corbic <ncorbic@sangoma.com> 007: * Gideon Hack 008: * Additions: Arnaldo Melo 009: * 010: * Copyright: (c) 1995-2000 Sangoma Technologies Inc. 011: * 012: * This program is free software; you can redistribute it and/or 013: * modify it under the terms of the GNU General Public License 014: * as published by the Free Software Foundation; either version 015: * 2 of the License, or (at your option) any later version. 016: * ============================================================================ 017: * Jul 21, 2000 Nenad Corbic Added WAN_FT1_READY State 018: * Feb 24, 2000 Nenad Corbic Added support for socket based x25api 019: * Jan 28, 2000 Nenad Corbic Added support for the ASYNC protocol. 020: * Oct 04, 1999 Nenad Corbic Updated for 2.1.0 release 021: * Jun 02, 1999 Gideon Hack Added support for the S514 adapter. 022: * May 23, 1999 Arnaldo Melo Added local_addr to wanif_conf_t 023: * WAN_DISCONNECTING state added 024: * Jul 20, 1998 David Fong Added Inverse ARP options to 'wanif_conf_t' 025: * Jun 12, 1998 David Fong Added Cisco HDLC support. 026: * Dec 16, 1997 Jaspreet Singh Moved 'enable_IPX' and 'network_number' to 027: * 'wanif_conf_t' 028: * Dec 05, 1997 Jaspreet Singh Added 'pap', 'chap' to 'wanif_conf_t' 029: * Added 'authenticator' to 'wan_ppp_conf_t' 030: * Nov 06, 1997 Jaspreet Singh Changed Router Driver version to 1.1 from 1.0 031: * Oct 20, 1997 Jaspreet Singh Added 'cir','bc','be' and 'mc' to 'wanif_conf_t' 032: * Added 'enable_IPX' and 'network_number' to 033: * 'wan_device_t'. Also added defines for 034: * UDP PACKET TYPE, Interrupt test, critical values 035: * for RACE conditions. 036: * Oct 05, 1997 Jaspreet Singh Added 'dlci_num' and 'dlci[100]' to 037: * 'wan_fr_conf_t' to configure a list of dlci(s) 038: * for a NODE 039: * Jul 07, 1997 Jaspreet Singh Added 'ttl' to 'wandev_conf_t' & 'wan_device_t' 040: * May 29, 1997 Jaspreet Singh Added 'tx_int_enabled' to 'wan_device_t' 041: * May 21, 1997 Jaspreet Singh Added 'udp_port' to 'wan_device_t' 042: * Apr 25, 1997 Farhan Thawar Added 'udp_port' to 'wandev_conf_t' 043: * Jan 16, 1997 Gene Kozin router_devlist made public 044: * Jan 02, 1997 Gene Kozin Initial version (based on wanpipe.h). 045: *****************************************************************************/ 046: 047: #ifndef _ROUTER_H 048: #define _ROUTER_H 049: 050: #define ROUTER_NAME "wanrouter" /* in case we ever change it */ 051: #define ROUTER_VERSION 1 /* version number */ 052: #define ROUTER_RELEASE 1 /* release (minor version) number */ 053: #define ROUTER_IOCTL 'W' /* for IOCTL calls */ 054: #define ROUTER_MAGIC 0x524D4157L /* signature: 'WANR' reversed */ 055: 056: /* IOCTL codes for /proc/router/<device> entries (up to 255) */ 057: enum router_ioctls 058: { 059: ROUTER_SETUP = ROUTER_IOCTL<<8, /* configure device */ 060: ROUTER_DOWN, /* shut down device */ 061: ROUTER_STAT, /* get device status */ 062: ROUTER_IFNEW, /* add interface */ 063: ROUTER_IFDEL, /* delete interface */ 064: ROUTER_IFSTAT, /* get interface status */ 065: ROUTER_USER = (ROUTER_IOCTL<<8)+16, /* driver-specific calls */ 066: ROUTER_USER_MAX = (ROUTER_IOCTL<<8)+31 067: }; 068: 069: /* identifiers for displaying proc file data for dual port adapters */ 070: #define PROC_DATA_PORT_0 0x8000 /* the data is for port 0 */ 071: #define PROC_DATA_PORT_1 0x8001 /* the data is for port 1 */ 072: 073: /* NLPID for packet encapsulation (ISO/IEC TR 9577) */ 074: #define NLPID_IP 0xCC /* Internet Protocol Datagram */ 075: #define NLPID_SNAP 0x80 /* IEEE Subnetwork Access Protocol */ 076: #define NLPID_CLNP 0x81 /* ISO/IEC 8473 */ 077: #define NLPID_ESIS 0x82 /* ISO/IEC 9542 */ 078: #define NLPID_ISIS 0x83 /* ISO/IEC ISIS */ 079: #define NLPID_Q933 0x08 /* CCITT Q.933 */ 080: 081: /* Miscellaneous */ 082: #define WAN_IFNAME_SZ 15 /* max length of the interface name */ 083: #define WAN_DRVNAME_SZ 15 /* max length of the link driver name */ 084: #define WAN_ADDRESS_SZ 31 /* max length of the WAN media address */ 085: #define USED_BY_FIELD 8 /* max length of the used by field */ 086: 087: /* Defines for UDP PACKET TYPE */ 088: #define UDP_PTPIPE_TYPE 0x01 089: #define UDP_FPIPE_TYPE 0x02 090: #define UDP_CPIPE_TYPE 0x03 091: #define UDP_DRVSTATS_TYPE 0x04 092: #define UDP_INVALID_TYPE 0x05 093: 094: /* Command return code */ 095: #define CMD_OK 0 /* normal firmware return code */ 096: #define CMD_TIMEOUT 0xFF /* firmware command timed out */ 097: 098: /* UDP Packet Management */ 099: #define UDP_PKT_FRM_STACK 0x00 100: #define UDP_PKT_FRM_NETWORK 0x01 101: 102: /* Maximum interrupt test counter */ 103: #define MAX_INTR_TEST_COUNTER 100 104: 105: /* Critical Values for RACE conditions*/ 106: #define CRITICAL_IN_ISR 0xA1 107: #define CRITICAL_INTR_HANDLED 0xB1 108: 109: /****** Data Types **********************************************************/ 110: 111: /*---------------------------------------------------------------------------- 112: * X.25-specific link-level configuration. 113: */ 114: typedef struct wan_x25_conf 115: { 116: unsigned lo_pvc; /* lowest permanent circuit number */ 117: unsigned hi_pvc; /* highest permanent circuit number */ 118: unsigned lo_svc; /* lowest switched circuit number */ 119: unsigned hi_svc; /* highest switched circuit number */ 120: unsigned hdlc_window; /* HDLC window size (1..7) */ 121: unsigned pkt_window; /* X.25 packet window size (1..7) */ 122: unsigned t1; /* HDLC timer T1, sec (1..30) */ 123: unsigned t2; /* HDLC timer T2, sec (0..29) */ 124: unsigned t4; /* HDLC supervisory frame timer = T4 * T1 */ 125: unsigned n2; /* HDLC retransmission limit (1..30) */ 126: unsigned t10_t20; /* X.25 RESTART timeout, sec (1..255) */ 127: unsigned t11_t21; /* X.25 CALL timeout, sec (1..255) */ 128: unsigned t12_t22; /* X.25 RESET timeout, sec (1..255) */ 129: unsigned t13_t23; /* X.25 CLEAR timeout, sec (1..255) */ 130: unsigned t16_t26; /* X.25 INTERRUPT timeout, sec (1..255) */ 131: unsigned t28; /* X.25 REGISTRATION timeout, sec (1..255) */ 132: unsigned r10_r20; /* RESTART retransmission limit (0..250) */ 133: unsigned r12_r22; /* RESET retransmission limit (0..250) */ 134: unsigned r13_r23; /* CLEAR retransmission limit (0..250) */ 135: unsigned ccitt_compat; /* compatibility mode: 1988/1984/1980 */ 136: unsigned x25_conf_opt; /* User defined x25 config optoins */ 137: unsigned char LAPB_hdlc_only; /* Run in HDLC only mode */ 138: unsigned char logging; /* Control connection logging */ 139: unsigned char oob_on_modem; /* Whether to send modem status to the user app */ 140: } wan_x25_conf_t; 141: 142: /*---------------------------------------------------------------------------- 143: * Frame relay specific link-level configuration. 144: */ 145: typedef struct wan_fr_conf 146: { 147: unsigned signalling; /* local in-channel signalling type */ 148: unsigned t391; /* link integrity verification timer */ 149: unsigned t392; /* polling verification timer */ 150: unsigned n391; /* full status polling cycle counter */ 151: unsigned n392; /* error threshold counter */ 152: unsigned n393; /* monitored events counter */ 153: unsigned dlci_num; /* number of DLCs (access node) */ 154: unsigned dlci[100]; /* List of all DLCIs */ 155: } wan_fr_conf_t; 156: 157: /*---------------------------------------------------------------------------- 158: * PPP-specific link-level configuration. 159: */ 160: typedef struct wan_ppp_conf 161: { 162: unsigned restart_tmr; /* restart timer */ 163: unsigned auth_rsrt_tmr; /* authentication timer */ 164: unsigned auth_wait_tmr; /* authentication timer */ 165: unsigned mdm_fail_tmr; /* modem failure timer */ 166: unsigned dtr_drop_tmr; /* DTR drop timer */ 167: unsigned connect_tmout; /* connection timeout */ 168: unsigned conf_retry; /* max. retry */ 169: unsigned term_retry; /* max. retry */ 170: unsigned fail_retry; /* max. retry */ 171: unsigned auth_retry; /* max. retry */ 172: unsigned auth_options; /* authentication opt. */ 173: unsigned ip_options; /* IP options */ 174: char authenticator; /* AUTHENTICATOR or not */ 175: char ip_mode; /* Static/Host/Peer */ 176: } wan_ppp_conf_t; 177: 178: /*---------------------------------------------------------------------------- 179: * CHDLC-specific link-level configuration. 180: */ 181: typedef struct wan_chdlc_conf 182: { 183: unsigned char ignore_dcd; /* Protocol options: */ 184: unsigned char ignore_cts; /* Ignore these to determine */ 185: unsigned char ignore_keepalive; /* link status (Yes or No) */ 186: unsigned char hdlc_streaming; /* hdlc_streaming mode (Y/N) */ 187: unsigned char receive_only; /* no transmit buffering (Y/N) */ 188: unsigned keepalive_tx_tmr; /* transmit keepalive timer */ 189: unsigned keepalive_rx_tmr; /* receive keepalive timer */ 190: unsigned keepalive_err_margin; /* keepalive_error_tolerance */ 191: unsigned slarp_timer; /* SLARP request timer */ 192: } wan_chdlc_conf_t; 193: 194: 195: /*---------------------------------------------------------------------------- 196: * WAN device configuration. Passed to ROUTER_SETUP IOCTL. 197: */ 198: typedef struct wandev_conf 199: { 200: unsigned magic; /* magic number (for verification) */ 201: unsigned config_id; /* configuration structure identifier */ 202: /****** hardware configuration ******/ 203: unsigned ioport; /* adapter I/O port base */ 204: unsigned long maddr; /* dual-port memory address */ 205: unsigned msize; /* dual-port memory size */ 206: int irq; /* interrupt request level */ 207: int dma; /* DMA request level */ 208: char S514_CPU_no[1]; /* S514 PCI adapter CPU number ('A' or 'B') */ 209: unsigned PCI_slot_no; /* S514 PCI adapter slot number */ 210: char auto_pci_cfg; /* S515 PCI automatic slot detection */ 211: char comm_port; /* Communication Port (PRI=0, SEC=1) */ 212: unsigned bps; /* data transfer rate */ 213: unsigned mtu; /* maximum transmit unit size */ 214: unsigned udp_port; /* UDP port for management */ 215: unsigned char ttl; /* Time To Live for UDP security */ 216: unsigned char ft1; /* FT1 Configurator Option */ 217: char interface; /* RS-232/V.35, etc. */ 218: char clocking; /* external/internal */ 219: char line_coding; /* NRZ/NRZI/FM0/FM1, etc. */ 220: char station; /* DTE/DCE, primary/secondary, etc. */ 221: char connection; /* permanent/switched/on-demand */ 222: char read_mode; /* read mode: Polling or interrupt */ 223: char receive_only; /* disable tx buffers */ 224: char tty; /* Create a fake tty device */ 225: unsigned tty_major; /* Major number for wanpipe tty device */ 226: unsigned tty_minor; /* Minor number for wanpipe tty device */ 227: unsigned tty_mode; /* TTY operation mode SYNC or ASYNC */ 228: char backup; /* Backup Mode */ 229: unsigned hw_opt[4]; /* other hardware options */ 230: unsigned reserved[4]; 231: /****** arbitrary data ***************/ 232: unsigned data_size; /* data buffer size */ 233: void* data; /* data buffer, e.g. firmware */ 234: union /****** protocol-specific ************/ 235: { 236: wan_x25_conf_t x25; /* X.25 configuration */ 237: wan_ppp_conf_t ppp; /* PPP configuration */ 238: wan_fr_conf_t fr; /* frame relay configuration */ 239: wan_chdlc_conf_t chdlc; /* Cisco HDLC configuration */ 240: } u; 241: } wandev_conf_t; 242: 243: /* 'config_id' definitions */ 244: #define WANCONFIG_X25 101 /* X.25 link */ 245: #define WANCONFIG_FR 102 /* frame relay link */ 246: #define WANCONFIG_PPP 103 /* synchronous PPP link */ 247: #define WANCONFIG_CHDLC 104 /* Cisco HDLC Link */ 248: #define WANCONFIG_BSC 105 /* BiSync Streaming */ 249: #define WANCONFIG_HDLC 106 /* HDLC Support */ 250: #define WANCONFIG_MPPP 107 /* Multi Port PPP over RAW CHDLC */ 251: 252: /* 253: * Configuration options defines. 254: */ 255: /* general options */ 256: #define WANOPT_OFF 0 257: #define WANOPT_ON 1 258: #define WANOPT_NO 0 259: #define WANOPT_YES 1 260: 261: /* intercace options */ 262: #define WANOPT_RS232 0 263: #define WANOPT_V35 1 264: 265: /* data encoding options */ 266: #define WANOPT_NRZ 0 267: #define WANOPT_NRZI 1 268: #define WANOPT_FM0 2 269: #define WANOPT_FM1 3 270: 271: /* link type options */ 272: #define WANOPT_POINTTOPOINT 0 /* RTS always active */ 273: #define WANOPT_MULTIDROP 1 /* RTS is active when transmitting */ 274: 275: /* clocking options */ 276: #define WANOPT_EXTERNAL 0 277: #define WANOPT_INTERNAL 1 278: 279: /* station options */ 280: #define WANOPT_DTE 0 281: #define WANOPT_DCE 1 282: #define WANOPT_CPE 0 283: #define WANOPT_NODE 1 284: #define WANOPT_SECONDARY 0 285: #define WANOPT_PRIMARY 1 286: 287: /* connection options */ 288: #define WANOPT_PERMANENT 0 /* DTR always active */ 289: #define WANOPT_SWITCHED 1 /* use DTR to setup link (dial-up) */ 290: #define WANOPT_ONDEMAND 2 /* activate DTR only before sending */ 291: 292: /* frame relay in-channel signalling */ 293: #define WANOPT_FR_ANSI 1 /* ANSI T1.617 Annex D */ 294: #define WANOPT_FR_Q933 2 /* ITU Q.933A */ 295: #define WANOPT_FR_LMI 3 /* LMI */ 296: 297: /* PPP IP Mode Options */ 298: #define WANOPT_PPP_STATIC 0 299: #define WANOPT_PPP_HOST 1 300: #define WANOPT_PPP_PEER 2 301: 302: /* ASY Mode Options */ 303: #define WANOPT_ONE 1 304: #define WANOPT_TWO 2 305: #define WANOPT_ONE_AND_HALF 3 306: 307: #define WANOPT_NONE 0 308: #define WANOPT_ODD 1 309: #define WANOPT_EVEN 2 310: 311: /* CHDLC Protocol Options */ 312: /* DF Commmented out for now. 313: 314: #define WANOPT_CHDLC_NO_DCD IGNORE_DCD_FOR_LINK_STAT 315: #define WANOPT_CHDLC_NO_CTS IGNORE_CTS_FOR_LINK_STAT 316: #define WANOPT_CHDLC_NO_KEEPALIVE IGNORE_KPALV_FOR_LINK_STAT 317: */ 318: 319: /* Port options */ 320: #define WANOPT_PRI 0 321: #define WANOPT_SEC 1 322: /* read mode */ 323: #define WANOPT_INTR 0 324: #define WANOPT_POLL 1 325: 326: 327: #define WANOPT_TTY_SYNC 0 328: #define WANOPT_TTY_ASYNC 1 329: /*---------------------------------------------------------------------------- 330: * WAN Link Status Info (for ROUTER_STAT IOCTL). 331: */ 332: typedef struct wandev_stat 333: { 334: unsigned state; /* link state */ 335: unsigned ndev; /* number of configured interfaces */ 336: 337: /* link/interface configuration */ 338: unsigned connection; /* permanent/switched/on-demand */ 339: unsigned media_type; /* Frame relay/PPP/X.25/SDLC, etc. */ 340: unsigned mtu; /* max. transmit unit for this device */ 341: 342: /* physical level statistics */ 343: unsigned modem_status; /* modem status */ 344: unsigned rx_frames; /* received frames count */ 345: unsigned rx_overruns; /* receiver overrun error count */ 346: unsigned rx_crc_err; /* receive CRC error count */ 347: unsigned rx_aborts; /* received aborted frames count */ 348: unsigned rx_bad_length; /* unexpetedly long/short frames count */ 349: unsigned rx_dropped; /* frames discarded at device level */ 350: unsigned tx_frames; /* transmitted frames count */ 351: unsigned tx_underruns; /* aborted transmissions (underruns) count */ 352: unsigned tx_timeouts; /* transmission timeouts */ 353: unsigned tx_rejects; /* other transmit errors */ 354: 355: /* media level statistics */ 356: unsigned rx_bad_format; /* frames with invalid format */ 357: unsigned rx_bad_addr; /* frames with invalid media address */ 358: unsigned tx_retries; /* frames re-transmitted */ 359: unsigned reserved[16]; /* reserved for future use */ 360: } wandev_stat_t; 361: 362: /* 'state' defines */ 363: enum wan_states 364: { 365: WAN_UNCONFIGURED, /* link/channel is not configured */ 366: WAN_DISCONNECTED, /* link/channel is disconnected */ 367: WAN_CONNECTING, /* connection is in progress */ 368: WAN_CONNECTED, /* link/channel is operational */ 369: WAN_LIMIT, /* for verification only */ 370: WAN_DUALPORT, /* for Dual Port cards */ 371: WAN_DISCONNECTING, 372: WAN_FT1_READY /* FT1 Configurator Ready */ 373: }; 374: 375: enum { 376: WAN_LOCAL_IP, 377: WAN_POINTOPOINT_IP, 378: WAN_NETMASK_IP, 379: WAN_BROADCAST_IP 380: }; 381: 382: /* 'modem_status' masks */ 383: #define WAN_MODEM_CTS 0x0001 /* CTS line active */ 384: #define WAN_MODEM_DCD 0x0002 /* DCD line active */ 385: #define WAN_MODEM_DTR 0x0010 /* DTR line active */ 386: #define WAN_MODEM_RTS 0x0020 /* RTS line active */ 387: 388: /*---------------------------------------------------------------------------- 389: * WAN interface (logical channel) configuration (for ROUTER_IFNEW IOCTL). 390: */ 391: typedef struct wanif_conf 392: { 393: unsigned magic; /* magic number */ 394: unsigned config_id; /* configuration identifier */ 395: char name[WAN_IFNAME_SZ+1]; /* interface name, ASCIIZ */ 396: char addr[WAN_ADDRESS_SZ+1]; /* media address, ASCIIZ */ 397: char usedby[USED_BY_FIELD]; /* used by API or WANPIPE */ 398: unsigned idle_timeout; /* sec, before disconnecting */ 399: unsigned hold_timeout; /* sec, before re-connecting */ 400: unsigned cir; /* Committed Information Rate fwd,bwd*/ 401: unsigned bc; /* Committed Burst Size fwd, bwd */ 402: unsigned be; /* Excess Burst Size fwd, bwd */ 403: unsigned char enable_IPX; /* Enable or Disable IPX */ 404: unsigned char inarp; /* Send Inverse ARP requests Y/N */ 405: unsigned inarp_interval; /* sec, between InARP requests */ 406: unsigned long network_number; /* Network Number for IPX */ 407: char mc; /* Multicast on or off */ 408: char local_addr[WAN_ADDRESS_SZ+1];/* local media address, ASCIIZ */ 409: unsigned char port; /* board port */ 410: unsigned char protocol; /* prococol used in this channel (TCPOX25 or X25) */ 411: char pap; /* PAP enabled or disabled */ 412: char chap; /* CHAP enabled or disabled */ 413: unsigned char userid[511]; /* List of User Id */ 414: unsigned char passwd[511]; /* List of passwords */ 415: unsigned char sysname[31]; /* Name of the system */ 416: unsigned char ignore_dcd; /* Protocol options: */ 417: unsigned char ignore_cts; /* Ignore these to determine */ 418: unsigned char ignore_keepalive; /* link status (Yes or No) */ 419: unsigned char hdlc_streaming; /* Hdlc streaming mode (Y/N) */ 420: unsigned keepalive_tx_tmr; /* transmit keepalive timer */ 421: unsigned keepalive_rx_tmr; /* receive keepalive timer */ 422: unsigned keepalive_err_margin; /* keepalive_error_tolerance */ 423: unsigned slarp_timer; /* SLARP request timer */ 424: unsigned char ttl; /* Time To Live for UDP security */ 425: char interface; /* RS-232/V.35, etc. */ 426: char clocking; /* external/internal */ 427: unsigned bps; /* data transfer rate */ 428: unsigned mtu; /* maximum transmit unit size */ 429: unsigned char if_down; /* brind down interface when disconnected */ 430: unsigned char gateway; /* Is this interface a gateway */ 431: unsigned char true_if_encoding; /* Set the dev->type to true board protocol */ 432: 433: unsigned char asy_data_trans; /* async API options */ 434: unsigned char rts_hs_for_receive; /* async Protocol options */ 435: unsigned char xon_xoff_hs_for_receive; 436: unsigned char xon_xoff_hs_for_transmit; 437: unsigned char dcd_hs_for_transmit; 438: unsigned char cts_hs_for_transmit; 439: unsigned char async_mode; 440: unsigned tx_bits_per_char; 441: unsigned rx_bits_per_char; 442: unsigned stop_bits; 443: unsigned char parity; 444: unsigned break_timer; 445: unsigned inter_char_timer; 446: unsigned rx_complete_length; 447: unsigned xon_char; 448: unsigned xoff_char; 449: unsigned char receive_only; /* no transmit buffering (Y/N) */ 450: } wanif_conf_t; 451: 452: #endif /* _ROUTER_H */ 453: