wanpipe.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2. * wanpipe.h WANPIPE(tm) Multiprotocol WAN Link Driver.
  3. * User-level API definitions.
  4. *
  5. * Author:  Nenad Corbic <ncorbic@sangoma.com>
  6. * Gideon Hack  
  7. *
  8. * Copyright: (c) 1995-2000 Sangoma Technologies Inc.
  9. *
  10. * This program is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public License
  12. * as published by the Free Software Foundation; either version
  13. * 2 of the License, or (at your option) any later version.
  14. * ============================================================================
  15. * Nov 3,  2000  Nenad Corbic    Added config_id to sdla_t structure.
  16. *                               Used to determine the protocol running.
  17. * Jul 13, 2000  Nenad Corbic Added SyncPPP Support
  18. * Feb 24, 2000  Nenad Corbic    Added support for x25api driver
  19. * Oct 04, 1999  Nenad Corbic    New CHDLC and FRAME RELAY code, SMP support
  20. * Jun 02, 1999  Gideon Hack Added 'update_call_count' for Cisco HDLC 
  21. * support
  22. * Jun 26, 1998 David Fong Added 'ip_mode' in sdla_t.u.p for dynamic IP
  23. * routing mode configuration
  24. * Jun 12, 1998 David Fong Added Cisco HDLC union member in sdla_t
  25. * Dec 08, 1997 Jaspreet Singh  Added 'authenticator' in union of 'sdla_t' 
  26. * Nov 26, 1997 Jaspreet Singh Added 'load_sharing' structure.  Also added 
  27. * 'devs_struct','dev_to_devtint_next' to 'sdla_t'
  28. * Nov 24, 1997 Jaspreet Singh Added 'irq_dis_if_send_count', 
  29. * 'irq_dis_poll_count' to 'sdla_t'.
  30. * Nov 06, 1997 Jaspreet Singh Added a define called 'INTR_TEST_MODE'
  31. * Oct 20, 1997 Jaspreet Singh Added 'buff_intr_mode_unbusy' and 
  32. * 'dlci_intr_mode_unbusy' to 'sdla_t'
  33. * Oct 18, 1997 Jaspreet Singh Added structure to maintain global driver
  34. * statistics.
  35. * Jan 15, 1997 Gene Kozin Version 3.1.0
  36. *  o added UDP management stuff
  37. * Jan 02, 1997 Gene Kozin Version 3.0.0
  38. *****************************************************************************/
  39. #ifndef _WANPIPE_H
  40. #define _WANPIPE_H
  41. #include <linux/version.h>
  42. #ifndef KERNEL_VERSION
  43.   #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
  44. #endif
  45. #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)
  46.  
  47.  #define LINUX_2_4
  48.  #define netdevice_t struct net_device
  49.  #define FREE_READ 1
  50.  #define FREE_WRITE 0
  51.  #define stop_net_queue(a)  netif_stop_queue(a) 
  52.  #define start_net_queue(a)  netif_start_queue(a)
  53.  #define is_queue_stopped(a) netif_queue_stopped(a)
  54.  #define wake_net_dev(a) netif_wake_queue(a)
  55.  #define is_dev_running(a) netif_running(a)
  56.  #define wan_dev_kfree_skb(a,b) dev_kfree_skb_any(a)
  57. #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
  58.  #define LINUX_2_1
  59.  #define netdevice_t struct device
  60.  #define FREE_READ 1
  61.  #define FREE_WRITE 0
  62.  #define stop_net_queue(a)  (set_bit(0, &##a->tbusy)) 
  63.  #define start_net_queue(a)  (clear_bit(0,&##a->tbusy))
  64.  #define is_queue_stopped(a) (##a->tbusy)
  65.  #define wake_net_dev(a) {clear_bit(0,&##a->tbusy);mark_bh(NET_BH);}
  66.  #define is_dev_running(a) (test_bit(0,&##a->start))
  67.  #define wan_dev_kfree_skb(a,b) dev_kfree_skb(a)
  68. #else
  69.  #define LINUX_2_0
  70.  #define netdevice_t struct device
  71.  #define test_and_set_bit set_bit
  72.  #define net_ratelimit() 1 
  73.  #define stop_net_queue(a)  (set_bit(0, &##a->tbusy)) 
  74.  #define start_net_queue(a)  (clear_bit(0,&##a->tbusy))
  75.  #define is_queue_stopped(a) (##a->tbusy)
  76.  #define wake_net_dev(a) {clear_bit(0,&##a->tbusy);mark_bh(NET_BH);}
  77.  #define is_dev_running(a) (test_bit(0,(void*)&##a->start))
  78.  #define wan_dev_kfree_skb(a,b) dev_kfree_skb(a,b)    
  79.  #define spin_lock_init(a)
  80.  #define spin_lock(a)
  81.  #define spin_unlock(a)
  82. #endif
  83. #include <linux/wanrouter.h>
  84. /* Defines */
  85. #ifndef PACKED
  86. #define PACKED __attribute__((packed))
  87. #endif
  88. #define WANPIPE_MAGIC 0x414C4453L /* signature: 'SDLA' reversed */
  89. /* IOCTL numbers (up to 16) */
  90. #define WANPIPE_DUMP (ROUTER_USER+0) /* dump adapter's memory */
  91. #define WANPIPE_EXEC (ROUTER_USER+1) /* execute firmware command */
  92. #define TRACE_ALL                       0x00
  93. #define TRACE_PROT 0x01
  94. #define TRACE_DATA 0x02
  95. /* values for request/reply byte */
  96. #define UDPMGMT_REQUEST 0x01
  97. #define UDPMGMT_REPLY 0x02
  98. #define UDP_OFFSET 12
  99. #define MAX_CMD_BUFF  10
  100. #define MAX_X25_LCN  255 /* Maximum number of x25 channels */
  101. #define MAX_LCN_NUM 4095 /* Maximum lcn number */
  102. #define MAX_FT1_RETRY  100
  103. #ifdef LINUX_2_4
  104.   #ifndef AF_WANPIPE
  105. #define AF_WANPIPE 25
  106. #ifndef PF_WANPIPE
  107. #define PF_WANPIPE AF_WANPIPE
  108. #endif
  109.   #endif
  110. #else
  111.   #ifndef AF_WANPIPE
  112. #define AF_WANPIPE 24
  113. #ifndef PF_WANPIPE
  114. #define PF_WANPIPE AF_WANPIPE
  115. #endif
  116.   #endif
  117. #endif
  118. #define TX_TIMEOUT 5*HZ
  119. /* General Critical Flags */
  120. #define SEND_CRIT 0x00
  121. #define PERI_CRIT 0x01
  122. /* Chdlc and PPP polling critical flag */
  123. #define POLL_CRIT 0x03
  124. /* Frame Relay Tx IRQ send critical flag */
  125. #define SEND_TXIRQ_CRIT 0x02
  126. /* Frame Relay ARP critical flag */
  127. #define ARP_CRIT 0x03
  128. /* Bit maps for dynamic interface configuration
  129.  * DYN_OPT_ON : turns this option on/off 
  130.  * DEV_DOWN   : device was shutdown by the driver not
  131.  *              by user 
  132.  */
  133. #define DYN_OPT_ON 0x00
  134. #define DEV_DOWN 0x01
  135. /*
  136.  * Data structures for IOCTL calls.
  137.  */
  138. typedef struct sdla_dump /* WANPIPE_DUMP */
  139. {
  140. unsigned long magic; /* for verification */
  141. unsigned long offset; /* absolute adapter memory address */
  142. unsigned long length; /* block length */
  143. void* ptr; /* -> buffer */
  144. } sdla_dump_t;
  145. typedef struct sdla_exec /* WANPIPE_EXEC */
  146. {
  147. unsigned long magic; /* for verification */
  148. void* cmd; /* -> command structure */
  149. void* data; /* -> data buffer */
  150. } sdla_exec_t;
  151. /* UDP management stuff */
  152. typedef struct wum_header
  153. {
  154. unsigned char signature[8]; /* 00h: signature */
  155. unsigned char type; /* 08h: request/reply */
  156. unsigned char command; /* 09h: commnand */
  157. unsigned char reserved[6]; /* 0Ah: reserved */
  158. } wum_header_t;
  159. /*************************************************************************
  160.  Data Structure for global statistics
  161. *************************************************************************/
  162. typedef struct global_stats
  163. {
  164. unsigned long isr_entry;
  165. unsigned long isr_already_critical;
  166. unsigned long isr_rx;
  167. unsigned long isr_tx;
  168. unsigned long isr_intr_test;
  169. unsigned long isr_spurious;
  170. unsigned long isr_enable_tx_int;
  171. unsigned long rx_intr_corrupt_rx_bfr;
  172. unsigned long rx_intr_on_orphaned_DLCI;
  173. unsigned long rx_intr_dev_not_started;
  174. unsigned long tx_intr_dev_not_started;
  175. unsigned long poll_entry;
  176. unsigned long poll_already_critical;
  177. unsigned long poll_processed;
  178. unsigned long poll_tbusy_bad_status;
  179. unsigned long poll_host_disable_irq;
  180. unsigned long poll_host_enable_irq;
  181. } global_stats_t;
  182. typedef struct{
  183. unsigned short udp_src_port PACKED;
  184. unsigned short udp_dst_port PACKED;
  185. unsigned short udp_length PACKED;
  186. unsigned short udp_checksum PACKED;
  187. } udp_pkt_t;
  188. typedef struct {
  189. unsigned char ver_inet_hdr_length PACKED;
  190. unsigned char service_type PACKED;
  191. unsigned short total_length PACKED;
  192. unsigned short identifier PACKED;
  193. unsigned short flags_frag_offset PACKED;
  194. unsigned char ttl PACKED;
  195. unsigned char protocol PACKED;
  196. unsigned short hdr_checksum PACKED;
  197. unsigned long ip_src_address PACKED;
  198. unsigned long ip_dst_address PACKED;
  199. } ip_pkt_t;
  200. typedef struct {
  201.         unsigned char           signature[8]    PACKED;
  202.         unsigned char           request_reply   PACKED;
  203.         unsigned char           id              PACKED;
  204.         unsigned char           reserved[6]     PACKED;
  205. } wp_mgmt_t;
  206. /*************************************************************************
  207.  Data Structure for if_send  statistics
  208. *************************************************************************/  
  209. typedef struct if_send_stat{
  210. unsigned long if_send_entry;
  211. unsigned long if_send_skb_null;
  212. unsigned long if_send_broadcast;
  213. unsigned long if_send_multicast;
  214. unsigned long if_send_critical_ISR;
  215. unsigned long if_send_critical_non_ISR;
  216. unsigned long if_send_tbusy;
  217. unsigned long if_send_tbusy_timeout;
  218. unsigned long if_send_PIPE_request;
  219. unsigned long if_send_wan_disconnected;
  220. unsigned long if_send_dlci_disconnected;
  221. unsigned long if_send_no_bfrs;
  222. unsigned long if_send_adptr_bfrs_full;
  223. unsigned long if_send_bfr_passed_to_adptr;
  224. unsigned long if_send_protocol_error;
  225.         unsigned long if_send_bfr_not_passed_to_adptr;
  226.         unsigned long if_send_tx_int_enabled;
  227.         unsigned long if_send_consec_send_fail; 
  228. } if_send_stat_t;
  229. typedef struct rx_intr_stat{
  230. unsigned long rx_intr_no_socket;
  231. unsigned long rx_intr_dev_not_started;
  232. unsigned long rx_intr_PIPE_request;
  233. unsigned long rx_intr_bfr_not_passed_to_stack;
  234. unsigned long rx_intr_bfr_passed_to_stack;
  235. } rx_intr_stat_t;
  236. typedef struct pipe_mgmt_stat{
  237. unsigned long UDP_PIPE_mgmt_kmalloc_err;
  238. unsigned long UDP_PIPE_mgmt_direction_err;
  239. unsigned long UDP_PIPE_mgmt_adptr_type_err;
  240. unsigned long UDP_PIPE_mgmt_adptr_cmnd_OK;
  241. unsigned long UDP_PIPE_mgmt_adptr_cmnd_timeout;
  242. unsigned long UDP_PIPE_mgmt_adptr_send_passed;
  243. unsigned long UDP_PIPE_mgmt_adptr_send_failed;
  244. unsigned long UDP_PIPE_mgmt_not_passed_to_stack;
  245. unsigned long UDP_PIPE_mgmt_passed_to_stack;
  246. unsigned long UDP_PIPE_mgmt_no_socket;
  247.         unsigned long UDP_PIPE_mgmt_passed_to_adptr;
  248. } pipe_mgmt_stat_t;
  249. typedef struct {
  250. struct sk_buff *skb;
  251. } bh_data_t, cmd_data_t;
  252. #define MAX_LGTH_UDP_MGNT_PKT 2000
  253.  
  254. /* This is used for interrupt testing */
  255. #define INTR_TEST_MODE 0x02
  256. #define WUM_SIGNATURE_L 0x50495046
  257. #define WUM_SIGNATURE_H 0x444E3845
  258. #define WUM_KILL 0x50
  259. #define WUM_EXEC 0x51
  260. #define WANPIPE 0x00
  261. #define API 0x01
  262. #define BRIDGE 0x02
  263. #define BRIDGE_NODE 0x03
  264. #ifdef __KERNEL__
  265. /****** Kernel Interface ****************************************************/
  266. #include <linux/sdladrv.h> /* SDLA support module API definitions */
  267. #include <linux/sdlasfm.h> /* SDLA firmware module definitions */
  268. #include <linux/tqueue.h>
  269. #ifdef LINUX_2_4
  270.   #include <linux/serial.h>
  271.   #include <linux/serialP.h>
  272.   #include <linux/serial_reg.h>
  273.   #include <asm/serial.h>
  274. #endif
  275. #include <linux/tty.h>
  276. #include <linux/tty_driver.h>
  277. #include <linux/tty_flip.h>
  278. #define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0)
  279. #define is_alpha(ch) ((((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'z')||
  280.     ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'Z'))?1:0)
  281. #define is_hex_digit(ch) ((((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')||
  282.     ((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'f')||
  283.     ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'F'))?1:0)
  284. /****** Data Structures *****************************************************/
  285. /* Adapter Data Space.
  286.  * This structure is needed because we handle multiple cards, otherwise
  287.  * static data would do it.
  288.  */
  289. typedef struct sdla
  290. {
  291. char devname[WAN_DRVNAME_SZ+1]; /* card name */
  292. sdlahw_t hw; /* hardware configuration */
  293. wan_device_t wandev; /* WAN device data space */
  294. unsigned open_cnt; /* number of open interfaces */
  295. unsigned long state_tick; /* link state timestamp */
  296. unsigned intr_mode; /* Type of Interrupt Mode */
  297. char in_isr; /* interrupt-in-service flag */
  298. char buff_int_mode_unbusy; /* flag for carrying out dev_tint */  
  299. char dlci_int_mode_unbusy; /* flag for carrying out dev_tint */
  300. char configured; /* flag for previous configurations */
  301. unsigned short irq_dis_if_send_count; /* Disabling irqs in if_send*/
  302. unsigned short irq_dis_poll_count;   /* Disabling irqs in poll routine*/
  303. unsigned short force_enable_irq;
  304. char TracingEnabled; /* flag for enabling trace */
  305. global_stats_t statistics; /* global statistics */
  306. void* mbox; /* -> mailbox */
  307. void* rxmb; /* -> receive mailbox */
  308. void* flags; /* -> adapter status flags */
  309. void (*isr)(struct sdla* card); /* interrupt service routine */
  310. void (*poll)(struct sdla* card); /* polling routine */
  311. int (*exec)(struct sdla* card, void* u_cmd, void* u_data);
  312. /* Used by the listen() system call */
  313. /* Wanpipe Socket Interface */
  314. int   (*func) (struct sk_buff *, struct sock *);
  315. struct sock *sk;
  316. /* Shutdown function */
  317. void (*disable_comm) (struct sdla *card);
  318. /* Secondary Port Device: Piggibacking */
  319. struct sdla *next;
  320. /* TTY driver variables */
  321. unsigned char tty_opt;
  322. struct tty_struct *tty;
  323. unsigned int tty_minor;
  324. unsigned int tty_open;
  325. unsigned char *tty_buf;
  326. unsigned char *tty_rx;
  327. struct tq_struct tty_task_queue;
  328. union
  329. {
  330. struct
  331. { /****** X.25 specific data **********/
  332. u32 lo_pvc;
  333. u32 hi_pvc;
  334. u32 lo_svc;
  335. u32 hi_svc;
  336. netdevice_t *svc_to_dev_map[MAX_X25_LCN];
  337. netdevice_t *pvc_to_dev_map[MAX_X25_LCN];
  338. netdevice_t *tx_dev;
  339. netdevice_t *cmd_dev;
  340. u32 no_dev;
  341. volatile u8 *hdlc_buf_status;
  342. u32 tx_interrupts_pending;
  343.                         u16 timer_int_enabled;
  344. netdevice_t *poll_device;
  345. atomic_t command_busy;
  346. u16 udp_pkt_lgth;
  347.                         u32 udp_type;
  348.                         u8  udp_pkt_src;
  349. u32 udp_lcn;
  350.                         netdevice_t * udp_dev;
  351.                         s8 udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT];
  352.   u8 LAPB_hdlc; /* Option to turn off X25 and run only LAPB */
  353. u8 logging; /* Option to log call messages */
  354. u8 oob_on_modem; /* Option to send modem status to the api */
  355. u16 num_of_ch; /* Number of channels configured by the user */
  356. struct tq_struct x25_poll_task;
  357. struct timer_list x25_timer;
  358. } x;
  359. struct
  360. { /****** frame relay specific data ***/
  361. void* rxmb_base; /* -> first Rx buffer */
  362. void* rxmb_last; /* -> last Rx buffer */
  363. unsigned rx_base; /* S508 receive buffer base */
  364. unsigned rx_top; /* S508 receive buffer end */
  365. unsigned short node_dlci[100];
  366. unsigned short dlci_num;
  367.                         netdevice_t *dlci_to_dev_map[991 + 1];
  368.                         unsigned tx_interrupts_pending;
  369.                         unsigned short timer_int_enabled;
  370.                         unsigned short udp_pkt_lgth;
  371.                         int udp_type;
  372.                         char udp_pkt_src;
  373.                         unsigned udp_dlci;
  374.                         char udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT];
  375.                         void* trc_el_base;       /* first trace element */
  376.                         void* trc_el_last;       /* last trace element */
  377.                         void *curr_trc_el;       /* current trace element */
  378.                         unsigned short trc_bfr_space;  /* trace buffer space */
  379. unsigned char  update_comms_stats;
  380. netdevice_t *arp_dev;
  381. spinlock_t if_send_lock;
  382. } f;
  383. struct /****** PPP-specific data ***********/
  384. {
  385. char if_name[WAN_IFNAME_SZ+1]; /* interface name */
  386. void* txbuf; /* -> current Tx buffer */
  387. void* txbuf_base; /* -> first Tx buffer */
  388. void* txbuf_last; /* -> last Tx buffer */
  389. void* rxbuf_base; /* -> first Rx buffer */
  390. void* rxbuf_last; /* -> last Rx buffer */
  391. unsigned rx_base; /* S508 receive buffer base */
  392. unsigned rx_top; /* S508 receive buffer end */
  393. char ip_mode; /* STATIC/HOST/PEER IP Mode */
  394. char authenticator; /* Authenticator for PAP/CHAP */
  395. unsigned char comm_enabled; /* Is comm enabled or not */
  396. unsigned char peer_route;   /* Process Peer Route */
  397. unsigned long *txbuf_next;  /* Next Tx buffer to use */ 
  398. unsigned long *rxbuf_next;  /* Next Rx buffer to use */
  399. } p;
  400. struct /* Cisco HDLC-specific data */
  401. {
  402. char if_name[WAN_IFNAME_SZ+1]; /* interface name */
  403. unsigned char comm_port;/* Communication Port O or 1 */
  404. unsigned char usedby;  /* Used by WANPIPE or API */
  405. void* rxmb; /* Receive mail box */
  406. void* flags; /* flags */
  407. void* tx_status; /* Tx status element */
  408. void* rx_status; /* Rx status element */
  409. void* txbuf; /* -> current Tx buffer */
  410. void* txbuf_base; /* -> first Tx buffer */
  411. void* txbuf_last; /* -> last Tx buffer */
  412. void* rxbuf_base; /* -> first Rx buffer */
  413. void* rxbuf_last; /* -> last Rx buffer */
  414. unsigned rx_base; /* S508 receive buffer base */
  415. unsigned rx_top; /* S508 receive buffer end */
  416. unsigned char receive_only; /* high speed receivers */
  417. unsigned short protocol_options;
  418. unsigned short kpalv_tx; /* Tx kpalv timer */
  419. unsigned short kpalv_rx; /* Rx kpalv timer */
  420. unsigned short kpalv_err; /* Error tolerance */
  421. unsigned short slarp_timer; /* SLARP req timer */
  422. unsigned state; /* state of the link */
  423. unsigned char api_status;
  424. unsigned char update_call_count;
  425. unsigned short api_options; /* for async config */
  426. unsigned char  async_mode;
  427.         unsigned short tx_bits_per_char;
  428.         unsigned short rx_bits_per_char;
  429.         unsigned short stop_bits;
  430.         unsigned short parity;
  431. unsigned short break_timer;
  432.         unsigned short inter_char_timer;
  433.         unsigned short rx_complete_length;
  434.         unsigned short xon_char;
  435.         unsigned short xoff_char;
  436. unsigned char comm_enabled; /* Is comm enabled or not */
  437. unsigned char backup;
  438. } c;
  439. struct
  440. {
  441. void* tx_status; /* Tx status element */
  442. void* rx_status; /* Rx status element */
  443. void* trace_status; /* Trace status element */
  444. void* txbuf; /* -> current Tx buffer */
  445. void* txbuf_base; /* -> first Tx buffer */
  446. void* txbuf_last; /* -> last Tx buffer */
  447. void* rxbuf_base; /* -> first Rx buffer */
  448. void* rxbuf_last; /* -> last Rx buffer */
  449. void* tracebuf; /* -> current Trace buffer */
  450. void* tracebuf_base; /* -> current Trace buffer */
  451. void* tracebuf_last; /* -> current Trace buffer */
  452. unsigned rx_base; /* receive buffer base */
  453. unsigned rx_end; /* receive buffer end */
  454. unsigned trace_base; /* trace buffer base */
  455. unsigned trace_end; /* trace buffer end */
  456. } h;
  457. } u;
  458. } sdla_t;
  459. /****** Public Functions ****************************************************/
  460. void wanpipe_open      (sdla_t* card); /* wpmain.c */
  461. void wanpipe_close     (sdla_t* card); /* wpmain.c */
  462. void wanpipe_set_state (sdla_t* card, int state); /* wpmain.c */
  463. int wpx_init (sdla_t* card, wandev_conf_t* conf); /* wpx.c */
  464. int wpf_init (sdla_t* card, wandev_conf_t* conf); /* wpf.c */
  465. int wpp_init (sdla_t* card, wandev_conf_t* conf); /* wpp.c */
  466. int wpc_init (sdla_t* card, wandev_conf_t* conf); /* Cisco HDLC */
  467. int bsc_init (sdla_t* card, wandev_conf_t* conf); /* BSC streaming */
  468. int hdlc_init(sdla_t* card, wandev_conf_t* conf); /* HDLC support */
  469. int wpft1_init (sdla_t* card, wandev_conf_t* conf);     /* FT1 Config support */
  470. int wsppp_init (sdla_t* card, wandev_conf_t* conf); /* Sync PPP on top of RAW CHDLC */
  471. extern sdla_t * wanpipe_find_card(char *);
  472. extern sdla_t * wanpipe_find_card_num (int);
  473. extern void wanpipe_queue_tq (struct tq_struct *);
  474. extern void wanpipe_mark_bh (void);
  475. extern void wakeup_sk_bh (netdevice_t *);
  476. extern int change_dev_flags (netdevice_t *, unsigned); 
  477. extern unsigned long get_ip_address (netdevice_t *dev, int option);
  478. extern void add_gateway(sdla_t *, netdevice_t *);
  479. #endif /* __KERNEL__ */
  480. #endif /* _WANPIPE_H */