123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- #ifndef _IPXE_ETH_SLOW_H
- #define _IPXE_ETH_SLOW_H
-
- /** @file
- *
- * Ethernet slow protocols
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- /** Slow protocols header */
- struct eth_slow_header {
- /** Slow protocols subtype */
- uint8_t subtype;
- /** Subtype version number */
- uint8_t version;
- } __attribute__ (( packed ));
-
- /** LACP subtype */
- #define ETH_SLOW_SUBTYPE_LACP 1
-
- /** LACP version number */
- #define ETH_SLOW_LACP_VERSION 1
-
- /** Marker subtype */
- #define ETH_SLOW_SUBTYPE_MARKER 2
-
- /** Marker version number */
- #define ETH_SLOW_MARKER_VERSION 1
-
- /** TLV (type, length, value) header */
- struct eth_slow_tlv_header {
- /** Type
- *
- * This is an ETH_SLOW_TLV_XXX constant.
- */
- uint8_t type;
- /** Length
- *
- * The length includes the TLV header (except for a TLV
- * terminator, which has a length of zero).
- */
- uint8_t length;
- } __attribute__ (( packed ));
-
- /** Terminator type */
- #define ETH_SLOW_TLV_TERMINATOR 0
-
- /** Terminator length */
- #define ETH_SLOW_TLV_TERMINATOR_LEN 0
-
- /** LACP actor type */
- #define ETH_SLOW_TLV_LACP_ACTOR 1
-
- /** LACP actor length */
- #define ETH_SLOW_TLV_LACP_ACTOR_LEN \
- ( sizeof ( struct eth_slow_lacp_entity_tlv ) )
-
- /** LACP partner type */
- #define ETH_SLOW_TLV_LACP_PARTNER 2
-
- /** LACP partner length */
- #define ETH_SLOW_TLV_LACP_PARTNER_LEN \
- ( sizeof ( struct eth_slow_lacp_entity_tlv ) )
-
- /** LACP collector type */
- #define ETH_SLOW_TLV_LACP_COLLECTOR 3
-
- /** LACP collector length */
- #define ETH_SLOW_TLV_LACP_COLLECTOR_LEN \
- ( sizeof ( struct eth_slow_lacp_collector_tlv ) )
-
- /** Marker request type */
- #define ETH_SLOW_TLV_MARKER_REQUEST 1
-
- /** Marker request length */
- #define ETH_SLOW_TLV_MARKER_REQUEST_LEN \
- ( sizeof ( struct eth_slow_marker_tlv ) )
-
- /** Marker response type */
- #define ETH_SLOW_TLV_MARKER_RESPONSE 2
-
- /** Marker response length */
- #define ETH_SLOW_TLV_MARKER_RESPONSE_LEN \
- ( sizeof ( struct eth_slow_marker_tlv ) )
-
- /** Terminator TLV */
- struct eth_slow_terminator_tlv {
- /** TLV header */
- struct eth_slow_tlv_header tlv;
- } __attribute__ (( packed ));
-
- /** LACP entity (actor or partner) TLV */
- struct eth_slow_lacp_entity_tlv {
- /** TLV header */
- struct eth_slow_tlv_header tlv;
- /** System priority
- *
- * Used to determine the order in which ports are selected for
- * aggregation.
- */
- uint16_t system_priority;
- /** System identifier
- *
- * Used to uniquely identify the system (i.e. the entity with
- * potentially multiple ports).
- */
- uint8_t system[ETH_ALEN];
- /** Key
- *
- * Used to uniquely identify a group of aggregatable ports
- * within a system.
- */
- uint16_t key;
- /** Port priority
- *
- * Used to determine the order in which ports are selected for
- * aggregation.
- */
- uint16_t port_priority;
- /** Port identifier
- *
- * Used to uniquely identify a port within a system.
- */
- uint16_t port;
- /** State
- *
- * This is the bitwise OR of zero or more LACP_STATE_XXX
- * constants.
- */
- uint8_t state;
- /** Reserved */
- uint8_t reserved[3];
- } __attribute__ (( packed ));
-
- /** Maximum system priority */
- #define LACP_SYSTEM_PRIORITY_MAX 0xffff
-
- /** Maximum port priority */
- #define LACP_PORT_PRIORITY_MAX 0xff
-
- /** LACP entity is active
- *
- * Represented by the state character "A"/"a"
- */
- #define LACP_STATE_ACTIVE 0x01
-
- /** LACP timeout is short
- *
- * Short timeout is one second, long timeout is 30s
- *
- * Represented by the state character "F"/"f"
- */
- #define LACP_STATE_FAST 0x02
-
- /** LACP link is aggregateable
- *
- * Represented by the state characters "G"/"g"
- */
- #define LACP_STATE_AGGREGATABLE 0x04
-
- /** LACP link is in synchronisation
- *
- * Represented by the state characters "S"/"s"
- */
- #define LACP_STATE_IN_SYNC 0x08
-
- /** LACP link is collecting (receiving)
- *
- * Represented by the state characters "C"/"c"
- */
- #define LACP_STATE_COLLECTING 0x10
-
- /** LACP link is distributing (transmitting)
- *
- * Represented by the state characters "D"/"d"
- */
- #define LACP_STATE_DISTRIBUTING 0x20
-
- /** LACP entity is using defaulted partner information
- *
- * Represented by the state characters "L"/"l"
- */
- #define LACP_STATE_DEFAULTED 0x40
-
- /** LACP entity receive state machine is in EXPIRED
- *
- * Represented by the state characters "X"/"x"
- */
- #define LACP_STATE_EXPIRED 0x80
-
- /** LACP fast interval (1 second) */
- #define LACP_INTERVAL_FAST 1
-
- /** LACP slow interval (30 seconds) */
- #define LACP_INTERVAL_SLOW 30
-
- /** LACP collector TLV */
- struct eth_slow_lacp_collector_tlv {
- /** TLV header */
- struct eth_slow_tlv_header tlv;
- /** Maximum delay (in 10us increments) */
- uint16_t max_delay;
- /** Reserved */
- uint8_t reserved[12];
- } __attribute__ (( packed ));
-
- /** Marker TLV */
- struct eth_slow_marker_tlv {
- /** TLV header */
- struct eth_slow_tlv_header tlv;
- /** Requester port */
- uint16_t port;
- /** Requester system */
- uint8_t system[ETH_ALEN];
- /** Requester transaction ID */
- uint32_t xact;
- /** Padding */
- uint16_t pad;
- } __attribute__ (( packed ));
-
- /** LACP packet */
- struct eth_slow_lacp {
- /** Slow protocols header */
- struct eth_slow_header header;
- /** Actor information */
- struct eth_slow_lacp_entity_tlv actor;
- /** Partner information */
- struct eth_slow_lacp_entity_tlv partner;
- /** Collector information */
- struct eth_slow_lacp_collector_tlv collector;
- /** Terminator */
- struct eth_slow_terminator_tlv terminator;
- /** Reserved */
- uint8_t reserved[50];
- } __attribute__ (( packed ));
-
- /** Marker packet */
- struct eth_slow_marker {
- /** Slow protocols header */
- struct eth_slow_header header;
- /** Marker information */
- struct eth_slow_marker_tlv marker;
- /** Terminator */
- struct eth_slow_terminator_tlv terminator;
- /** Reserved */
- uint8_t reserved[90];
- } __attribute__ (( packed ));
-
- /** Slow protocols packet */
- union eth_slow_packet {
- /** Slow protocols header */
- struct eth_slow_header header;
- /** LACP packet */
- struct eth_slow_lacp lacp;
- /** Marker packet */
- struct eth_slow_marker marker;
- } __attribute__ (( packed ));
-
- #endif /* _IPXE_ETH_SLOW_H */
|