⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 llc_frame.h

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 H
字号:
/* if_ether.h needed for definition of ETH_DATA_LEN and ETH_ALEN */#include "linux/if_ether.h"/* frame layout based on par3.2 "LLC PDU format" */typedef union {			/* pdu layout from pages 40 & 44 */    struct {			/* general header, all pdu types */	unsigned dsap : 8;	/* dest service access point */	unsigned ssap : 8;	/* source service access point */	unsigned f1 : 1;	/* I- U- or S- format id bits */	unsigned f2 : 1;	unsigned : 6;	unsigned : 8;   } pdu_hdr;   struct {        char dummy1[2];   	/* dsap + ssap */	char byte1;	char byte2;   } pdu_cntl;			/* unformatted control bytes */   struct {			/* header of an Information pdu */	unsigned char dummy2[2];	unsigned : 1;	unsigned ns : 7;	unsigned i_pflag : 1;   /* poll/final bit */	unsigned nr : 7;	/* N(R)  */		unsigned char is_info[ ETH_DATA_LEN ];   }  i_hdr;   struct {			/* header of a Supervisory pdu */ 	unsigned char dummy3[2];	unsigned : 2;	unsigned ss : 2;	/* supervisory function bits */	unsigned : 4;	unsigned s_pflag : 1;   /* poll/final bit  */	unsigned nr : 7;	/* N(R)  */   } s_hdr;/* when accessing the P/F bit or the N(R) field there's no need to distinguish   I pdus from S pdus i_pflag and s_pflag / i_nr and s_nr map to the same   physical location. */    struct {			/* header of an Unnumbered pdu */	unsigned char dummy4[2];	unsigned : 2;	unsigned mm1 : 2;	/* modifier function part1 */	unsigned u_pflag : 1;    /* P/F for U- pdus */	unsigned mm2 : 3;	/* modifier function part2 */	unsigned char u_info[ ETH_DATA_LEN-1];   } u_hdr;   struct {			/* mm field in an Unnumbered pdu */	unsigned char dummy5[2];	unsigned : 2;	unsigned mm : 6;	/* must be masked to get ridd of P/F !  */   } u_mm;   	 } frame_type, *frameptr;/* frame format test macros: */#define IS_UFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & ( (fr)->pdu_hdr.f2) )#define IS_IFRAME( fr ) ( !( (fr)->pdu_hdr.f1) )#define IS_SFRAME( fr ) ( ( (fr)->pdu_hdr.f1) & !( (fr)->pdu_hdr.f2) )#define IS_RSP( fr ) ( fr->pdu_hdr.ssap & 0x01 )/* The transition table, the _encode tables and some tests in the   source code depend on the numeric order of these values.   Think twice before changing. *//* frame names for TYPE 2 operation: */#define I_CMD		0#define RR_CMD		1#define RNR_CMD		2#define REJ_CMD		3#define DISC_CMD	4#define SABME_CMD	5#define I_RSP		6#define RR_RSP		7#define RNR_RSP		8#define REJ_RSP		9#define UA_RSP		10#define DM_RSP		11#define FRMR_RSP	12/* junk frame name: */#define BAD_FRAME	13#define NO_FRAME	13/* frame names for TYPE 1 operation: */#define UI_CMD		14#define XID_CMD		15#define TEST_CMD	16#define XID_RSP		17#define TEST_RSP	18

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -