RFC 2097
The PPP NetBIOS Frames Control Protocol (NBFCP)
RFC 2097: The PPP NetBIOS Frames Control Protocol (NBFCP) π
Okay bestie, this one is The PPP NetBIOS Frames Control Protocol (NBFCP), written by G. Pall at Microsoft Corp. and dated January 1997 π It's a Standards Track doc, which means it's an actual Internet standards track protocol π It came out of the Network Working Group π¦ The header doesn't list anything it obsoletes or updates, so it's not replacing or patching any older RFC β¨
Status of this Memo β¨
So this is an Internet standards track protocol for the Internet community πΈ They're asking for discussion and suggestions for improvements π¬ If you want the current standardization state and status, check the current edition of the "Internet Official Protocol Standards" (STD 1) π Distribution of this memo is unlimited π«Ά
Abstract π§
The Point-to-Point Protocol (PPP) [1] is the standard way to transport multi-protocol datagrams over point-to-point links π₯ PPP has an extensible Link Control Protocol, plus a whole family of Network Control Protocols for setting up and configuring different network-layer protocols π
The NBF protocol [3] used to be called the NetBEUI protocol π This document defines the Network Control Protocol that sets up and configures NBF over PPP β¨
The NBFCP protocol is only for an end system connecting to a peer system, or to the LAN that peer system is connected to π It is not for connecting two LANs together, because of NetBIOS name limitations and NetBIOS name defense mechanisms π
Table of Contents π
1. Introduction .......................................... 2
1.1 Specification of Requirements ................... 2
1.2 Terminology ..................................... 3
2. A PPP Network Control Protocol for NBF ................ 3
2.1 Sending NBF Datagrams ........................... 4
2.2 Bridging NBF Datagrams........................... 5
2.3 NetBIOS Name Defense............................. 5
3. NBFCP Configuration Options ........................... 6
3.1 Name-Projection.................................. 6
3.2 Peer-Information................................. 8
3.3 Multicast-Filtering.............................. 10
3.4 IEEE-MAC-Address-Required........................ 11
SECURITY CONSIDERATIONS ...................................... 12
REFERENCES ................................................... 12
ACKNOWLEDGEMENTS ............................................. 13
CHAIR'S ADDRESS .............................................. 13
AUTHOR'S ADDRESS ............................................. 13
1. Introduction β¨
PPP has three main components, and honestly they're iconic:
- A method for encapsulating multi-protocol datagrams.
- A Link Control Protocol (LCP) for establishing, configuring, and testing the data-link connection.
- A family of Network Control Protocols for establishing and configuring different network-layer protocols.
To get communications going over a point-to-point link, each end of the PPP link has to send LCP packets first to configure and test the data link π¦ After the link is up and any optional facilities have been negotiated as the LCP needs, PPP must send NBFCP packets to choose and configure the NBF network-layer protocol π Once NBFCP reaches the Opened state, NBF datagrams can go over the link π
The link stays configured for communications until explicit LCP or NBFCP packets close it down, or until some external event happens, like an inactivity timer expiring or a network administrator stepping in π
1.1. Specification of Requirements π
In this document, a few words are used to signify the requirements of the specification. They're often capitalized, so pay attention π
- MUST: This word, or the adjective "required", means the definition is an absolute requirement of the specification. π«Ά
- MUST NOT: This phrase means the definition is an absolute prohibition of the specification. π«
- SHOULD: This word, or the adjective "recommended", means there may be valid reasons in particular circumstances to ignore this item. But the full implications should be understood and carefully weighed before choosing a different course. π€
- MAY: This word, or the adjective "optional", means this item is one of an allowed set of alternatives. An implementation which does not include this option MUST be prepared to interoperate with another implementation which does include the option. πΈ
1.2. Terminology π
This document frequently uses the following terms:
- peer: The other end of the point-to-point link. π§
- silently discard: This means the implementation discards the packet without further processing. The implementation SHOULD provide the capability of logging the error, including the contents of the silently discarded packet, and SHOULD record the event in a statistics counter. π
- end-system: A user's machine. It only sends packets to servers and other end-systems. It doesn't pass any packets through itself. π»
- router: Allows packets to pass through, usually from one ethernet segment to another. Sometimes these are called "intermediate-systems". π
- bridge: Allows packets to pass through with the data field unmodified. Usually from one ethernet segment to another, or from one ethernet segment to a token-ring segment. π
- gateway: Allows packets to be sent from one network protocol to the same or a different network protocol. For example, NetBIOS packets from an NBF network to a TCP/IP network which has implemented RFC 1001 and RFC 1002. πͺ
- local access only server: A server which does not pass any packets through itself to other servers. π
2. A PPP Network Control Protocol for NBF π
The NBF Control Protocol (NBFCP) is in charge of configuring, enabling, and disabling the NBF protocol modules on both ends of the point-to-point link β¨ NBFCP uses the same packet exchange mechanism as the Link Control Protocol π¦ NBFCP packets MUST NOT be exchanged until PPP has reached the Network-Layer Protocol phase. NBFCP packets received before that phase is reached should be silently discarded π
The NBF Control Protocol is exactly the same as the Link Control Protocol [1], with the following exceptions:
Frame Modifications
The packet may utilize any modifications to the basic frame format which have been negotiated during the Link Establishment phase. π
Data Link Layer Protocol Field
Exactly one NBFCP packet is encapsulated in the Information field of a PPP Data Link Layer frame where the Protocol field indicates type hex 803f (NBF Control Protocol). π
Code field
Only Codes 1 through 7 (Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject) are used. Other Codes should be treated as unrecognized and should result in Code-Rejects. π«
Timeouts
NBFCP packets MUST 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. β³
Also, because NetBIOS name defense takes time (typically a minimum of 3 seconds if names are added in parallel), it is suggested that if Name-Projection is negotiated, the timeouts are increased to 10 seconds. Patience is a whole vibe π
Configuration Option Types
NBFCP has a distinct set of Configuration Options π§©
2.1. Sending NBF Datagrams π
Before any NBF packets can be communicated, PPP must reach the Network-Layer Protocol phase, and the NBF Control Protocol must reach the Opened state πΈ
Unless otherwise negotiated, exactly one NBF packet is encapsulated in the Information field of a PPP Data Link Layer frame where the Protocol field indicates type hex 003f (NBF datagram). β¨
Since NBF datagrams for PPP don't have a datagram length field, the encapsulated NBF packet MUST NOT contain any extra octet padding, except when Self-Defining-Padding is negotiated π ββοΈ
The maximum length of an NBF datagram sent over a PPP link is the same as the maximum length of the Information field of a PPP data link layer frame. There's no standard way to fragment and reassemble NBF datagrams, so PPP links supporting NBF MUST allow at least 576 octets in the information field of a data link layer frame π₯ It is recommended that an implementation allow 1500 octets in the information field, unless the IEEE-MAC-Address-Required boolean option is negotiated (see below) π
2.2. Bridging NBF Datagrams π
There are at least four different MAC header implementations for NBF packets: 802.3 Ethernet, 802.5 Token-Ring, DIX Ethernet, and FDDI. Because NBF is not a routable protocol, some PPP implementations may require IEEE MAC addresses to properly route or bridge NBF packets. Some PPP implementations may require the entire MAC media header to properly route or bridge NBF packets. Other smarter implementations may only require the IEEE MAC addresses, and still other implementations (such as NetBIOS gateways) may not require any MAC address fields π§
NBFCP implementations which require IEEE Addresses should negotiate the NBFCP IEEE-MAC-Address-Required boolean configuration option, so that the MAC header can be provided in the NBF packet π«Ά
If the IEEE-MAC-Address-Required boolean configuration option is negotiated, all NBF datagrams MUST be sent with the specified 12 octet IEEE MAC address header. Since negotiation of this option happens after the LCP phase, NBF packets MAY exceed the negotiated PPP MRU size. A PPP implementation which negotiates this option MUST allow reception of PPP NBF packets 12 octets larger than the negotiated MRU size π¦
2.3. NetBIOS Name Defense π‘οΈ
In order to guarantee uniqueness of NetBIOS Names on the network, NBFCP requires that end-system implementations MUST negotiate the Name-Projection configuration option π
3. NBFCP Configuration Options β
NBFCP Configuration Options let you negotiate modifications to the standard characteristics of the network-layer protocol ποΈ If a Configuration Option is not included in a Configure-Request packet, the default value for that Configuration Option is assumed π§
NBFCP uses the same Configuration Option format defined for LCP [1], with a separate set of Options π
Up-to-date values of the NBFCP Option Type field are specified in the most recent "Assigned Numbers" RFC [2]. Current values are assigned as follows:
1 Name-Projection
2 Peer-Information
3 Multicast-Filtering
4 IEEE-MAC-Address-Required
3.1. Name-Projection π
Description π
okay so this option is how a peer shares the NetBIOS names registered on its network πΈ The sender of the Configure-Request says which NetBIOS names it wants the remote peer to add. More than one Name-Projection option MAY appear in a single Configure-Request, so you can pack several into one request π«Ά
Implementations that don't attempt to add any NetBIOS names MUST Configure-Reject the Name-Projection Configuration Option. no exceptions, bestie π
If the remote peer doesn't offer Name-Projection but the local peer needs it, the local peer should Configure-Nak the request. It says it wants the remote peer to add zero NetBIOS names, because zero is the only value it knows is acceptable π§ Then the remote peer may terminate NBFCP, may attempt to add zero names, or may attempt to add one or more names. so many options, all valid π
When the receiving peer can't add every requested name, it MUST Configure-Nak with the complete list of names that were requested π Names that did get added get the Added field set to zero. Names that didn't make it get the Added field set to a non-zero return code, so everyone knows what went wrong β¨ Then the sender SHOULD resend the Configure-Request with just the successfully added names.
The implementation may choose to fail configuration if the complete list of NetBIOS names isn't accepted. If it does that, it should terminate NBFCP by sending a Terminate-Request packet π₯
Here's the vibe check on timing: adding NetBIOS names can take time (usually 3 seconds), and PPP may default the restart timer to 3 seconds. That's a recipe for chaos, so the restart timer SHOULD default to 10 seconds when configuring NetBIOS names β°
The Name-Projection Configuration Option format looks like this. The fields go 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 | 1st NetBIOS-Name
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1st NetBIOS-Name (cont.)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1st NetBIOS-Name (cont.)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1st NetBIOS-Name (cont.)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1st NetBIOS-Name (cont.) | Added |2nd NetBIOS Name...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type π₯
1
Length π
2 + (Number of NetBIOS names * 17)
NetBIOS-Names π
this is a group of zero or more sixteen octet NetBIOS-Name fields. It lists every NetBIOS name the peer wants added to the remote network, but only when the packet is a Configure-Request β¨ If it's a Configure-Reject, the peer doesn't support this option, and you can assume no NetBIOS names were added π
because the length field is only one octet, only 14 NetBIOS names can be added per Name-Projection option. if you need more than 14, you'll have to send more than one Name-Projection option in the Configure-Request packet π§©
Added π
this is a one octet field with a dual role, which is very main character π In a Name-Projection Request packet, the Added field holds the type of NetBIOS name being added. here are the name types:
01 Unique Name.
02 Group Name.
If the packet is a Configure-Reject, the Added field should contain the NetBIOS return code for the NetBIOS Add Name or NetBIOS Add Group Name command, as defined in the NetBIOS 3.0 specification = [3].
Here's a quick summary of the common result codes, in hex type:
00 Name successfully added.
0D Duplicate name in local name table.
0E Name table full.
15 Name not found or cannot specify "*" or null.
16 Name in use on remote NetBIOS.
19 Name conflict detected.
30 Name defined by another environment.
35 Required system resources exhausted.
3.2. Peer-Information π§
Description π¦
this option is how the peer shares NetBIOS-related config info. negotiating it isn't mandatory, but it's suggested, so please do it π«Ά
The Peer-Information Configuration Option format looks like this. The fields go 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 | Peer-class |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer-version (major) | Peer-version(minor) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer-name ....
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type π
2
Length π
>=3D8
If the length is 8, there's no Peer-name. If the length is greater than 8, the Peer-name's length is Length - 8 π
Peer-class π
this is a one octet field that identifies the sender's implementation type. The initial values are assigned like this:
Value Class
1 Reserved for legacy implementations.
2 PPP NetBIOS Gateway Server.
3 Reserved for legacy implementations.
4 PPP Local Access Only Server.
5 Reserved for legacy implementations.
6 PPP NBF Bridge.
7 Reserved for legacy implementations.
8 PPP End-System.
Peer-version πΈ
this is four octets showing the version of the communication peer on one side of the PPP connection. The first two octets are the major version number, and the last two are the minor version number. Together, major and minor make a 16 bit unsigned number, sent with the most significant octet first π₯
Peer-name β¨
the name of the peer. A suggested name is the NetBIOS workstation name of the peer. If the length field is 8, no peer name is provided. The peer-name may not be greater than 32 octets in length π§Έ
3.3. Multicast-Filtering π
Description π
this option lets you negotiate the use of the Multicast-Forward-Period and the Multicast-Priority. It's how you negotiate handling of multicast packets β¨ The sender of the Configure-Request uses it to state how multicast packets are currently being handled. The peer can request parameters by NAKing the option and returning valid Multicast-Filtering parameters π¦
If negotiation about the remote Multicast-Filtering is required, and the peer didn't include the option in its Configure-Request, the option SHOULD be appended to a Configure-Nak π«Ά
Controlling the multicast rate matters a lot π Some NetBIOS applications use multicasts to communicate, and withholding multicasts may stop those apps from working. Other NetBIOS applications don't need to receive any multicast packets at all, so it's best to quench the rate at which the peer sends multicast packets β°
By default, the peer is pre-configured with an administrator-assigned Multicast-Forward-Period and Priority. A Multicast-Forward-Period specified as hex type FFFF in a Configure-Request asks the receiving peer to specify a value in its Configure-Nak. A Multicast-Forward-Period value specified as hex type FFFF in a Configure-Nak is agreement that no value exists. A Multicast-Forward-Period of zero means all multicast packets SHOULD be forwarded π
Peers that rely on all multicast packets being forwarded SHOULD request a Multicast-Forward-Period of zero and a Multicast-Priority of one, by NAKing the Configure-Request option and appending the proper parameters to a Configure-Nak π
The Multicast-Filtering Configuration Option format looks like this. The fields go 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 | Multicast-Forward-Period |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Priority |
+-+-+-+-+-+-+-+-+
Type π
3
Length π
5
Multicast-Forward-Period π
this is a two octet field showing the maximum period, in seconds, at which multicast packets can be sent. The maximum value for this field is 60 (one minute). A value of zero means there's no maximum period at which multicast packets can be sent. A value of hex type FFFF means the Multicast-Forward-Period is unknown. A value of five means multicast packets won't be sent more often than once every five seconds. This two octet value is a 16 bit unsigned number, sent with the most significant octet first πΈ
Priority π₯
this is a one octet field showing whether multicast packets get priority over other packets when being sent. A value of 0 means directed packets have priority. A value of 1 means multicast packets have priority π
3.4. IEEE-MAC-Address-Required β¨
okay so this one is the "please wrap every single packet in a MAC header" option π and it's a boolean, so it's either on or off, no in-between bestie π
Description
This boolean Configuration Option lets the peer require that all NBF datagrams be sent with a 12 octet IEEE MAC Address header. by default, it's assumed no MAC header is required πΈ (main character energy for the default: nothing extra unless you ask!)
A quick peek at the IEEE-MAC-Address-Required Boolean Configuration Option format is below. the fields go left to right, obvi π¦
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type:
4π - Length:
2π«Ά
Requirements
okay so by default the NBF datagram goes out with zero MAC header info π the NBF datagram information field is basically the same thing as the data field in 802.3, 802.5, and FDDI frames, so no notes there π
if this option gets negotiated successfully, every NBF datagram gets a 12 octet IEEE MAC Address header prepended to the information field π here's what that looks like, read 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination MAC Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination MAC Address | Source MAC Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source MAC Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 802.3/802.5/FDDI data field...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
the MAC Address here is in non-canonical form, which means the first bit transmitted in every byte is the most significant bit π₯ (bestie, bit order is everything, don't mix this up!)
the MAC Address is non-canonical: first bit out in each byte = most significant bit. yes it's giving bit-order drama π
Security Considerations
Security issues are not discussed in this memo. π no security notes from this doc, so y'all gotta look elsewhere for that tea π
References
- [1] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)", STD 51, RFC 1661, July 1994. π§
- [2] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, October 1994. π
- [3] IBM Corp., "IBM Local Area Network Technical Reference", Third Edition, Document Number SC30-3383-2, November 4, 1988. π
- [4] Baker, F., and R. Bowen "PPP Bridging Control Protocol (BCP)", Work in Progress. β
Acknowledgments
some of the text in this doc is taken from older docs made by the Point-to-Point Protocol Working Group of the Internet Engineering Task Force (IETF) π
Thomas J. Dimitri (previously at Microsoft Corporation) wrote the original draft π¦
special thanks go to coworkers at Microsoft, Bill Simpson (Daydreamer), Tom Coradetti (DigiBoard), Marty Del Vecchio (Shiva), Russ Gocht (Shiva) and several members of the IETF PPP Working Group π«Άβ¨
Chair's Address
the working group can be contacted via the current chair:
Karl Fox Ascend Communications 3518 Riverside Drive, Suite 101 Columbus, Ohio 43221
karl@MorningStar.com karl@Ascend.com
Author's Address
questions about this memo can also be directed to:
Gurdeep Singh Pall Microsoft Corporation 1 Microsoft Way Redmond, WA 98052-6399
EMail: gurdeep@microsoft.com π
π¦ where this page comes from
- ietf: rfc2097 1997-01
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms