RFC 2878

PPP Bridging Control Protocol (BCP)

๐Ÿ“… published July 2000, from ietf

RFC 2878: PPP Bridging Control Protocol (BCP) ๐ŸŽ€

okay bestie, this one is RFC 2878 and it's giving networking nerd couture ๐Ÿ’… It came out in July 2000 as a Standards Track doc from the Network Working Group. The authors are M. Higashiyama (Anritsu) and F. Baker (Cisco) ๐Ÿซถ. It obsoletes RFC 1638, which is the old version that got replaced ๐Ÿ˜ญ It doesn't update anything else.

Here's the standard fine print, because the Internet Society needs it ๐Ÿ’œ This document is an Internet standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements. For the standardization state and status, check the current edition of "Internet Official Protocol Standards" (STD 1). Distribution is unlimited. The copyright belongs to The Internet Society (2000), all rights reserved ๐ŸŒธ

Table of Contents ๐Ÿฆ‹

   1.     Historical Perspective ................................    3
      1.1       Requirements Keywords ...........................    3
   2.     Methods of Bridging ...................................    3
      2.1       Transparent Bridging ............................    3
      2.2       Remote Transparent Bridging .....................    4
      2.3       Source Routing ..................................    5
      2.4       Remote Source Route Bridging ....................    6
      2.5       SR-TB Translational Bridging ....................    7
   3.     Traffic Services ......................................    7
      3.1       LAN Frame Checksum Preservation .................    7
      3.2       Traffic having no LAN Frame Checksum ............    7
      3.3       Tinygram Compression ............................    8
      3.4       Virtual LANs ....................................    8
   4.     A PPP Network Control Protocol for Bridging ...........    9
      4.1       Sending Bridge Frames ...........................   10
         4.1.1  Maximum Receive Unit Considerations .............   11
         4.1.2  Loopback and Link Quality Monitoring ............   11
         4.1.3  Message Sequence ................................   11
         4.1.4  Separation of Spanning Tree Domains .............   12
      4.2       Bridged LAN Traffic in IEEE 802 Untagged Frame ..   12
      4.3       Bridged LAN Traffic in IEEE 802 Tagged Frame ....   16
      4.4       Bridge management protocol data unit ............   21
   5.     BCP Configuration Options .............................   21
      5.1       Bridge-Identification ...........................   22
      5.2       Line-Identification .............................   23
      5.3       MAC-Support .....................................   25
      5.4       Tinygram-Compression ............................   26
      5.5       MAC-Address .....................................   27
      5.6       Spanning Tree Protocol (old formatted) ..........   28
      5.7       IEEE-802-Tagged-Frame ...........................   30
      5.8       Management-Inline ...............................   30
   6.     Changes From RFC 1638 .................................   31
   7.     Security Considerations ...............................   32
   8.     Intellectual Property Notice ..........................   32
   9.     IANA Considerations ...................................   33
   10.    Acknowledgments .......................................   33
   APPENDICES ...................................................   34
      A.     Spanning Tree Bridge PDU (old formatted) ...........   34
      B.     Tinygram-Compression Pseudo-Code ...................   35
   References ...................................................   36
   Authors' Addresses ...........................................   37
   Full Copyright Statement......................................   38

1. Historical Perspective โœจ

okay so there are two basic algorithms floating around the industry for bridging LANs ๐ŸŒˆ The more common one is called "Transparent Bridging", and IEEE 802.1 standardized it for Extended LAN configurations. The other is "Source Route Bridging", which is super prevalent on IEEE 802.5 Token Ring LANs.

The IEEE mashed these two together into one device called a Source Routing Transparent (SRT) bridge, which does Source Route and Transparent bridging at the same time ๐Ÿ”ฅ Transparent and SRT bridges are specified in IEEE standard 802.1D-1998 [8].

Here's the tea ๐Ÿ“ IEEE committee 802.1G is working on remote bridging [2], but neither standard directly defines the mechanisms for actually implementing remote bridging. Technically that's outside the IEEE 802 committee's charter ๐Ÿ™ˆ Still, both 802.1D and 802.1G leave room for it. The implementor can model the line either as a component inside a single MAC Relay Entity, or as the LAN media between two remote bridges.

IEEE 802.1Q [9] came along and augmented the original IEEE 802.1D to support Virtual LAN. Virtual LAN is an integral feature of switched LAN networks, so it's a whole main character moment ๐Ÿ‘‘

1.1 Requirements Keywords

okay the keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, whenever they show up in this document, get interpreted as described in [12] ๐Ÿงš Read them exactly like that, bestie!

2. Methods of Bridging ๐ŸŒธ

2.1. Transparent Bridging

for anyone new to this, let's start with Transparent Bridging ๐Ÿฆ‹ Basically, the bridges in a network work as isolated entities and are mostly unaware of each other's presence.

A Transparent Bridge keeps a Forwarding Database made of records that look like this:

                        {address, interface}

                               or

                      {address, interface, VLAN ID}

It makes these records by saving the Source Address of each LAN transmission it receives, along with the interface identifier for the interface it came in on. Bridges that support Virtual LANs also keep the Virtual LAN ID in their forwarding database ๐Ÿ’… Then it checks whether the Destination Address is in the database. If it is, the bridge either discards the message when the destination and source are on the same interface, or forwards the message to the indicated interface. If the Destination Address isn't in the table, the message gets forwarded to every interface except the one it came in on. And yes, this applies to Broadcast/Multicast frames too ๐Ÿ“ก

The obvious fly in the ointment is that redundant paths in the network cause indeterminate (nay, all too determinate) forwarding behavior ๐Ÿ˜ญ To stop that, a protocol called the Spanning Tree Protocol runs between the bridges to detect redundant paths and logically remove them from the network.

One system gets elected as the "Root", and it periodically emits a message called a Bridge Protocol Data Unit (BPDU) that all of its neighboring bridges hear ๐Ÿซถ Each neighbor modifies the BPDU and passes it on to its own neighbors. This keeps happening until it reaches the leaf LAN segments (where it dies, since there are no more neighbors to pass it along to), or until a bridge with a superior path to the "Root" stops it. In that second case, the interface the BPDU came in on gets ignored. It goes into a Hot Standby status, no traffic gets emitted onto it except the BPDU, and all traffic received from it gets discarded. This stays that way until a topology change forces the network to recalculate โœจ

To set up Virtual LANs across multiple bridges, GVRP (GARP VLAN Registration Protocol) runs between the bridges to swap Virtual LAN information ๐ŸŒˆ GVRP gives bridges a way to dynamically establish and update their knowledge of which Virtual LANs currently have active members.

To cut down on unnecessary multicast flooding, bridges swap group MAC addresses using the GARP Multicast Registration Protocol. GMRP gives bridges a way to know which multicast frames should be forwarded on each port ๐Ÿงš

2.2. Remote Transparent Bridging

there are two basic sorts of bridges ๐Ÿ’– Local Bridges interconnect LANs directly, and Remote Bridges interconnect LANs through an intermediate medium like a leased line. PPP may be used to connect Remote Bridges ๐Ÿ”Œ

The IEEE 802.1G Remote MAC Bridging committee proposed a model of a Remote Bridge where two or more Remote Bridges linked by remote lines are called a Remote Bridge Group. Inside a Group, a Remote Bridge Cluster gets formed dynamically through execution of the spanning tree, as the set of bridges that can pass frames among each other ๐Ÿฆ‹

