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