1#ifndef _LAPB_H
2#define _LAPB_H
3#include <linux/lapb.h>
4
5#define LAPB_HEADER_LEN 20
6
7#define LAPB_ACK_PENDING_CONDITION 0x01
8#define LAPB_REJECT_CONDITION 0x02
9#define LAPB_PEER_RX_BUSY_CONDITION 0x04
10
11
12#define LAPB_I 0x00
13#define LAPB_S 0x01
14#define LAPB_U 0x03
15
16#define LAPB_RR 0x01
17#define LAPB_RNR 0x05
18#define LAPB_REJ 0x09
19
20#define LAPB_SABM 0x2F
21#define LAPB_SABME 0x6F
22#define LAPB_DISC 0x43
23#define LAPB_DM 0x0F
24#define LAPB_UA 0x63
25#define LAPB_FRMR 0x87
26
27#define LAPB_ILLEGAL 0x100
28
29#define LAPB_SPF 0x10
30#define LAPB_EPF 0x01
31
32#define LAPB_FRMR_W 0x01
33#define LAPB_FRMR_X 0x02
34#define LAPB_FRMR_Y 0x04
35#define LAPB_FRMR_Z 0x08
36
37#define LAPB_POLLOFF 0
38#define LAPB_POLLON 1
39
40
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
50enum {
51 LAPB_STATE_0,
52 LAPB_STATE_1,
53 LAPB_STATE_2,
54 LAPB_STATE_3,
55 LAPB_STATE_4
56};
57
58#define LAPB_DEFAULT_MODE (LAPB_STANDARD | LAPB_SLP | LAPB_DTE)
59#define LAPB_DEFAULT_WINDOW 7
60#define LAPB_DEFAULT_T1 (5 * HZ)
61#define LAPB_DEFAULT_T2 (1 * HZ)
62#define LAPB_DEFAULT_N2 20
63
64#define LAPB_SMODULUS 8
65#define LAPB_EMODULUS 128
66
67
68
69
70struct lapb_frame {
71 unsigned short type;
72 unsigned short nr, ns;
73 unsigned char cr;
74 unsigned char pf;
75 unsigned char control[2];
76};
77
78
79
80
81struct lapb_cb {
82 struct list_head node;
83 struct net_device *dev;
84
85
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
95 struct sk_buff_head write_queue;
96 struct sk_buff_head ack_queue;
97 unsigned char window;
98 const struct lapb_register_struct *callbacks;
99
100
101 struct lapb_frame frmr_data;
102 unsigned char frmr_type;
103
104 atomic_t refcnt;
105};
106
107
108extern void lapb_connect_confirmation(struct lapb_cb *lapb, int);
109extern void lapb_connect_indication(struct lapb_cb *lapb, int);
110extern void lapb_disconnect_confirmation(struct lapb_cb *lapb, int);
111extern void lapb_disconnect_indication(struct lapb_cb *lapb, int);
112extern int lapb_data_indication(struct lapb_cb *lapb, struct sk_buff *);
113extern int lapb_data_transmit(struct lapb_cb *lapb, struct sk_buff *);
114
115
116extern void lapb_data_input(struct lapb_cb *lapb, struct sk_buff *);
117
118
119extern void lapb_kick(struct lapb_cb *lapb);
120extern void lapb_transmit_buffer(struct lapb_cb *lapb, struct sk_buff *, int);
121extern void lapb_establish_data_link(struct lapb_cb *lapb);
122extern void lapb_enquiry_response(struct lapb_cb *lapb);
123extern void lapb_timeout_response(struct lapb_cb *lapb);
124extern void lapb_check_iframes_acked(struct lapb_cb *lapb, unsigned short);
125extern void lapb_check_need_response(struct lapb_cb *lapb, int, int);
126
127
128extern void lapb_clear_queues(struct lapb_cb *lapb);
129extern void lapb_frames_acked(struct lapb_cb *lapb, unsigned short);
130extern void lapb_requeue_frames(struct lapb_cb *lapb);
131extern int lapb_validate_nr(struct lapb_cb *lapb, unsigned short);
132extern int lapb_decode(struct lapb_cb *lapb, struct sk_buff *, struct lapb_frame *);
133extern void lapb_send_control(struct lapb_cb *lapb, int, int, int);
134extern void lapb_transmit_frmr(struct lapb_cb *lapb);
135
136
137extern void lapb_start_t1timer(struct lapb_cb *lapb);
138extern void lapb_start_t2timer(struct lapb_cb *lapb);
139extern void lapb_stop_t1timer(struct lapb_cb *lapb);
140extern void lapb_stop_t2timer(struct lapb_cb *lapb);
141extern int lapb_t1timer_running(struct lapb_cb *lapb);
142
143
144
145
146
147
148
149
150#define LAPB_DEBUG 0
151
152#define lapb_dbg(level, fmt, ...) \
153do { \
154 if (level < LAPB_DEBUG) \
155 pr_debug(fmt, ##__VA_ARGS__); \
156} while (0)
157
158#endif
159