RFC 5838

Support of Address Families in OSPFv3

πŸ“… published April 2010, from ietf

RFC 5838: Support of Address Families in OSPFv3 πŸ¦‹

Okay bestie, let's get into RFC 5838! πŸ’– It's titled Support of Address Families in OSPFv3 and it's a Standards Track doc, dated April 2010 (ISSN 2070-1721). The lead author is A. Lindem, Ed. from Ericsson, with co-authors S. Mirtorabi, A. Roy, and M. Barnes from Cisco Systems, and R. Aggarwal from Juniper Networks. The title block doesn't list any Obsoletes or Updates entries, so it doesn't replace or update other RFCs. 🌸

Abstract ✨

Here's the big idea: this doc is a way to run multiple address families (AFs) in OSPFv3, using multiple instances. Each AF gets mapped to an OSPFv3 instance through the Instance ID field in the OSPFv3 packet header. It's giving simple, and it barely touches OSPFv3 itself. πŸ’…

Status of This Memo πŸŽ€

This is an Internet Standards Track document. 🧚

It's a product of the Internet Engineering Task Force (IETF), so it represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check out Section 2 of RFC 5741. πŸ“–

Info about the current status of this document, any errata, and how to give feedback is at http://www.rfc-editor.org/info/rfc5838. πŸ”—

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved. πŸ¦‹

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were in effect on the date of publication. Please read these carefully, because they spell out your rights and restrictions for this document. Code Components pulled from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License. βš–οΈ

Table of Contents 🌈

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
  1.1.  Design Considerations  . . . . . . . . . . . . . . . . . .  2
  1.2.  Requirements Notation  . . . . . . . . . . . . . . . . . .  3
2.  Protocol Details . . . . . . . . . . . . . . . . . . . . . . .  3
  2.1.  Instance ID Values for New AFs . . . . . . . . . . . . . .  3
  2.2.  OSPFv3 Options Changes . . . . . . . . . . . . . . . . . .  4
  2.3.  Advertising Prefixes in AFs Other Than IPv6  . . . . . . .  4
  2.4.  Changes to the Hello Packet Processing . . . . . . . . . .  4
  2.5.  Next-Hop Calculation for IPv4 Unicast and Multicast AFs  .  5
  2.6.  AS-External-LSA and NSSA-LSA Forwarding Address for
        IPv4 Unicast and IPv4 Multicast AFs  . . . . . . . . . . .  5
  2.7.  Database Description Maximum Transmission Unit (MTU)
        Specification for Non-IPv6 AFs . . . . . . . . . . . . . .  6
  2.8.  Operation over Virtual Links . . . . . . . . . . . . . . .  8
3.  Backward Compatibility . . . . . . . . . . . . . . . . . . . .  8
4.  Security Considerations  . . . . . . . . . . . . . . . . . . .  8
5.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  9
6.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  6.1.  Normative References . . . . . . . . . . . . . . . . . . . 11
  6.2.  Informative References . . . . . . . . . . . . . . . . . . 11
Appendix A.  Acknowledgments . . . . . . . . . . . . . . . . . . . 12

1. Introduction ✨

OSPFv3 [OSPFV3] was defined to support the base IPv6 unicast address family (AF). 🌸 But people need to advertise other AFs in OSPFv3 too, like multicast IPv6, unicast IPv4, and multicast IPv4. This doc makes that happen by mapping each AF to its own Instance ID and OSPFv3 instance. Iconic. πŸ‘‘

1.1. Design Considerations

This section explains why the multiple Instance ID approach is the move for supporting multiple address families in OSPFv3. As we covered earlier, OSPFv3 is designed to support multiple instances, so mapping an instance to an address family doesn't add any new mechanisms to the protocol. 🧠 It keeps protocol extensions to a minimum and makes implementation simpler. Having a separate link state database per address family is also easier to debug and operate, and it doesn't change the existing instance, area, and interface-based configuration model in most OSPFv3 implementations. Main character energy. πŸ’…

1.2. Requirements Notation

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC-KEYWORDS]. 🫢

2. Protocol Details πŸ“

Right now the whole Instance ID number space is used for IPv6 unicast. This spec gives different Instance ID ranges to different AFs so OSPFv3 can support the others. Each Instance ID means a separate OSPFv3 instance with its own neighbor adjacencies, link state database, protocol data structures, and shortest path first (SPF) computation. Lowkey genius. 🧩