This model gives the remote lines the basic properties of a LAN, but it doesn't require a one-to-one mapping of lines to virtual LAN segments. For example, picture three interconnected Remote Bridges, A, B and C. The model might look like a virtual LAN segment between A and B and another between B and C. However, if a line exists between Remote Bridges B and C, a frame could actually be sent directly from B to C, as long as it had the external appearance of having travelled through A ๐Ÿ‘€

IEEE 802.1G therefore allows a great deal of implementation freedom for features like route optimization and load balancing, as long as the model is maintained ๐Ÿ’œ

For simplicity, this document discusses Remote Bridging in terms of two Remote Bridges connected by a single line ๐ŸŽ€


to be continued in part 2 ๐Ÿซถโœจ

2.3. Source Routing โœจ

Okay so the IEEE 802.1D Committee has standardized Source Routing for any MAC Type that allows its use ๐Ÿ’… Right now, the MAC Types that support it are FDDI and IEEE 802.5 Token Ring ๐Ÿงš

The IEEE standard only defines Source Routing as a component of an SRT bridge, which is kinda limiting ๐Ÿ™„ But lots of bridges out there can do Source Routing all by themselves ๐Ÿ”ฅ They're most commonly built to follow either the IBM Token-Ring Network Architecture Reference [1] or the Source Routing Appendix of IEEE 802.1D-1998 [8] ๐Ÿ“š

In the Source Routing approach, the originating system is the one in charge of saying which path the message should take ๐Ÿ‘‘ If the message is headed off the local segment, it does this by adding a variable length MAC header extension called the Routing Information Field (RIF) ๐ŸŽ€ The RIF is one 16-bit word of flags and parameters, followed by zero or more segment-and-bridge identifiers. Each bridge along the way checks this source route list to figure out whether it should accept the message and how to forward it ๐Ÿฆ‹

Now, to find the path to a destination, the originating system sends out an Explorer frame ๐Ÿ” An All-Routes Explorer (ARE) frame follows every possible path to a destination. A Spanning Tree Explorer (STE) frame only follows the paths defined by Bridge ports that the Spanning Tree Algorithm has put in Forwarding state ๐ŸŒธ Port states don't apply to ARE or Specifically-Routed Frames, which is a whole vibe ๐Ÿ˜ญ The destination system replies to each copy of an ARE frame with a Specifically-Routed Frame, and it replies to an STE frame with an ARE frame. Either way, the originating station might get multiple replies, and it picks the route it'll use for future Specifically-Routed Frames ๐Ÿ’–

The Source Routing algorithm requires the bridge to be able to identify any interface by its segment-and-bridge identifier ๐Ÿง  When a packet comes in with the RIF present, a boolean in the RIF gets checked to decide whether the segment-and-bridge identifiers are read in the "forward" or "reverse" sense ๐Ÿซถ The bridge then searches for the segment-and-bridge identifier of the interface the packet was received on, and forwards the packet toward the segment identified by the segment-and-bridge identifier that follows it โœจ

GVRP and GMRP are available and effective on Source Routing networks ๐ŸŒˆ

2.4. Remote Source Route Bridging ๐Ÿฆ‹

Honest tea: there is no Remote Source Route Bridge proposal in IEEE 802.1 at this time ๐Ÿซ  Even so, many vendors ship remote Source Routing Bridges anyway ๐Ÿ’…

We let you model the line in one of two ways. Either it's a connection between two halves of a "split" Bridge (the split-bridge model), or it's a LAN segment between two Bridges (the independent-bridge model). With the independent-bridge model, the line needs a LAN Segment ID ๐ŸŽ€

By default, PPP Source Route Bridges use the independent-bridge model. This requirement keeps things interoperable when there's no option negotiation going on ๐Ÿค If you want to use the split-bridge model, a system MUST successfully negotiate the Bridge-Identification Configuration Option. No cap, this one is non-negotiable ๐Ÿšจ

Even though a system doesn't need any option negotiation to use the independent-bridge model, it is strongly recommended that systems using this model negotiate the Line-Identification Configuration Option ๐Ÿ’œ Doing so verifies that the LAN Segment Id assigned to the line is configured correctly โœ…

When two PPP systems use the split-bridge model, the system that transmits an Explorer frame onto the PPP link MUST update the RIF on behalf of both systems ๐Ÿงš The point of this constraint is to keep interoperability solid and keep the bridging algorithm simple ๐Ÿ˜Œ For example, if the receiving system didn't know whether the transmitting system had already updated the RIF, it would have to scan the RIF and decide for itself whether to update it. Letting the transmitting system take on the job means the system receiving the frame from the PPP link can forward it without processing the RIF at all ๐Ÿ™Œ

Given that source routing is configured on a line or a set of lines, the specifics of the link state with respect to STE frames are defined by whichever Spanning Tree Protocol is in use ๐ŸŒณ Choosing the split-bridge or independent-bridge model doesn't affect spanning tree operation. In both cases, the spanning tree protocol runs on the two systems independently ๐Ÿ’–

2.5. SR-TB Translational Bridging ๐Ÿ”

IEEE 802 isn't currently addressing bridges that translate between Transparent Bridging and Source Routing ๐Ÿ™ˆ For the purposes of this standard, a device like that counts as either a Transparent or a Source Routing bridge, and it'll act on the line in one of those two ways, just like it does on the LAN ๐Ÿฆ‹

3. Traffic Services ๐ŸŽ€

Several services are provided for different system types and user configurations ๐Ÿ’… They include LAN Frame Checksum Preservation, LAN Frame Checksum Generation, Tinygram Compression, and the identification of closed sets of LANs โœจ

3.1. LAN Frame Checksum Preservation ๐Ÿ”’

IEEE 802.1 stipulates that the Extended LAN must enjoy the same probability of undetected error that an individual LAN enjoys ๐Ÿ˜ค There's been a lot of debate about the algorithm, but nobody has proposed anything other than having the LAN Frame Checksum that the ultimate receiver gets be the same value the original transmitter calculated ๐Ÿ’ฏ Of course, achieving this means the line protocols have to preserve the LAN Frame Checksum from end to end ๐Ÿงท The protocol is optimized for this approach ๐Ÿ”ฅ

3.2. Traffic having no LAN Frame Checksum ๐Ÿซฅ

Because the protocol is optimized for LAN Frame Checksum preservation, two questions come up: "What is the approach to be used by systems which, for whatever reason, cannot easily support Frame Checksum preservation?" and "What is the approach to be used when the system originates a message, which therefore has no Frame Checksum precalculated?" ๐Ÿค”

One approach would be to make stations calculate the Frame Checksum in software if hardware support isn't available ๐Ÿ˜ฉ That would meet with profound dismay, and it would raise serious questions of interpretation in a Bridge/Router ๐Ÿ’€

Stations that implement LAN Frame Checksum preservation already have to solve this problem, since they originate traffic too ๐Ÿง  So the solution adopted is that messages with no Frame Checksum get tagged and carried across the line ๐Ÿท๏ธ

When a system that doesn't implement LAN Frame Checksum preservation receives a frame with an embedded FCS, it converts the frame for its own use by removing the trailing four octets ๐Ÿงน When any system forwards a frame that contains no embedded FCS to a LAN, it forwards it in a way that causes the FCS to be calculated ๐Ÿงฎ

3.3. Tinygram Compression ๐Ÿงธ

