more debug output
[linux-2.4.git] / include / net / lapb.h
1 #ifndef _LAPB_H
2 #define _LAPB_H 
3 #include <linux/lapb.h>
4
5 #define LAPB_HEADER_LEN 20              /* LAPB over Ethernet + a bit more */
6
7 #define LAPB_ACK_PENDING_CONDITION      0x01
8 #define LAPB_REJECT_CONDITION           0x02
9 #define LAPB_PEER_RX_BUSY_CONDITION     0x04
10
11 /* Control field templates */
12 #define LAPB_I          0x00    /* Information frames */
13 #define LAPB_S          0x01    /* Supervisory frames */
14 #define LAPB_U          0x03    /* Unnumbered frames */
15
16 #define LAPB_RR         0x01    /* Receiver ready */
17 #define LAPB_RNR        0x05    /* Receiver not ready */
18 #define LAPB_REJ        0x09    /* Reject */
19
20 #define LAPB_SABM       0x2F    /* Set Asynchronous Balanced Mode */
21 #define LAPB_SABME      0x6F    /* Set Asynchronous Balanced Mode Extended */
22 #define LAPB_DISC       0x43    /* Disconnect */
23 #define LAPB_DM         0x0F    /* Disconnected mode */
24 #define LAPB_UA         0x63    /* Unnumbered acknowledge */
25 #define LAPB_FRMR       0x87    /* Frame reject */
26
27 #define LAPB_ILLEGAL    0x100   /* Impossible to be a real frame type */
28
29 #define LAPB_SPF        0x10    /* Poll/final bit for standard LAPB */
30 #define LAPB_EPF        0x01    /* Poll/final bit for extended LAPB */
31
32 #define LAPB_FRMR_W     0x01    /* Control field invalid        */
33 #define LAPB_FRMR_X     0x02    /* I field invalid              */
34 #define LAPB_FRMR_Y     0x04    /* I field too long             */
35 #define LAPB_FRMR_Z     0x08    /* Invalid N(R)                 */
36
37 #define LAPB_POLLOFF    0
38 #define LAPB_POLLON     1
39
40 /* LAPB C-bit */
41 #define LAPB_COMMAND    1
42 #define LAPB_RESPONSE   2
43
44 #define LAPB_ADDR_A     0x03
45 #define LAPB_ADDR_B     0x01
46 #define LAPB_ADDR_C     0x0F
47 #define LAPB_ADDR_D     0x07
48
49 /* Define Link State constants. */
50 enum {
51         LAPB_STATE_0,   /* Disconnected State           */
52         LAPB_STATE_1,   /* Awaiting Connection State    */
53         LAPB_STATE_2,   /* Awaiting Disconnection State */
54         LAPB_STATE_3,   /* Data Transfer State          */
55         LAPB_STATE_4    /* Frame Reject State           */
56 };
57
58 #define LAPB_DEFAULT_MODE               (LAPB_STANDARD | LAPB_SLP | LAPB_DTE)
59 #define LAPB_DEFAULT_WINDOW             7               /* Window=7 */
60 #define LAPB_DEFAULT_T1                 (5 * HZ)        /* T1=5s    */
61 #define LAPB_DEFAULT_T2                 (1 * HZ)        /* T2=1s    */
62 #define LAPB_DEFAULT_N2                 20              /* N2=20    */
63
64 #define LAPB_SMODULUS   8
65 #define LAPB_EMODULUS   128
66
67 /*
68  *      Information about the current frame.
69  */
70 struct lapb_frame {
71         unsigned short          type;           /* Parsed type          */
72         unsigned short          nr, ns;         /* N(R), N(S)           */
73         unsigned char           cr;             /* Command/Response     */
74         unsigned char           pf;             /* Poll/Final           */
75         unsigned char           control[2];     /* Original control data*/
76 };
77
78 /*
79  *      The per LAPB connection control structure.
80  */
81 typedef struct lapb_cb {
82         struct lapb_cb          *next;
83         void                    *token;
84
85         /* Link status fields */
86         unsigned int            mode;
87         unsigned char           state;
88         unsigned short          vs, vr, va;
89         unsigned char           condition;
90         unsigned short          n2, n2count;
91         unsigned short          t1, t2;
92         struct timer_list       t1timer, t2timer;
93
94         /* Internal control information */
95         struct sk_buff_head     write_queue;
96         struct sk_buff_head     ack_queue;
97         unsigned char           window;
98         struct lapb_register_struct callbacks;
99
100         /* FRMR control information */
101         struct lapb_frame       frmr_data;
102         unsigned char           frmr_type;
103 } lapb_cb;
104
105 /* lapb_iface.c */
106 extern void lapb_connect_confirmation(lapb_cb *, int);
107 extern void lapb_connect_indication(lapb_cb *, int);
108 extern void lapb_disconnect_confirmation(lapb_cb *, int);
109 extern void lapb_disconnect_indication(lapb_cb *, int);
110 extern int  lapb_data_indication(lapb_cb *, struct sk_buff *);
111 extern int  lapb_data_transmit(lapb_cb *, struct sk_buff *);
112
113 /* lapb_in.c */
114 extern void lapb_data_input(lapb_cb *, struct sk_buff *);
115
116 /* lapb_out.c */
117 extern void lapb_kick(lapb_cb *);
118 extern void lapb_transmit_buffer(lapb_cb *, struct sk_buff *, int);
119 extern void lapb_establish_data_link(lapb_cb *);
120 extern void lapb_enquiry_response(lapb_cb *);
121 extern void lapb_timeout_response(lapb_cb *);
122 extern void lapb_check_iframes_acked(lapb_cb *, unsigned short);
123 extern void lapb_check_need_response(lapb_cb *, int, int);
124
125 /* lapb_subr.c */
126 extern void lapb_clear_queues(lapb_cb *);
127 extern void lapb_frames_acked(lapb_cb *, unsigned short);
128 extern void lapb_requeue_frames(lapb_cb *);
129 extern int  lapb_validate_nr(lapb_cb *, unsigned short);
130 extern void lapb_decode(lapb_cb *, struct sk_buff *, struct lapb_frame *);
131 extern void lapb_send_control(lapb_cb *, int, int, int);
132 extern void lapb_transmit_frmr(lapb_cb *);
133
134 /* lapb_timer.c */
135 extern void lapb_start_t1timer(lapb_cb *);
136 extern void lapb_start_t2timer(lapb_cb *);
137 extern void lapb_stop_t1timer(lapb_cb *);
138 extern void lapb_stop_t2timer(lapb_cb *);
139 extern int  lapb_t1timer_running(lapb_cb *);
140
141 /*
142  * Debug levels.
143  *      0 = Off
144  *      1 = State Changes
145  *      2 = Packets I/O and State Changes
146  *      3 = Hex dumps, Packets I/O and State Changes.
147  */
148 #define LAPB_DEBUG      0
149
150 #endif