The current Link State Advertisements (LSAs) that advertise IPv6 unicast prefixes can also advertise prefixes from other AFs without any changes. No cap. πŸ™Œ

Also, OSPFv3 runs on top of IPv6 and uses IPv6 link local addresses for its control packets. So IPv6 has to be enabled on an OSPFv3 link, even if that link isn't taking part in any IPv6 AFs. It's required that IPv6 be enabled, bestie. πŸ”₯

2.1. Instance ID Values for New AFs πŸŽ€

Instance ID zero is already the default for the IPv6 unicast AF. When this spec is used to support multiple AFs, these ranges get defined for each AF. The first value in each range is the default for its AF. 🌈

   Instance ID # 0    -  # 31     IPv6 unicast AF
   Instance ID # 32   -  # 63     IPv6 multicast AF
   Instance ID # 64   -  # 95     IPv4 unicast AF
   Instance ID # 96   -  # 127    IPv4 multicast AF
   Instance ID # 128  -  # 255    Unassigned

                         OSPFv3 Instance IDs

2.2. OSPFv3 Options Changes πŸ¦‹

A new AF-bit gets added to the OSPFv3 Options field. The V6-bit only applies to the IPv6 unicast AF. ✨

                            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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+--+-+-+-+-+--+
       | | | | | | | | | | | | | | | |AF|*|*|DC|R|N|x|E|V6|
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+--+-+-+-+-+--+

                        The Options field

                           OSPFv3 Options

V6-bit πŸ’– The V6-bit lets OSPFv3 leave a node out of the IPv6 unicast route calculation while still letting it into the SPF calculation for other address families. Since the Instance ID now shows the AF directly, this bit gets ignored in AFs other than IPv6 unicast. πŸ™ˆ

AF-bit πŸ’– When an OSPFv3 router supports AFs the way this spec describes, it MUST set the AF-bit in the OSPFv3 Options field of Hello packets, Database Description packets, and LSAs. πŸ”₯

2.3. Advertising Prefixes in AFs Other Than IPv6 🌸

Each prefix advertised in OSPFv3 has a prefix Length field [OSPFV3]. That makes it easy to advertise prefixes of different lengths in different AFs. The existing LSAs in OSPFv3 handle this, so there's no need to define new ones. 🧚

Prefixes that don't match the AF of an OSPFv3 instance MUST NOT be used in the route computation for that instance. 🚫

2.4. Changes to the Hello Packet Processing πŸ’œ

If an OSPFv3 router doesn't support this spec but is configured with the matching Instance ID, packets could get black holed. πŸ•³οΈ That could happen through misconfiguration or a router software downgrade. Black holing is possible because a router that doesn't support this spec can still show up in the SPF calculated path, as long as it forms adjacencies using the Instance ID for that AF. Router-LSAs and Network-LSAs are AF independent, so they don't help here. 😭

To avoid this, Hello packet processing gets changed so adjacencies only form with routers that have the AF-bit set in their Options field. πŸ›‘οΈ

Receiving Hello packets is specified in section 4.2.2.1 of [OSPFV3]. This check gets added to Hello packet reception:

  • When an OSPFv3 router participates in an AF (sets the AF-bit in the Options field), it MUST discard Hello packets having the AF-bit clear in the Options field. The only exception is the Base IPv6 unicast AF, where this check MUST NOT be done (for backward compatibility). πŸŽ€

2.5. Next-Hop Calculation for IPv4 Unicast and Multicast AFs 🌈

OSPFv3 runs on top of IPv6 and uses IPv6 link local addresses for its control packets and next-hop calculations. IPv6 link local addresses could technically be used as next hops for IPv4 address families, but it's desirable to have IPv4 next-hop addresses instead. For example, in the IPv4 multicast AF, the Protocol Independent Multicast (PIM) [PIM] neighbor address and the next-hop address should both be IPv4 addresses so the Reverse Path Forwarding (RPF) lookup works correctly. Troubleshooting is also easier when the prefix address and next-hop address are in the same AF. πŸ”