Here's the issue in remote Ethernet bridging: the protocols that are most attractive to bridge are prone to problems on low speed (64 KBPS and below) lines ๐Ÿข This can be partly fixed by noticing that the vendors defining these protocols often fill the PDU with octets of ZERO 0๏ธโƒฃ So an Ethernet or IEEE 802.3 PDU received from a line that is (1) smaller than the minimum PDU size, and (2) has a LAN Frame Checksum present, must be padded by inserting zeroes between the last four octets and the rest of the PDU before it's transmitted on a LAN ๐Ÿซง These protocols are frequently used for interactive sessions, so they're frequently this small ๐Ÿ’ฌ

To prevent ambiguity, PDUs requiring padding are explicitly tagged ๐Ÿท๏ธ Compression is at the option of the transmitting station, and it's probably only performed on low speed lines, perhaps under configuration control โš™๏ธ

The pseudo-code in Appendix B describes the algorithms ๐Ÿ“œ

3.4. Virtual LANs ๐ŸŒธ

IEEE 802.1Q defines Virtual LANs and their exchangeable VLAN Tagged frame format ๐Ÿ’œ Virtual LANs let user multiple community groups co-exist within one bridge ๐Ÿซถ A bridging community is identified by its VLAN ID ๐Ÿ†” If a system that supports Virtual LANs receives a frame from the LAN, that frame will only be emitted onto a LAN that belongs to the same community ๐Ÿšง To handle multiple communities on a single line, IEEE 802.1Q defines a VLAN Tagged Frame ๐ŸŽŸ๏ธ

For example, say you have this configuration:

        E1     +--+            +--+     E3
   ------------|  |            |  |------------
               |  |     W1     |  |
               |B1|------------|B2|
        E2     |  |            |  |     E4
   ------------|  |            |  |------------
               +--+            +--+

E1, E2, E3, and E4 are Ethernet LANs (or Token Ring, FDDI, etc.). W1 is a WAN (PPP over T1). B1 and B2 are MAC level bridges ๐ŸŒ‰

You want End Stations on E1 and E3 to talk to each other, and you want End Stations on E2 and E4 to talk to each other, but you do NOT want End Stations on E1 and E3 talking to End Stations on E2 and E4 ๐Ÿ™…โ€โ™€๏ธ

This is true for Unicast, Multicast, and Broadcast traffic ๐Ÿ“ฃ If a broadcast datagram originates on E1, you want it propagated only to E3, and not to E2 or E4 ๐ŸŽฏ

Another way of looking at it is that E1 and E3 form a Virtual LAN, and E2 and E4 form a Virtual LAN, as if the following configuration were actually being used ๐Ÿงฉ

        E1     +--+     W2     +--+     E3
   ------------|B3|------------|B4|------------
               +--+            +--+

        E2     +--+     W3     +--+     E4
   ------------|B5|------------|B6|------------
               +--+            +--+

4. A PPP Network Control Protocol for Bridging ๐ŸŒˆ

The Bridging Control Protocol (BCP) is responsible for configuring, enabling and disabling the bridge protocol modules on both ends of the point-to-point link ๐Ÿ”— BCP uses the same packet exchange mechanism as the Link Control Protocol ๐Ÿค“ BCP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase ๐Ÿšฆ BCP packets received before this phase is reached SHOULD be silently discarded ๐Ÿคซ

The Bridging Control Protocol is exactly the same as the Link Control Protocol [6], with the following exceptions ๐Ÿ“

Frame Modifications ๐ŸŽ€

The packet may use any modifications to the basic frame format that were negotiated during the Link Establishment phase โœจ

Implementations SHOULD NOT negotiate Address-and-Control-Field-Compression or Protocol-Field-Compression on anything other than low speed links ๐ŸŒ

Exactly one BCP packet is encapsulated in the PPP Information field, where the PPP Protocol field indicates type hex 8031 (BCP) ๐Ÿ’Œ

Code field ๐Ÿ”ข

Only Codes 1 through 7 are used: Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject ๐Ÿ™Œ Other Codes SHOULD be treated as unrecognized and SHOULD result in Code-Rejects ๐Ÿšซ

Timeouts โฐ

BCP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase ๐Ÿšฆ An implementation SHOULD be prepared to wait for Authentication and Link Quality Determination to finish before timing out while waiting for a Configure-Ack or other response ๐Ÿซ  It is suggested that an implementation give up only after user intervention or a configurable amount of time ๐Ÿง˜โ€โ™€๏ธ

Configuration Option Types ๐Ÿงฉ

BCP has a distinct set of Configuration Options, which are defined in this document ๐Ÿ’–

4.1. Sending Bridge Frames ๐ŸŽ€

okay so before ANY Bridged LAN Traffic or BPDUs can be sent, PPP MUST reach the Network-Layer Protocol phase, and the Bridging Control Protocol MUST reach the Opened state. no skipping ahead, bestie ๐Ÿ™…โ€โ™€๏ธ

once that's sorted, exactly one Bridged LAN Traffic or BPDU gets wrapped up in the PPP Information field, and the PPP Protocol field says 0031 (Bridged PDU). so cute and tidy ๐Ÿฆ‹

4.1.1. Maximum Receive Unit Considerations

the biggest a Bridged datagram can be over a PPP link is the same as the biggest the Information field of a PPP encapsulated packet can be. ๐Ÿ“ฆ there's no standard way to fragment and reassemble Bridged PDUs, so PPP links that support Bridging MUST negotiate an MRU big enough for the MAC Types that get negotiated for Bridging support later.

and here's the tea ๐Ÿต: bridged Ethernet frames are bigger than the default PPP MRU of 1500 octets, because they include the MAC headers. so the default just won't cut it ๐Ÿ˜ญ

it is strongly recommended that PPP Bridge Protocol implementations utilize Magic Number Loopback Detection and Link-Quality-Monitoring. ๐Ÿ’œ

the 802.1 Spanning Tree protocol is the thing that's built into both Transparent Bridging and Source Routing (as standardized), and during normal operation it's unidirectional ๐ŸŒˆ Configuration BPDUs come out of the Root system and head in the general direction of the leaves, with no reverse traffic unless something happens on the network. it's giving one-way street ๐Ÿ›ฃ๏ธ

4.1.3. Message Sequence

multiple links means you have to think about message sequentiality ๐Ÿง  the transmitting system can figure out one of two things:

the protocol being bridged needs transmissions to arrive in the order they were originally sent. in that case, it puts every transmission on a given conversation onto the same link so the order stays intact โœจ

or the protocol does NOT require transmissions to arrive in the order they were originally sent. then it can use that info to spread traffic across several links and cut down on delay ๐Ÿš€

if there's no such determination, the transmitting system MUST act as though all protocols require order preservation. honestly that makes sense, since lots of protocols built for a single LAN need order preservation anyway ๐Ÿซถ

PPP Multilink [7] and its multi-class extension [11] can be used to keep message sequentiality across multiple PPP links between two systems. it treats the whole group of links as one single link, with a speed equal to the sum of the speeds of the links in the group. main character energy for sure ๐Ÿ‘‘

4.1.4. Separation of Spanning Tree Domains

it's totally possible a network manager wants to stop BPDUs from being exchanged on a link, so two regions can be split into separate Spanning Trees with different Roots (and maybe different Spanning Tree implementations or algorithms) ๐Ÿงš to do that, they should configure both ends to not exchange BPDUs on that link.

an implementation that doesn't support any spanning tree protocol MUST silently discard any received IEEE 802.1D BPDU packets. ๐Ÿ™ˆ

