/* * Layer 2 defines * * Copyright 2008 by Karsten Keil * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include #include #include "fsm.h" #define MAX_WINDOW 8 struct manager { struct mISDNchannel ch; struct mISDNchannel bcast; u_long options; struct list_head layer2; rwlock_t lock; struct FsmInst deact; struct FsmTimer datimer; struct sk_buff_head sendq; struct mISDNchannel *up; u_int nextid; u_int lastid; }; struct teimgr { int ri; int rcnt; struct FsmInst tei_m; struct FsmTimer timer; int tval, nval; struct layer2 *l2; struct manager *mgr; }; struct laddr { u_char A; u_char B; }; struct layer2 { struct list_head list; struct mISDNchannel ch; u_long flag; int id; struct mISDNchannel *up; signed char sapi; signed char tei; struct laddr addr; u_int maxlen; struct teimgr *tm; u_int vs, va, vr; int rc; u_int window; u_int sow; struct FsmInst l2m; struct FsmTimer t200, t203; int T200, N200, T203; u_int next_id; u_int down_id; struct sk_buff *windowar[MAX_WINDOW]; struct sk_buff_head i_queue; struct sk_buff_head ui_queue; struct sk_buff_head down_queue; struct sk_buff_head tmp_queue; }; enum { ST_L2_1, ST_L2_2, ST_L2_3, ST_L2_4, ST_L2_5, ST_L2_6, ST_L2_7, ST_L2_8, }; #define L2_STATE_COUNT (ST_L2_8 + 1) extern struct layer2 *create_l2(struct mISDNchannel *, u_int, u_long, int, int); extern int tei_l2(struct layer2 *, u_int, u_long arg); /* from tei.c */ extern int l2_tei(struct layer2 *, u_int, u_long arg); extern void TEIrelease(struct layer2 *); extern int TEIInit(u_int *); extern void TEIFree(void); #define MAX_L2HEADER_LEN 4 #define RR 0x01 #define RNR 0x05 #define REJ 0x09 #define SABME 0x6f #define SABM 0x2f #define DM 0x0f #define UI 0x03 #define DISC 0x43 #define UA 0x63 #define FRMR 0x87 #define XID 0xaf #define CMD 0 #define RSP 1 #define LC_FLUSH_WAIT 1 #define FLG_LAPB 0 #define FLG_LAPD 1 #define FLG_ORIG 2 #define FLG_MOD128 3 #define FLG_PEND_REL 4 #define FLG_L3_INIT 5 #define FLG_T200_RUN 6 #define FLG_ACK_PEND 7 #define FLG_REJEXC 8 #define FLG_OWN_BUSY 9 #define FLG_PEER_BUSY 10 #define FLG_DCHAN_BUSY 11 #define FLG_L1_ACTIV 12 #define FLG_ESTAB_PEND 13 #define FLG_PTP 14 #define FLG_FIXED_TEI 15 #define FLG_L2BLOCK 16 #define FLG_L1_NOTREADY 17 #define FLG_LAPD_NET 18