llc.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #include <linux/skbuff.h>
  2. #define LLC_MODULE
  3. typedef struct llc_struct llc;
  4. typedef struct llc_struct *llcptr;
  5. /*
  6.  * LLC private data area structure.
  7.  */
  8. struct llc_struct
  9. char eye[4]; /* To recognize llc area in dump */
  10. int retry_count; /* LLC link state variables */
  11. unsigned char name[9]; /* name of this llc instance */
  12. unsigned char s_flag;
  13. unsigned char p_flag;
  14. unsigned char f_flag;
  15. unsigned char data_flag;
  16. unsigned char cause_flag;
  17. unsigned char vs; /* Send state variable */
  18. unsigned char vr; /* Receive state variable */
  19. unsigned char remote_busy;
  20. unsigned char state; /* Current state of type2 llc procedure */
  21. int n1; /* Maximum number of bytes in I pdu 7.8.2 */
  22. int n2; /* Naximum number of retransmissions 7.8.2 */
  23. unsigned char k; /* Transmit window size 7.8.4, tw in IBM doc*/ 
  24. unsigned char rw; /* Receive window size */
  25. struct 
  26. {     
  27. /*
  28.  * FRMR_RSP info field structure: 5.4.2.3.5 p55
  29.  */
  30. unsigned char cntl1;
  31. unsigned char cntl2;
  32. unsigned char vs;
  33. unsigned char vr_cr;
  34. unsigned char xxyz;
  35. } frmr_info_fld;
  36. /*
  37.  * Timers in 7.8.1 page 78 
  38.  */
  39. #define P_TIMER         0
  40. #define REJ_TIMER       1
  41. #define ACK_TIMER       2 
  42. #define BUSY_TIMER      3
  43. unsigned long timer_expire_time[4];
  44. unsigned char timer_state[4]; /* The state of each timer */
  45. #define TIMER_IDLE      0
  46. #define TIMER_RUNNING   1
  47. #define TIMER_EXPIRED   2
  48. unsigned long timer_interval[4]; 
  49. struct timer_list tl[4];
  50. /* 
  51.  * Client entry point, called by the LLC.
  52.  */
  53.  
  54. void (*llc_event)(struct llc_struct *);
  55. /*
  56.  * Mux and Demux variables
  57.  */
  58.  
  59. char * client_data; /* Pointer to clients context */
  60. unsigned char local_sap;
  61. unsigned char remote_sap ;
  62. char remote_mac[MAX_ADDR_LEN];  /* MAC address of remote session partner */ 
  63. struct net_device *dev; /* Device we are attached to */
  64.      
  65. unsigned char llc_mode; /* See doc 7.1 on p70 */
  66. #define MODE_ADM 1
  67. #define MODE_ABM 2
  68. int llc_callbacks; /* Pending callbacks */
  69. #define LLC_CONN_INDICATION 1 /* We have to ensure the names don't */
  70. #define LLC_CONN_CONFIRM 2 /* mix up with the 802 state table */
  71. #define LLC_DATA_INDIC 4
  72. #define LLC_DISC_INDICATION 8
  73. #define LLC_RESET_INDIC_LOC 16
  74. #define LLC_RESET_INDIC_REM 32
  75. #define LLC_RST_CONFIRM 64
  76. #define LLC_FRMR_RECV 128
  77. #define LLC_FRMR_SENT 256
  78. #define LLC_REMOTE_BUSY 512
  79. #define LLC_REMOTE_NOTBUSY 1024
  80. #define LLC_TEST_INDICATION 2048
  81. #define LLC_XID_INDICATION 4096
  82. #define LLC_UI_DATA 8192
  83. struct sk_buff *inc_skb; /* Saved data buffer for indications */
  84. struct sk_buff_head rtq; /* Retransmit queue */
  85. struct sk_buff_head atq; /* Await transit queue */
  86.       
  87. unsigned char xid_count;
  88. struct llc_struct *nextllc; /* ptr to next llc struct in proto chain */
  89. };
  90. #define ADD_TO_RTQ(skb) skb_queue_tail(&lp->rtq,skb)
  91. #define ADD_TO_ATQ(skb) skb_queue_tail(&lp->atq,skb)
  92. void  llc_cancel_timers(llcptr lp);
  93. int llc_decode_frametype(frameptr fr);
  94. llcptr  llc_find(void);
  95. int llc_free_acknowledged_skbs(llcptr lp, unsigned char ack);
  96. void llc_handle_xid_indication( char *chsp, short int ll, char *xid_data);
  97. void llc_interpret_pseudo_code(llcptr lp, int pc_label, struct sk_buff *skb, char type);
  98. void llc_add_to_queue(struct sk_buff *skb, struct sk_buff **f, struct sk_buff **b);
  99. void llc_process_otype2_frame(llcptr lp, struct sk_buff *skb, char type);
  100. struct sk_buff *llc_pull_from_atq(llcptr lp); 
  101. int  llc_resend_ipdu(llcptr lp, unsigned char ack_nr, unsigned char type, char p);
  102. void  llc_sendpdu(llcptr lp, char type, char pf, int data_len, char *pdu_data);
  103. void  llc_sendipdu(llcptr lp, char type, char pf, struct sk_buff *skb);
  104. void llc_start_timer(llcptr lp, int t);
  105. void llc_stop_timer(llcptr lp, int t);
  106. void llc_timer_expired(llcptr lp, int t);
  107. int llc_validate_seq_nos(llcptr lp, frameptr fr);
  108. int llc_data_request(llcptr lp, struct sk_buff *skb);
  109. void llc_unit_data_request(llcptr lp, int ll, char * data);
  110. void llc_disconnect_request(llcptr lp);
  111. void llc_connect_request(llcptr lp);
  112. void llc_xid_request(llcptr lp, char opt, int data_len, char *pdu_data);
  113. void llc_test_request(llcptr lp, int data_len, char *pdu_data);
  114. int register_cl2llc_client(llcptr llc, const char *device, void (*ops)(llcptr), u8 *rmac, u8 ssap, u8 dsap);
  115. void unregister_cl2llc_client(llcptr lp);
  116. int  llc_mac_data_indicate(llcptr lp, struct sk_buff *skb );