now if a bridge is connected to an old BCP bridge [10], the other bridge can't operate under this specification. so you've got three options:

  • (a) If the bridge wants to terminate the connection, it sends a Terminate-Request and terminates the connection.
  • (b) If the bridge wants to run the connection but not receive old BPDUs, its only option is to run without spanning tree on the link at all, which is dangerous. It should Configure-Reject the option and advise the network administration that it has done so.
  • (c) If the bridge chooses to be entirely backward compatible, it sends Configure-Ack and operates in the manner described in Appendix A.
โš ๏ธ option (b) is giving "playing with fire" energy. running with no spanning tree at all is dangerous, so please don't skip that warning ๐Ÿ’€

if BOTH the new Management-Inline Option and the Spanning-Tree-Protocol-Configuration Option get configure-rejected, that means the peer has no spanning tree protocol at all and doesn't understand the options. that counts as an incomplete implementation ๐Ÿคจ for safety reasons, the system should stop trying to configure bridging and log the fact.

and if the peer was configure-rejecting those options to turn spanning tree off entirely, then it understood the option but couldn't comply within its configuration. it should've sent the Spanning-Tree-Protocol-Configuration Option with the value NULL. ๐Ÿ’…

implementations SHOULD implement a backward compatibility mode. โœจ

4.2. Bridged LAN Traffic (IEEE 802 Untagged Frame) ๐Ÿฆ‹

for Bridging LAN traffic, the frame on the line looks like the diagrams below. you use this format when the traffic doesn't include a VLAN ID and priority.

the fields go out from left to right, obviously ๐Ÿ˜Œ

802.3 Frame format (IEEE 802 Un-tagged Frame)

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+
 |   HDLC FLAG   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |      Address and Control      |      0x00     |      0x31     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |F|0|Z|0| Pads  |    MAC Type   |      Destination MAC Address  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       Destination MAC Address                 |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       Source MAC Address                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Source MAC Address        |      Length/Type              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |               LLC data       ...
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                   LAN FCS (optional)                          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                potential line protocol pad                    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          Frame FCS            |   HDLC FLAG   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

802.4/802.5/FDDI Frame format (IEEE 802 Un-tagged Frame)

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+
  |   HDLC FLAG   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      Address and Control      |      0x00     |      0x31     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |F|0|Z|0| Pads  |    MAC Type   |   Pad Byte    | Frame Control |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Destination MAC Address                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     Destination MAC Address   |  Source MAC Address           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Source MAC Address                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               LLC data       ...
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   LAN FCS (optional)                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              optional Data Link Layer padding                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Frame FCS            |   HDLC FLAG   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Address and Control

as defined by the framing in use. ๐Ÿงฉ

PPP Protocol

0x0031 for PPP Bridging ๐ŸŽ€

Flags

  • bit F: Set if the LAN FCS Field is present
  • bit Z: Set if IEEE 802.3 Pad must be zero filled to minimum size
  • bit 0: reserved, must be zero

Pads

any PPP frame can have padding stuck into the "Optional Data Link Layer Padding" field. this number tells the receiving system how many pad octets to strip off โœ‚๏ธ

MAC Type

the up-to-date values of the MAC Type field live in the most recent "Assigned Numbers" RFC [4]. right now, they're assigned like this:

    0: reserved
    1: IEEE 802.3/Ethernet  with canonical addresses
    2: IEEE 802.4           with canonical addresses
    3: IEEE 802.5           with non-canonical addresses
    4: FDDI                 with non-canonical addresses
 5-10: reserved
   11: IEEE 802.5           with canonical addresses
   12: FDDI                 with canonical addresses

"canonical" is the address format the IEEE defines as the standard address representation. in this format, the bit in each byte that gets transmitted first on a LAN is the least significant bit. in non-canonical form, that first-transmitted bit is the most significant bit instead. lots of LAN interface implementations use non-canonical form ๐Ÿค“ in both formats, bytes are shown in the order they're transmitted.

if an implementation supports the higher-numbered format of a MAC Type, then it MUST also support the lower-numbered format of that MAC Type. for example, if an implementation supports FDDI with canonical addresses, it MUST also support FDDI with non-canonical addresses. the point of this is backward compatibility with earlier versions of this specification ๐Ÿซถ

๐Ÿšซ a system MUST NOT transmit a MAC Type numbered higher than 4 unless it has received a MAC-Support Configuration Option from its peer, indicating the peer is willing to receive frames of that MAC Type. no surprise frames, please ๐Ÿ™…โ€โ™€๏ธ

Frame Control

on 802.4, 802.5, and FDDI LANs, there are a few octets before the Destination MAC Address, and one of them is protected by the FCS ๐Ÿ”

the MAC Type of the frame decides what the Frame Control field contains. a pad octet is there to give you 32-bit packet alignment โœจ

Destination MAC Address

as defined by the IEEE. the MAC Type field sets the bit ordering ๐Ÿงญ

Source MAC Address

as defined by the IEEE. the MAC Type field sets the bit ordering ๐Ÿงญ

LLC data

this is the rest of the MAC frame that is (or would be, if it were there) protected by the LAN FCS ๐Ÿ“ฌ

for example, the 802.5 Access Control field and Status Trailer aren't meaningful to send to another ring, so they get left out ๐Ÿ™…โ€โ™€๏ธ

LAN FCS

if it's present, this is the LAN FCS that was calculated by (or appears to have been calculated by) the originating station. if the LAN FCS flag isn't set, the field isn't there at all, and the PDU is four octets shorter ๐ŸŒธ

any PPP frame can have padding inserted between the Information field and the Frame FCS. the Pads field holds the length of this padding, which can't go over 15 octets ๐ŸŽ€

the PPP LCP Extensions [5] specify a self-describing pad. implementations are encouraged to set the Pads field to zero and use the self-describing pad instead ๐Ÿ’–

Frame FCS

mentioned mainly for clarity ๐Ÿ’… the FCS used on the PPP link is separate from and unrelated to the LAN FCS.

4.3. Bridged LAN Traffic in IEEE 802 Tagged Frame โœจ

okay so to connect two or more Virtual LAN segments, the frame MUST include its VLAN ID and priority ๐ŸŽ€ An IEEE 802 Tagged Frame may be used if the IEEE-802-Tagged-Frame Option is accepted by the peer. Here's how the frame looks on the line ๐Ÿ‘€

The fields are transmitted from left to right, so read left to right too ๐Ÿซถ

802.3 Frame format (IEEE 802 Tagged Frame)

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+
   |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Address and Control      |      0x00     |      0x31     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|0|Z|0| Pads  |    MAC Type   |      Destination MAC Address  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Destination MAC Address                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source MAC Address                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Source MAC Address        |     0x81       |     0x00     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Pri  |C| VLAN ID               |      Length/Type              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               LLC data       ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   LAN FCS (optional)                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                potential line protocol pad                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Frame FCS            |   HDLC FLAG   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

802.4/802.5/FDDI Frame format (IEEE 802 Tagged Frame)

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+
  |   HDLC FLAG   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |      Address and Control      |      0x00     |      0x31     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |F|0|Z|0| Pads  |    MAC Type   |   Pad Byte    | Frame Control |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Destination MAC Address                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |     Destination MAC Address   |  Source MAC Address           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Source MAC Address                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   SNAP-encoded TPID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   SNAP-encoded TPID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |Pri  |C| VLAN ID               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               LLC data       ...
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   LAN FCS (optional)                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |              optional Data Link Layer padding                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Frame FCS            |   HDLC FLAG   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Address and Control

As defined by the framing in use. ๐Ÿ’œ

PPP Protocol

0x0031 for PPP Bridging ๐Ÿงš

Flags

bit F:  Set if the LAN FCS Field is present
bit Z:  Set if IEEE 802.3 Pad must be zero filled to minimum size
bit 0:  reserved, must be zero