To get there, the link's IPv4 address gets advertised in the "link local address" field of the IPv4 instance's Link-LSA. This address goes in the first 32 bits of the "link local address" field and is used for IPv4 next-hop calculations. The remaining bits MUST be set to zero. πŸ¦‹

We call a Direct Interface Address (DIA) an IPv4 or IPv6 address that is directly reachable over an attached link and has an available layer 3 to layer 2 mapping. There's no explicit need for the IPv4 link addresses to be on the same subnet. An implementation SHOULD resolve layer 3 to layer 2 mappings via the Address Resolution Protocol (ARP) [ARP] or Neighbor Discovery (ND) [ND] for a DIA, even if the IPv4 address isn't on the same subnet as the router's interface IP address. 🧭

2.6. AS-External-LSA and NSSA-LSA Forwarding Address for IPv4 Unicast and IPv4 Multicast AFs πŸ’…

For OSPFv3, this address is an IPv6 host address (128 bits). If it's included, data traffic for the advertised destination gets forwarded to this address. ✨ For IPv4 unicast and IPv4 multicast AFs, the Forwarding Address in AS-external-LSAs and NSSA-LSAs MUST encode an IPv4 address. πŸ™Œ To do that, the IPv4 Forwarding Address is advertised by placing it in the first 32 bits of the Forwarding Address field in AS-external-LSAs and NSSA-LSAs. The remaining bits MUST be set to zero. 🧁

To be continued... πŸ§šπŸ’–

2.7. Database Description Maximum Transmission Unit (MTU) Specification for Non-IPv6 AFs πŸŽ€

okay bestie, the MTU stuff is SO important πŸ’… For address families other than IPv6, both the MTU for the instance address family and the IPv6 MTU used for OSPFv3 maximum packet determination MUST be considered. The MTU in the Database Description packet MUST always contain the MTU corresponding to the advertised address family. For example, if the instance corresponds to an IPv4 address family, the IPv4 MTU for the interface MUST be specified in the interface MTU field. As specified in Section 10.6 of [OSPFV2], the Database Description packet will be rejected if the MTU is greater than the receiving interface's MTU for the address family corresponding to the instance. This behavior will assure that an adjacency is not formed and address family specific routes are not installed over a path with conflicting MTUs 🚫

The value used for OSPFv3 maximum packet size determination MUST also be compatible for an adjacency to be established. Since only a single MTU field is specified, the M6-bit is defined by this specification. If the M6-bit is clear, the specified MTU SHOULD also be checked against the IPv6 MTU, and the Database Description packet SHOULD be rejected if the MTU is larger than the receiving interface's IPv6 MTU. An OSPFv3 router SHOULD NOT set the M6-bit if its IPv6 MTU and address family specific MTU are the same 🧚

If the IPv6 and IPv4 MTUs differ, the M6-bit MUST be set for non-IPv6 address families. If the M6-bit is set, the IPv6 MTU is dictated by the presence or absence of an IPv6 MTU TLV in the link-local signaling (LLS) [LLS] block. If this TLV is present, it carries the IPv6 MTU that SHOULD be compared with the local IPv6 MTU. If this TLV is absent, the minimum IPv6 MTU of 1280 octets SHOULD be used for the comparison (refer to [IPV6]) ✨

If the M6-bit is set in a received Database Description packet for a non-IPv6 address family, the receiving router MUST NOT check the Interface MTU in the Database Description packet against the receiving interface's IPv6 MTU. this one is a whole vibe, no cap πŸ’–

The figure below graphically depicts the changed fields in octets 20-23 of the OSPFv3 Database Description packet:

      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
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+--+
     |        Interface MTU          |      0        |0|0|0|M6|0|I|M|MS|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+--+

                OSPFv3 Database Description Packet Changes

The changed fields in the Database Description packet are described below. The remaining fields are unchanged from [OSPFV3] 🌸

Interface MTU The size in octets of the largest address family specific datagram that can be sent on the associated interface without fragmentation. The MTUs of common Internet link types can be found in Table 7-1 of [MTUDISC]. The Interface MTU SHOULD be set to 0 in Database Description packets sent over virtual links.

M6-bit The IPv6 MTU bit - this bit indicates that the sender is using a different IPv6 MTU than the MTU for the AF.

