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
14struct 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
28struct 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
38struct laddr {
39 u_char A;
40 u_char B;
41};
42
43struct 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
70enum {
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
83extern struct layer2 *create_l2(struct mISDNchannel *, u_int,
84 u_long, int, int);
85extern int tei_l2(struct layer2 *, u_int, u_long arg);
86
87
88/* from tei.c */
89extern int l2_tei(struct layer2 *, u_int, u_long arg);
90extern void TEIrelease(struct layer2 *);
91extern int TEIInit(u_int *);
92extern 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

source code of linux/drivers/isdn/mISDN/layer2.h