Pads

Any PPP frame may have padding inserted in the "Optional Data Link Layer Padding" field. This number tells the receiving system how many pad octets to strip off ๐Ÿ’…

MAC Type

Up-to-date values of the MAC Type field are specified in the most recent "Assigned Numbers" RFC [4]. Current values are assigned as follows ๐ŸŒธ

    0: reserved
    1: IEEE 802.3/Ethernet  with canonical addresses
    2: IEEE 802.4           with canonical addresses
    3: IEEE 802.5           with non-canonical addresses
    4: FDDI                 with non-canonical addresses
 5-10: reserved
   11: IEEE 802.5           with canonical addresses
   12: FDDI                 with canonical addresses

"Canonical" is the address format defined as standard address representation by the IEEE. In this format, the bit within each byte that is to be transmitted first on a LAN is represented as the least significant bit. In contrast, in non-canonical form, the bit within each byte that is to be transmitted first is represented as the most-significant bit. Many LAN interface implementations use non-canonical form. In both formats, bytes are represented in the order of transmission ๐Ÿฆ‹

If an implementation supports a MAC Type that is the higher-numbered format of that MAC Type, then it MUST also support the lower-numbered format of that MAC Type. For example, if an implementation supports FDDI with canonical address format, then it MUST also support FDDI with non-canonical address format. The purpose of this requirement is to provide backward compatibility with earlier versions of this specification ๐Ÿซถ

A system MUST NOT transmit a MAC Type numbered higher than 4 unless it has received from its peer a MAC-Support Configuration Option indicating that the peer is willing to receive frames of that MAC Type. ๐Ÿ™ˆ

Frame Control

On 802.4, 802.5, and FDDI LANs, there are a few octets preceding the Destination MAC Address, one of which is protected by the FCS ๐ŸŒˆ

The MAC Type of the frame determines the contents of the Frame Control field. A pad octet is present to provide 32-bit packet alignment โœจ

Destination MAC Address

As defined by the IEEE. The MAC Type field defines the bit ordering ๐Ÿ’–

Source MAC Address

As defined by the IEEE. The MAC Type field defines the bit ordering ๐Ÿ’–

Pri

3 bit priority value as defined by IEEE 802.1D. ๐Ÿ‘‘

C

Canonical flag as defined by IEEE 802.1Q. It must be set if RIF data is present in the LLC data ๐Ÿ”ฅ

VLAN ID

12 bit VLAN identifier number as defined by IEEE 802.1Q. ๐Ÿ“

LLC data

This is the remainder of the MAC frame which is (or would be were it present) protected by the LAN FCS.

For example, the 802.5 Access Control field, and Status Trailer are not meaningful to transmit to another ring, and are omitted ๐Ÿ™ˆ

LAN FCS

If present, this is the LAN FCS which was calculated by (or which appears to have been calculated by) the originating station. If the LAN FCS flag is not set, then this field is not present, and the PDU is four octets shorter โœจ

Any PPP frame may have padding inserted between the Information field and the Frame FCS. The Pads field contains the length of this padding, which may not exceed 15 octets.

The PPP LCP Extensions [5] specify a self-describing pad. Implementations are encouraged to set the Pads field to zero, and use the self-describing pad instead ๐ŸŒธ

Frame FCS

Mentioned primarily for clarity. The FCS used on the PPP link is separate from and unrelated to the LAN FCS ๐Ÿฆ‹


4.4. Bridge protocols and GARP protocols

To avoid network loops and improve redundancy, Bridges exchange a Spanning Tree Protocol data unit known as BPDU ๐Ÿ” Bridges also exchange a Generic Attributes Registration Protocol data unit to carry the GARP VLAN Registration Protocol (GVRP) data and GARP Multicast Registration Protocol (GMRP) data. GVRP allow the Bridges to create VLAN groups dynamically โœจ GMRP allows bridges to filter Multicast data if the receiver is absent from the network ๐Ÿ’€ These Bridge protocols include Spanning Tree Protocol and GARP protocols data units are carried with a special destination address assigned by the IEEE ๐Ÿงš

These bridge protocols data units and GARP protocol data units must be carried in the frame format shown in section 4.2 or 4.3. The Bridge that receives these data units identifies these protocols based on the destination address in the frame format, just like the operation of receiving frames from a LAN segment ๐Ÿ’…

Bridge protocols and GARP protocols data units MUST be recognized by checking the destination addresses, which are assigned by IEEE ๐Ÿซถ

   01-80-c2-00-00-00  Bridge Group Address (used by STP)
   01-80-c2-00-00-01  IEEE Std. 802.3x Full Duplex PAUSE operation
   01-80-c2-00-00-10  Bridge Management Group Address
   01-80-c2-00-00-20  GARP Multicast Registration Protocol (GMRP)
   01-80-c2-00-00-21  GARP VLAN Registration Protocol (GVRP)

But there is one exception to this rule: if the bridge is connected to an old BCP bridge [10] and can support backward compatibility, it MUST send the BPDU in the old format described in Appendix A ๐ŸŒˆ


5. BCP Configuration Options ๐ŸŽ€

BCP Configuration Options allow modifications to the standard characteristics of the network-layer protocol to be negotiated. If a Configuration Option is not included in a Configure-Request packet, the default value for that Configuration Option is assumed ๐Ÿ’–

BCP uses the same Configuration Option format defined for LCP [6], with a separate set of Options.

Up-to-date values of the BCP Option Type field are specified in the most recent "Assigned Numbers" RFC [4]. Current values are assigned as follows โœจ

      1       Bridge-Identification
      2       Line-Identification
      3       MAC-Support
      4       Tinygram-Compression
      5       LAN-Identification (obsoleted)
      6       MAC-Address
      7       Spanning-Tree-Protocol (old formatted)
      8       IEEE 802 Tagged Frame
      9       Management Inline

5.1. Bridge-Identification โœจ

Description ๐Ÿ’…

okay so the Bridge-Identification Configuration Option is for when the line is an interface between two half bridges that connect virtual or physical LAN segments ๐ŸŒ‰ these remote bridges get modeled as one single bridge with a kinda weird internal interface, so each remote bridge needs to know the LAN segment and bridge numbers of its adjacent remote bridge ๐ŸŽ€ this option MUST NOT be included in the same Configure-Request as the Line-Identification option, no exceptions bestie ๐Ÿ™…โ€โ™€๏ธ

the Source Routing Route Descriptor and how it gets used are specified in the IEEE 802.1D Appendix on Source Routing ๐Ÿงš it identifies the segment the interface is attached to by its configured segment number, and itself by its bridge number on that segment ๐Ÿ’œ

the two half bridges MUST agree on the bridge number. if they don't agree, the Bridging Control Protocol MUST NOT enter the Opened state ๐Ÿ˜ญ

mismatched bridge numbers are a sign of a configuration error, so a correct setup means the bridge either declares the misconfiguration or picks one of the options ๐Ÿ“ to let two systems reach the Opened state even with a mismatch, a system MAY change its bridge number to the higher of the two numbers. a higher-numbered system MUST NOT change its bridge number to a lower number. it should, however, tell the network administration about the misconfiguration in any case ๐Ÿ”ฅ

by default, a system that doesn't negotiate this option is assumed to be configured NOT to use the model of the two systems as two halves of a single source-route bridge ๐Ÿ™ˆ it's instead assumed to be configured to use the model of two independent bridges โœจ

Example ๐ŸŒˆ