An IPv6 MTU TLV can be optionally carried in an LLS block as described above. This TLV carries the IPv6 MTU for the interface. The length field of the TLV is set to 4 bytes πŸ¦‹

        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
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |              17               |               4               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                           IPv6 MTU                            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                          Format of IPv6 MTU TLV

Only one instance of the IPv6 MTU TLV MAY appear in the LLS block. Instances subsequent to the first are not processed, and the LLS inconsistency SHOULD be logged πŸ“

OSPFv3 control packets sent over a virtual link are IPv6 packets and may traverse multiple hops. Therefore, there MUST be a global IPv6 address associated with the virtual link so that OSPFv3 control packets are forwarded correctly by the intermediate hops between virtual link endpoints. Although this requirement can be satisfied in IPv6 unicast AFs, it will not function in other AFs as there will not be a routable global IPv6 address or forwarding path. Therefore, virtual links are not supported in AFs other than IPv6 unicast πŸ™ˆ

3. Backward Compatibility πŸ¦‹

All modifications to OSPFv3 apply exclusively to the support of address families other than the IPv6 unicast AF using multiple OSPFv3 instances as described in this specification. These modifications are not applicable to IPv6 unicast topologies and do not preclude future single instance mechanisms for supporting multiple address families.

In this section, we will define a non-capable OSPFv3 router as one not supporting this specification. When multiple AFs are supported as defined herein, each new AF will have a corresponding Instance ID and can interoperate with the existing non-capable OSPFv3 routers in an IPv6 unicast topology. Furthermore, when a non-capable OSPFv3 router uses an Instance ID that is reserved for a given AF, no adjacency will be formed with this router since the AF-bit in the Options field will be clear in its OSPFv3 Hello packets. Therefore, there are no backward compatibility issues. AFs can be gradually deployed without disturbing OSPFv3 routing domains with non-capable OSPFv3 routers πŸ₯°

4. Security Considerations πŸ”

IPsec [IPsec] can be used for OSPFv3 authentication and confidentiality as described in [OSPFV3-AUTH]. When multiple OSPFv3 instances use the same interface, they all MUST use the same Security Association (SA), since the SA selectors do not provide selection based on data in OSPFv3 Header fields (e.g., the Instance ID). This restriction is documented in Section 8 of [OSPFV3-AUTH].

This is seriously important: if your instances share an interface and don't share an SA, the SA selectors can't tell them apart by Instance ID, so keep them all on the same SA 😭

Security considerations for OSPFv3 are covered in [OSPFV3].

5. IANA Considerations 🌸

The following IANA assignments were made from existing registries.

  • The AF-bit was assigned from the OSPFv3 Options registry as defined in Section 2.2.
  • The M6-bit was assigned from the DD Packet Flags registry as defined in Section 2.7
  • The TLV type (17) for the IPv6 MTU TLV was assigned from the OSPF LLS TLVs registry.

IANA created a new registry, "OSPFv3 Instance ID Address Family Values", for assignment of the mapping of OSPFv3 Instance IDs to address families when this specification is used to support multiple address families. Note that the Instance ID field MAY be used for applications other than the support of multiple address families. However, if it is being used for address families as described in this specification, the assignments herein SHOULD be honored πŸ“‹

            +-------------+----------------------+--------------------+
            | Value/Range | Designation          | Assignment Policy  |
            +-------------+----------------------+--------------------+
            | 0           | Base IPv6 Unicast AF | Already assigned   |
            |             |                      |                    |
            | 1-31        | IPv6 Unicast AFs     | Already assigned   |
            |             | dependent on local   |                    |
            |             | policy               |                    |
            |             |                      |                    |
            | 32          | Base IPv6 Multicast  | Already assigned   |
            |             |                      |                    |
            | 33-63       | IPv6 Multicast AFs   | Already assigned   |
            |             | dependent on local   |                    |
            |             | policy               |                    |
            |             |                      |                    |
            | 64          | Base IPv4 Unicast AF | Already assigned   |
            |             |                      |                    |
            | 65-95       | IPv4 Unicast AFs     | Already assigned   |
            |             | dependent on local   |                    |
            |             | policy               |                    |
            |             |                      |                    |
            | 96          | Base IPv4 Multicast  | Already assigned   |
            |             |                      |                    |
            | 97-127      | IPv4 Multicast AFs   | Already assigned   |
            |             | dependent on local   |                    |
            |             | policy               |                    |
            |             |                      |                    |
            | 128-255     | Unassigned           | Standards Action   |
            +-------------+----------------------+--------------------+

                 OSPFv3 Address Family Use of Instance IDs
  • Instance IDs 0-127 are assigned by this specification.
  • Instance IDs in the range 128-255 are not assigned at this time. Before any assignments can be made in this range, there MUST be a Standards Track RFC including an IANA Considerations section explicitly specifying the AF Instance IDs being assigned. that's a strict gatekeeper, and I respect it πŸ”₯

