llc.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
- #include <linux/skbuff.h>
- #define LLC_MODULE
- typedef struct llc_struct llc;
- typedef struct llc_struct *llcptr;
- /*
- * LLC private data area structure.
- */
- struct llc_struct
- {
- char eye[4]; /* To recognize llc area in dump */
- int retry_count; /* LLC link state variables */
- unsigned char name[9]; /* name of this llc instance */
- unsigned char s_flag;
- unsigned char p_flag;
- unsigned char f_flag;
- unsigned char data_flag;
- unsigned char cause_flag;
- unsigned char vs; /* Send state variable */
- unsigned char vr; /* Receive state variable */
- unsigned char remote_busy;
- unsigned char state; /* Current state of type2 llc procedure */
- int n1; /* Maximum number of bytes in I pdu 7.8.2 */
- int n2; /* Naximum number of retransmissions 7.8.2 */
- unsigned char k; /* Transmit window size 7.8.4, tw in IBM doc*/
- unsigned char rw; /* Receive window size */
- struct
- {
- /*
- * FRMR_RSP info field structure: 5.4.2.3.5 p55
- */
- unsigned char cntl1;
- unsigned char cntl2;
- unsigned char vs;
- unsigned char vr_cr;
- unsigned char xxyz;
- } frmr_info_fld;
- /*
- * Timers in 7.8.1 page 78
- */
- #define P_TIMER 0
- #define REJ_TIMER 1
- #define ACK_TIMER 2
- #define BUSY_TIMER 3
- unsigned long timer_expire_time[4];
- unsigned char timer_state[4]; /* The state of each timer */
- #define TIMER_IDLE 0
- #define TIMER_RUNNING 1
- #define TIMER_EXPIRED 2
- unsigned long timer_interval[4];
- struct timer_list tl[4];
- /*
- * Client entry point, called by the LLC.
- */
-
- void (*llc_event)(struct llc_struct *);
-
- /*
- * Mux and Demux variables
- */
-
- char * client_data; /* Pointer to clients context */
- unsigned char local_sap;
- unsigned char remote_sap ;
- char remote_mac[MAX_ADDR_LEN]; /* MAC address of remote session partner */
- struct net_device *dev; /* Device we are attached to */
-
- unsigned char llc_mode; /* See doc 7.1 on p70 */
- #define MODE_ADM 1
- #define MODE_ABM 2
- int llc_callbacks; /* Pending callbacks */
- #define LLC_CONN_INDICATION 1 /* We have to ensure the names don't */
- #define LLC_CONN_CONFIRM 2 /* mix up with the 802 state table */
- #define LLC_DATA_INDIC 4
- #define LLC_DISC_INDICATION 8
- #define LLC_RESET_INDIC_LOC 16
- #define LLC_RESET_INDIC_REM 32
- #define LLC_RST_CONFIRM 64
- #define LLC_FRMR_RECV 128
- #define LLC_FRMR_SENT 256
- #define LLC_REMOTE_BUSY 512
- #define LLC_REMOTE_NOTBUSY 1024
- #define LLC_TEST_INDICATION 2048
- #define LLC_XID_INDICATION 4096
- #define LLC_UI_DATA 8192
- struct sk_buff *inc_skb; /* Saved data buffer for indications */
-
- struct sk_buff_head rtq; /* Retransmit queue */
- struct sk_buff_head atq; /* Await transit queue */
-
- unsigned char xid_count;
- struct llc_struct *nextllc; /* ptr to next llc struct in proto chain */
- };
- #define ADD_TO_RTQ(skb) skb_queue_tail(&lp->rtq,skb)
- #define ADD_TO_ATQ(skb) skb_queue_tail(&lp->atq,skb)
- void llc_cancel_timers(llcptr lp);
- int llc_decode_frametype(frameptr fr);
- llcptr llc_find(void);
- int llc_free_acknowledged_skbs(llcptr lp, unsigned char ack);
- void llc_handle_xid_indication( char *chsp, short int ll, char *xid_data);
- void llc_interpret_pseudo_code(llcptr lp, int pc_label, struct sk_buff *skb, char type);
- void llc_add_to_queue(struct sk_buff *skb, struct sk_buff **f, struct sk_buff **b);
- void llc_process_otype2_frame(llcptr lp, struct sk_buff *skb, char type);
- struct sk_buff *llc_pull_from_atq(llcptr lp);
- int llc_resend_ipdu(llcptr lp, unsigned char ack_nr, unsigned char type, char p);
- void llc_sendpdu(llcptr lp, char type, char pf, int data_len, char *pdu_data);
- void llc_sendipdu(llcptr lp, char type, char pf, struct sk_buff *skb);
- void llc_start_timer(llcptr lp, int t);
- void llc_stop_timer(llcptr lp, int t);
- void llc_timer_expired(llcptr lp, int t);
- int llc_validate_seq_nos(llcptr lp, frameptr fr);
- int llc_data_request(llcptr lp, struct sk_buff *skb);
- void llc_unit_data_request(llcptr lp, int ll, char * data);
- void llc_disconnect_request(llcptr lp);
- void llc_connect_request(llcptr lp);
- void llc_xid_request(llcptr lp, char opt, int data_len, char *pdu_data);
- void llc_test_request(llcptr lp, int data_len, char *pdu_data);
- int register_cl2llc_client(llcptr llc, const char *device, void (*ops)(llcptr), u8 *rmac, u8 ssap, u8 dsap);
- void unregister_cl2llc_client(llcptr lp);
- int llc_mac_data_indicate(llcptr lp, struct sk_buff *skb );