llc_conn.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef LLC_CONN_H
  2. #define LLC_CONN_H
  3. /*
  4. * Copyright (c) 1997 by Procom Technology, Inc.
  5. * 2001, 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  6. *
  7. * This program can be redistributed or modified under the terms of the
  8. * GNU General Public License as published by the Free Software Foundation.
  9. * This program is distributed without any warranty or implied warranty
  10. * of merchantability or fitness for a particular purpose.
  11. *
  12. * See the GNU General Public License for more details.
  13. */
  14. #include <linux/timer.h>
  15. #include <net/llc_if.h>
  16. #include <net/sock.h>
  17. #include <linux/llc.h>
  18. #define LLC_EVENT 1
  19. #define LLC_PACKET 2
  20. #define LLC2_P_TIME 2
  21. #define LLC2_ACK_TIME 1
  22. #define LLC2_REJ_TIME 3
  23. #define LLC2_BUSY_TIME 3
  24. struct llc_timer {
  25. struct timer_list timer;
  26. unsigned long expire; /* timer expire time */
  27. };
  28. struct llc_sock {
  29. /* struct sock must be the first member of llc_sock */
  30. struct sock sk;
  31. struct sockaddr_llc addr; /* address sock is bound to */
  32. u8 state; /* state of connection */
  33. struct llc_sap *sap; /* pointer to parent SAP */
  34. struct llc_addr laddr; /* lsap/mac pair */
  35. struct llc_addr daddr; /* dsap/mac pair */
  36. struct net_device *dev; /* device to send to remote */
  37. u32 copied_seq; /* head of yet unread data */
  38. u8 retry_count; /* number of retries */
  39. u8 ack_must_be_send;
  40. u8 first_pdu_Ns;
  41. u8 npta;
  42. struct llc_timer ack_timer;
  43. struct llc_timer pf_cycle_timer;
  44. struct llc_timer rej_sent_timer;
  45. struct llc_timer busy_state_timer; /* ind busy clr at remote LLC */
  46. u8 vS; /* seq# next in-seq I-PDU tx'd*/
  47. u8 vR; /* seq# next in-seq I-PDU rx'd*/
  48. u32 n2; /* max nbr re-tx's for timeout*/
  49. u32 n1; /* max nbr octets in I PDU */
  50. u8 k; /* tx window size; max = 127 */
  51. u8 rw; /* rx window size; max = 127 */
  52. u8 p_flag; /* state flags */
  53. u8 f_flag;
  54. u8 s_flag;
  55. u8 data_flag;
  56. u8 remote_busy_flag;
  57. u8 cause_flag;
  58. struct sk_buff_head pdu_unack_q; /* PUDs sent/waiting ack */
  59. u16 link; /* network layer link number */
  60. u8 X; /* a temporary variable */
  61. u8 ack_pf; /* this flag indicates what is
  62. the P-bit of acknowledge */
  63. u8 failed_data_req; /* recognize that already exist a
  64. failed llc_data_req_handler
  65. (tx_buffer_full or unacceptable
  66. state */
  67. u8 dec_step;
  68. u8 inc_cntr;
  69. u8 dec_cntr;
  70. u8 connect_step;
  71. u8 last_nr; /* NR of last pdu received */
  72. u32 rx_pdu_hdr; /* used for saving header of last pdu
  73. received and caused sending FRMR.
  74. Used for resending FRMR */
  75. u32 cmsg_flags;
  76. struct hlist_node dev_hash_node;
  77. };
  78. static inline struct llc_sock *llc_sk(const struct sock *sk)
  79. {
  80. return (struct llc_sock *)sk;
  81. }
  82. static __inline__ void llc_set_backlog_type(struct sk_buff *skb, char type)
  83. {
  84. skb->cb[sizeof(skb->cb) - 1] = type;
  85. }
  86. static __inline__ char llc_backlog_type(struct sk_buff *skb)
  87. {
  88. return skb->cb[sizeof(skb->cb) - 1];
  89. }
  90. extern struct sock *llc_sk_alloc(struct net *net, int family, gfp_t priority,
  91. struct proto *prot);
  92. extern void llc_sk_free(struct sock *sk);
  93. extern void llc_sk_reset(struct sock *sk);
  94. /* Access to a connection */
  95. extern int llc_conn_state_process(struct sock *sk, struct sk_buff *skb);
  96. extern void llc_conn_send_pdu(struct sock *sk, struct sk_buff *skb);
  97. extern void llc_conn_rtn_pdu(struct sock *sk, struct sk_buff *skb);
  98. extern void llc_conn_resend_i_pdu_as_cmd(struct sock *sk, u8 nr,
  99. u8 first_p_bit);
  100. extern void llc_conn_resend_i_pdu_as_rsp(struct sock *sk, u8 nr,
  101. u8 first_f_bit);
  102. extern int llc_conn_remove_acked_pdus(struct sock *conn, u8 nr,
  103. u16 *how_many_unacked);
  104. extern struct sock *llc_lookup_established(struct llc_sap *sap,
  105. struct llc_addr *daddr,
  106. struct llc_addr *laddr);
  107. extern void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk);
  108. extern void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk);
  109. extern u8 llc_data_accept_state(u8 state);
  110. extern void llc_build_offset_table(void);
  111. #endif /* LLC_CONN_H */