summaryrefslogtreecommitdiffstats
path: root/qemu/roms/ipxe/src/include/ipxe/eth_slow.h
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/ipxe/src/include/ipxe/eth_slow.h')
-rw-r--r--qemu/roms/ipxe/src/include/ipxe/eth_slow.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/qemu/roms/ipxe/src/include/ipxe/eth_slow.h b/qemu/roms/ipxe/src/include/ipxe/eth_slow.h
new file mode 100644
index 000000000..00509197d
--- /dev/null
+++ b/qemu/roms/ipxe/src/include/ipxe/eth_slow.h
@@ -0,0 +1,255 @@
+#ifndef _IPXE_ETH_SLOW_H
+#define _IPXE_ETH_SLOW_H
+
+/** @file
+ *
+ * Ethernet slow protocols
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+/** 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 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 */