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 MAX_L2HEADER_LEN 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