| #ifndef _IPXE_STP_H | |
| #define _IPXE_STP_H | |
| /** @file | |
| * | |
| * Spanning Tree Protocol (STP) | |
| * | |
| */ | |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); | |
| FILE_SECBOOT ( PERMITTED ); | |
| #include <stdint.h> | |
| #include <ipxe/if_ether.h> | |
| /** "Protocol" value for STP | |
| * | |
| * This is the concatenated {DSAP,SSAP} value used internally by iPXE | |
| * as the network-layer protocol for LLC frames. | |
| */ | |
| #define ETH_P_STP 0x4242 | |
| /** A switch identifier */ | |
| struct stp_switch { | |
| /** Priotity */ | |
| uint16_t priority; | |
| /** MAC address */ | |
| uint8_t mac[ETH_ALEN]; | |
| } __attribute__ (( packed )); | |
| /** A Spanning Tree bridge protocol data unit */ | |
| struct stp_bpdu { | |
| /** LLC DSAP */ | |
| uint8_t dsap; | |
| /** LLC SSAP */ | |
| uint8_t ssap; | |
| /** LLC control field */ | |
| uint8_t control; | |
| /** Protocol ID */ | |
| uint16_t protocol; | |
| /** Protocol version */ | |
| uint8_t version; | |
| /** Message type */ | |
| uint8_t type; | |
| /** Flags */ | |
| uint8_t flags; | |
| /** Root switch */ | |
| struct stp_switch root; | |
| /** Root path cost */ | |
| uint32_t cost; | |
| /** Sender switch */ | |
| struct stp_switch sender; | |
| /** Port */ | |
| uint16_t port; | |
| /** Message age */ | |
| uint16_t age; | |
| /** Maximum age */ | |
| uint16_t max; | |
| /** Hello time */ | |
| uint16_t hello; | |
| /** Forward delay */ | |
| uint16_t delay; | |
| } __attribute__ (( packed )); | |
| /** Spanning Tree protocol ID */ | |
| #define STP_PROTOCOL 0x0000 | |
| /** Rapid Spanning Tree protocol version */ | |
| #define STP_VERSION_RSTP 0x02 | |
| /** Rapid Spanning Tree bridge PDU type */ | |
| #define STP_TYPE_RSTP 0x02 | |
| /** Port is forwarding */ | |
| #define STP_FL_FORWARDING 0x20 | |
| #endif /* _IPXE_STP_H */ |