if System A announces LAN Segment AAA, Bridge #1, and System B announces LAN Segment BBB, Bridge #1, then the resulting Source Routing configuration (read in the appropriate direction) is:

AAA,1,BBB

here's a summary of the Bridge-Identification Option format ๐Ÿฆ‹ the fields are transmitted from left to right:

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     | LAN Segment Number    |Bridge#|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type ๐ŸŽ€

1

Length ๐ŸŽ€

4

LAN Segment Number ๐Ÿงฉ

a 12-bit number identifying the LAN segment, as defined in the IEEE 802.1D Source Routing Specification.

Bridge Number ๐Ÿงฉ

a 4-bit number identifying the bridge on the LAN segment, as defined in the IEEE 802.1D Source Routing Specification.


5.2. Line-Identification ๐Ÿซถ

Description ๐Ÿ’–

the Line-Identification Configuration Option is for when the line gets assigned a LAN segment number as though it were a two system LAN segment, following the Source Routing algorithm ๐ŸŒธ

the Source Routing Route Descriptor and its use are specified by the IEEE 802.1D Appendix on Source Routing ๐Ÿงš it identifies the segment the interface is attached to by its configured segment number, and itself by its bridge number on the segment ๐Ÿ’œ

the two bridges MUST agree on the LAN segment number. if a LAN segment number isn't agreed upon, the Bridging Control Protocol MUST NOT enter the Opened state ๐Ÿ˜ญ

since mismatched LAN segment numbers mean a configuration error, a correct setup requires that either the bridge declares the misconfiguration or picks one of the options ๐Ÿ“ to let two systems reach the Opened state despite a mismatch, a system MAY change its LAN segment number to the higher of the two numbers. a higher-numbered system MUST NOT change its LAN segment number to a lower number. it should, however, tell the network administration about the misconfiguration in any case ๐Ÿ”ฅ

by default, a system that doesn't negotiate this option is assumed to have its LAN segment number correctly configured by the user ๐Ÿ‘‘

here's a summary of the Line-Identification Option format ๐Ÿฆ‹ the fields are transmitted from left to right:

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     | LAN Segment Number    |Bridge#|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type ๐ŸŽ€

2

Length ๐ŸŽ€

4

LAN Segment Number ๐Ÿงฉ

a 12-bit number identifying the LAN segment, as defined in the IEEE 802.1D Source Routing Specification.

Bridge Number ๐Ÿงฉ

a 4-bit number identifying the bridge on the LAN segment, as defined in the IEEE 802.1D Source Routing Specification.


5.3. MAC-Support ๐ŸŽ€

Description ๐Ÿ’…

the MAC-Support Configuration Option lets implementations say what sort of traffic they're ready to receive โœจ negotiating this option is strongly recommended, bestie ๐Ÿ’œ

by default, when an implementation doesn't announce the MAC Types it supports, the peer sends all MAC Types that can be transported given the other configuration parameters ๐ŸŒˆ the receiver then discards any MAC Types it doesn't support ๐Ÿ—‘๏ธ

a device supporting a 1600 octet MRU might not be willing to support 802.5, 802.4 or FDDI, since each of those supports frames larger than 1600 octets ๐Ÿ™ˆ

by announcing the MAC Types it will support, an implementation is basically telling its peer that all unspecified MAC Types will get discarded ๐Ÿซง the peer MAY then reduce bandwidth usage by not sending the unsupported MAC Types ๐Ÿฆ‹

to announce support for multiple MAC Types, you place multiple options in the Configure-Request ๐Ÿงš

the nature of this option is advisory only. this option MUST NOT be included in a Configure-Nak. ๐Ÿ™…โ€โ™€๏ธ

here's a summary of the MAC-Support Option format ๐Ÿฆ‹ the fields are transmitted from left to right:

     0                   1                   2
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     |    MAC Type   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type ๐ŸŽ€

3

Length ๐ŸŽ€

3

MAC Type ๐Ÿงฉ

one of the values of the PDU MAC Type field (previously described in the "Bridged LAN Traffic" section) that this system is prepared to receive and service.


5.4. Tinygram-Compression ๐ŸŒท

Description ๐Ÿ’–

this Configuration Option lets the implementation indicate support for Tinygram compression ๐Ÿฌ

not every system is ready to make changes to messages in transit ๐Ÿ˜ค on high speed lines, it's probably not worth the effort ๐ŸŽ๏ธ

this option MUST NOT be included in a Configure-Nak if it has been received in a Configure-Request. this option MAY be included in a Configure-Nak to prompt the peer to send the option in its next Configure-Request ๐Ÿ”

by default, no compression is allowed ๐Ÿ™…โ€โ™€๏ธ a system that doesn't negotiate this option, or negotiates it to be disabled, should never receive a compressed packet ๐Ÿšซ

here's a summary of the Tinygram-Compression Option format ๐Ÿฆ‹ the fields are transmitted from left to right:

     0                   1                   2
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     | Enable/Disable|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type ๐ŸŽ€

4

Length ๐ŸŽ€

3

Enable/Disable ๐Ÿงฉ

if the value is 1, Tinygram-Compression is enabled. if the value is 2, Tinygram-Compression is disabled, and no decompression will occur.

the implementations don't need to agree on the setting of this parameter. one may be willing to decompress and the other not ๐Ÿคทโ€โ™€๏ธ


5.5. MAC-Address ๐Ÿฆ‹

Description ๐Ÿ’œ

the MAC-Address Configuration Option lets the implementation announce its MAC address or have one assigned ๐Ÿชช the MAC address is represented in IEEE 802.1 Canonical format, which means the multicast bit is the least significant bit of the first octet of the address ๐Ÿง 

if the system wants to announce its MAC address, it sends the option with its MAC address specified. when a non-zero MAC address is specified in a Configure-Request, any inclusion of this option in a Configure-Nak MUST be ignored ๐Ÿ™ˆ

if the implementation wants a MAC address assigned, it sends the option with a MAC address of 00-00-00-00-00-00 ๐ŸŽ systems that have no mechanism for address assignment will Configure-Reject the option ๐Ÿ™…โ€โ™€๏ธ

a Configure-Nak MUST specify a valid IEEE 802.1 format physical address, and the multicast bit MUST be zero ๐Ÿ’… it is strongly recommended (although not mandatory) that the "locally assigned address" bit (the second least significant bit in the first octet) be set, indicating a locally assigned address ๐Ÿท๏ธ

here's a summary of the MAC-Address Option format ๐Ÿฆ‹ the fields are transmitted from left to right:

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     |MAC byte 1 |L|M|  MAC byte 2   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  MAC byte 3   |  MAC byte 4   |  MAC byte 5   |  MAC byte 6   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type ๐ŸŽ€

6

Length ๐ŸŽ€

8

MAC Byte ๐Ÿงฉ

six octets of MAC address in 802.1 Canonical order. for clarity, the position of the Local Assignment (L) and Multicast (M) bits is shown in the diagram ๐Ÿซถ

5.6. Spanning-Tree-Protocol (old format) ๐ŸŒธ

Description

okay so this config option lets a Bridge stay compatible with the older implementations of BCP [10] ๐Ÿงš BUT it's incompatible with the Management-Inline option, which is the one that lets a bridge run all the many protocols IEEE now expects it to use. so it's a choice, bestie ๐Ÿ’…

if the peer rejects the Management-Inline configuration option by sending configure-reject, it must be an implementation of [10], which is described in Appendix A. the system may optionally terminate the negotiation or offer to negotiate in that manner โœจ

