1
2
3#include "linux/if_ether.h"
4
5
6
7typedef union {
8 struct {
9 unsigned dsap : 8;
10 unsigned ssap : 8;
11 unsigned f1 : 1;
12 unsigned f2 : 1;
13 unsigned : 6;
14 unsigned : 8;
15 } pdu_hdr;
16 struct {
17 char dummy1[2];
18 char byte1;
19 char byte2;
20 } pdu_cntl;
21 struct {
22 unsigned char dummy2[2];
23 unsigned : 1;
24 unsigned ns : 7;
25 unsigned i_pflag : 1;
26 unsigned nr : 7;
27 unsigned char is_info[ ETH_DATA_LEN ];
28 } i_hdr;
29 struct {
30 unsigned char dummy3[2];
31 unsigned : 2;
32 unsigned ss : 2;
33 unsigned : 4;
34 unsigned s_pflag : 1;
35 unsigned nr : 7;
36 } s_hdr;
37
38
39
40
41
42 struct {
43 unsigned char dummy4[2];
44 unsigned : 2;
45 unsigned mm1 : 2;
46 unsigned u_pflag : 1;
47 unsigned mm2 : 3;
48 unsigned char u_info[ ETH_DATA_LEN-1];
49 } u_hdr;
50 struct {
51 unsigned char dummy5[2];
52 unsigned : 2;
53 unsigned mm : 6;
54 } u_mm;
55
56} frame_type, *frameptr;
57
58
59
60#define IS_UFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & ( (fr)->pdu_hdr.f2) )
61
62#define IS_IFRAME( fr ) ( !( (fr)->pdu_hdr.f1) )
63
64#define IS_SFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & !( (fr)->pdu_hdr.f2) )
65
66#define IS_RSP( fr ) ( fr->pdu_hdr.ssap & 0x01 )
67
68
69
70
71
72
73
74
75#define I_CMD 0
76#define RR_CMD 1
77#define RNR_CMD 2
78#define REJ_CMD 3
79#define DISC_CMD 4
80#define SABME_CMD 5
81#define I_RSP 6
82#define RR_RSP 7
83#define RNR_RSP 8
84#define REJ_RSP 9
85#define UA_RSP 10
86#define DM_RSP 11
87#define FRMR_RSP 12
88
89
90#define BAD_FRAME 13
91#define NO_FRAME 13
92
93
94#define UI_CMD 14
95#define XID_CMD 15
96#define TEST_CMD 16
97#define XID_RSP 17
98#define TEST_RSP 18
99