if_fddi.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /*
  2. * INET An implementation of the TCP/IP protocol suite for the LINUX
  3. * operating system. INET is implemented using the BSD Socket
  4. * interface as the means of communication with the user level.
  5. *
  6. * Global definitions for the ANSI FDDI interface.
  7. *
  8. * Version: @(#)if_fddi.h 1.0.2 Sep 29 2004
  9. *
  10. * Author: Lawrence V. Stefani, <stefani@lkg.dec.com>
  11. *
  12. * if_fddi.h is based on previous if_ether.h and if_tr.h work by
  13. * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  14. * Donald Becker, <becker@super.org>
  15. * Alan Cox, <alan@redhat.com>
  16. * Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
  17. * Peter De Schrijver, <stud11@cc4.kuleuven.ac.be>
  18. *
  19. * This program is free software; you can redistribute it and/or
  20. * modify it under the terms of the GNU General Public License
  21. * as published by the Free Software Foundation; either version
  22. * 2 of the License, or (at your option) any later version.
  23. */
  24. #ifndef _LINUX_IF_FDDI_H
  25. #define _LINUX_IF_FDDI_H
  26. /*
  27. * Define max and min legal sizes. The frame sizes do not include
  28. * 4 byte FCS/CRC (frame check sequence).
  29. */
  30. #define FDDI_K_ALEN 6 /* Octets in one FDDI address */
  31. #define FDDI_K_8022_HLEN 16 /* Total octets in 802.2 header */
  32. #define FDDI_K_SNAP_HLEN 21 /* Total octets in 802.2 SNAP header */
  33. #define FDDI_K_8022_ZLEN 16 /* Min octets in 802.2 frame sans FCS */
  34. #define FDDI_K_SNAP_ZLEN 21 /* Min octets in 802.2 SNAP frame sans FCS */
  35. #define FDDI_K_8022_DLEN 4475 /* Max octets in 802.2 payload */
  36. #define FDDI_K_SNAP_DLEN 4470 /* Max octets in 802.2 SNAP payload */
  37. #define FDDI_K_LLC_ZLEN 13 /* Min octets in LLC frame sans FCS */
  38. #define FDDI_K_LLC_LEN 4491 /* Max octets in LLC frame sans FCS */
  39. /* Define FDDI Frame Control (FC) Byte values */
  40. #define FDDI_FC_K_VOID 0x00
  41. #define FDDI_FC_K_NON_RESTRICTED_TOKEN 0x80
  42. #define FDDI_FC_K_RESTRICTED_TOKEN 0xC0
  43. #define FDDI_FC_K_SMT_MIN 0x41
  44. #define FDDI_FC_K_SMT_MAX 0x4F
  45. #define FDDI_FC_K_MAC_MIN 0xC1
  46. #define FDDI_FC_K_MAC_MAX 0xCF
  47. #define FDDI_FC_K_ASYNC_LLC_MIN 0x50
  48. #define FDDI_FC_K_ASYNC_LLC_DEF 0x54
  49. #define FDDI_FC_K_ASYNC_LLC_MAX 0x5F
  50. #define FDDI_FC_K_SYNC_LLC_MIN 0xD0
  51. #define FDDI_FC_K_SYNC_LLC_MAX 0xD7
  52. #define FDDI_FC_K_IMPLEMENTOR_MIN 0x60
  53. #define FDDI_FC_K_IMPLEMENTOR_MAX 0x6F
  54. #define FDDI_FC_K_RESERVED_MIN 0x70
  55. #define FDDI_FC_K_RESERVED_MAX 0x7F
  56. /* Define LLC and SNAP constants */
  57. #define FDDI_EXTENDED_SAP 0xAA
  58. #define FDDI_UI_CMD 0x03
  59. /* Define 802.2 Type 1 header */
  60. struct fddi_8022_1_hdr
  61. {
  62. __u8 dsap; /* destination service access point */
  63. __u8 ssap; /* source service access point */
  64. __u8 ctrl; /* control byte #1 */
  65. } __attribute__ ((packed));
  66. /* Define 802.2 Type 2 header */
  67. struct fddi_8022_2_hdr
  68. {
  69. __u8 dsap; /* destination service access point */
  70. __u8 ssap; /* source service access point */
  71. __u8 ctrl_1; /* control byte #1 */
  72. __u8 ctrl_2; /* control byte #2 */
  73. } __attribute__ ((packed));
  74. /* Define 802.2 SNAP header */
  75. #define FDDI_K_OUI_LEN 3
  76. struct fddi_snap_hdr
  77. {
  78. __u8 dsap; /* always 0xAA */
  79. __u8 ssap; /* always 0xAA */
  80. __u8 ctrl; /* always 0x03 */
  81. __u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */
  82. __be16 ethertype; /* packet type ID field */
  83. } __attribute__ ((packed));
  84. /* Define FDDI LLC frame header */
  85. struct fddihdr
  86. {
  87. __u8 fc; /* frame control */
  88. __u8 daddr[FDDI_K_ALEN]; /* destination address */
  89. __u8 saddr[FDDI_K_ALEN]; /* source address */
  90. union
  91. {
  92. struct fddi_8022_1_hdr llc_8022_1;
  93. struct fddi_8022_2_hdr llc_8022_2;
  94. struct fddi_snap_hdr llc_snap;
  95. } hdr;
  96. } __attribute__ ((packed));
  97. #ifdef __KERNEL__
  98. #include <linux/netdevice.h>
  99. /* Define FDDI statistics structure */
  100. struct fddi_statistics {
  101. /* Generic statistics. */
  102. struct net_device_stats gen;
  103. /* Detailed FDDI statistics. Adopted from RFC 1512 */
  104. __u8 smt_station_id[8];
  105. __u32 smt_op_version_id;
  106. __u32 smt_hi_version_id;
  107. __u32 smt_lo_version_id;
  108. __u8 smt_user_data[32];
  109. __u32 smt_mib_version_id;
  110. __u32 smt_mac_cts;
  111. __u32 smt_non_master_cts;
  112. __u32 smt_master_cts;
  113. __u32 smt_available_paths;
  114. __u32 smt_config_capabilities;
  115. __u32 smt_config_policy;
  116. __u32 smt_connection_policy;
  117. __u32 smt_t_notify;
  118. __u32 smt_stat_rpt_policy;
  119. __u32 smt_trace_max_expiration;
  120. __u32 smt_bypass_present;
  121. __u32 smt_ecm_state;
  122. __u32 smt_cf_state;
  123. __u32 smt_remote_disconnect_flag;
  124. __u32 smt_station_status;
  125. __u32 smt_peer_wrap_flag;
  126. __u32 smt_time_stamp;
  127. __u32 smt_transition_time_stamp;
  128. __u32 mac_frame_status_functions;
  129. __u32 mac_t_max_capability;
  130. __u32 mac_tvx_capability;
  131. __u32 mac_available_paths;
  132. __u32 mac_current_path;
  133. __u8 mac_upstream_nbr[FDDI_K_ALEN];
  134. __u8 mac_downstream_nbr[FDDI_K_ALEN];
  135. __u8 mac_old_upstream_nbr[FDDI_K_ALEN];
  136. __u8 mac_old_downstream_nbr[FDDI_K_ALEN];
  137. __u32 mac_dup_address_test;
  138. __u32 mac_requested_paths;
  139. __u32 mac_downstream_port_type;
  140. __u8 mac_smt_address[FDDI_K_ALEN];
  141. __u32 mac_t_req;
  142. __u32 mac_t_neg;
  143. __u32 mac_t_max;
  144. __u32 mac_tvx_value;
  145. __u32 mac_frame_cts;
  146. __u32 mac_copied_cts;
  147. __u32 mac_transmit_cts;
  148. __u32 mac_error_cts;
  149. __u32 mac_lost_cts;
  150. __u32 mac_frame_error_threshold;
  151. __u32 mac_frame_error_ratio;
  152. __u32 mac_rmt_state;
  153. __u32 mac_da_flag;
  154. __u32 mac_una_da_flag;
  155. __u32 mac_frame_error_flag;
  156. __u32 mac_ma_unitdata_available;
  157. __u32 mac_hardware_present;
  158. __u32 mac_ma_unitdata_enable;
  159. __u32 path_tvx_lower_bound;
  160. __u32 path_t_max_lower_bound;
  161. __u32 path_max_t_req;
  162. __u32 path_configuration[8];
  163. __u32 port_my_type[2];
  164. __u32 port_neighbor_type[2];
  165. __u32 port_connection_policies[2];
  166. __u32 port_mac_indicated[2];
  167. __u32 port_current_path[2];
  168. __u8 port_requested_paths[3*2];
  169. __u32 port_mac_placement[2];
  170. __u32 port_available_paths[2];
  171. __u32 port_pmd_class[2];
  172. __u32 port_connection_capabilities[2];
  173. __u32 port_bs_flag[2];
  174. __u32 port_lct_fail_cts[2];
  175. __u32 port_ler_estimate[2];
  176. __u32 port_lem_reject_cts[2];
  177. __u32 port_lem_cts[2];
  178. __u32 port_ler_cutoff[2];
  179. __u32 port_ler_alarm[2];
  180. __u32 port_connect_state[2];
  181. __u32 port_pcm_state[2];
  182. __u32 port_pc_withhold[2];
  183. __u32 port_ler_flag[2];
  184. __u32 port_hardware_present[2];
  185. };
  186. #endif /* __KERNEL__ */
  187. #endif /* _LINUX_IF_FDDI_H */