in this case, if both bridges support a spanning tree protocol, they MUST agree on the protocol to be supported. the old BPDU described in Appendix A MUST be used rather than the format shown in section 4.2 or 4.3 ๐ŸŽ€ when the two disagree, the lower-numbered of the two spanning tree protocols should be used. to sort out the conflict, the system with the lower-numbered protocol SHOULD Configure-Nak the option and suggest its own protocol for use. if a spanning tree protocol is not agreed upon, except for the case where one system doesn't support any spanning tree protocol at all, the Bridging Control Protocol MUST NOT enter the Opened state ๐Ÿ˜ญ

most systems only participate in a single spanning tree protocol. but if a system wants to be in more than one at the same time, it MAY include all of the appropriate protocol types in one single Spanning-Tree-Protocol Configuration Option ๐ŸŒˆ the protocol types MUST be listed in increasing numerical order, and for comparison during negotiation, the protocol numbers MUST be treated as one single number. for example, if System A includes protocols 01 and 03 and System B only indicates 03, System B should Configure-Nak and indicate a protocol type of 03, since 0103 is greater than 03 ๐Ÿค“

by default, an implementation MUST either support the IEEE 802.1D spanning tree or support no spanning tree protocol at all. an implementation that doesn't support any spanning tree protocol MUST silently discard any received IEEE 802.1D BPDU packets, and in this case it MUST either silently discard or respond to other received BPDU packets with an LCP Protocol-Reject packet ๐Ÿ’€

A summary of the Spanning-Tree-Protocol Option format is shown below. The fields are transmitted from left to right.

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
    |     Type      |    Length     |  Protocol 1   |  Protocol 2   | ..
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Type

7

Length

2 octets plus 1 additional octet for each protocol that will be actively supported. most systems only support a single spanning tree protocol, which gives a length of 3 ๐Ÿ“

Protocol n

each Protocol field is one octet and indicates a desired spanning tree protocol. the up-to-date values of the Spanning-Tree-Protocol field are specified as PPP DLL numbers in the most recent "Assigned Numbers" RFC [4]. the current values are assigned as follows:

      Value     Protocol

        0       Null (no Spanning Tree protocol supported)
        1       IEEE 802.1D spanning tree
        2       IEEE 802.1G extended spanning tree protocol
        3       IBM Source Route Spanning tree protocol
        4       DEC LANbridge 100 Spanning tree protocol

5.7. IEEE-802-Tagged-Frame ๐Ÿฆ‹

Description

this config option lets the implementation say it supports IEEE 802 Tagged Frame. negotiating it is strongly recommended, bestie ๐Ÿซถ

a device that supports IEEE 802 Tagged Frame must be willing to support the IEEE 802 Tagged Frame shown in section 4.3 ๐Ÿ’–

by default, IEEE 802 Tagged Frame is not supported. a system that doesn't negotiate this option, or negotiates it to be disabled, should never receive an IEEE 802 Tagged Frame packet ๐Ÿ™ˆ

A summary of the IEEE 802 Tagged Frame Option format is shown below. The fields are transmitted from left to right.

     0                   1                   2
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     | Enable/Disable|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

8

Length

3

Enable/Disable

if the value is 1, IEEE-802-Tagged-Frame is enabled. if the value is 2, IEEE-802-Tagged-Frame is disabled, and the sender MUST not send any IEEE-802-Tagged-Frame packet ๐Ÿ”ฅ


5.8. Management-Inline ๐Ÿ‘‘

Description

this option says the system is willing to receive any IEEE-defined inter-bridge protocols, like bridge protocol data units and GARP protocol data units, in the frame format shown in section 4.2 or 4.3 ๐Ÿงšโ€โ™€๏ธ

old BCP [10] implementations will use the negotiation procedure described in section 5.6. implementations of this procedure use this option to show they comply with the new BCP, and they may optionally negotiate the section 5.6 procedure as well, either on the same configure-request or in response to a configure-reject. it's recommended that the configure-request only show this option when it's relevant, and that it reply with the Spanning-Tree-Protocol (old formatted) option if a configure-reject is received, since in the normal case that's expected to be the quickest negotiation โšก

if a system receives a configure-request offering both alternatives, it should accept this procedure and reject the Spanning-Tree-Protocol (old format) option ๐Ÿซ 

you can expect old BCP [10] implementations to not understand the option and to issue a configure-reject ๐Ÿฅฒ

by default, Management-Inline is not allowed. a system that doesn't negotiate this option, or negotiates it to be disabled, should never receive a Bridge Protocol data unit or GARP protocol data unit inline ๐Ÿšซ

A summary of the Management-Inline Option format is shown below. The fields are transmitted from left to right.

        0                   1
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |     Type      |    Length     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type

9

Length

2


6. Changes From RFC 1638 ๐Ÿ“

this section lists all the changes made to the old BCP [10] to get to this document โœจ

  1. goodbye to all the LAN Identification descriptions, and in their place we get IEEE 802.1Q VLAN descriptions ๐Ÿ’…
  2. the LAN Identification field is removed from the frame format, and the I flags are removed from the flag field ๐Ÿ—‘๏ธ
  3. the Spanning Tree BPDU frame format gets merged with the Bridged traffic format ๐Ÿซถ

7. Security Considerations ๐Ÿšจ

okay, this one is serious, bestie ๐Ÿ˜ญ this network control protocol compares the configurations of two devices and tries to negotiate an acceptable subset of their intersection, so that interoperation still works even when there are minor configuration or implementation differences. if a major misconfiguration gets detected, the negotiation won't complete, and the link goes down or never comes up at all ๐Ÿšซ it's possible that if a bridged link comes up with a rogue peer, network information could be learned from forwarded multicast traffic, or denial of service attacks could happen by closing loops that should be detected and isolated, or by offering rogue load ๐Ÿ’€

and these attacks aren't limited to this NCP. any PPP NCP is open to attack when it connects to a foreign or compromised device ๐Ÿ˜ฑ but no situations come up here that are not common to all NCPs. any NCP that comes up with a rogue peer is open to snooping and other attacks. so it's recommended that links where this might happen should be configured to use PPP authentication during the LCP start-up phase ๐Ÿ” protect your links, periodt ๐Ÿ’œ


8. Intellectual Property Notice โš–๏ธ

the IETF takes no position on the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology in this document, or on whether any license under those rights might or might not be available. it also doesn't claim to have made any effort to identify such rights. info on the IETF's procedures for rights in standards-track and standards-related documentation can be found in BCP-11 ๐Ÿ“š copies of claims of rights made available for publication, and any assurances of licenses to be made available, or the result of an attempt to get a general license or permission to use such proprietary rights by implementers or users of this specification, can be obtained from the IETF Secretariat.

the IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to practice this standard. please send that info to the IETF Executive Director ๐Ÿซก

the IETF has been notified of intellectual property rights claimed in regard to some or all of the specification in this document. for more information, check the online list of claimed rights ๐Ÿ”


9. IANA Considerations ๐Ÿงพ

this document proposes a total of two new BCP option numbers to be maintained by the IANA ๐ŸŽ€ these options (described in Section 5.1 and 5.2) are IEEE-802-Tagged-Frame and Management-Inline. the IANA has assigned the values 8 and 9 respectively for these option numbers ๐Ÿ’–


10. Acknowledgments ๐Ÿซถ

this document is a product of the Point-to-Point Protocol Extensions Working Group ๐ŸŒˆ

this document is based on the PPP Bridging Control Protocol, RFC 1638 [10], edited by Rich Bowen of IBM and produced by the Point-to-Point Protocol Extensions Working Group. it extends that document by adding support for Virtual LANs as outlined in [9] ๐Ÿ’œ the lore continues

