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