Commit | Line | Data |
---|---|---|
1b2b03f8 KK |
1 | /* |
2 | * Layer 2 defines | |
3 | * | |
4 | * Copyright 2008 by Karsten Keil <kkeil@novell.com> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 as | |
8 | * published by the Free Software Foundation. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
14 | * | |
15 | */ | |
16 | ||
17 | #include <linux/mISDNif.h> | |
18 | #include <linux/skbuff.h> | |
19 | #include "fsm.h" | |
20 | ||
21 | #define MAX_WINDOW 8 | |
22 | ||
23 | struct manager { | |
24 | struct mISDNchannel ch; | |
25 | struct mISDNchannel bcast; | |
26 | u_long options; | |
27 | struct list_head layer2; | |
28 | rwlock_t lock; | |
29 | struct FsmInst deact; | |
30 | struct FsmTimer datimer; | |
31 | struct sk_buff_head sendq; | |
32 | struct mISDNchannel *up; | |
33 | u_int nextid; | |
34 | u_int lastid; | |
35 | }; | |
36 | ||
37 | struct teimgr { | |
38 | int ri; | |
39 | int rcnt; | |
40 | struct FsmInst tei_m; | |
41 | struct FsmTimer timer; | |
42 | int tval, nval; | |
43 | struct layer2 *l2; | |
44 | struct manager *mgr; | |
45 | }; | |
46 | ||
47 | struct laddr { | |
48 | u_char A; | |
49 | u_char B; | |
50 | }; | |
51 | ||
52 | struct layer2 { | |
53 | struct list_head list; | |
54 | struct mISDNchannel ch; | |
55 | u_long flag; | |
56 | int id; | |
57 | struct mISDNchannel *up; | |
58 | signed char sapi; | |
59 | signed char tei; | |
60 | struct laddr addr; | |
61 | u_int maxlen; | |
62 | struct teimgr *tm; | |
63 | u_int vs, va, vr; | |
64 | int rc; | |
65 | u_int window; | |
66 | u_int sow; | |
67 | struct FsmInst l2m; | |
68 | struct FsmTimer t200, t203; | |
69 | int T200, N200, T203; | |
70 | u_int next_id; | |
71 | u_int down_id; | |
72 | struct sk_buff *windowar[MAX_WINDOW]; | |
73 | struct sk_buff_head i_queue; | |
74 | struct sk_buff_head ui_queue; | |
75 | struct sk_buff_head down_queue; | |
76 | struct sk_buff_head tmp_queue; | |
77 | }; | |
78 | ||
79 | enum { | |
80 | ST_L2_1, | |
81 | ST_L2_2, | |
82 | ST_L2_3, | |
83 | ST_L2_4, | |
84 | ST_L2_5, | |
85 | ST_L2_6, | |
86 | ST_L2_7, | |
87 | ST_L2_8, | |
88 | }; | |
89 | ||
475be4d8 | 90 | #define L2_STATE_COUNT (ST_L2_8 + 1) |
1b2b03f8 KK |
91 | |
92 | extern struct layer2 *create_l2(struct mISDNchannel *, u_int, | |
475be4d8 | 93 | u_long, int, int); |
1b2b03f8 KK |
94 | extern int tei_l2(struct layer2 *, u_int, u_long arg); |
95 | ||
96 | ||
97 | /* from tei.c */ | |
475be4d8 JP |
98 | extern int l2_tei(struct layer2 *, u_int, u_long arg); |
99 | extern void TEIrelease(struct layer2 *); | |
100 | extern int TEIInit(u_int *); | |
101 | extern void TEIFree(void); | |
1b2b03f8 KK |
102 | |
103 | #define MAX_L2HEADER_LEN 4 | |
104 | ||
105 | #define RR 0x01 | |
106 | #define RNR 0x05 | |
107 | #define REJ 0x09 | |
108 | #define SABME 0x6f | |
109 | #define SABM 0x2f | |
110 | #define DM 0x0f | |
111 | #define UI 0x03 | |
112 | #define DISC 0x43 | |
113 | #define UA 0x63 | |
114 | #define FRMR 0x87 | |
115 | #define XID 0xaf | |
116 | ||
117 | #define CMD 0 | |
118 | #define RSP 1 | |
119 | ||
120 | #define LC_FLUSH_WAIT 1 | |
121 | ||
122 | #define FLG_LAPB 0 | |
123 | #define FLG_LAPD 1 | |
124 | #define FLG_ORIG 2 | |
125 | #define FLG_MOD128 3 | |
126 | #define FLG_PEND_REL 4 | |
127 | #define FLG_L3_INIT 5 | |
128 | #define FLG_T200_RUN 6 | |
129 | #define FLG_ACK_PEND 7 | |
130 | #define FLG_REJEXC 8 | |
131 | #define FLG_OWN_BUSY 9 | |
132 | #define FLG_PEER_BUSY 10 | |
133 | #define FLG_DCHAN_BUSY 11 | |
134 | #define FLG_L1_ACTIV 12 | |
135 | #define FLG_ESTAB_PEND 13 | |
136 | #define FLG_PTP 14 | |
137 | #define FLG_FIXED_TEI 15 | |
138 | #define FLG_L2BLOCK 16 | |
139 | #define FLG_L1_NOTREADY 17 | |
140 | #define FLG_LAPD_NET 18 |