A. Spanning Tree Bridge PDU (old format) ๐ŸŽ€

okay so, by default, Spanning Tree BPDUs MUST be encoded with a MAC or 802.2 LLC header, like section 4.2 or 4.3 of this document says ๐Ÿ’… BUT if the remote entity Configure-Rejects the Management-Inline option, which basically means "I'm a purely RFC 1638 compliant device, bestie," then the local entity may subsequently encode BPDUs the way section 4.3 of RFC 1638 describes ๐Ÿฆ‹ The catch is that a suitable non-NULL STP protocol has to be successfully negotiated across the link using the (old) Spanning-Tree-Protocol option. no shortcuts!! ๐Ÿ™ˆ

this is the Spanning Tree BPDU from RFC 1638, minus any MAC or 802.2 LLC header. those headers are functionally equivalent to the Address, Control, and PPP Protocol Fields, so they're not needed here ๐Ÿงš The LAN Pad and Frame Checksum fields are also superfluous, so they're just not there. literally gone ๐Ÿ’€

the Address and Control Fields are subject to LCP Address-and-Control-Field-Compression negotiation โœจ

ok this part is lowkey important ๐Ÿ‘‘ A PPP system that's configured to participate in a particular spanning tree protocol and receives a BPDU from a different spanning tree protocol SHOULD reject it with the LCP Protocol-Reject. And a system that's configured not to participate in any spanning tree protocol MUST silently discard all BPDUs. no notes, no drama, just gone ๐Ÿซถ

Spanning Tree Bridge PDU

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+
    |   HDLC FLAG   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      Address and Control      |     Spanning Tree Protocol    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |              BPDU data       ...                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Frame FCS            |   HDLC FLAG   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Address and Control

the values here are whatever the framing in use defines ๐ŸŒธ

Spanning Tree Protocol

the up-to-date values of the Spanning-Tree-Protocol field live in the most recent "Assigned Numbers" RFC [4]. the current ones are:

   Value (in hex)  Protocol

   0201            IEEE 802.1 (either 802.1D or 802.1G)
   0203            IBM Source Route Bridge
   0205            DEC LANbridge 100

the two versions of the IEEE 802.1 spanning tree protocol frames can be told apart by fields inside the BPDU data ๐Ÿ”ฅ

BPDU data

it's whatever the specified Spanning Tree Protocol defines ๐Ÿงš


B. Tinygram-Compression Pseudo-Code ๐Ÿ“

this is the pseudo-code for tinygram compression, and it's giving precision ๐Ÿ˜ญ

PPP Transmitter

if (ZeroPadCompressionEnabled &&
    BridgedProtocolHeaderFormat == IEEE8023 &&
    PacketLength == Minimum8023PacketLength) {
 /*
  * Remove any continuous run of zero octets preceding,
  * but not including, the LAN FCS, but not extending
  * into the MAC header.
  */
    Set (ZeroCompressionFlag);           /* Signal receiver */
    if (is_Set (LAN_FCS_Present)) {
        FCS = TrailingOctets (PDU, 4);   /* Store FCS */
        RemoveTrailingOctets (PDU, 4);   /* Remove FCS */
        while (PacketLength > 14 &&      /* Stop at MAC header or */
               TrailingOctet (PDU) == 0) /*  last non-zero octet */
           RemoveTrailingOctets (PDU, 1);/* Remove zero octet */
        Appendbuf (PDU, 4, FCS);         /* Restore FCS */
    }
    else {
        while (PacketLength > 14 &&      /* Stop at MAC header */
               TrailingOctet (PDU) == 0) /*  or last zero octet */
           RemoveTrailingOctets (PDU, 1);/* Remove zero octet */
    }
}

PPP Receiver

if (ZeroCompressionFlag) {                /* Flag set in header? */
 /* Restoring packet to minimum 802.3 length */
    Clear (ZeroCompressionFlag);
    if (is_Set (LAN_FCS_Present)) {
        FCS = TrailingOctets (PDU, 4);   /* Store FCS */
        RemoveTrailingOctets (PDU, 4);   /* Remove FCS */
        Appendbuf (PDU, 60 - PacketLength, zeroes);/* Add zeroes */
        Appendbuf (PDU, 4, FCS);         /* Restore FCS */
    }
    else {
        Appendbuf (PDU, 60 - PacketLength, zeroes);/* Add zeroes */
    }
}

References ๐Ÿ“š

  • [1] IBM, "Token-Ring Network Architecture Reference", 3rd edition, September 1989.
  • [2] IEEE 802.1, "Draft Standard 802.1G: Remote MAC Bridging", P802.1G/D7, December 30, 1992.
  • [3] IEEE 802.1D-1993, "Media Access Control (MAC) Bridges", ISO/IEC 15802-3:1993 ANSI/IEEE Std 802.1D, 1993 edition., July 1993.
  • [4] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC 1700, October 1994. See also: http://www.iana.org/numbers.html
  • [5] Simpson, W., "PPP LCP Extensions", RFC 1570, January 1994.
  • [6] Simpson, W., "The Point-to-Point Protocol (PPP)", STD 51, RFC 1661, July 1994.
  • [7] Sklower, K., Lloyd, B., McGregor, G., Carr, D. and T. Coradetti, "The PPP Multilink Protocol (MP)", RFC 1990, August 1996.
  • [8] IEEE 802.1D-1998, "Information technology - Telecommunications and Information exchange between systems - Local and metropolitan area networks - Common Specifications - Part 3: Media Access Control (MAC) Bridges: Revision. This is a revision of ISO/IEC 10038: 1993, 802.1j-1992 and 802.6k-1992. It incorporates P802.11c, P802.1p and P802.12e." ISO/IEC 15802-3: 1998.
  • [9] IEEE 802.1Q, ANSI/IEEE Standard 802.1Q, "IEEE Standards for Local and Metropolitan Area Networks: Virtual Bridged Local Area Networks", 1998.
  • [10] Baker, F. and R. Bowen, "PPP Bridging Control Protocol (BCP)", RFC 1638, June 1994.
  • [11] Bormann, C., "The Multi-Class Extension to Multi-Link PPP", RFC 2686, September 1999.
  • [12] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

Authors' Addresses ๐Ÿ’Œ

questions about this memo can also be directed to:

Mitsuru Higashiyama Anritsu Corporation 1800 Onna, Atsugi-shi, Kanagawa-prf., 243-8555 Japan

Phone: +81 (46) 296-6625 EMail: Mitsuru.Higashiyama@yy.anritsu.co.jp

Fred Baker 519 Lado Drive Santa Barbara, California 93111

EMail: fred.baker@cisco.com

Copyright (C) The Internet Society (2000). All Rights Reserved.

okay the legal bit, and it matters ๐Ÿซถ You can copy this document and hand it to others, and you can make derivative works that comment on or explain it, or help people implement it. You can publish and distribute those, in whole or in part, with no restrictions of any kind, as long as the copyright notice and this paragraph are included on every copy and derivative work. However, this document itself may not be modified in any way, such as by removing the copyright notice or the references to the Internet Society or other Internet organizations. The only exceptions are when it's needed for developing Internet standards, in which case the copyright procedures defined in the Internet Standards process must be followed, or when it's translated into languages other than English. The limited permissions above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

this document and the information in it are provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐ŸŒˆ

Funding for the RFC Editor function is currently provided by the Internet Society. ๐ŸŒธ

๐Ÿ“ฆ where this page comes from