6. References πŸ“š

6.1. Normative References

   [IPV6]          Deering, S. and R. Hinden, "Internet Protocol,
                   Version 6 (IPv6) Specification", RFC 2460,
                   December 1998.

   [IPsec]         Kent, S. and K. Seo, "Security Architecture for the
                   Internet Protocol", RFC 4301, December 2005.

   [OSPFV2]        Moy, J., "OSPF Version 2", STD 54, RFC 2328,
                   April 1998.

   [OSPFV3]        Coltun, R., Ferguson, D., Moy, J., and A. Lindem,
                   "OSPF for IPv6", RFC 5340, July 2008.

   [OSPFV3-AUTH]   Gupta, M. and S. Melam, "Authentication/
                   Confidentiality for OSPFv3", RFC 4552, June 2006.

   [RFC-KEYWORDS]  Bradner, S., "Key words for use in RFC's to Indicate
                   Requirement Levels", RFC 2119, March 1997.

6.2. Informative References

   [ARP]           Plummer, D., "Ethernet Address Resolution Protocol:
                   Or Converting Network Protocol Addresses to 48.bit
                   Ethernet Address for Transmission on Ethernet
                   Hardware", STD 37, RFC 826, November 1982.

   [LLS]           Zinin, A., Roy, A., Nguyen, L., Friedman, B., and D.
                   Young, "OSPF Link-Local Signaling", RFC 5613,
                   August 2009.

   [MTUDISC]       Mogul, J. and S. Deering, "Path MTU Discovery",
                   RFC 1191, November 1990.

   [ND]            Narten, T., Nordmark, E., Simpson, W., and H.
                   Soliman, "Neighbor Discovery for IP version 6
                   (IPv6)", RFC 4861, September 2007.

   [PIM]           Fenner, B., Handley, M., Holbrook, H., and I.
                   Kouvelas, "Protocol Independent Multicast - Sparse
                   Mode (PIM-SM): Protocol Specification (Revised)",
                   RFC 4601, August 2006.

Appendix A. Acknowledgments ✨

okay so the RFC text was made with Marshall Rose's xml2rfc tool 🧚 like, the whole thing was built with it, which is so iconic for the tooling world πŸ’…

bestie, we HAVE to shout out Tom Henderson and the folks at Boeing 😭🫢 they put this document into the Quagga routing suite, which lives at http:www.quagga.net 🌸 that's real implementation energy and I'm obsessed

also thank you to Nischal Sheth for reviewing and leaving comments πŸ’œ

thanks to Christian Vogt for the comments during the Gen-ART review πŸŽ€

thanks to Adrian Farrel for the comments during the IESG review πŸ¦‹

and last but definitely not least, thanks to Alfred Hoenes for the comments during the editing process πŸ‘‘ the editors really got their flowers πŸ’


Authors' Addresses πŸ’–

Here's where you can find the authors, bestie 🫢

Acee Lindem (editor) πŸ‘‘

Ericsson
102 Carric Bend Court
Cary, NC  27519
USA

EMail: `acee.lindem@ericsson.com`

Sina Mirtorabi 🌈

Cisco Systems
3 West Plumeria Drive
San Jose, CA  95134
USA

EMail: `smirtora@cisco.com`

Abhay Roy πŸ“

Cisco Systems
225 West Tasman Drive
San Jose, CA  95134
USA

EMail: `akr@cisco.com`

Michael Barnes 🧚

Cisco Systems
225 West Tasman Drive
San Jose, CA  95134
USA

EMail: `mjbarnes@cisco.com`

Rahul Aggarwal πŸ’œ

Juniper Networks
1194 N. Mathilda Ave.
Sunnyvale, CA  94089
USA

EMail: `rahul@juniper.net`
πŸ“¦ where this page comes from