From 6170186caf79c79ab4a9c410000c7aeba990b481 Mon Sep 17 00:00:00 2001 From: Wonsup Yoon Date: Tue, 14 May 2024 11:44:23 +0900 Subject: [PATCH] Generated from commit d9161f2d0f58197fb6d7a30f2ad0c25163edbc8d --- CMakeLists.txt | 2 +- Documentation/etc/README.md | 5 + Documentation/etc/pwospf.txt | 430 + Documentation/rfc/README.md | 1 + Documentation/rfc/rfc1247.txt | 10585 ++++++++++++++++ app/kens/testenv.hpp | 4 +- app/pwospf/CMakeLists.txt | 26 + app/pwospf/PWOSPFAssignment.cpp | 50 + app/pwospf/PWOSPFAssignment.hpp | 140 + app/pwospf/pwospf.lua | 80 + app/pwospf/testpwospf.cpp | 421 + app/rip/CMakeLists.txt | 27 + .../RIPAssignment.cpp} | 18 +- .../RIPAssignment.hpp} | 18 +- .../testrouting.cpp => rip/testrip.cpp} | 4 +- app/routing/CMakeLists.txt | 27 - include/E/E_System.hpp | 1 + include/E/Networking/E_Packet.hpp | 15 +- include/E/Networking/TCP/E_CCModule.hpp | 19 - src/E/E_System.cpp | 18 +- src/Networking/E_Packet.cpp | 36 +- src/Networking/Ethernet/E_Ethernet.cpp | 31 +- src/Networking/IPv4/E_IPv4.cpp | 9 +- 23 files changed, 11857 insertions(+), 110 deletions(-) create mode 100644 Documentation/etc/README.md create mode 100644 Documentation/etc/pwospf.txt create mode 100644 Documentation/rfc/rfc1247.txt create mode 100644 app/pwospf/CMakeLists.txt create mode 100644 app/pwospf/PWOSPFAssignment.cpp create mode 100644 app/pwospf/PWOSPFAssignment.hpp create mode 100644 app/pwospf/pwospf.lua create mode 100644 app/pwospf/testpwospf.cpp create mode 100644 app/rip/CMakeLists.txt rename app/{routing/RoutingAssignment.cpp => rip/RIPAssignment.cpp} (58%) rename app/{routing/RoutingAssignment.hpp => rip/RIPAssignment.hpp} (85%) rename app/{routing/testrouting.cpp => rip/testrip.cpp} (99%) delete mode 100644 app/routing/CMakeLists.txt delete mode 100644 include/E/Networking/TCP/E_CCModule.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 05a53822d..6b423edf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.11) -project(e VERSION 3.3.3) +project(e VERSION 3.3.6) # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") diff --git a/Documentation/etc/README.md b/Documentation/etc/README.md new file mode 100644 index 000000000..b900e28b6 --- /dev/null +++ b/Documentation/etc/README.md @@ -0,0 +1,5 @@ +# ETC Documentation + +| Title | Links | +|-------------------------------|-------------------------------------------------------------------------------------------------| +| Pee-Wee OSPF Protocol Details | [Doc](pwospf.txt), [Source](https://www.cl.cam.ac.uk/teaching/1011/P33/documentation/pwospf/) | diff --git a/Documentation/etc/pwospf.txt b/Documentation/etc/pwospf.txt new file mode 100644 index 000000000..f861a51dd --- /dev/null +++ b/Documentation/etc/pwospf.txt @@ -0,0 +1,430 @@ +Pee-Wee OSPF Protocol Details + +Protocol Overview: + + PWOSPF is a greatly simplified link state routing protocol based on OSPFv2 + (rfc 1247). Like OSPFv2, routers participating in a PWOSPF topology + periodically broadcast HELLO packets to discover and maintain a list of + neighbors. Whenever a change in a link status is detected (for example the + addition or deletion of a router to the topology) or a timeout occurs, each + router floods its view of the network throughout the topology so that each + router has a complete database of the network connectivity. Djikstra's + algorithm is used by each router independently to determine the next + hop in the forwarding table to all advertised routes. + +Data Structures: + +PWOSPF Router: + + Like OSPF, PWOSPF operates within an "area" of routers, defined by a 32 bit + value. A router can only participate in one area at a time. Each router in + an area must have a unique 32 bit router ID. By convention, the IP address + of the 0th interface is used as the router ID. 0 and 0xffffffff are invalid + router IDs and can be used internally to mark uninitialized router ID fields. + + Each router must therefore define the following values: + + 32 bit router ID + 32 bit area ID + 16 bit lsuint - interval in seconds between link state update broadcasts + List of router interfaces + +PWOSPF Interface: + + The interface is a key abstraction in PWOSPF for logically decomposing the + topology. Interfaces between neighboring routers are connected by links which + must have an associated subnet and mask. All links are assumed to be + bi-directional. Note you must support multiple routers connected to a + single interface, ie. via a hub or switch. + + An interface within a pwospf router is defined by the following values: + + 32 bit ip address - IP address of associated interface + 32 bit mask mask - subnet mask of assocaited interface + 16 bit helloint - interval in seconds between HELLO broadcasts + list [ + 32 bit neighbor id - ID of neighboring router. + 32 bit neighbor ip - IP address of neighboring router's interface this + interface is directly connected to. + ] + +PWOSPF Hello Protocol: + + To discover and maintain the state of available links, a router participating + in a PWOSPF topology periodically listens for and broadcasts HELLO packets. + HELLO packets are broadcasted every helloint seconds with a destination + address of ALLSPFRouters that is defined as "224.0.0.5" (0xe0000005). This + implies that all participating routers must be configured to receive and + process packets sent to ALLSPFRouters. On receipt of a HELLO packet a router + may do one of three things. If the packet is invalid or corrupt the router + will drop and ignore the packet and optionally log the error. If the packet + is from a yet to be identified neighbor and no other neighbors have been + discovered off of the incoming interface, the router will add the neighbor to + the interface. If the packet is from a known neighbor, the router will mark + the time the packet was received to track the uptime of its neighbor. The + set of links of routers to neighbors provides the basic connectivity + information for the full topology. + + PWOSPF routers use HELLO packets to monitor the status of a neighboring + router. If a neighboring router does not emit a HELLO packet within + NEIGHBOR_TIMEOUT seconds (three times the neighbor's HelloInt) of the last HELLO received, + the router is assumed down, removed from the interface and a link state + update flood is initiated. Note that ONLY HELLO packets are used to + determine link status. Even in the case where the router is actively routing + packets and generating link state update packets, if no HELLO packets are + generated it will be considered disconnected from the topology. + +PWOSPF Link State Updates: + + Global network connectivity is obtained by each router through link state + updates in which local link connectivity information is flooded throughout + the area by each router. Link state updates are sent periodically every + LSUINT seconds (default value of 30) and whenever a change in link status is + detected. If a link state change initiates a links state update, the lsuint + counter is reset to wait another LSUINT seconds before triggering another + flood. + + The link state advertisements generated by each router lists the subnets of + each of the router's interfaces and all neighboring routers. Link state + updates operate via a simple sequenced, unacknowledged flooding scheme in + which received packets are flooded to all neighbors except the neighbor from + whom the packet was received. Generated packets are flooded to all + neighbors (they should be addressed directly to each neighbor - i.e., do not + send them to the special ALLSPFRouters address). LSU packets are used + to build and maintain the network topology database at each router. If the + LSU packet does not advertise a change in the state of the topology as + is already reflected in the database it is the state of the topology as + discarded and the sequence number is updated. Otherwise, the information is + used to update the database and the router's forwarding tables are + recalculated using Djikstra's algorithm. + + A gateway router may advertise an additional default subnet for an interface + that is connected to a separate network. In the typical case, this interface + will be the networks link to the Internet and will advertise a default subnet + of 0.0.0.0. All traffic not destined to a subnet on the PWOSPF network will + be routed to this as a gateway to the Internet. + +The Topology Database + + Every router in a PWOSPF area maintains a full representation of the area, + network topology. This topology database is used to calculate the next hop + for each destination in the network. A typical implementation of the + topology database will contain an adjacency list of all the routers in the + network as well as the subnets associated with each link. Djikstra's + algorithm is used on the adjacency list to determine the best, next hop for + each router. The forwarding table is then built using the advertised routes + from each router and the next hop to those routers as determined by + Djikstra. + + If there are discrepancies in advertisements from two different hosts about + the same link, the link is assumed invalid and not added to the database. + This may happen in the following cases: + + - Host A advertises that it is connected to subnet with mask 255.255.255.0 + and neighbor B. Host B does not advertise that A is a neighbor. + + - Host A advertises that it is connected to subnet with mask 255.255.255.0 + and neighbor B. Host B advertises it is connected to a subnet with mask + 255.255.255.240 with neighbor A. + + In both of these cases the link should not be added to the advertised + database. + + Each entry in the database is time-stamped with the last time an LSU for + the associated router was received. If an LSU is not received from the + host within LSU_TIMEOUT seconds (three times LSUINT) from the last, the entry + is invalidated and removed from the database. + +Handling Incoming PWOSPF Packets + + Each host participating in a PWOSPF topology must check the following values + on incoming pwospf packets: + + o The version number field must specify protocol version 2. + o The 16-bit checksum on the PWOSPF packet's contents must be + verified. (the 64-bit authentication field must be excluded + from the checksum calculation) + o The area ID found in the PWOSPF header must match the Area ID + of the receiving router. + o The Authentication type specified must match the authentication type + of the receiving router. + + PWOSPF does not support authentication, however it is our plan to progress + towards OSPFv2 compatibility. For this reason, we are using the full OSPFv2 + header format which contains both an Authtication type and data field. These + fields should be set to 0 for all valid PWOSPF packets. + +Handling Incoming HELLO Packets + + This section explains the detailed processing of a received Hello packet. + The generic input processing of PWOSPF packets will have checked the + validity of the IP header and the PWOSPF packet header. Next, the values of + the Network Mask and HelloInt fields in the received Hello packet must be + checked against the values configured for the receiving interface. Any + mismatch causes processing to stop and the packet to be dropped. In other + words, the above fields are really describing the attached network's + configuration. + + At this point, an attempt is made to match the source of the Hello Packet to + one of the receiving interface's neighbors. If the receiving interface is + a multi-access network (either broadcast or non-broadcast) the source is + identified by the IP source address found in the Hello's IP header. The + interface's current neighbor(s) are contained in the interface's data + structure. If the interface does not have a neighbor, a neighbor is created. + If the interface already has neighbor(s) but none match the IP of the + incoming packet, a new neighbor is added. Finally, if the HELLO packet matches + a current neighbor, the neighbor's "last hello packet received" timer is + updated. + +Handling Incoming LSU Packets + + Each received LSU packet must go through the following handling procedure. + If the LSU was originally generated by the incoming router, the packet is + dropped. If the sequence number matches that of the last packet received + from the sending host, the packet is dropped. If the packet contents are + equivalent to the contents of the packet last received from the sending host, + the host's database entry is updated and the packet is ignored. If the LSU + is from a host not currently in the database, the packets contents are used + to update the database and Djikstra's algorithm is used to recompute the + forwarding table. Finally, if the LSU data is for a host currently in the + database but the information has changed, the LSU is used to update the + database, and Djikstra's algorithm is run to recompute the forwarding table. + + All received packets with new sequence numbers are flooded to all neighbors + but the incoming neighbor of the packet. The TTL header is only checked + in the forwarding stage and should not be considered when handling the packet + locally. The TTL field of all flooded packets must be decremented before + exiting the router. If the field after decrement is zero or less, the packet + must not be flooded. + +PWOSPF IP Packets + + PWOSPF are expected to be encapsulated IPv4 packets with IP protocol number + 89 (the same as OSPFv2). OSPF HELLO packets are sent to destination IP + address ALLSPFRouters which is defined as "224.0.0.5" (0xe0000005). All LSU + packets are sent point to point using the IP address of the neighboring + interface as the destination. + +PWOSPF Packet Header Format + + All PWOSPF packets are encapsulated in a common header that is identical to + the OSPFv2 header. Using the OSPFv2 header will allow PWOSPF to converge on + OSPF compliance in the future and is recognized by protocol analyzers such + as ethereal which can greatly aid in debugging. The PWOSPF header is as + follows: + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | Type | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Version # + The PWOSPF/OSPF version number. This specification documents version 2 of + the protocol. + +Type + The OSPF packet types are as follows. The format of each of these + packet types is described in a succeeding section. + + Type Description + ________________________________ + 1 Hello + 4 Link State Update + +Packet length + The length of the protocol packet in bytes. This length includes + the standard OSPF header. + +Router ID + The Router ID of the packet's source. In OSPF, the source and + destination of a routing protocol packet are the two ends of an + (potential) adjacency. + +Area ID + A 32 bit number identifying the area that this packet belongs to. + All OSPF packets are associated with a single area. Most travel a + single hop only. + +Checksum + The standard IP checksum of the entire contents of the packet, + excluding the 64-bit authentication field. This checksum is + calculated as the 16-bit one's complement of the one's complement + sum of all the 16-bit words in the packet, excepting the + authentication field. If the packet's length is not an integral + number of 16-bit words, the packet is padded with a byte of zero + before checksumming. + +AuType + Set to zero in PWOSPF + +Authentication + Set to zero in PWOSPF + +HELLO Packet Format + + Hello packets are PWOSPF packet type 1. These packets are sent periodically + on all interfaces in order to establish and maintain neighbor relationships. + In addition, Hellos broadcast enabling dynamic discovery of neighboring + routers. + + All routers connected to a common network must agree on certain parameters + (network mask and helloint). These parameters are included in Hello packets, + so that differences can inhibit the forming of neighbor relationships. A + full HELLO packet with PWOSPF header is as follows: + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 1 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Network Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | HelloInt | padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Network mask + The network mask associated with this interface. For example, if + the interface is to a class B network whose third byte is used for + subnetting, the network mask is 0xffffff00. + + HelloInt + The number of seconds between this router's Hello packets. + +LSU Packet Format + + LSU packets implement the flooding of link states and are used to build and + maintain the network topology database at each router. Each link state + update packet carries a collection of link state advertisements on hop + further from its origin. Several link state advertisements may be included + in a single packet. A link state packet with full PWOSF header looks as + follows: + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 4 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sequence | TTL | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | # advertisements | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- +-+ + | Link state advertisements | + +- +-+ + | ... | + + Sequence + Unique sequence number associated with each Link State Updated. + Incremented by the LSU source for each subsequence updated. Duplicate + LSU packets are dropped by the receiver. + + TTL + Hop limited value decremented each time the packet is forwarded. The + TTL value is only considered during packet forwarding and not during + packet reception. + # of advertisements + Total number of link state advertisements contained in the packet + + Link state advertisements + + Each link state update packet should contain 1 or more link state + advertisements. The advertisements are the reachable routes directly + connected to the advertising router. Routes are in the form of the subnet, + mask and router neighor for the attached link. Link state advertisements + look specifically as follows: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Subnet | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + subnet + Subnet number of the advertised route. Note that default routes + will have a subnet value of 0.0.0.0. + + Mask + Subnet mask of the advertised route + + Router ID + ID of the neighboring router on the advertised link. If there is no + connected router to the link the RID should be set to 0. + + Metric + The cost of this route. Expressed in the same units as the + interface costs in the router links advertisements. + + Example: + + In the below topology with subnet 192.168.128 using IP addresses + allocated as showing (xxx is intended to be 192.168.128). + + xxx.1 xxx.2 xxx.4 xxx.5 xxx.8 xxx.9 + [Internet]-[FW]---------------- A ------------------ B ------- + + Assuming FW is not participating in the PWOSPF area. + + A could advertise the following routes + + 1. (subnet between A and the firewall) + Subnet 192.168.128.0 + Mask 255.255.255.252 + RID 0 + + 2. (default route to the Internet) + Subnet 0.0.0.0 + Mask 0.0.0.0 + RID 0.0.0.0 + + 3. (link shared with B + Subnet 192.168.128.4 + Mask 255.255.255.254 + RID 192.168.128.5 (B's router ID) + + B could advertise the following routes + + 1. (link shared with A) + Subnet 192.168.128.4 + Mask 255.255.255.254 + RID 192.168.128.4 (A's router ID) + + 2. (Link to end host) + Subnet 192.168.128.8 + Mask 255.255.255.254 + RID 0.0.0.0 (no attached PWOSPF router) \ No newline at end of file diff --git a/Documentation/rfc/README.md b/Documentation/rfc/README.md index 3e6aa86ab..60920c965 100644 --- a/Documentation/rfc/README.md +++ b/Documentation/rfc/README.md @@ -4,4 +4,5 @@ |----------|-------------------------------|-------------------------------------------------------------------------| | RFC 791 | INTERNET PROTOCOL | [Doc](rfc791.txt), [Errata](https://www.rfc-editor.org/errata/rfc791) | | RFC 793 | TRANSMISSION CONTROL PROTOCOL | [Doc](rfc793.txt), [Errata](https://www.rfc-editor.org/errata/rfc793) | +| RFC 1247 | OSPF Version 2 | [Doc](rfc1247.txt), [Errata](https://www.rfc-editor.org/errata/rfc1247) | | RFC 5681 | TCP Congestion Control | [Doc](rfc5681.txt), [Errata](https://www.rfc-editor.org/errata/rfc5681) | diff --git a/Documentation/rfc/rfc1247.txt b/Documentation/rfc/rfc1247.txt new file mode 100644 index 000000000..1bbc60a45 --- /dev/null +++ b/Documentation/rfc/rfc1247.txt @@ -0,0 +1,10585 @@ + + + + +Network Working Group J. Moy +Request for Comments: 1247 Proteon, Inc. +Obsoletes: RFC 1131 July 1991 + + + OSPF Version 2 + + + +Status of this Memo + +This RFC specifies an IAB standards track protocol for the Internet +community, and requests discussion and suggestions for improvements. +Please refer to the current edition of the ``IAB Official Protocol +Standards'' for the standardization state and status of this protocol. +Distribution of this memo is unlimited. + + +Abstract + +This memo documents version 2 of the OSPF protocol. OSPF is a link- +state based routing protocol. It is designed to be run internal to a +single Autonomous System. Each OSPF router maintains an identical +database describing the Autonomous System's topology. From this +database, a routing table is calculated by constructing a shortest-path +tree. + +OSPF recalculates routes quickly in the face of topological changes, +utilizing a minimum of routing protocol traffic. OSPF provides support +for equal-cost multipath. Separate routes can be calculated for each IP +type of service. An area routing capability is provided, enabling an +additional level of routing protection and a reduction in routing +protocol traffic. In addition, all OSPF routing protocol exchanges are +authenticated. + +Version 1 of the OSPF protocol was documented in RFC 1131. The +differences between the two versions are explained in Appendix F. + +Please send comments to ospf@trantor.umd.edu. + + +1. Introduction + +This document is a specification of the Open Shortest Path First (OSPF) +internet routing protocol. OSPF is classified as an Internal Gateway +Protocol (IGP). This means that it distributes routing information +between routers belonging to a single Autonomous System. The OSPF +protocol is based on SPF or link-state technology. This is a departure + + + +[Moy] [Page 1] + +RFC 1247 OSPF Version 2 July 1991 + + +from the Bellman-Ford base used by traditional internet routing +protocols. + +The OSPF protocol was developed by the OSPF working group of the +Internet Engineering Task Force. It has been designed expressly for the +internet environment, including explicit support for IP subnetting, +TOS-based routing and the tagging of externally-derived routing +information. OSPF also provides for the authentication of routing +updates, and utilizes IP multicast when sending/receiving the updates. +In addition, much work has been done to produce a protocol that responds +quickly to topology changes, yet involves small amounts of routing +protocol traffic. + +The author would like to thank Rob Coltun, Milo Medin, Mike Petry and +the rest of the OSPF working group for the ideas and support they have +given to this project. + + +1.1 Protocol overview + +OSPF routes IP packets based solely on the destination IP address and IP +Type of Service found in the IP packet header. IP packets are routed +"as is" -- they are not encapsulated in any further protocol headers as +they transit the Autonomous System. OSPF is a dynamic routing protocol. +It quickly detects topological changes in the AS (such as router +interface failures) and calculates new loop-free routes after a period +of convergence. This period of convergence is short and involves a +minimum of routing traffic. + +In an SPF-based routing protocol, each router maintains a database +describing the Autonomous System's topology. Each participating router +has an identical database. Each individual piece of this database is a +particular router's local state (e.g., the router's usable interfaces +and reachable neighbors). The router distributes its local state +throughout the Autonomous System by flooding. + +All routers run the exact same algorithm, in parallel. From the +topological database, each router constructs a tree of shortest paths +with itself as root. This shortest-path tree gives the route to each +destination in the Autonomous System. Externally derived routing +information appears on the tree as leaves. + +OSPF calculates separate routes for each Type of Service (TOS). When +several equal-cost routes to a destination exist, traffic is distributed +equally among them. The cost of a route is described by a single +dimensionless metric. + +OSPF allows sets of networks to be grouped together. Such a grouping is + + + +[Moy] [Page 2] + +RFC 1247 OSPF Version 2 July 1991 + + +called an area. The topology of an area is hidden from the rest of the +Autonomous System. This information hiding enables a significant +reduction in routing traffic. Also, routing within the area is +determined only by the area's own topology, lending the area protection +from bad routing data. An area is a generalization of an IP subnetted +network. + +OSPF enables the flexible configuration of IP subnets. Each route +distributed by OSPF has a destination and mask. Two different subnets +of the same IP network number may have different sizes (i.e., different +masks). This is commonly referred to as variable length subnets. A +packet is routed to the best (i.e., longest or most specific) match. +Host routes are considered to be subnets whose masks are "all ones" +(0xffffffff). + +All OSPF protocol exchanges are authenticated. This means that only +trusted routers can participate in the Autonomous System's routing. A +variety of authentication schemes can be used; a single authentication +scheme is configured for each area. This enables some areas to use much +stricter authentication than others. + +Externally derived routing data (e.g., routes learned from the Exterior +Gateway Protocol (EGP)) is passed transparently throughout the +Autonomous System. This externally derived data is kept separate from +the OSPF protocol's link state data. Each external route can also be +tagged by the advertising router, enabling the passing of additional +information between routers on the boundaries of the Autonomous System. + + +1.2 Definitions of commonly used terms + +Here is a collection of definitions for terms that have a specific +meaning to the protocol and that are used throughout the text. The +reader unfamiliar with the Internet Protocol Suite is referred to [RS- +85-153] for an introduction to IP. + + +Router + A level three Internet Protocol packet switch. Formerly called a + gateway in much of the IP literature. + +Autonomous System + A group of routers exchanging routing information via a common + routing protocol. Abbreviated as AS. + +Internal Gateway Protocol + The routing protocol spoken by the routers belonging to an + Autonomous system. Abbreviated as IGP. Each Autonomous System has + + + +[Moy] [Page 3] + +RFC 1247 OSPF Version 2 July 1991 + + + a single IGP. Different Autonomous Systems may be running different + IGPs. + +Router ID + A 32-bit number assigned to each router running the OSPF protocol. + This number uniquely identifies the router within an Autonomous + System. + +Network + In this paper, an IP network or subnet. It is possible for one + physical network to be assigned multiple IP network/subnet numbers. + We consider these to be separate networks. Point-to-point physical + networks are an exception - they are considered a single network no + matter how many (if any at all) IP network/subnet numbers are + assigned to them. + +Network mask + A 32-bit number indicating the range of IP addresses residing on a + single IP network/subnet. This specification displays network masks + as hexadecimal numbers. For example, the network mask for a class C + IP network is displayed as 0xffffff00. Such a mask is often + displayed elsewhere in the literature as 255.255.255.0. + +Multi-access networks + Those physical networks that support the attachment of multiple + (more than two) routers. Each pair of routers on such a network is + assumed to be able to communicate directly (e.g., multi-drop + networks are excluded). + +Interface + The connection between a router and one of its attached networks. + An interface has state information associated with it, which is + obtained from the underlying lower level protocols and the routing + protocol itself. An interface to a network has associated with it a + single IP address and mask (unless the network is an unnumbered + point-to-point network). An interface is sometimes also referred to + as a link. + +Neighboring routers + Two routers that have interfaces to a common network. On multi- + access networks, neighbors are dynamically discovered by OSPF's + Hello Protocol. + +Adjacency + A relationship formed between selected neighboring routers for the + purpose of exchanging routing information. Not every pair of + neighboring routers become adjacent. + + + + +[Moy] [Page 4] + +RFC 1247 OSPF Version 2 July 1991 + + +Link state advertisement + Describes to the local state of a router or network. This includes + the state of the router's interfaces and adjacencies. Each link + state advertisement is flooded throughout the routing domain. The + collected link state advertisements of all routers and networks + forms the protocol's topological database. + +Hello protocol + The part of the OSPF protocol used to establish and maintain + neighbor relationships. On multi-access networks the Hello protocol + can also dynamically discover neighboring routers. + +Designated Router + Each multi-access network that has at least two attached routers has + a Designated Router. The Designated Router generates a link state + advertisement for the multi-access network and has other special + responsibilities in the running of the protocol. The Designated + Router is elected by the Hello Protocol. + + The Designated Router concept enables a reduction in the number of + adjacencies required on a multi-access network. This in turn + reduces the amount of routing protocol traffic and the size of the + topological database. + +Lower-level protocols + The underlying network access protocols that provide services to the + Internet Protocol and in turn the OSPF protocol. Examples of these + are the X.25 packet and frame levels for PDNs, and the ethernet data + link layer for ethernets. + + +1.3 Brief history of SPF-based routing technology + +OSPF is an SPF-based routing protocol. Such protocols are also referred +to in the literature as link-state or distributed-database protocols. +This section gives a brief description of the developments in SPF-based +technology that have influenced the OSPF protocol. + +The first SPF-based routing protocol was developed for use in the +ARPANET packet switching network. This protocol is described in +[McQuillan]. It has formed the starting point for all other SPF-based +protocols. The homogeneous Arpanet environment, i.e., single-vendor +packet switches connected by synchronous serial lines, simplified the +design and implementation of the original protocol. + +Modifications to this protocol were proposed in [Perlman]. These +modifications dealt with increasing the fault tolerance of the routing +protocol through, among other things, adding a checksum to the link + + + +[Moy] [Page 5] + +RFC 1247 OSPF Version 2 July 1991 + + +state advertisements (thereby detecting database corruption). The paper +also included means for reducing the routing traffic overhead in an +SPF-based protocol. This was accomplished by introducing mechanisms +which enabled the interval between link state advertisements to be +increased by an order of magnitude. + +An SPF-based algorithm has also been proposed for use as an ISO IS-IS +routing protocol. This protocol is described in [DEC]. The protocol +includes methods for data and routing traffic reduction when operating +over broadcast networks. This is accomplished by election of a +Designated Router for each broadcast network, which then originates a +link state advertisement for the network. + +The OSPF subcommittee of the IETF has extended this work in developing +the OSPF protocol. The Designated Router concept has been greatly +enhanced to further reduce the amount of routing traffic required. +Multicast capabilities are utilized for additional routing bandwidth +reduction. An area routing scheme has been developed enabling +information hiding/protection/reduction. Finally, the algorithm has +been modified for efficient operation in the internet environment. + + +1.4 Organization of this document + +The first three sections of this specification give a general overview +of the protocol's capabilities and functions. Sections 4-16 explain the +protocol's mechanisms in detail. Packet formats, protocol constants, +configuration items and required management statistics are specified in +the appendices. + +Labels such as HelloInterval encountered in the text refer to protocol +constants. They may or may not be configurable. The architectural +constants are explained in Appendix B. The configurable constants are +explained in Appendix C. + +The detailed specification of the protocol is presented in terms of data +structures. This is done in order to make the explanation more precise. +Implementations of the protocol are required to support the +functionality described, but need not use the precise data structures +that appear in this paper. + + +2. The Topological Database + +The database of the Autonomous System's topology describes a directed +graph. The vertices of the graph consist of routers and networks. A +graph edge connects two routers when they are attached via a physical +point-to-point network. An edge connecting a router to a network + + + +[Moy] [Page 6] + +RFC 1247 OSPF Version 2 July 1991 + + +indicates that the router has an interface on the network. + +The vertices of the graph can be further typed according to function. +Only some of these types carry transit data traffic; that is, traffic +that is neither locally originated nor locally destined. Vertices that +can carry transit traffic are indicated on the graph by having both +incoming and outgoing edges. + + + + Vertex type Vertex name Transit? + _____________________________________ + 1 Router yes + 2 Network yes + 3 Stub network no + + + Table 1: OSPF vertex types. + + +OSPF supports the following types of physical networks: + + +Point-to-point networks + A network that joins a single pair of routers. A 56Kb serial line + is an example of a point-to-point network. + +Broadcast networks + Networks supporting many (more than two) attached routers, together + with the capability to address a single physical message to all of + the attached routers (broadcast). Neighboring routers are + discovered dynamically on these nets using OSPF's Hello Protocol. + The Hello Protocol itself takes advantage of the broadcast + capability. The protocol makes further use of multicast + capabilities, if they exist. An ethernet is an example of a + broadcast network. + +Non-broadcast networks + Networks supporting many (more than two) routers, but having no + broadcast capability. Neighboring routers are also discovered on + these nets using OSPF's Hello Protocol. However, due to the lack of + broadcast capability, some configuration information is necessary + for the correct operation of the Hello Protocol. On these networks, + OSPF protocol packets that are normally multicast need to be sent to + each neighboring router, in turn. An X.25 Public Data Network (PDN) + is an example of a non-broadcast network. + + + + + +[Moy] [Page 7] + +RFC 1247 OSPF Version 2 July 1991 + + +The neighborhood of each network node in the graph depends on whether +the network has multi-access capabilities (either broadcast or non- +broadcast) and, if so, the number of routers having an interface to the +network. The three cases are depicted in Figure 1. Rectangles indicate +routers. Circles and oblongs indicate multi-access networks. Router +names are prefixed with the letters RT and network names with N. Router +interface names are prefixed by I. Lines between routers indicate +point-to-point networks. The left side of the figure shows a network +with its connected routers, with the resulting graph shown on the right. + + +Two routers joined by a point-to-point network are represented in the +directed graph as being directly connected by a pair of edges, one in +each direction. Interfaces to physical point-to-point networks need not +be assigned IP addresses. Such a point-to-point network is called +unnumbered. The graphical representation of point-to-point networks is +designed so that unnumbered networks can be supported naturally. When +interface addresses exist, they are modelled as stub routes. Note that +each router would then have a stub connection to the other router's +interface address (see Figure 1). + +When multiple routers are attached to a multi-access network, the +directed graph shows all routers bidirectionally connected to the +network vertex (again, see Figure 1). If only a single router is +attached to a multi-access network, the network will appear in the +directed graph as a stub connection. + +Each network (stub or transit) in the graph has an IP address and +associated network mask. The mask indicates the number of nodes on the +network. Hosts attached directly to routers (referred to as host +routes) appear on the graph as stub networks. The network mask for a +host route is always 0xffffffff, which indicates the presence of a +single node. + +Figure 2 shows a sample map of an Autonomous System. The rectangle +labelled H1 indicates a host, which has a SLIP connection to router +RT12. Router RT12 is therefore advertising a host route. Lines between + + + ______________________________________ + + (Figure not included in text version.) + + Figure 1: Network map components + ______________________________________ + + + + + + +[Moy] [Page 8] + +RFC 1247 OSPF Version 2 July 1991 + + +routers indicate physical point-to-point networks. The only point-to- +point network that has been assigned interface addresses is the one +joining routers RT6 and RT10. Routers RT5 and RT7 have EGP connections +to other Autonomous Systems. A set of EGP-learned routes have been +displayed for both of these routers. + + +A cost is associated with the output side of each router interface. +This cost is configurable by the system administrator. The lower the +cost, the more likely the interface is to be used to forward data +traffic. Costs are also associated with the externally derived routing +data (e.g., the EGP-learned routes). + +The directed graph resulting from the map in Figure 2 is depicted in +Figure 3. Arcs are labelled with the cost of the corresponding router +output interface. Arcs having no labelled cost have a cost of 0. Note +that arcs leading from networks to routers always have cost 0; they are +significant nonetheless. Note also that the externally derived routing +data appears on the graph as stubs. + + +The topological database (or what has been referred to above as the +directed graph) is pieced together from link state advertisements +generated by the routers. The neighborhood of each transit vertex is +represented in a single, separate link state advertisement. Figure 4 +shows graphically the link state representation of the two kinds of +transit vertices: routers and multi-access networks. Router RT12 has an + + + ______________________________________ + + (Figure not included in text version.) + + Figure 2: A sample Autonomous System + ______________________________________ + + + + __________________________________________ + + (Figures not included in text version.) + + Figure 3: The resulting directed graph + Figure 4: Individual link state components + __________________________________________ + + + + + + +[Moy] [Page 9] + +RFC 1247 OSPF Version 2 July 1991 + + +interface to two broadcast networks and a SLIP line to a host. Network +N6 is a broadcast network with three attached routers. The cost of all +links from network N6 to its attached routers is 0. Note that the link +state advertisement for network N6 is actually generated by one of the +attached routers: the router that has been elected Designated Router for +the network. + + +2.1 The shortest-path tree + +When no OSPF areas are configured, each router in the Autonomous System +has an identical topological database, leading to an identical graphical +representation. A router generates its routing table from this graph by +calculating a tree of shortest paths with the router itself as root. +Obviously, the shortest-path tree depends on the router doing the +calculation. The shortest-path tree for router RT6 in our example is +depicted in Figure 5. + + +The tree gives the entire route to any destination network or host. +However, only the next hop to the destination is used in the forwarding +process. Note also that the best route to any router has also been +calculated. For the processing of external data, we note the next hop +and distance to any router advertising external routes. The resulting +routing table for router RT6 is pictured in Table 2. Note that there is +a separate route for each end of a numbered serial line (in this case, +the serial line between routers RT6 and RT10). + + +Routes to networks belonging to other AS'es (such as N12) appear as +dashed lines on the shortest path tree in Figure 5. Use of this +externally derived routing information is considered in the next +section. + + + + + + + ______________________________________ + + (Figure not included in text version.) + + Figure 5: The SPF tree for router RT6 + ______________________________________ + + + + + + +[Moy] [Page 10] + +RFC 1247 OSPF Version 2 July 1991 + + + + + Destination Next Hop Distance + __________________________________ + N1 RT3 10 + N2 RT3 10 + N3 RT3 7 + N4 RT3 8 + Ib * 7 + Ia RT10 12 + N6 RT10 8 + N7 RT10 12 + N8 RT10 10 + N9 RT10 11 + N10 RT10 13 + N11 RT10 14 + H1 RT10 21 + __________________________________ + RT5 RT5 6 + RT7 RT10 8 + + + Table 2: The portion of router RT6's routing table listing local + destinations. + +2.2 Use of external routing information + +After the tree is created the external routing information is examined. +This external routing information may originate from another routing +protocol such as EGP, or be statically configured (static routes). +Default routes can also be included as part of the Autonomous System's +external routing information. + +External routing information is flooded unaltered throughout the AS. In +our example, all the routers in the Autonomous System know that router +RT7 has two external routes, with metrics 2 and 9. + +OSPF supports two types of external metrics. Type 1 external metrics +are equivalent to the link state metric. Type 2 external metrics are +greater than the cost of any path internal to the AS. Use of Type 2 +external metrics assumes that routing between AS'es is the major cost of +routing a packet, and eliminates the need for conversion of external +costs to internal link state metrics. + +Here is an example of Type 1 external metric processing. Suppose that +the routers RT7 and RT5 in Figure 2 are advertising Type 1 external +metrics. For each external route, the distance from Router RT6 is +calculated as the sum of the external route's cost and the distance from + + + +[Moy] [Page 11] + +RFC 1247 OSPF Version 2 July 1991 + + +Router RT6 to the advertising router. For every external destination, +the router advertising the shortest route is discovered, and the next +hop to the advertising router becomes the next hop to the destination. + +Both Router RT5 and RT7 are advertising an external route to destination +network N12. Router RT7 is preferred since it is advertising N12 at a +distance of 10 (8+2) to Router RT6, which is better than router RT5's 14 +(6+8). Table 3 shows the entries that are added to the routing table +when external routes are examined: + + + + Destination Next Hop Distance + __________________________________ + N12 RT10 10 + N13 RT5 14 + N14 RT5 14 + N15 RT10 17 + + + Table 3: The portion of router RT6's routing table listing external + destinations. + + +Processing of Type 2 external metrics is simpler. The AS boundary +router advertising the smallest external metric is chosen, regardless of +the internal distance to the AS boundary router. Suppose in our example +both router RT5 and router RT7 were advertising Type 2 external routes. +Then all traffic destined for network N12 would be forwarded to router +RT7, since 2 < 8. When several equal-cost Type 2 routes exist, the +internal distance to the advertising routers is used to break the tie. + +Both Type 1 and Type 2 external metrics can be present in the AS at the +same time. In that event, Type 1 external metrics always take +precedence. + +This section has assumed that packets destined for external destinations +are always routed through the advertising AS boundary router. This is +not always desirable. For example, suppose in Figure 2 there is an +additional router attached to network N6, called Router RTX. Suppose +further that RTX does not participate in OSPF routing, but does exchange +EGP information with the AS boundary router RT7. Then, router RT7 would +end up advertising OSPF external routes for all destinations that should +be routed to RTX. An extra hop will sometimes be introduced if packets +for these destinations need always be routed first to router RT7 (the +advertising router). + +To deal with this situation, the OSPF protocol allows an AS boundary + + + +[Moy] [Page 12] + +RFC 1247 OSPF Version 2 July 1991 + + +router to specify a "forwarding address" in its external advertisements. +In the above example, Router RT7 would specify RTX's IP address as the +"forwarding address" for all those destinations whose packets should be +routed directly to RTX. + +The "forwarding address" has one other application. It enables routers +in the Autonomous System's interior to function as "route servers". For +example, in Figure 2 the router RT6 could become a route server, gaining +external routing information through a combination of static +configuration and external routing protocols. RT6 would then start +advertising itself as an AS boundary router, and would originate a +collection of OSPF external advertisements. In each external +advertisement, router RT6 would specify the correct Autonomous System +exit point to use for the destination through appropriate setting of the +advertisement's "forwarding address" field. + + +2.3 Equal-cost multipath + +The above discussion has been simplified by considering only a single +route to any destination. In reality, if multiple equal-cost routes to +a destination exist, they are all discovered and used. This requires no +conceptual changes to the algorithm, and its discussion is postponed +until we consider the tree-building process in more detail. + +With equal cost multipath, a router potentially has several available +next hops towards any given destination. + + +2.4 TOS-based routing + +OSPF can calculate a separate set of routes for each IP Type of Service. +The IP TOS values are represented in OSPF exactly as they appear in the +IP packet header. This means that, for any destination, there can +potentially be multiple routing table entries, one for each IP TOS. + +Up to this point, all examples shown have assumed that routes do not +vary on TOS. In order to differentiate routes based on TOS, separate +interface costs can be configured for each TOS. For example, in Figure +2 there could be multiple costs (one for each TOS) listed for each +interface. A cost for TOS 0 must always be specified. + +When interface costs vary based on TOS, a separate shortest path tree is +calculated for each TOS (see Section 2.1). In addition, external costs +can vary based on TOS. For example, in Figure 2 router RT7 could +advertise a separate type 1 external metric for each TOS. Then, when +calculating the TOS X distance to network N15 the cost of the shortest +TOS X path to RT7 would be added to the TOS X cost advertised by RT7 + + + +[Moy] [Page 13] + +RFC 1247 OSPF Version 2 July 1991 + + +(see Section 2.2). + +All OSPF implementations must be capable of calculating routes based on +TOS. However, OSPF routers can be configured to route all packets on +the TOS 0 path (see Appendix C), eliminating the need to calculate non- +zero TOS paths. This can be used to conserve routing table space and +processing resources in the router. These TOS-0-only routers can be +mixed with routers that do route based on TOS. TOS-0-only routers will +be avoided as much as possible when forwarding traffic requesting a +non-zero TOS. + +It may be the case that no path exists for some non-zero TOS, even if +the router is calculating non-zero TOS paths. In that case, packets +requesting that non-zero TOS are routed along the TOS 0 path (see +Section 11.1). + + +3. Splitting the AS into Areas + +OSPF allows collections of contiguous networks and hosts to be grouped +together. Such a group, together with the routers having interfaces to +any one of the included networks, is called an area. Each area runs a +separate copy of the basic SPF routing algorithm. This means that each +area has its own topological database and corresponding graph, as +explained in the previous section. + +The topology of an area is invisible from the outside of the area. +Conversely, routers internal to a given area know nothing of the +detailed topology external to the area. This isolation of knowledge +enables the protocol to effect a marked reduction in routing traffic as +compared to treating the entire Autonomous System as a single SPF +domain. + +With the introduction of areas, it is no longer true that all routers in +the AS have an identical topological database. A router actually has a +separate topological database for each area it is connected to. +(Routers connected to multiple areas are called area border routers). +Two routers belonging to the same area have, for that area, identical +area topological databases. + +Routing in the Autonomous System takes place on two levels, depending on +whether the source and destination of a packet reside in the same area +(intra-area routing is used) or different areas (inter-area routing is +used). In intra-area routing, the packet is routed solely on +information obtained within the area; no routing information obtained +from outside the area can be used. This protects intra-area routing +from the injection of bad routing information. We discuss inter-area +routing in Section 3.2. + + + +[Moy] [Page 14] + +RFC 1247 OSPF Version 2 July 1991 + + +3.1 The backbone of the Autonomous System + +The backbone consists of those networks not contained in any area, their +attached routers, and those routers that belong to multiple areas. The +backbone must be contiguous. + +It is possible to define areas in such a way that the backbone is no +longer contiguous. In this case the system administrator must restore +backbone connectivity by configuring virtual links. + +Virtual links can be configured between any two backbone routers that +have an interface to a common non-backbone area. Virtual links belong +to the backbone. The protocol treats two routers joined by a virtual +link as if they were connected by an unnumbered point-to-point network. +On the graph of the backbone, two such routers are joined by arcs whose +costs are the intra-area distances between the two routers. The routing +protocol traffic that flows along the virtual link uses intra-area +routing only. + +The backbone is responsible for distributing routing information between +areas. The backbone itself has all of the properties of an area. The +topology of the backbone is invisible to each of the areas, while the +backbone itself knows nothing of the topology of the areas. + + +3.2 Inter-area routing + +When routing a packet between two areas the backbone is used. The path +that the packet will travel can be broken up into three contiguous +pieces: an intra-area path from the source to an area border router, a +backbone path between the source and destination areas, and then another +intra-area path to the destination. The algorithm finds the set of such +paths that have the smallest cost. + +Looking at this another way, inter-area routing can be pictured as +forcing a star configuration on the Autonomous System, with the backbone +as hub and and each of the areas as spokes. + +The topology of the backbone dictates the backbone paths used between +areas. The topology of the backbone can be enhanced by adding virtual +links. This gives the system administrator some control over the routes +taken by inter-area traffic. + +The correct area border router to use as the packet exits the source +area is chosen in exactly the same way routers advertising external +routes are chosen. Each area border router in an area summarizes for +the area its cost to all networks external to the area. After the SPF +tree is calculated for the area, routes to all other networks are + + + +[Moy] [Page 15] + +RFC 1247 OSPF Version 2 July 1991 + + +calculated by examining the summaries of the area border routers. + + +3.3 Classification of routers + +Before the introduction of areas, the only OSPF routers having a +specialized function were those advertising external routing +information, such as router RT5 in Figure 2. When the AS is split into +OSPF areas, the routers are further divided according to function into +the following four overlapping categories: + + +Internal routers + A router with all directly connected networks belonging to the same + area. Routers with only backbone interfaces also belong to this + category. These routers run a single copy of the basic routing + algorithm. + +Area border routers + A router that attaches to multiple areas. Area border routers run + multiple copies of the basic algorithm, one copy for each attached + area and an additional copy for the backbone. Area border routers + condense the topological information of their attached areas for + distribution to the backbone. The backbone in turn distributes the + information to the other areas. + +Backbone routers + A router that has an interface to the backbone. This includes all + routers that interface to more than one area (i.e., area border + routers). However, backbone routers do not have to be area border + routers. Routers with all interfaces connected to the backbone are + considered to be internal routers. + +AS boundary routers + A router that exchanges routing information with routers belonging + to other Autonomous Systems. Such a router has AS external routes + that are advertised throughout the Autonomous System. The path to + each AS boundary router is known by every router in the AS. This + classification is completely independent of the previous + classifications: AS boundary routers may be internal or area border + routers, and may or may not participate in the backbone. + + +3.4 A sample area configuration + +Figure 6 shows a sample area configuration. The first area consists of +networks N1-N4, along with their attached routers RT1-RT4. The second +area consists of networks N6-N8, along with their attached routers RT7, + + + +[Moy] [Page 16] + +RFC 1247 OSPF Version 2 July 1991 + + +RT8, RT10, RT11. The third area consists of networks N9-N11 and host +H1, along with their attached routers RT9, RT11, RT12. The third area +has been configured so that networks N9-N11 and host H1 will all be +grouped into a single route, when advertised external to the area (see +Section 3.5 for more details). + + +In Figure 6, routers RT1, RT2, RT5, RT6, RT8, RT9 and RT12 are internal +routers. Routers RT3, RT4, RT7, RT10 and RT11 are area border routers. +Finally as before, routers RT5 and RT7 are AS boundary routers. + +Figure 7 shows the resulting topological database for the Area 1. The +figure completely describes that area's intra-area routing. It also +shows the complete view of the internet for the two internal routers RT1 +and RT2. It is the job of the area border routers, RT3 and RT4, to +advertise into Area 1 the distances to all destinations external to the +area. These are indicated in Figure 7 by the dashed stub routes. Also, +RT3 and RT4 must advertise into Area 1 the location of the AS boundary +routers RT5 and RT7. Finally, external advertisements from RT5 and RT7 +are flooded throughout the entire AS, and in particular throughout Area +1. These advertisements are included in Area 1's database, and yield +routes to networks N12-N15. + +Routers RT3 and RT4 must also summarize Area 1's topology for +distribution to the backbone. Their backbone advertisements are shown +in Table 4. These summaries show which networks are contained in Area 1 +(i.e., networks N1-N4), and the distance to these networks from the +routers RT3 and RT4 respectively. + + +The topological database for the backbone is shown in Figure 8. The set +of routers pictured are the backbone routers. Router RT11 is a backbone +router because it belongs to two areas. In order to make the backbone +connected, a virtual link has been configured between routers R10 and +R11. + + + + + __________________________________________ + + (Figure not included in text version.) + + Figure 6: A sample OSPF area configuration + __________________________________________ + + + + + + +[Moy] [Page 17] + +RFC 1247 OSPF Version 2 July 1991 + + + + + Network RT3 adv. RT4 adv. + _____________________________ + N1 4 4 + N2 4 4 + N3 1 1 + N4 2 3 + + + Table 4: Networks advertised to the backbone by routers RT3 and RT4. + + + ______________________________________ + + (Figure not included in text version.) + + Figure 7: Area 1's Database + Figure 8: The backbone database + ______________________________________ + + +Again, routers RT3, RT4, RT7, RT10 and RT11 are area border routers. As +routers RT3 and RT4 did above, they have condensed the routing +information of their attached areas for distribution via the backbone; +these are the dashed stubs that appear in Figure 8. Remember that the +third area has been configured to condense networks N9-N11 and Host H1 +into a single route. This yields a single dashed line for networks N9- +N11 and Host H1 in Figure 8. Routers RT5 and RT7 are AS boundary +routers; their externally derived information also appears on the graph +in Figure 8 as stubs. + +The backbone enables the exchange of summary information between area +border routers. Every area border router hears the area summaries from +all other area border routers. It then forms a picture of the distance +to all networks outside of its area by examining the collected +advertisements, and adding in the backbone distance to each advertising +router. + +Again using routers RT3 and RT4 as an example, the procedure goes as +follows: They first calculate the SPF tree for the backbone. This gives +the distances to all other area border routers. Also noted are the +distances to networks (Ia and Ib) and AS boundary routers (RT5 and RT7) +that belong to the backbone. This calculation is shown in Table 5. + + +Next, by looking at the area summaries from these area border routers, +RT3 and RT4 can determine the distance to all networks outside their + + + +[Moy] [Page 18] + +RFC 1247 OSPF Version 2 July 1991 + + + + + Area border dist from dist from + router RT3 RT4 + ______________________________________ + to RT3 * 21 + to RT4 22 * + to RT7 20 14 + to RT10 15 22 + to RT11 18 25 + ______________________________________ + to Ia 20 27 + to Ib 15 22 + ______________________________________ + to RT5 14 8 + to RT7 20 14 + + + Table 5: Backbone distances calculated by routers RT3 and RT4. + +area. These distances are then advertised internally to the area by RT3 +and RT4. The advertisements that router RT3 and RT4 will make into Area +1 are shown in Table 6. Note that Table 6 assumes that an area range +has been configured for the backbone which groups I5 and I6 into a +single advertisement. + + +The information imported into Area 1 by routers RT3 and RT4 enables an +internal router, such as RT1, to choose an area border router +intelligently. Router RT1 would use RT4 for traffic to network N6, RT3 +for traffic to network N10, and would load share between the two for + + + Destination RT3 adv. RT4 adv. + _________________________________ + Ia,Ib 15 22 + N6 16 15 + N7 20 19 + N8 18 18 + N9-N11,H1 19 26 + _________________________________ + RT5 14 8 + RT7 20 14 + + + Table 6: Destinations advertised into Area 1 by routers RT3 and RT4. + + + + + +[Moy] [Page 19] + +RFC 1247 OSPF Version 2 July 1991 + + +traffic to network N8. + +Router RT1 can also determine in this manner the shortest path to the AS +boundary routers RT5 and RT7. Then, by looking at RT5 and RT7's +external advertisements, router RT1 can decide between RT5 or RT7 when +sending to a destination in another Autonomous System (one of the +networks N12-N15). + +Note that a failure of the line between routers RT6 and RT10 will cause +the backbone to become disconnected. Configuring another virtual link +between routers RT7 and RT10 will give the backbone more connectivity +and more resistance to such failures. Also, a virtual link between RT7 +and RT10 would allow a much shorter path between the third area +(containing N9) and the router RT7, which is advertising a good route to +external network N12. + + +3.5 IP subnetting support + +OSPF attaches an IP address mask to each advertised route. The mask +indicates the range of addresses being described by the particular +route. For example, a summary advertisement for the destination +128.185.0.0 with a mask of 0xffff0000 actually is describing a single +route to the collection of destinations 128.185.0.0 - 128.185.255.255. +Similarly, host routes are always advertised with a mask of 0xffffffff, +indicating the presence of only a single destination. + +Including the mask with each advertised destination enables the +implementation of what is commonly referred to as variable-length subnet +masks. This means that a single IP class A, B, or C network number can +be broken up into many subnets of various sizes. For example, the +network 128.185.0.0 could be broken up into 64 variable-sized subnets: +16 subnets of size 4K, 16 subnets of size 256, and 32 subnets of size 8. +Table 7 shows some of the resulting network addresses together with +their masks: + + + + Network address IP address mask Subnet size + _______________________________________________ + 128.185.16.0 0xfffff000 4K + 128.185.1.0 0xffffff00 256 + 128.185.0.8 0xfffffff8 8 + + + Table 7: Some sample subnet sizes. + + + + + +[Moy] [Page 20] + +RFC 1247 OSPF Version 2 July 1991 + + +There are many possible ways of dividing up a class A, B, and C network +into variable sized subnets. The precise procedure for doing so is +beyond the scope of this specification. The specification however +establishes the following guideline: When an IP packet is forwarded, it +is always forwarded to the network that is the best match for the +packet's destination. Here best match is synonymous with the longest or +most specific match. For example, the default route with destination of +0.0.0.0 and mask 0x00000000 is always a match for every IP destination. +Yet it is always less specific than any other match. Subnet masks must +be assigned so that the best match for any IP destination is +unambiguous. + +The OSPF area concept is modelled after an IP subnetted network. OSPF +areas have been loosely defined to be a collection of networks. In +actuality, an OSPF area is specified to be a list of address ranges (see +Section C.2 for more details). Each address range is defined as an +[address,mask] pair. Many separate networks may then be contained in a +single address range, just as a subnetted network is composed of many +separate subnets. Area border routers then summarize the area contents +(for distribution to the backbone) by advertising a single route for +each address range. The cost of the route is the minimum cost to any of +the networks falling in the specified range. + +For example, an IP subnetted network can be configured as a single OSPF +area. In that case, the area would be defined as a single address +range: a class A, B, or C network number along with its natural IP mask. +Inside the area, any number of variable sized subnets could be defined. +External to the area, a single route for the entire subnetted network +would be distributed, hiding even the fact that the network is subnetted +at all. The cost of this route is the minimum of the set of costs to +the component subnets. + + +3.6 Supporting stub areas + +In some Autonomous Systems, the majority of the topological database may +consist of external advertisements. An OSPF external advertisement is +usually flooded throughout the entire AS. However, OSPF allows certain +areas to be configured as "stub areas". External advertisements are not +flooded into/throughout stub areas; routing to AS external destinations +in these areas is based on a (per-area) default only. This reduces the +topological database size, and therefore the memory requirements, for a +stub area's internal routers. + +In order to take advantage of the OSPF stub area support, default +routing must be used in the stub area. This is accomplished as follows. +One or more of the stub area's area border routers must advertise a +default route into the stub area via summary advertisements. These + + + +[Moy] [Page 21] + +RFC 1247 OSPF Version 2 July 1991 + + +summary defaults are flooded throughout the stub area, but no further. +(For this reason these defaults pertain only to the particular stub +area). These summary default routes will match any destination that is +not explicitly reachable by an intra-area or inter-area path (i.e., AS +external destinations). + +An area can be configured as stub when there is a single exit point from +the area, or when the choice of exit point need not be made on a per- +external-destination basis. For example, area 3 in Figure 6 could be +configured as a stub area, because all external traffic must travel +though its single area border router RT11. If area 3 were configured as +a stub, router RT11 would advertise a default route for distribution +inside area 3 (in a summary advertisement), instead of flooding the +external advertisements for networks N12-N15 into/throughout the area. + +The OSPF protocol ensures that all routers belonging to an area agree on +whether the area has been configured as a stub. This guarantees that no +confusion will arise in the flooding of external advertisements. + +There are a couple of restrictions on the use of stub areas. Virtual +links cannot be configured through stub areas. In addition, AS boundary +routers cannot be placed internal to stub areas. + + +3.7 Partitions of areas + +OSPF does not actively attempt to repair area partitions. When an area +becomes partitioned, each component simply becomes a separate area. The +backbone then performs routing between the new areas. Some destinations +reachable via intra-area routing before the partition will now require +inter-area routing. + +In the previous section, an area was described as a list of address +ranges. Any particular address range must still be completely contained +in a single component of the area partition. This has to do with the +way the area contents are summarized to the backbone. Also, the +backbone itself must not partition. If it does, parts of the Autonomous +System will become unreachable. Backbone partitions can be repaired by +configuring virtual links (see Section 15). + +Another way to think about area partitions is to look at the Autonomous +System graph that was introduced in Section 2. Area IDs can be viewed +as colors for the graph's edges.[1] Each edge of the graph connects to a +network, or is itself a point-to-point network. In either case, the +edge is colored with the network's Area ID. + +A group of edges, all having the same color, and interconnected by +vertices, represents an area. If the topology of the Autonomous System + + + +[Moy] [Page 22] + +RFC 1247 OSPF Version 2 July 1991 + + +is intact, the graph will have several regions of color, each color +being a distinct Area ID. + +When the AS topology changes, one of the areas may become partitioned. +The graph of the AS will then have multiple regions of the same color +(Area ID). The routing in the Autonomous System will continue to +function as long as these regions of same color are connected by the +single backbone region. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 23] + +RFC 1247 OSPF Version 2 July 1991 + + +4. Functional Summary + +A separate copy of OSPF's basic routing algorithm runs in each area. +Routers having interfaces to multiple areas run multiple copies of the +algorithm. A brief summary of the routing algorithm follows. + +When a router starts, it first initializes the routing protocol data +structures. The router then waits for indications from the lower-level +protocols that its interfaces are functional. + +A router then uses the OSPF's Hello Protocol to acquire neighbors. The +router sends Hello packets to its neighbors, and in turn receives their +Hello packets. On broadcast and point-to-point networks, the router +dynamically detects its neighboring routers by sending its Hello packets +to the multicast address AllSPFRouters. On non-broadcast networks, some +configuration information is necessary in order to discover neighbors. +On all multi-access networks (broadcast or non-broadcast), the Hello +Protocol also elects a Designated router for the network. + +The router will attempt to form adjacencies with some of its newly +acquired neighbors. Topological databases are synchronized between +pairs of adjacent routers. On multi-access networks, the Designated +Router determines which routers should become adjacent. + +Adjacencies control the distribution of routing protocol packets. +Routing protocol packets are sent and received only on adjacencies. In +particular, distribution of topological database updates proceeds along +adjacencies. + +A router periodically advertises its state, which is also called link +state. Link state is also advertised when a router's state changes. A +router's adjacencies are reflected in the contents of its link state +advertisements. This relationship between adjacencies and link state +allows the protocol to detect dead routers in a timely fashion. + +Link state advertisements are flooded throughout the area. The flooding +algorithm is reliable, ensuring that all routers in an area have exactly +the same topological database. This database consists of the collection +of link state advertisements received from each router belonging to the +area. From this database each router calculates a shortest-path tree, +with itself as root. This shortest-path tree in turn yields a routing +table for the protocol. + + +4.1 Inter-area routing + +The previous section described the operation of the protocol within a +single area. For intra-area routing, no other routing information is + + + +[Moy] [Page 24] + +RFC 1247 OSPF Version 2 July 1991 + + +pertinent. In order to be able to route to destinations outside of the +area, the area border routers inject additional routing information into +the area. This additional information is a distillation of the rest of +the Autonomous System's topology. + +This distillation is accomplished as follows: Each area border router is +by definition connected to the backbone. Each area border router +summarizes the topology of its attached areas for transmission on the +backbone, and hence to all other area border routers. A area border +router then has complete topological information concerning the +backbone, and the area summaries from each of the other area border +routers. From this information, the router calculates paths to all +destinations not contained in its attached areas. The router then +advertises these paths to its attached areas. This enables the area's +internal routers to pick the best exit router when forwarding traffic to +destinations in other areas. + + +4.2 AS external routes + +Routers that have information regarding other Autonomous Systems can +flood this information throughout the AS. This external routing +information is distributed verbatim to every participating router. +There is one exception: external routing information is not flooded into +"stub" areas (see Section 3.6). + +To utilize external routing information, the path to all routers +advertising external information must be known throughout the AS +(excepting the stub areas). For that reason, the locations of these AS +boundary routers are summarized by the (non-stub) area border routers. + + +4.3 Routing protocol packets + +The OSPF protocol runs directly over IP, using IP protocol 89. OSPF +does not provide any explicit fragmentation/reassembly support. When +fragmentation is necessary, IP fragmentation/reassembly is used. OSPF +protocol packets have been designed so that large protocol packets can +generally be split into several smaller protocol packets. This practice +is recommended; IP fragmentation should be avoided whenever possible. + +Routing protocol packets should always be sent with the IP TOS field set +to 0. If at all possible, routing protocol packets should be given +preference over regular IP data traffic, both when being sent and +received. As an aid to accomplishing this, OSPF protocol packets should +have their IP precedence field set to the value Internetwork Control +(see [RFC 791]). + + + + +[Moy] [Page 25] + +RFC 1247 OSPF Version 2 July 1991 + + +All OSPF protocol packets share a common protocol header that is +described in Appendix A. The OSPF packet types are listed below in +Table 8. Their formats are also described in Appendix A. + + + + Type Packet name Protocol function + __________________________________________________________ + 1 Hello Discover/maintain neighbors + 2 Database Description Summarize database contents + 3 Link State Request Database download + 4 Link State Update Database update + 5 Link State Ack Flooding acknowledgment + + + Table 8: OSPF packet types. + + +OSPF's Hello protocol uses Hello packets to discover and maintain +neighbor relationships. The Database Description and Link State Request +packets are used in the forming of adjacencies. OSPF's reliable update +mechanism is implemented by the Link State Update and Link State +Acknowledgment packets. + +Each Link State Update packet carries a set of new link state +advertisements one hop further away from their point of origination. A +single Link State Update packet may contain the link state +advertisements of several routers. Each advertisement is tagged with +the ID of the originating router and a checksum of its link state +contents. The five different types of OSPF link state advertisements +are listed below in Table 9. + + +LS Advertisement Advertisement description +type name +____________________________________________________________________________ +1 Router links advs. Originated by all routers. This + advs. advertisement describes the collected + states of the router's interfaces to an + area. Flooded throughout a single area + only. +____________________________________________________________________________ +2 Network links Originated for multi-access networks by + advs. the Designated Router. This + advertisement contains the list of + routers connected to the network. + Flooded throughout a single area only. + + + + +[Moy] [Page 26] + +RFC 1247 OSPF Version 2 July 1991 + + +LS Advertisement Advertisement description +type name +____________________________________________________________________________ +____________________________________________________________________________ +3,4 Summary link Originated by area border routers, and + advs. flooded throughout their associated + area. Each summary link advertisement + describes a route to a destination + outside the area, yet still inside the + AS (i.e., an inter-area route). Type 3 + advertisements describe routes to + networks. Type 4 advertisements + describe routes to AS boundary routers. +____________________________________________________________________________ +5 AS external Originated by AS boundary routers, and + link advs. flooded throughout the AS. Each external + advertisement describes a route to a + destination in another Autonomous + System. Default routes for the AS can + also be described by AS external advertisements. + + + Table 9: OSPF link state advertisements. + +As mentioned above, OSPF routing packets (with the exception of Hellos) +are sent only over adjacencies. Note that this means that all protocol +packets travel a single IP hop, except those that are sent over virtual +adjacencies. The IP source address of an OSPF protocol packet is one +end of a router adjacency, and the IP destination address is either the +other end of the adjacency or an IP multicast address. + + +4.4 Basic implementation requirements + +An implementation of OSPF requires the following pieces of system +support: + + +Timers + Two different kind of timers are required. The first kind, called + single shot timers, fire once and cause a protocol event to be + processed. The second kind, called interval timers, fire at + continuous intervals. These are used for the sending of packets at + regular intervals. A good example of this is the regular broadcast + of Hello packets (on broadcast networks). The granularity of both + kinds of timers is one second. + + Interval timers should be implemented to avoid drift. In some + + + +[Moy] [Page 27] + +RFC 1247 OSPF Version 2 July 1991 + + + router implementations, packet processing can affect timer + execution. When multiple routers are attached to a single network, + all doing broadcasts, this can lead to the synchronization of + routing packets (which should be avoided). If timers cannot be + implemented to avoid drift, small random amounts should be added + to/subtracted from the timer interval at each firing. + +IP multicast + Certain OSPF packets use IP multicast. Support for receiving and + sending IP multicasts, along with the appropriate lower-level + protocol support, is required. These IP multicast packets never + travel more than one hop. For information on IP multicast, see [RFC + 1112]. + +Lower-level protocol support + The lower level protocols referred to here are the network access + protocols, such as the Ethernet data link layer. Indications must + be passed from from these protocols to OSPF as the network interface + goes up and down. For example, on an ethernet it would be valuable + to know when the ethernet transceiver cable becomes unplugged. + +Non-broadcast lower-level protocol support + Remember that non-broadcast networks are multi-access networks such + as a X.25 PDN. On these networks, the Hello Protocol can be aided + by providing an indication to OSPF when an attempt is made to send a + packet to a dead or non-existent router. For example, on a PDN a + dead router may be indicated by the reception of a X.25 clear with + an appropriate cause and diagnostic, and this information would be + passed to OSPF. + +List manipulation primitives + Much of the OSPF functionality is described in terms of its + operation on lists of link state advertisements. For example, the + advertisements that will be retransmitted to an adjacent router + until acknowledged are described as a list. Any particular + advertisement may be on many such lists. An OSPF implementation + needs to be able to manipulate these lists, adding and deleting + constituent advertisements as necessary. + +Tasking support + Certain procedures described in this specification invoke other + procedures. At times, these other procedures should be executed + in-line, that is, before the current procedure is finished. This is + indicated in the text by instructions to execute a procedure. At + other times, the other procedures are to be executed only when the + current procedure has finished. This is indicated by instructions + to schedule a task. + + + + +[Moy] [Page 28] + +RFC 1247 OSPF Version 2 July 1991 + + +4.5 Optional OSPF capabilities + +The OSPF protocol defines several optional capabilities. A router +indicates the optional capabilities that it supports in its OSPF Hello +packets, Database Description packets and in its link state +advertisements. This enables routers supporting a mix of optional +capabilities to coexist in a single Autonomous System. + +Some capabilities must be supported by all routers attached to a +specific area. In this case, a router will not accept a neighbor's +Hello unless there is a match in reported capabilities (i.e., a +capability mismatch prevents a neighbor relationship from forming). An +example of this is the external routing capability (see below). + +Other capabilities can be negotiated during the database synchronization +process. This is accomplished by specifying the optional capabilities +in Database Description packets. A capability mismatch with a neighbor +is this case will result in only a subset of link state advertisements +being exchanged between the two neighbors. + +The routing table build process can also be affected by the +presence/absence of optional capabilities. For example, since the +optional capabilities are reported in link state advertisements, routers +incapable of certain functions can be avoided when building the shortest +path tree. An example of this is the TOS routing capability (see +below). + +The current OSPF optional capabilities are listed below. See Section +A.2 for more information. + + +External routing capability + Entire OSPF areas can be configured as "stubs" (see Section 3.6). + AS external advertisements will not be flooded into stub areas. + This capability is represented by the E-bit in the OSPF options + field (see Section A.2). In order to ensure consistent + configuration of stub areas, all routers interfacing to such an area + must have the E-bit clear in their Hello packets (see Sections 9.5 + and 10.5). + +TOS capability + All OSPF implementations must be able to calculate separate routes + based on IP Type of Service. However, to save routing table space + and processing resources, an OSPF router can be configured to ignore + TOS when forwarding packets. In this case, the router calculates + routes for TOS 0 only. This capability is represented by the T-bit + in the OSPF options field (see Section A.2). TOS-capable routers + will attempt to avoid non-TOS-capable routers when calculating non- + + + +[Moy] [Page 29] + +RFC 1247 OSPF Version 2 July 1991 + + + zero TOS paths. + + +5. Protocol Data Structures + +The OSPF protocol is described in this specification in terms of its +operation on various protocol data structures. The following list +comprises the top-level OSPF data structures. Any initialization that +needs to be done is noted. Areas, OSPF interfaces and neighbors also +have associated data structures that are described later in this +specification. + + +Router ID + a 32-bit number that uniquely identifies this router in the AS. One + possible implementation strategy would be to use the smallest IP + interface address belonging to the router. + +Pointers to area structures + Each one of the areas to which the router is connected has its own + data structure. This data structure describes the working of the + basic algorithm. Remember that each area runs a separate copy of + the basic algorithm. + +Pointer to the backbone structure + The basic algorithm operates on the backbone as if it were an area. + For this reason the backbone is represented as an area structure. + +Virtual links configured + The virtual links configured with this router as one endpoint. In + order to have configured virtual links, the router itself must be an + area border router. Virtual links are identified by the Router ID + of the other endpoint -- which is another area border router. These + two endpoint routers must be attached to a common area, called the + virtual link's transit area. Virtual links are part of the + backbone, and behave as if they were unnumbered point-to-point + networks between the two routers. A virtual link uses the intra- + area routing of its transit area to forward packets. Virtual links + are brought up and down through the building of the shortest-path + trees for the transit area. + +List of external routes + These are routes to destinations external to the Autonomous System, + that have been gained either through direct experience with another + routing protocol (such as EGP), or through configuration + information, or through a combination of the two (e.g., dynamic + external info. to be advertised by OSPF with configured metric). + Any router having these external routes is called an AS boundary + + + +[Moy] [Page 30] + +RFC 1247 OSPF Version 2 July 1991 + + + router. These routes are advertised by the router to the entire AS + through AS external link advertisements. + +List of AS external link advertisements + Part of the topological database. These have have originated from + the AS boundary routers. They comprise routes to destinations + external to the Autonomous System. Note that, if the router is + itself an AS boundary router, some of these AS external link + advertisements have been self originated. + +The routing table + Derived from the topological database. Each destination that the + router can forward to is represented by a cost and a set of paths. + A path is described by its type and next hop. For more information, + see Section 11. + +TOS capability + This item indicates whether the router will calculate separate + routes based on TOS. This is a configurable parameter. For more + information, see Sections 4.5 and 16.9. + + +Figure 9 shows the collection of data structures present in a typical +router. The router pictured is RT10, from the map in Figure 6. Note +that router RT10 has a virtual link configured to router RT11, with Area +2 as the link's transit area. This is indicated by the dashed line in +Figure 9. When the virtual link becomes active, through the building of +the shortest path tree for Area 2, it becomes an interface to the +backbone (see the two backbone interfaces depicted in Figure 9). + + + +6. The Area Data Structure + +The area data structure contains all the information used to run the +basic routing algorithm. Remember that each area maintains its own +topological database. Router interfaces and adjacencies belong to a + + + _______________________________________ + + (Figure not included in text version.) + + Figure 9: Router RT10's Data Structures + _______________________________________ + + + + + + +[Moy] [Page 31] + +RFC 1247 OSPF Version 2 July 1991 + + +single area. + +The backbone has all the properties of an area. For that reason it is +also represented by an area data structure. Note that some items in the +structure apply differently to the backbone than to areas. + +The area topological (or link state) database consists of the collection +of router links, network links and summary links advertisements that +have originated from the area's routers. This information is flooded +throughout a single area only. The list of AS external advertisements +is also considered to be part of each area's topological database. + + +Area ID + A 32-bit number identifying the area. 0 is reserved for the area ID + of the backbone. If assigning subnetted networks as separate areas, + the IP network number could be used as the Area ID. + +List of component address ranges + The address ranges that define the area. Each address range is + specified by an [address,mask] pair. Each network is then assigned + to an area depending on the address range that it falls into + (specified address ranges are not allowed to overlap). As an + example, if an IP subnetted network is to be its own separate OSPF + area, the area is defined to consist of a single address range - an + IP network number with its natural (class A, B or C) mask. + +Associated router interfaces + This router's interfaces connecting to the area. A router interface + belongs to one and only one area (or the backbone). For the + backbone structure this list includes all the virtual adjacencies. + A virtual adjacency is identified by the router ID of its other + endpoint; its cost is the cost of the shortest intra-area path that + exists between the two routers. + +List of router links advertisements + A router links advertisement is generated by each router in the + area. It describes the state of the router's interfaces to the + area. + +List of network links advertisements + One network links advertisement is generated for each transit + multi-access network in the area. It describes the set of routers + currently connected to the network. + +List of summary links advertisements + Summary link advertisements originate from the area's area border + routers. They describe routes to destinations internal to the + + + +[Moy] [Page 32] + +RFC 1247 OSPF Version 2 July 1991 + + + Autonomous System, yet external to the area. + +Shortest-path tree + The shortest-path tree for the area, with this router itself as + root. Derived from the collected router links and network links + advertisements by the Dijkstra algorithm. + +Authentication type + The type of authentication used for this area. Authentication types + are defined in Appendix E. All OSPF packet exchanges are + authenticated. Different authentication schemes may be used in + different areas. + +External routing capability + Whether AS external advertisements will be flooded into/throughout + the area. This is a configurable parameter. If AS external + advertisements are excluded from the area, the area is called a + "stub". Internal to stub areas, routing to external destinations + will be based solely on a default summary route. The backbone + cannot be configured as a stub area. Also, virtual links cannot be + configured through stub areas. For more information, see Section + 3.6. + +StubDefaultCost + If the area has been configured as a stub area, and the router + itself is an area border router, then the StubDefaultCost indicates + the cost of the default summary link that the router should + advertise into the area. There can be a separate cost configured + for each IP TOS. See Section 12.4.3 for more information. + + +Unless otherwise specified, the remaining sections of this document +refer to the operation of the protocol in a single area. + + +7. Bringing Up Adjacencies + +OSPF creates adjacencies between neighboring routers for the purpose of +exchanging routing information. Not every two neighboring routers will +become adjacent. This section covers the generalities involved in +creating adjacencies. For further details consult Section 10. + + +7.1 The Hello Protocol + +The Hello Protocol is responsible for establishing and maintaining +neighbor relationships. It also ensures that communication between +neighbors is bidirectional. Hello packets are sent periodically out all + + + +[Moy] [Page 33] + +RFC 1247 OSPF Version 2 July 1991 + + +router interfaces. Bidirectional communication is indicated when the +router sees itself listed in the neighbor's Hello Packet. + +On multi-access networks, the Hello Protocol elects a Designated Router +for the network. Among other things, the Designated Router controls +what adjacencies will be formed over the network (see below). + +The Hello Protocol works differently on broadcast networks, as compared +to non-broadcast networks. On broadcast networks, each router +advertises itself by periodically multicasting Hello Packets. This +allows neighbors to be discovered dynamically. These Hello Packets +contain the router's view of the Designated Router's identity, and the +list of routers whose Hellos have been seen recently. + +On non-broadcast networks some configuration information is necessary +for the operation of the Hello Protocol. Each router that may +potentially become Designated Router has a list of all other routers +attached to the network. A router, having Designated Router potential, +sends hellos to all other potential Designated Routers when its +interface to the non-broadcast network first becomes operational. This +is an attempt to find the Designated Router for the network. If the +router itself is elected Designated Router, it begins sending hellos to +all other routers attached to the network. + +After a neighbor has been discovered, bidirectional communication +ensured, and (if on a multi-access network) a Designated Router elected, +a decision is made regarding whether or not an adjacency should be +formed with the neighbor (see Section 10.4). An attempt is always made +to establish adjacencies over point-to-point networks and virtual links. +The first step in bringing up an adjacency is to synchronize the +neighbors' topological databases. This is covered in the next section. + + +7.2 The Synchronization of Databases + +In an SPF-based routing algorithm, it is very important for all routers' +topological databases to stay synchronized. OSPF simplifies this by +requiring only adjacent routers to remain synchronized. The +synchronization process begins as soon as the routers attempt to bring +up the adjacency. Each router describes its database by sending a +sequence of Database Description packets to its neighbor. Each Database +Description Packet describes a set of link state advertisements +belonging to the database. When the neighbor sees a link state +advertisement that is more recent than its own database copy, it makes a +note that this newer advertisement should be requested. + +This sending and receiving of Database Description packets is called the +"Database Exchange Process". During this process, the two routers form + + + +[Moy] [Page 34] + +RFC 1247 OSPF Version 2 July 1991 + + +a master/slave relationship. Each Database Description Packet has a +sequence number. Database Description Packets sent by the master +(polls) are acknowledged by the slave through echoing of the sequence +number. Both polls and their responses contain summaries of link state +data. The master is the only one allowed to retransmit Database +Description Packets. It does so only at fixed intervals, the length of +which is the configured constant RxmtInterval. + +Each Database Description contains an indication that there are more +packets to follow --- the M-bit. The Database Exchange Process is over +when a router has received and sent Database Description Packets with +the M-bit off. + +During and after the Database Exchange Process, each router has a list +of those link state advertisements for which the neighbor has more up- +to-date instances. These advertisements are requested in Link State +Request Packets. Link State Request packets that are not satisfied are +retransmitted at fixed intervals of time RxmtInterval. When the +Database Description Process has completed and all Link State Requests +have been satisfied, the databases are deemed synchronized and the +routers are marked fully adjacent. At this time the adjacency is fully +functional and is advertised in the two routers' link state +advertisements. + +The adjacency is used by the flooding procedure as soon as the Database +Exchange Process begins. This simplifies database synchronization, and +guarantees that it finishes in a predictable period of time. + + +7.3 The Designated Router + +Every multi-access network has a Designated Router. The Designated +Router performs two main functions for the routing protocol: + +o The Designated Router originates a network links advertisement on + behalf of the network. This advertisement lists the set of routers + (including the Designated Router itself) currently attached to the + network. The Link State ID for this advertisement (see Section + 12.1.4) is the IP interface address of the Designated Router. The + IP network number can then be obtained by using the subnet/network + mask. + +o The Designated router becomes adjacent to all other routers on the + network. Since the link state databases are synchronized across + adjacencies (through adjacency bring-up and then the flooding + procedure), the Designated Router plays a central part in the + synchronization process. + + + + +[Moy] [Page 35] + +RFC 1247 OSPF Version 2 July 1991 + + +The Designated Router is elected by the Hello Protocol. A router's +Hello Packet contains its Router Priority, which is configurable on a +per-interface basis. In general, when a router's interface to a network +first becomes functional, it checks to see whether there is currently a +Designated Router for the network. If there is, it accepts that +Designated Router, regardless of its Router Priority. (This makes it +harder to predict the identity of the Designated Router, but ensures +that the Designated Router changes less often. See below.) Otherwise, +the router itself becomes Designated Router if it has the highest Router +Priority on the network. A more detailed (and more accurate) +description of Designated Router election is presented in Section 9.4. + +The Designated Router is the endpoint of many adjacencies. In order to +optimize the flooding procedure on broadcast networks, the Designated +Router multicasts its Link State Update Packets to the address +AllSPFRouters, rather than sending separate packets over each adjacency. + +Section 2 of this document discusses the directed graph representation +of an area. Router nodes are labelled with their Router ID. Broadcast +network nodes are actually labelled with the IP address of their +Designated Router. It follows that when the Designated Router changes, +it appears as if the network node on the graph is replaced by an +entirely new node. This will cause the network and all its attached +routers to originate new link state advertisements. Until the +topological databases again converge, some temporary loss of +connectivity may result. This may result in ICMP unreachable messages +being sent in response to data traffic. For that reason, the Designated +Router should change only infrequently. Router Priorities should be +configured so that the most dependable router on a network eventually +becomes Designated Router. + + +7.4 The Backup Designated Router + +In order to make the transition to a new Designated Router smoother, +there is a Backup Designated Router for each multi-access network. The +Backup Designated Router is also adjacent to all routers on the network, +and becomes Designated Router when the previous Designated Router fails. +If there were no Backup Designated Router, when a new Designated Router +became necessary, new adjacencies would have to be formed between the +router and all other routers attached to the network. Part of the +adjacency forming process is the synchronizing of topological databases, +which can potentially take quite a long time. During this time, the +network would not be available for transit data traffic. The Backup +Designated obviates the need to form these adjacencies, since they +already exist. This means the period of disruption in transit traffic +lasts only as long as it take to flood the new link state advertisements +(which announce the new Designated Router). + + + +[Moy] [Page 36] + +RFC 1247 OSPF Version 2 July 1991 + + +The Backup Designated Router does not generate a network links +advertisement for the network. (If it did, the transition to a new +Designated Router would be even faster. However, this is a tradeoff +between database size and speed of convergence when the Designated +Router disappears.) + +The Backup Designated Router is also elected by the Hello Protocol. +Each Hello Packet has a field that specifies the Backup Designated +Router for the network. + +In some steps of the flooding procedure, the Backup Designated Router +plays a passive role, letting the Designated Router do more of the work. +This cuts down on the amount of local routing traffic. See Section 13.3 +for more information. + + +7.5 The graph of adjacencies + +An adjacency is bound to the network that the two routers have in +common. If two routers have multiple networks in common, they may have +multiple adjacencies between them. + +One can picture the collection of adjacencies on a network as forming an +undirected graph. The vertices consist of routers, with an edge joining +two routers if they are adjacent. The graph of adjacencies describes +the flow of routing protocol packets, and in particular Link State +Updates, through the Autonomous System. + +Two graphs are possible, depending on whether the common network is +multi-access. On physical point-to-point networks (and virtual links), +the two routers joined by the network will be adjacent after their +databases have been synchronized. On multi-access networks, both the +Designated Router and the Backup Designated Router are adjacent to all +other routers attached to the network, and these account for all +adjacencies. + +These graphs are shown in Figure 10. It is assumed that router RT7 has +become the Designated Router, and router RT3 the Backup Designated +Router, for the network N2. The Backup Designated Router performs a +lesser function during the flooding procedure than the Designated Router +(see Section 13.3). This is the reason for the dashed lines connecting +the Backup Designated Router RT3. + + +8. Protocol Packet Processing + +This section discusses the general processing of routing protocol +packets. It is very important that the router topological databases + + + +[Moy] [Page 37] + +RFC 1247 OSPF Version 2 July 1991 + + +remain synchronized. For this reason, routing protocol packets should +get preferential treatment over ordinary data packets, both in sending +and receiving. + +Routing protocol packets are sent along adjacencies only (with the +exception of Hello packets, which are used to discover the adjacencies). +This means that all protocol packets travel a single IP hop, except +those sent over virtual links. + +All routing protocol packets begin with a standard header. The sections +below give the details on how to fill in and verify this standard +header. Then, for each packet type, the section is listed that gives +more details on that particular packet type's processing. + + + +8.1 Sending protocol packets + +When a router sends a routing protocol packet, it fills in the fields of +that standard header as follows. For more details on the header format +consult Section A.3.1: + + +Version # + Set to 2, the version number of the protocol as documented in this + specification. + +Packet type + The type of OSPF packet, such as Link state Update or Hello Packet. + +Packet length + The length of the entire OSPF packet in bytes, including the + standard header. + +Router ID + The identity of the router itself (who is originating the packet). + + + ______________________________________ + + (Figure not included in text version.) + + Figure 10: The graph of adjacencies + Figure 11: Interface state changes + ______________________________________ + + + + + + +[Moy] [Page 38] + +RFC 1247 OSPF Version 2 July 1991 + + +Area ID + The area that the packet is being sent into. + +Checksum + The standard IP 16-bit one's complement checksum of the entire OSPF + packet, excluding the 64-bit authentication field. This checksum + should be calculated before handing the packet to the appropriate + authentication procedure. + +Autype and Authentication + Each OSPF packet exchange is authenticated. Authentication types + are assigned by the protocol and documented in Appendix E. A + different authentication scheme can be used for each OSPF area. The + 64-bit authentication field is set by the appropriate authentication + procedure (determined by Autype). This procedure should be the last + called when forming the packet to be sent. The setting of the + authentication field is determined by the packet contents and the + authentication key (which is configurable on a per-interface basis). + + +The IP destination address for the packet is selected as follows. On +physical point-to-point networks, the IP destination is always set to +the the address AllSPFRouters. On all other network types (including +virtual links), the majority of OSPF packets are sent as unicasts, i.e., +sent directly to the other end of the adjacency. In this case, the IP +destination is just the neighbor IP address associated with the other +end of the adjacency (see Section 10). The only packets not sent as +unicasts are on broadcast networks; on these networks Hello packets are +sent to the multicast destination AllSPFRouters, the Designated Router +and its Backup send both Link State Update Packets and Link State +Acknowledgment Packets to the multicast address AllSPFRouters, while all +other routers send both their Link State Update and Link State +Acknowledgment Packets to the multicast address AllDRouters. + +Retransmissions of Link State Update packets are ALWAYS sent as +unicasts. + +The IP source address should be set to the IP address of the sending +interface. Interfaces to unnumbered point-to-point networks have no +associated IP address. On these interfaces, the IP source should be set +to any of the other IP addresses belonging to the router. For this +reason, there must be at least one IP address assigned to the router.[2] +Note that, for most purposes, virtual links act precisely the same as +unnumbered point-to-point networks. However, each virtual link does +have an interface IP address (discovered during the routing table build +process) which is used as the IP source when sending packets over the +virtual link. + + + + +[Moy] [Page 39] + +RFC 1247 OSPF Version 2 July 1991 + + +For more information on the format of specific packet types, consult the +sections listed in Table 10. + + + + Type Packet name detailed section (transmit) + _________________________________________________________ + 1 Hello Section 9.5 + 2 Database description Section 10.8 + 3 Link state request Section 10.9 + 4 Link state update Section 13.3 + 5 Link state ack Section 13.5 + + + Table 10: Sections describing packet transmission. + + + +8.2 Receiving protocol packets + +Whenever a protocol packet is received by the router it is marked with +the interface it was received on. For routers that have virtual links +configured, it may not be immediately obvious which interface to +associate the packet with. For example, consider the router RT11 +depicted in Figure 6. If RT11 receives an OSPF protocol packet on its +interface to network N8, it may want to associate the packet with the +interface to area 2, or with the virtual link to router RT10 (which is +part of the backbone). In the following, we assume that the packet is +initially associated with the non-virtual link.[3] + +In order for the packet to be accepted at the IP level, it must pass a +number of tests, even before the packet is passed to OSPF for +processing: + + +o The IP checksum must be correct. + +o The packet's IP destination address must be the IP address of the + receiving interface, or one of the IP multicast addresses + AllSPFRouters or AllDRouters. + +o The IP protocol specified must be OSPF (89). + +o Locally originated packets should not be passed on to OSPF. That + is, the source IP address should be examined to make sure this is + not a multicast packet that the router itself generated. + + + + + +[Moy] [Page 40] + +RFC 1247 OSPF Version 2 July 1991 + + +Next, the OSPF packet header is verified. The fields specified in the +header must match those configured for the receiving interface. If they +do not, the packet should be discarded: + + +o The version number field must specify protocol version 2. + +o The 16-bit checksum of the OSPF packet's contents must be verified. + Remember that the 64-bit authentication field must be excluded from + the checksum calculation. + +o The Area ID found in the OSPF header must be verified. If both of + the following cases fail, the packet should be discarded. The Area + ID specified in the header must either: + + (1) Match the Area ID of the receiving interface. In this case, the + packet has been sent over a single hop. Therefore, the packet's + IP source address must be on the same network as the receiving + interface. This can be determined by comparing the packet's IP + source address to the interface's IP address, after masking both + addresses with the interface mask. + + (2) Indicate the backbone. In this case, the packet has been sent + over a virtual link. The receiving router must be an area + border router, and the router ID specified in the packet (the + source router) must be the other end of a configured virtual + link. The receiving interface must also attach to the virtual + link's configured transit area. If all of these checks succeed, + the packet is accepted and is from now on associated with the + virtual link (and the backbone area). + +o Packets whose IP destination is AllDRouters should only be accepted + if the state of the receiving interface is DR or Backup (see Section + 9.1). + +o The Authentication type specified must match the authentication type + specified for the associated area. + + +Next, the packet must be authenticated. This depends on the +authentication type specified (see Appendix E). The authentication +procedure may use an Authentication key, which can be configured on a +per-interface basis. If the authentication fails, the packet should be +discarded. + +If the packet type is Hello, it should then be further processed by the +Hello Protocol (see Section 10.5). All other packet types are +sent/received only on adjacencies. This means that the packet must have + + + +[Moy] [Page 41] + +RFC 1247 OSPF Version 2 July 1991 + + +been sent by one of the router's active neighbors. If the receiving +interface is a multi-access network (either broadcast or non-broadcast) +the sender is identified by the IP source address found in the packet's +IP header. If the receiving interface is a point-to-point link or a +virtual link, the sender is identified by the Router ID (source router) +found in the packet's OSPF header. The data structure associated with +the receiving interface contains the list of active neighbors. Packets +not matching any active neighbor are discarded. + +At this point all received protocol packets are associated with an +active neighbor. For the further input processing of specific packet +types, consult the sections listed in Table 11. + + + + Type Packet name detailed section (receive) + ________________________________________________________ + 1 Hello Section 10.5 + 2 Database description Section 10.6 + 3 Link state request Section 10.7 + 4 Link state update Section 13 + 5 Link state ack Section 13.7 + + + Table 11: Sections describing packet reception. + + + +9. The Interface Data Structure + +An OSPF interface is the connection between a router and a network. +There is a single OSPF interface structure for each attached network; +each interface structure has at most one IP interface address (see +below). The support for multiple addresses on a single network is a +matter for future consideration. + +An OSPF interface can be considered to belong to the area that contains +the attached network. All routing protocol packets originated by the +router over this interface are labelled with the interface's Area ID. +One or more router adjacencies may develop over an interface. A +router's link state advertisements reflect the state of its interfaces +and their associated adjacencies. + +The following data items are associated with an interface. Note that a +number of these items are actually configuration for the attached +network; those items must be the same for all routers connected to the +network. + + + + +[Moy] [Page 42] + +RFC 1247 OSPF Version 2 July 1991 + + +Type + The kind of network to which the interface attaches. Its value is + either broadcast, non-broadcast yet still multi-access, point-to- + point or virtual link. + +State + The functional level of an interface. State determines whether or + not full adjacencies are allowed to form over the interface. State + is also reflected in the router's link state advertisements. + +IP interface address + The IP address associated with the interface. This appears as the + IP source address in all routing protocol packets originated over + this interface. Interfaces to unnumbered point-to-point networks do + not have an associated IP address. + +IP interface mask + This indicates the portion of the IP interface address that + identifies the attached network. This is often referred to as the + subnet mask. Masking the IP interface address with this value + yields the IP network number of the attached network. + +Area ID + The Area ID to which the attached network belongs. All routing + protocol packets originating from the interface are labelled with + this Area ID. + +HelloInterval + The length of time, in seconds, between the Hello packets that the + router sends on the interface. Advertised in Hello packets sent out + this interface. + +RouterDeadInterval + The number of seconds before the router's neighbors will declare it + down, when they stop hearing the router's hellos. Advertised in + Hello packets sent out this interface. + +InfTransDelay + The estimated number of seconds it takes to transmit a Link State + Update Packet over this interface. Link state advertisements + contained in the update packet will have their age incremented by + this amount before transmission. This value should take into + account transmission and propagation delays; it must be greater than + zero. + +Router Priority + An 8-bit unsigned integer. When two routers attached to a network + both attempt to become Designated Router, the one with the highest + + + +[Moy] [Page 43] + +RFC 1247 OSPF Version 2 July 1991 + + + Router Priority takes precedence. A router whose Router Priority is + set to 0 is ineligible to become Designated Router on the attached + network. Advertised in Hello packets sent out this interface. + +Hello Timer + An interval timer that causes the interface to send a Hello packet. + This timer fires every HelloInterval seconds. Note that on non- + broadcast networks a separate Hello packet is sent to each qualified + neighbor. + +Wait Timer + A single shot timer that causes the interface to exit the Waiting + state, and as a consequence select a Designated Router on the + network. The length of the timer is RouterDeadInterval seconds. + +List of neighboring routers + The other routers attached to this network. On multi-access + networks, this list is formed by the Hello Protocol. Adjacencies + will be formed to some of these neighbors. The set of adjacent + neighbors can be determined by an examination of all of the + neighbors' states. + +Designated Router + The Designated Router selected for the attached network. The + Designated Router is selected on all multi-access networks by the + Hello Protocol. Two pieces of identification are kept for the + Designated Router: its Router ID and its interface IP address on the + network. The Designated Router advertises link state for the + network. The network link state advertisement is labelled with the + Designated Router's IP address. This item is initialized to 0, + which indicates the lack of a Designated Router. + +Backup Designated Router + The Backup Designated Router is also selected on all multi-access + networks by the Hello Protocol. All routers on the attached network + become adjacent to both the Designated Router and the Backup + Designated Router. The Backup Designated Router becomes Designated + Router when the current Designated Router fails. Initialized to 0 + indicating the lack of a Backup Designated Router. + +Interface output cost(s) + The cost of sending a packet on the interface, expressed in the link + state metric. This is advertised as the link cost for this + interface in the router links advertisement. There may be a + separate cost for each IP Type of Service. The cost of an interface + must be greater than zero. + + + + + +[Moy] [Page 44] + +RFC 1247 OSPF Version 2 July 1991 + + +RxmtInterval + The number of seconds between link state advertisement + retransmissions, for adjacencies belonging to this interface. Also + used when retransmitting Database Description and Link State Request + Packets. + +Authentication key + This configured data allows the authentication procedure to generate + and/or verify the authentication field in the OSPF header. The + authentication key can be configured on a per-interface basis. For + example, if the authentication type indicates simple password, the + authentication key would be a 64-bit password. This key would be + inserted directly into the OSPF header when originating routing + protocol packets, and there could be a separate password for each + network. + + +9.1 Interface states + +The various states that router interface may attain is documented in +this section. The states are listed in order of progressing +functionality. For example, the inoperative state is listed first, +followed by a list of intermediate states before the final, fully +functional state is achieved. The specification makes use of this +ordering by sometimes making references such as "those interfaces in +state greater than X". + +Figure 11 shows the graph of interface state changes. The arcs of the +graph are labelled with the event causing the state change. These +events are documented in Section 9.2. The interface state machine is +described in more detail in Section 9.3. + + +Down + This is the initial interface state. In this state, the lower-level + protocols have indicated that the interface is unusable. No + protocol traffic at all will be sent or received on such a + interface. In this state, interface parameters should be set to + their initial values. All interface timers should be disabled, and + there should be no adjacencies associated with the interface. + +Loopback + In this state, the router's interface to the network is looped back. + The interface may be looped back in hardware or software. The + interface will be unavailable for regular data traffic. However, it + may still be desirable to gain information on the quality of this + interface, either through sending ICMP pings to the interface or + through something like a bit error test. For this reason, IP + + + +[Moy] [Page 45] + +RFC 1247 OSPF Version 2 July 1991 + + + packets may still be addressed to an interface in Loopback state. + To facilitate this, such interfaces are advertised in router links + advertisements as single host routes, whose destination is the IP + interface address.[4] + +Waiting + In this state, the router is trying to determine the identity of the + Backup Designated Router for the network. To do this, the router + monitors the Hellos it receives. The router is not allowed to elect + a Backup Designated Router nor Designated Router until it + transitions out of Waiting state. This prevents unnecessary changes + of (Backup) Designated Router. + +Point-to-point + In this state, the interface is operational, and connects either to + a physical point-to-point network or to a virtual link. Upon + entering this state, the router attempts to form an adjacency with + the neighboring router. Hellos are sent to the neighbor every + HelloInterval seconds. + +DR Other + The interface is to a multi-access network on which another router + has been selected to be the Designated Router. In this state, the + router itself has not been selected Backup Designated Router either. + The router forms adjacencies to both the Designated Router and the + Backup Designated Router (if they exist). + +Backup + In this state, the router itself is the Backup Designated Router on + the attached network. It will be promoted to Designated Router when + the present Designated Router fails. The router establishes + adjacencies to all other routers attached to the network. The + Backup Designated Router performs slightly different functions + during the Flooding Procedure, as compared to the Designated Router + (see Section 13.3). See Section 7.4 for more details on the + functions performed by the Backup Designated Router. + +DR In this state, this router itself is the Designated Router on the + attached network. Adjacencies are established to all other routers + attached to the network. The router must also originate a network + links advertisement for the network node. The advertisement will + contain links to all routers (including the Designated Router + itself) attached to the network. See Section 7.3 for more details + on the functions performed by the Designated Router. + + + + + + + +[Moy] [Page 46] + +RFC 1247 OSPF Version 2 July 1991 + + +9.2 Events causing interface state changes + +State changes can be effected by a number of events. These events are +pictured as the labelled arcs in Figure 11. The label definitions are +listed below. For a detailed explanation of the effect of these events +on OSPF protocol operation, consult Section 9.3. + + +Interface Up + Lower-level protocols have indicated that the network interface is + operational. This enables the interface to transition out of Down + state. On virtual links, the interface operational indication is + actually a result of the shortest path calculation (see Section + 16.7). + +Wait Timer + The Wait timer has fired, indicating the end of the waiting period + that is required before electing a (Backup) Designated Router. + +Backup seen + The router has detected the existence or non-existence of a Backup + Designated Router for the network. This is done in one of two ways. + First, a Hello Packet may be received from a neighbor claiming to be + itself the Backup Designated Router. Alternatively, a Hello Packet + may be received from a neighbor claiming to be itself the Designated + Router, and indicating that there is no Backup. In either case + there must be bidirectional communication with the neighbor, i.e., + the router must also appear in the neighbor's Hello Packet. This + event signals an end to the Waiting state. + +Neighbor Change + There has been a change in the set of bidirectional neighbors + associated with the interface. The (Backup) Designated Router needs + to be recalculated. The following neighbor changes lead to the + Neighbor Change event. For an explanation of neighbor states, see + Section 10.1. + + o Bidirectional communication has been established to a neighbor. + In other words, the state of the neighbor has transitioned to + 2-Way or higher. + + o There is no longer bidirectional communication with a neighbor. + In other words, the state of the neighbor has transitioned to + Init or lower. + + o One of the bidirectional neighbors is newly declaring itself as + either Designated Router or Backup Designated Router. This is + detected through examination of that neighbor's Hello Packets. + + + +[Moy] [Page 47] + +RFC 1247 OSPF Version 2 July 1991 + + + o One of the bidirectional neighbors is no longer declaring itself + as Designated Router, or is no longer declaring itself as Backup + Designated Router. This is again detected through examination + of that neighbor's Hello Packets. + + o The advertised Router Priority for a bidirectional neighbor has + changed. This is again detected through examination of that + neighbor's Hello Packets. + +Loop Ind + An indication has been received that the interface is now looped + back to itself. This indication can be received either from network + management or from the lower level protocols. + +Unloop Ind + An indication has been received that the interface is no longer + looped back. As with the Loop Ind event, this indication can be + received either from network management or from the lower level + protocols. + +Interface Down + Lower-level protocols indicate that this interface is no longer + functional. No matter what the current interface state is, the new + interface state will be Down. + + +9.3 The Interface state machine + +A detailed description of the interface state changes follows. Each +state change is invoked by an event (Section 9.2). This event may +produce different effects, depending on the current state of the +interface. For this reason, the state machine below is organized by +current interface state and received event. Each entry in the state +machine describes the resulting new interface state and the required set +of additional actions. + +When an interface's state changes, it may be necessary to originate a +new router links advertisement. See Section 12.4 for more details. + +Some of the required actions below involve generating events for the +neighbor state machine. For example, when an interface becomes +inoperative, all neighbor connections associated with the interface must +be destroyed. For more information on the neighbor state machine, see +Section 10.3. + + + State(s): Down + + + + +[Moy] [Page 48] + +RFC 1247 OSPF Version 2 July 1991 + + + Event: Interface Up + +New state: Depends on action routine + + Action: Start the interval Hello Timer, enabling the periodic + sending of Hello packets out the interface. If the attached + network is a physical point-to-point network or virtual + link, the interface state transitions to Point-to-Point. + Else, if the router is not eligible to become Designated + Router the interface state transitions to DR other. + + Otherwise, the attached network is multi-access and the + router is eligible to become Designated Router. In this + case, in an attempt to discover the attached network's + Designated Router the interface state is set to Waiting and + the single shot Wait Timer is started. If in addition the + attached network is non-broadcast, examine the configured + list of neighbors for this interface and generate the + neighbor event Start for each neighbor that is also eligible + to become Designated Router. + + + State(s): Waiting + + Event: Backup Seen + +New state: Depends upon action routine. + + Action: Calculate the attached network's Backup Designated Router + and Designated Router, as shown in Section 9.4. As a result + of this calculation, the new state of the interface will be + either DR other, Backup or DR. + + + State(s): Waiting + + Event: Wait Timer + +New state: Depends upon action routine. + + Action: Calculate the attached network's Backup Designated Router + and Designated Router, as shown in Section 9.4. As a result + of this calculation, the new state of the interface will be + either DR other, Backup or DR. + + + State(s): DR Other, Backup or DR + + + + +[Moy] [Page 49] + +RFC 1247 OSPF Version 2 July 1991 + + + Event: Neighbor Change + +New state: Depends upon action routine. + + Action: Recalculate the attached network's Backup Designated Router + and Designated Router, as shown in Section 9.4. As a result + of this calculation, the new state of the interface will be + either DR other, Backup or DR. + + + State(s): Any State + + Event: Interface Down + +New state: Down + + Action: All interface variables are reset, and interface timers + disabled. Also, all neighbor connections associated with + the interface are destroyed. This is done by generating the + event KillNbr on all associated neighbors (see Section + 10.2). + + + State(s): Any State + + Event: Loop Ind + +New state: Loopback + + Action: Since this interface is no longer connected to the attached + network the actions associated with the above Interface Down + event are executed. + + + State(s): Loopback + + Event: Unloop Ind + +New state: Down + + Action: No actions are necessary. For example, the interface + variables have already been reset upon entering the Loopback + state. Note that reception of an Interface Up event is + necessary before the interface again becomes fully + functional. + + + + + + +[Moy] [Page 50] + +RFC 1247 OSPF Version 2 July 1991 + + +9.4 Electing the Designated Router + +This section describes the algorithm used for calculating a network's +Designated Router and Backup Designated Router. This algorithm is +invoked by the Interface state machine. The initial time a router runs +the election algorithm for a network, the network's Designated Router +and Backup Designated Router are initialized to 0.0.0.0. This indicates +the lack of both a Designated Router and a Backup Designated Router. + +The Designated Router election algorithm proceeds as follows: Call the +router doing the calculation Router X. The list of neighbors attached +to the network and having established bidirectional communication with +Router X is examined. This list is precisely the collection of Router +X's neighbors (on this network) whose state is greater than or equal to +2-Way (see Section 10.1). Router X itself is also considered to be on +the list. Discard all routers from the list that are ineligible to +become Designated Router. (Routers having Router Priority of 0 are +ineligible to become Designated Router.) The following steps are then +executed, considering only those routers that remain on the list: + + +(1) Note the current values for the network's Designated Router and + Backup Designated Router. This is used later for comparison + purposes. + +(2) Calculate the new Backup Designated Router for the network as + follows. Only those routers on the list that have not declared + themselves to be Designated Router are eligible to become Backup + Designated Router. If one or more of these routers have declared + themselves Backup Designated Router (i.e., they are currently + listing themselves as Backup Designated Router, but not as + Designated Router, in their Hello Packets) the one having highest + Router Priority is declared to be Backup Designated Router. In case + of a tie, the one having the highest Router ID is chosen. If no + routers have declared themselves Backup Designated Router, choose + the router having highest Router Priority, (again excluding those + routers who have declared themselves Designated Router), and again + use the Router ID to break ties. + +(3) Calculate the new Designated Router for the network as follows. If + one or more of the routers have declared themselves Designated + Router (i.e., they are currently listing themselves as Designated + Router in their Hello Packets) the one having highest Router + Priority is declared to be Designated Router. In case of a tie, the + one having the highest Router ID is chosen. If no routers have + declared themselves Designated Router, promote the new Backup + Designated Router to Designated Router. + + + + +[Moy] [Page 51] + +RFC 1247 OSPF Version 2 July 1991 + + +(4) If Router X is now newly the Designated Router or newly the Backup + Designated Router, or is now no longer the Designated Router or no + longer the Backup Designated Router, repeat steps 2 and 3, and then + proceed to step 5. For example, if Router X is now the Designated + Router, when step 2 is repeated X will no longer be eligible for + Backup Designated Router election. Among other things, this will + ensure that no router will declare itself both Backup Designated + Router and Designated Router.[5] + +(5) As a result of these calculations, the router itself may now be + Designated Router or Backup Designated Router. See Sections 7.3 and + 7.4 for the additional duties this would entail. The router's + interface state should be set accordingly. If the router itself is + now Designated Router, the new interface state is DR. If the router + itself is now Backup Designated Router, the new interface state is + Backup. Otherwise, the new interface state is DR Other. + +(6) If the attached network is non-broadcast, and the router itself has + just become either Designated Router or Backup Designated Router, it + must start sending hellos to those neighbors that are not eligible + to become Designated Router (see Section 9.5.1). This is done by + invoking the neighbor event Start for each neighbor having a Router + Priority of 0. + +(7) If the above calculations have caused the identity of either the + Designated Router or Backup Designated Router to change, the set of + adjacencies associated with this interface will need to be modified. + Some adjacencies may need to be formed, and others may need to be + broken. To accomplish this, invoke the event AdjOK? on all + neighbors whose state is at least 2-Way. This will cause their + eligibility for adjacency to be reexamined (see Sections 10.3 and + 10.4). + + +The reason behind the election algorithm's complexity is the desire for +an orderly transition from Backup Designated Router to Designated +Router, when the current Designated Router fails. This orderly +transition is ensured through the introduction of hysteresis: no new +Backup router can be chosen until the old Backup accepts its new +Designated Router responsibilities. + +If Router X is not itself eligible to become Designated Router, it is +possible that neither a Backup Designated Router nor a Designated Router +will be selected in the above procedure. Note also that if Router X is +the only attached router that is eligible to become Designated Router, +it will select itself as Designated Router and there will be no Backup +Designated Router for the network. + + + + +[Moy] [Page 52] + +RFC 1247 OSPF Version 2 July 1991 + + +9.5 Sending Hello packets + +Hello packets are sent out each functioning router interface. They are +used to discover and maintain neighbor relationships.[6] On multi-access +networks, hellos are also used to elect the Designated Router and Backup +Designated Router, and in that way determine what adjacencies should be +formed. + +The format of a Hello packet is detailed in Section A.3.2. The Hello +Packet contains the router's Router Priority (used in choosing the +Designated Router), and the interval between Hello broadcasts +(HelloInterval). The Hello Packet also indicates how often a neighbor +must be heard from to remain active (RouterDeadInterval). Both +HelloInterval and RouterDeadInterval must be the same for all routers +attached to a common network. The Hello packet also contains the IP +address mask of the attached network (Network Mask). On unnumbered +point-to-point networks and on virtual links this field should be set to +0. + +The Hello packet's Options field describes the router's optional OSPF +capabilities. There are currently two optional capabilities defined +(see Sections 4.5 and A.2). The T-bit of the Options field should be +set if the router is capable of calculating separate routes for each IP +TOS. The E-bit should be set if and only if the attached area is +capable of processing AS external advertisements (i.e., it is not a stub +area). If the E-bit is set incorrectly the neighboring routers will +refuse to accept the Hello Packet (see Section 10.5). The rest of the +Hello Packet's Options field should be set to zero. + +In order to ensure two-way communication between adjacent routers, the +Hello packet contains the list of all routers from which hellos have +been seen recently. The Hello packet also contains the router's current +choice for Designated Router and Backup Designated Router. A value of 0 +in these fields means that one has not yet been selected. + +On broadcast networks and physical point-to-point networks, Hello +packets are sent every HelloInterval seconds to the IP multicast address +AllSPFRouters. On virtual links, Hello packets are sent as unicasts +(addressed directly to the other end of the virtual link) every +HelloInterval seconds. On non-broadcast networks, the sending of Hello +packets is more complicated. This will be covered in the next section. + + +9.5.1 Sending Hello packets on non-broadcast networks + +Static configuration information is necessary in order for the Hello +Protocol to function on non-broadcast networks (see Section C.5). Every +attached router which is eligible to become Designated Router has a + + + +[Moy] [Page 53] + +RFC 1247 OSPF Version 2 July 1991 + + +configured list of all of its neighbors on the network. Each listed +neighbor is labelled with its Designated Router eligibility. + +The interface state must be at least Waiting for any hellos to be sent. +Hellos are then sent directly (as unicasts) to some subset of a router's +neighbors. Sometimes an hello is sent periodically on a timer; at other +times it is sent as a response to a received hello. A router's hello- +sending behavior varies depending on whether the router itself is +eligible to become Designated Router. + +If the router is eligible to become Designated Router, it must +periodically send hellos to all neighbors that are also eligible. In +addition, if the router is itself the Designated Router or Backup +Designated Router, it must also send periodic hellos to all other +neighbors. This means that any two eligible routers are always +exchanging hellos, which is necessary for the correct operation of the +Designated Router election algorithm. To minimize the number of hellos +sent, the number of eligible routers on a non-broadcast network should +be kept small. + +If the router is not eligible to become Designated Router, it must +periodically send hellos to both the Designated Router and the Backup +Designated Router (if they exist). It must also send an hello in reply +to an hello received from any eligible neighbor (other than the current +Designated Router and Backup Designated Router). This is needed to +establish an initial bidirectional relationship with any potential +Designated Router. + +When sending Hello packets periodically to any neighbor, the interval +between hellos is determined by the neighbor's state. If the neighbor +is in state Down, hellos are sent every PollInterval seconds. +Otherwise, hellos are sent every HelloInterval seconds. + + +10. The Neighbor Data Structure + +An OSPF router converses with its neighboring routers. Each separate +conversation is described by a "neighbor data structure". Each +conversation is bound to a particular OSPF router interface, and is +identified either by the neighboring router's OSPF router ID or by its +Neighbor IP address (see below). Thus if the OSPF router and another +router have multiple attached networks in common, multiple conversations +ensue, each described by a unique neighbor data structure. Each +separate conversation is loosely referred to in the text as being a +separate "neighbor". + +The neighbor data structure contains all information pertinent to the +forming or formed adjacency between the two neighbors. (However, + + + +[Moy] [Page 54] + +RFC 1247 OSPF Version 2 July 1991 + + +remember that not all neighbors become adjacent.) An adjacency can be +viewed as a highly developed conversation between two routers. + + +State + The functional level of the neighbor conversation. This is + described in more detail in Section 10.1. + +Inactivity Timer + A single shot timer whose firing indicates that no Hello Packet has + been seen from this neighbor recently. The length of the timer is + RouterDeadInterval seconds. + +Master/Slave + When the two neighbors are exchanging databases, they form a Master + Slave relationship. The Master sends the first Database Description + Packet, and is the only part that is allowed to retransmit. The + slave can only respond to the master's Database Description Packets. + The master/slave relationship is negotiated in state ExStart. + +Sequence Number + A 32-bit number identifying individual Database Description packets. + When the neighbor state ExStart is entered, the sequence number + should be set to a value not previously seen by the neighboring + router. One possible scheme is to use the machine's time of day + counter. The sequence number is then incremented by the master with + each new Database Description packet sent. The slave's sequence + number indicates the last packet received from the master. Only one + packet is allowed outstanding at a time. + +Neighbor ID + The OSPF Router ID of the neighboring router. The neighbor ID is + learned when Hello packets are received from the neighbor, or is + configured if this is a virtual adjacency (see Section C.4). + +Neighbor priority + The Router Priority of the neighboring router. Contained in the + neighbor's Hello packets, this item is used when selecting the + Designated Router for the attached network. + +Neighbor IP address + The IP address of the neighboring router's interface to the attached + network. Used as the Destination IP address when protocol packets + are sent as unicasts along this adjacency. Also used in router + links advertisements as the Link ID for the attached network if the + neighboring router is selected to be Designated Router (see Section + 12.4.1). The neighbor IP address is learned when Hello packets are + received from the neighbor. For virtual links, the neighbor IP + + + +[Moy] [Page 55] + +RFC 1247 OSPF Version 2 July 1991 + + + address is learned during the routing table build process (see + Section 15). + +Neighbor Options + The optional OSPF capabilities supported by the neighbor. Learned + during the Database Exchange process (see Section 10.6). The + neighbor's optional OSPF capabilities are also listed in its Hello + packets. This enables received Hellos to be rejected (i.e., + neighbor relationships will not even start to form) if there is a + mismatch in certain crucial OSPF capabilities (see Section 10.5). + The optional OSPF capabilities are documented in Section 4.5. + +Neighbor's Designated Router + The neighbor's idea of the Designated Router. If this is the + neighbor itself, this is important in the local calculation of the + Designated Router. Defined only on multi-access networks. + +Neighbor's Backup Designated Router + The neighbor's idea of the Backup Designated Router. If this is the + neighbor itself, this is important in the local calculation of the + Backup Designated Router. Defined only on multi-access networks. + + +The next set of variables are lists of link state advertisements. These +lists describe subsets of the area topological database. There can be +five distinct types of link state advertisements in an area topological +database: router links, network links, and type 3 and 4 summary links +(all stored in the area data structure), and AS external links (stored +in the global data structure). + + +Link state retransmission list + The list of link state advertisements that have been flooded but not + acknowledged on this adjacency. These will be retransmitted at + intervals until they are acknowledged, or until the adjacency is + destroyed. + +Database summary list + The complete list of link state advertisements that make up the area + topological database, at the moment the neighbor goes into Database + Exchange state. This list is sent to the neighbor in Database + Description packets. + +Link state request list + The list of link state advertisements that need to be received from + this neighbor in order to synchronize the two neighbors' topological + databases. This list is created as Database Description packets are + received, and is then sent to the neighbor in Link State Request + + + +[Moy] [Page 56] + +RFC 1247 OSPF Version 2 July 1991 + + + packets. The list is depleted as appropriate Link State Update + packets are received. + + +10.1 Neighbor states + +The state of a neighbor (really, the state of a conversation being held +with a neighboring router) is documented in the following sections. The +states are listed in order of progressing functionality. For example, +the inoperative state is listed first, followed by a list of +intermediate states before the final, fully functional state is +achieved. The specification makes use of this ordering by sometimes +making references such as "those neighbors/adjacencies in state greater +than X". Figures 12 and 13 show the graph of neighbor state changes. +The arcs of the graphs are labelled with the event causing the state +change. The neighbor events are documented in Section 10.2. + + +The graph in Figure 12 show the state changes effected by the Hello +Protocol. The Hello Protocol is responsible for neighbor acquisition +and maintenance, and for ensuring two way communication between +neighbors. + +The graph in Figure 13 shows the forming of an adjacency. Not every two +neighboring routers become adjacent (see Section 10.4). The adjacency +starts to form when the neighbor is in state ExStart. After the two +routers discover their master/slave status, the state transitions to +Exchange. At this point the neighbor starts to be used in the flooding +procedure, and the two neighboring routers begin synchronizing their +databases. When this synchronization is finished, the neighbor is in +state Full and we say that the two routers are fully adjacent. At this +point the adjacency is listed in link state advertisements. + +For a more detailed description of neighbor state changes, together with +the additional actions involved in each change, see Section 10.3. + + + + _____________________________________________________ + + (Figures not included in text version.) + + Figure 12: Neighbor state changes (Hello Protocol) + Figure 13: Neighbor state changes (Database Exchange) + _____________________________________________________ + + + + + + +[Moy] [Page 57] + +RFC 1247 OSPF Version 2 July 1991 + + +Down + This is the initial state of a neighbor conversation. It indicates + that there has been no recent information received from the + neighbor. On non-broadcast networks, Hello packets may still be + sent to "Down" neighbors, although at a reduced frequency (see + Section 9.5.1). + +Attempt + This state is only valid for neighbors attached to non-broadcast + networks. It indicates that no recent information has been received + from the neighbor, but that a more concerted effort should be made + to contact the neighbor. This is done by sending the neighbor Hello + packets at intervals of HelloInterval (see Section 9.5.1). + +Init + In this state, an Hello packet has recently been seen from the + neighbor. However, bidirectional communication has not yet been + established with the neighbor (i.e., the router itself did not + appear in the neighbor's Hello packet). All neighbors in this state + (or higher) are listed in the Hello packets sent from the associated + interface. + +2-Way + In this state, communication between the two routers is + bidirectional. This has been assured by the operation of the Hello + Protocol. This is the most advanced state short of beginning + adjacency establishment. The (Backup) Designated Router is selected + from the set of neighbors in state 2-Way or greater. + +ExStart + This is the first step in creating an adjacency between the two + neighboring routers. The goal of this step is to decide which + router is the master, and to decide upon the initial sequence + number. Neighbor conversations in this state or greater are called + adjacencies. + +Exchange + In this state the router is describing its entire link state + database by sending Database Description packets to the neighbor. + Each Database Description Packet has a sequence number, and is + explicitly acknowledged. Only one Database Description Packet is + allowed outstanding at any one time. In this state, Link State + Request Packets may also be sent asking for the neighbor's more + recent advertisements. All adjacencies in Exchange state or greater + are used by the flooding procedure. In fact, these adjacencies are + fully capable of transmitting and receiving all types of OSPF + routing protocol packets. + + + + +[Moy] [Page 58] + +RFC 1247 OSPF Version 2 July 1991 + + +Loading + In this state, Link State Request packets are sent to the neighbor + asking for the more recent advertisements that have been discovered + (but not yet received) in the Exchange state. + +Full + In this state, the neighboring routers are fully adjacent. These + adjacencies will now appear in router links and network links + advertisements. + + +10.2 Events causing neighbor state changes + +State changes can be effected by a number of events. These events are +shown in the labels of the arcs in Figures 12 and 13. The label +definitions are as follows: + + +Hello Received + A Hello packet has been received from a neighbor. + +Start + This is an indication that Hello Packets should now be sent to the + neighbor at intervals of HelloInterval seconds. This event is + generated only for neighbors associated with non-broadcast networks. + +2-Way Received + Bidirectional communication has been realized between the two + neighboring routers. This is indicated by this router seeing itself + in the other's Hello packet. + +NegotiationDone + The Master/Slave relationship has been negotiated, and sequence + numbers have been exchanged. This signals the start of the + sending/receiving of Database Description packets. For more + information on the generation of this event, consult Section 10.8. + +Exchange Done + Both routers have successfully transmitted a full sequence of + Database Description packets. Each router now knows what parts of + its link state database are out of date. For more information on + the generation of this event, consult Section 10.8. + +BadLSReq + A Link State Request has been received for a link state + advertisement not contained in the database. This indicates an + error in the synchronization process. + + + + +[Moy] [Page 59] + +RFC 1247 OSPF Version 2 July 1991 + + +Loading Done + Link State Updates have been received for all out-of-date portions + of the database. This is indicated by the Link state request list + becoming empty after the Database Description Process has completed. + +AdjOK? + A decision must be made (again) as to whether an adjacency should be + established/maintained with the neighbor. This event will start + some adjacencies forming, and destroy others. + + +The following events cause well developed neighbors to revert to lesser +states. Unlike the above events, these events may occur when the +neighbor conversation is in any of a number of states. + + +Seq Number Mismatch + A Database Description packet has been received that either a) has + an unexpected sequence number, b) unexpectedly has the Init bit set + or c) has an Options field differing from the last Options field + received in a Database Description packet. Any of these conditions + indicate that some error has occurred during adjacency + establishment. + +1-Way + An Hello packet has been received from the neighbor, in which this + router is not mentioned. This indicates that communication with the + neighbor is not bidirectional. + +KillNbr + This is an indication that all communication with the + neighbor is now impossible, forcing the neighbor to revert + to Down state. + +Inactivity Timer + The inactivity Timer has fired. This means that no Hello packets + have been seen recently from the neighbor. The neighbor reverts to + Down state. + +LLDown + This is an indication from the lower level protocols that the + neighbor is now unreachable. For example, on an X.25 network this + could be indicated by an X.25 clear indication with appropriate + cause and diagnostic fields. This event forces the neighbor into + Down state. + + + + + + +[Moy] [Page 60] + +RFC 1247 OSPF Version 2 July 1991 + + +10.3 The Neighbor state machine + +A detailed description of the neighbor state changes follows. Each +state change is invoked by an event (Section 10.2). This event may +produce different effects, depending on the current state of the +neighbor. For this reason, the state machine below is organized by +current neighbor state and received event. Each entry in the state +machine describes the resulting new neighbor state and the required set +of additional actions. + +When an neighbor's state changes, it may be necessary to rerun the +Designated Router election algorithm. This is determined by whether the +interface Neighbor Change event is generated (see Section 9.2). Also, +if the Interface is in DR state (the router is itself Designated +Router), changes in neighbor state may cause a new network links +advertisement to be originated (see Section 12.4). + +When the neighbor state machine needs to invoke the interface state +machine, it should be done as a scheduled task (see Section 4.4). This +simplifies things, by ensuring that neither state machine will be +executed recursively. + + + State(s): Down + + Event: Start + +New state: Attempt + + Action: Send an hello to the neighbor (this neighbor is always + associated with a non-broadcast network) and start the + inactivity timer for the neighbor. The timer's later firing + would indicate that communication with the neighbor was not + attained. + + + State(s): Attempt + + Event: Hello Received + +New state: Init + + Action: Restart the inactivity timer for the neighbor, since the + neighbor has now been heard from. + + + State(s): Down + + + + +[Moy] [Page 61] + +RFC 1247 OSPF Version 2 July 1991 + + + Event: Hello Received + +New state: Init + + Action: Start the inactivity timer for the neighbor. The timer's + later firing would indicate that the neighbor is dead. + + + State(s): Init or greater + + Event: Hello Received + +New state: No state change. + + Action: Restart the inactivity timer for the neighbor, since the + neighbor has again been heard from. + + + State(s): Init + + Event: 2-Way Received + +New state: Depends upon action routine. + + Action: Determine whether an adjacency should be established with + the neighbor (see Section 10.4). If not, the new neighbor + state is 2-Way. + + Otherwise (an adjacency should be established) the neighbor + state transitions to ExStart. Upon entering this state, the + router increments the sequence number for this neighbor. If + this is the first time that an adjacency has been attempted, + the sequence number should be assigned some unique value + (like the time of day clock). It then declares itself + master (sets the master/slave bit to master), and starts + sending Database Description Packets, with the initialize + (I), more (M) and master (MS) bits set. This Database + Description Packet should be otherwise empty. This Database + Description Packet should be retransmitted at intervals of + RxmtInterval until the next state is entered (see Section + 10.8). + + + State(s): ExStart + + Event: NegDone + + + + + +[Moy] [Page 62] + +RFC 1247 OSPF Version 2 July 1991 + + +New state: Exchange + + Action: The router must list the contents of its entire area link + state database in the neighbor Database summary list. The + area link state database consists of the router links, + network links and summary links contained in the area + structure, along with the AS external links contained in the + global structure. AS external link advertisements are + omitted from a virtual neighbor's Database summary list. AS + external advertisements are omitted from the Database + summary list if the area has been configured as a stub (see + Section 3.6). Advertisements whose age is equal to MaxAge + are instead added to the neighbor's Link state + retransmission list. A summary of the Database summary list + will be sent to the neighbor in Database Description + packets. Each Database Description Packet has a sequence + number, and is explicitly acknowledged. Only one Database + Description Packet is allowed outstanding at any one time. + For more detail on the sending and receiving of Database + Description packets, see Sections 10.8 and 10.6. + + + State(s): Exchange + + Event: Exchange Done + +New state: Depends upon action routine. + + Action: If the neighbor Link state request list is empty, the new + neighbor state is Full. No other action is required. This + is an adjacency's final state. + + Otherwise, the new neighbor state is Loading. Start (or + continue) sending Link State Request packets to the neighbor + (see Section 10.9). These are requests for the neighbor's + more recent advertisements (which were discovered but not + yet received in the Exchange state). These advertisements + are listed in the Link state request list associated with + the neighbor. + + + State(s): Loading + + Event: Loading Done + +New state: Full + + + + + +[Moy] [Page 63] + +RFC 1247 OSPF Version 2 July 1991 + + + Action: No action required. This is an adjacency's final state. + + + State(s): 2-Way + + Event: AdjOK? + +New state: Depends upon action routine. + + Action: Determine whether an adjacency should be formed with the + neighboring router (see Section 10.4). If not, the neighbor + state remains at 2-Way. Otherwise, transition the neighbor + state to ExStart and perform the actions associated with the + above state machine entry for state Init and event 2-Way + Received. + + + State(s): ExStart or greater + + Event: AdjOK? + +New state: Depends upon action routine. + + Action: Determine whether the neighboring router should still be + adjacent. If yes, there is no state change and no further + action is necessary. + + Otherwise, the (possibly partially formed) adjacency must be + destroyed. The neighbor state transitions to 2-Way. The + Link state retransmission list, Database summary list and + Link state request list are cleared of link state + advertisements. + + + State(s): Exchange or greater + + Event: Seq Number Mismatch + +New state: ExStart + + Action: The (possibly partially formed) adjacency is torn down, and + then an attempt is made at reestablishment. The neighbor + state first transitions to ExStart. The Link state + retransmission list, Database summary list and Link state + request list are cleared of link state advertisements. Then + the router increments the sequence number for this neighbor, + declares itself master (sets the master/slave bit to + master), and starts sending Database Description Packets, + + + +[Moy] [Page 64] + +RFC 1247 OSPF Version 2 July 1991 + + + with the initialize (I), more (M) and master (MS) bits set. + This Database Description Packet should be otherwise empty + (see Section 10.8). + + + State(s): Exchange or greater + + Event: BadLSReq + +New state: ExStart + + Action: The action for event BadLSReq is exactly the same as for the + neighbor event SeqNumberMismatch. The (possibly partially + formed) adjacency is torn down, and then an attempt is made + at reestablishment. For more information, see the neighbor + state machine entry that is invoked when event + SeqNumberMismatch is generated in state Exchange or greater. + + + State(s): Any state + + Event: KillNbr + +New state: Down + + Action: The Link state retransmission list, Database summary list + and Link state request list are cleared of link state + advertisements. Also, the inactivity timer is disabled. + + + State(s): Any state + + Event: LLDown + +New state: Down + + Action: The Link state retransmission list, Database summary list + and Link state request list are cleared of link state + advertisements. Also, the inactivity timer is disabled. + + + State(s): Any state + + Event: Inactivity Timer + +New state: Down + + + + + +[Moy] [Page 65] + +RFC 1247 OSPF Version 2 July 1991 + + + Action: The Link state retransmission list, Database summary list + and Link state request list are cleared of link state + advertisements. + + + State(s): 2-Way or greater + + Event: 1-Way Received + +New state: Init + + Action: The Link state retransmission list, Database summary list + and Link state request list are cleared of link state + advertisements. + + + State(s): 2-Way or greater + + Event: 2-Way received + +New state: No state change. + + Action: No action required. + + + State(s): Init + + Event: 1-Way received + +New state: No state change. + + Action: No action required. + + +10.4 Whether to become adjacent + +Adjacencies are established with some subset of the router's neighbors. +Routers connected by point-to-point networks and virtual links always +become adjacent. On multi-access networks, all routers become adjacent +to both the Designated Router and the Backup Designated Router. + +The adjacency-forming decision occurs in two places in the neighbor +state machine. First, when bidirectional communication is initially +established with the neighbor, and secondly, when the identity of the +attached network's (Backup) Designated Router changes. If the decision +is made to not attempt an adjacency, the state of the neighbor +communication stops at 2-Way. + + + + +[Moy] [Page 66] + +RFC 1247 OSPF Version 2 July 1991 + + +An adjacency should be established with a (bidirectional) neighbor when +at least one of the following conditions holds: + + +o The underlying network type is point-to-point + +o The underlying network type is virtual link + +o The router itself is the Designated Router + +o The router itself is the Backup Designated Router + +o The neighboring router is the Designated Router + +o The neighboring router is the Backup Designated Router + + +10.5 Receiving Hello packets + +This section explains the detailed processing of a received Hello +packet. (See Section A.3.2 for the format of Hello packets.) The +generic input processing of OSPF packets will have checked the validity +of the IP header and the OSPF packet header. Next, the values of the +Network Mask, HelloInt, and DeadInt fields in the received Hello packet +must be checked against the values configured for the receiving +interface. Any mismatch causes processing to stop and the packet to be +dropped. In other words, the above fields are really describing the +attached network's configuration. Note that the value of the Network +Mask field should not be checked in Hellos received on unnumbered serial +lines or on virtual links. + +The receiving interface attaches to a single OSPF area (this could be +the backbone). The setting of the E-bit found in the Hello Packet's +option field must match this area's external routing capability. If AS +external advertisements are not flooded into/throughout the area (i.e, +the area is a "stub") the E-bit must be clear in received hellos, +otherwise the E-bit must be set. A mismatch causes processing to stop +and the packet to be dropped. The setting of the rest of the bits in +the Hello Packet's option field should be ignored. + +At this point, an attempt is made to match the source of the Hello +Packet to one of the receiving interface's neighbors. If the receiving +interface is a multi-access network (either broadcast or non-broadcast) +the source is identified by the IP source address found in the Hello's +IP header. If the receiving interface is a point-to-point link or a +virtual link, the source is identified by the Router ID found in the +Hello's OSPF packet header. The interface's current list of neighbors +is contained in the interface's data structure. If a matching neighbor + + + +[Moy] [Page 67] + +RFC 1247 OSPF Version 2 July 1991 + + +structure cannot be found, (i.e., this is the first time the neighbor +has been detected), one is created. The initial state of a newly +created neighbor is set to Down. + +When receiving an Hello Packet from a neighbor on a multi-access network +(broadcast or non-broadcast), set the neighbor structure's Neighbor ID +equal to the Router ID found in the packet's OSPF header. When +receiving an Hello on a point-to-point network (but not on a virtual +link) set the neighbor structure's Neighbor IP address to the packet's +IP source address. + +Now the rest of the Hello Packet is examined, generating events to be +given to the neighbor and interface state machines. These state +machines are specified either to be executed or scheduled (see Section +4.4). For example, by specifying below that the neighbor state machine +be executed in line, several neighbor state transitions may be effected +by a single received Hello: + + +o Each Hello Packet causes the neighbor state machine to be executed + with the event Hello Received. + +o Then the list of neighbors contained in the Hello Packet is + examined. If the router itself appears in this list, the neighbor + state machine should be executed with the event 2-Way Received. + Otherwise, the neighbor state machine should be executed with the + event 1-Way Received, and the processing of the packet stops. + +o Next, the Hello packet's Router Priority field is examined. If this + field is different than the one previously received from the + neighbor, the receiving interface's state machine is scheduled with + the event NeighborChange. In any case, the Router Priority field in + the neighbor data structure should be set accordingly. + +o Next the Designated Router field in the Hello Packet is examined. + If the neighbor is both declaring itself to be Designated Router + (Designated Router field = neighbor IP address) and the Backup + Designated Router field in the packet is equal to 0.0.0.0 and the + receiving interface is in state Waiting, the receiving interface's + state machine is scheduled with the event BackupSeen. Otherwise, if + the neighbor is declaring itself to be Designated Router and it had + not previously, or the neighbor is not declaring itself Designated + Router where it had previously, the receiving interface's state + machine is scheduled with the event NeighborChange. In any case, + the Designated Router item in the neighbor structure is set + accordingly. + + + + + +[Moy] [Page 68] + +RFC 1247 OSPF Version 2 July 1991 + + +o Finally, the Backup Designated Router field in the Hello Packet is + examined. If the neighbor is declaring itself to be Backup + Designated Router (Backup Designated Router field = neighbor IP + address) and the receiving interface is in state Waiting, the + receiving interface's state machine is scheduled with the event + BackupSeen. Otherwise, if the neighbor is declaring itself to be + Backup Designated Router and it had not previously, or the neighbor + is not declaring itself Backup Designated Router where it had + previously, the receiving interface's state machine is scheduled + with the event NeighborChange. In any case, the Backup Designated + Router item in the neighbor structure is set accordingly. + + +10.6 Receiving Database Description Packets + +This section explains the detailed processing of a received Database +Description packet. The incoming Database Description Packet has +already been associated with a neighbor and receiving interface by the +generic input packet processing (Section 8.2). The further processing +of the Database Description Packet depends on the neighbor state. If +the neighbor's state is Down or Attempt the packet should be ignored. +Otherwise, if the state is: + + +Init + The neighbor state machine should be executed with the event 2-Way + Received. This causes an immediate state change to either state 2- + Way or state Exstart. The processing of the current packet should + then continue in this new state. + +2-Way + The packet should be ignored. Database description packets are used + only for the purpose of bringing up adjacencies.[7] + +ExStart + If the received packet matches one of the following cases, then the + neighbor state machine should be executed with the event + NegotiationDone (causing the state to transition to Exchange), the + packet's Options field should be recorded in the neighbor + structure's Neighbor Options field and the packet should be accepted + as next in sequence and processed further (see below). Otherwise, + the packet should be ignored. + + o The initialize(I), more (M) and master(MS) bits are set, the + contents of the packet are empty, and the neighbor's Router ID + is larger than the router's own. In this case the router is now + Slave. Set the master/slave bit to slave, and set the sequence + number to that specified by the master. + + + +[Moy] [Page 69] + +RFC 1247 OSPF Version 2 July 1991 + + + o The initialize(I) and master(MS) bits are off, the packet's + sequence number equals the router's own sequence number + (indicating acknowledgment) and the neighbor's Router ID is + smaller than the router's own. In this case the router is + Master. + +Exchange + If the state of the MS-bit is inconsistent with the master/slave + state of the connection, generate the neighbor event Seq Number + Mismatch and stop processing the packet. Otherwise: + + o If the initialize(I) bit is set, generate the neighbor event Seq + Number Mismatch and stop processing the packet. + + o If the packet's Options field indicates a different set of + optional OSPF capabilities than were previously received from + the neighbor (recorded in the Neighbor Options field of the + neighbor structure), generate the neighbor event Seq Number + Mismatch and stop processing the packet. + + o If the router is master, and the packet's sequence number equals + the router's own sequence number (this packet is the next in + sequence) the packet should be accepted and its contents + processed (below). + + o If the router is master, and the packet's sequence number is one + less than the router's sequence number, the packet is a + duplicate. Duplicates should be discarded by the master. + + o If the router is slave, and the packet's sequence number is one + more than the router's own sequence number (this packet is the + next in sequence) the packet should be accepted and its contents + processed (below). + + o If the router is slave, and the packet's sequence number is + equal to the router's sequence number, the packet is a + duplicate. The slave must respond to duplicates by repeating + the last Database Description packet that it sent. + + o Else, generate the neighbor event Seq Number Mismatch and stop + processing the packet. + +Loading or Full + In this state, the router has sent and received an entire sequence + of Database Descriptions. The only packets received should be + duplicates (see above). In particular, the packet's Options field + should match the set of optional OSPF capabilities previously + indicated by the neighbor (stored in the neighbor structure's + + + +[Moy] [Page 70] + +RFC 1247 OSPF Version 2 July 1991 + + + neighbor Options field). Any other packets received, including the + reception of a packet with the Initialize(I) bit set, should + generate the neighbor event Seq Number Mismatch.[8] Duplicates + should be discarded by the master. The slave must respond to + duplicates by repeating the last Database Description packet that it + sent. + + +When the router accepts a received Database Description Packet as the +next in sequence the packet contents are processed as follows. For each +link state advertisement listed, the advertisement's LS type is checked +for validity. If the LS type is unknown (e.g., not one of the LS types +1-5 defined by this specification), or if this is a AS external +advertisement (LS type = 5) and the neighbor is associated with a stub +area, generate the neighbor event Seq Number Mismatch and stop +processing the packet. Otherwise, the router looks up the advertisement +in its database to see whether it also has an instance of the link state +advertisement. If it does not, or if the database copy is less recent +(see Section 13.1), the link state advertisement is put on the Link +state request list so that it can be requested (immediately or at some +later time) in Link State Request Packets. + +When the router accepts a received Database Description Packet as the +next in sequence, it also performs the following actions, depending on +whether it is master or slave: + + +Master + Increments the sequence number. If the router has already sent its + entire sequence of Database Descriptions, and the just accepted + packet has the more bit (M) set to 0, the neighbor event Exchange + Done is generated. Otherwise, it should send a new Database + Description to the slave. + +Slave + Sets the sequence number to the sequence number appearing in the + received packet. The slave must send a Database Description in + reply. If the received packet has the more bit (M) set to 0, and + the packet to be sent by the slave will have the M-bit set to 0 + also, the neighbor event Exchange Done is generated. Note that the + slave always generates this event before the master. + + +10.7 Receiving Link State Request Packets + +This section explains the detailed processing of received Link State +Request packets. Received Link State Request Packets specify a list of +link state advertisements that the neighbor wishes to receive. Link + + + +[Moy] [Page 71] + +RFC 1247 OSPF Version 2 July 1991 + + +state Request Packets should be accepted when the neighbor is in states +Exchange, Loading, or Full. In all other states Link State Request +Packets should be ignored. + +Each link state advertisement specified in the Link State Request packet +should be located in the router's database, and copied into Link State +Update packets for transmission to the neighbor. These link state +advertisements should NOT be placed on the Link state retransmission +list for the neighbor. If a link state advertisement cannot be found in +the database, something has gone wrong with the synchronization +procedure, and neighbor event BadLSReq should be generated. + + +10.8 Sending Database Description Packets + +This section describes how Database Description Packets are sent to a +neighbor. The router's optional OSPF capabilities (see Section 4.5) are +transmitted to the neighbor in the Options field of the Database +Description packet. The router should maintain the same set of optional +capabilities throughout the Database Exchange and flooding procedures. +If for some reason the router's optional capabilities change, the +Database Exchange procedure should be restarted by reverting to neighbor +state ExStart. There are currently two optional capabilities defined. +The T-bit should be set if and only if the router is capable of +calculating separate routes for each IP TOS. The E-bit should be set if +and only if the attached network belongs to a non-stub area. The rest +of the Options field should be set to zero. + +The sending of Database Description packets depends on the neighbor's +state. In state ExStart the router sends empty Database Description +packets, with the initialize (I), more (M) and master (MS) bits set. +These packets are retransmitted every RxmtInterval seconds. + +In state Exchange the Database Description Packets actually contain +summaries of the link state information contained in the router's +database. Each link state advertisement in the area's topological +database (at the time the neighbor transitions into Exchange state) is +listed in the neighbor Database summary list. When a new Database +Description Packet is to be sent, the packet's sequence number is +incremented, and the (new) top of the Database summary list is described +by the packet. Items are removed from the Database summary list when +the previous packet is acknowledged. + +In state Exchange, the determination of when to send a packet depends on +whether the router is master or slave: + + + + + + +[Moy] [Page 72] + +RFC 1247 OSPF Version 2 July 1991 + + +Master + Packets are sent when either a) the slave acknowledges the previous + packet by echoing the sequence number or b) RxmtInterval seconds + elapse without an acknowledgment, in which case the previous packet + is retransmitted. + +Slave + Packets are sent only in response to packets received from the + master. If the packet received from the master is new, a new packet + is sent, otherwise the previous packet is resent. + + +In states Loading and Full the slave must resend its last packet in +response to duplicate packets received from the master. For this reason +the slave must wait RouterDeadInterval seconds before freeing the last +packet. Reception of a packet from the master after this interval will +generate a Seq Number Mismatch neighbor event. + + +10.9 Sending Link State Request Packets + +In neighbor states Exchange or Loading, the Link state request list +contains a list of those link state advertisements that need to be +obtained from the neighbor. To request these advertisements, a router +sends the neighbor the beginning of the Link state request list, +packaged in a Link State Request packet. + +When the neighbor responds to these requests with the proper Link State +Update packet(s), the Link state request list is truncated and a new +Link State Request packet is sent. This process continues until the +link state request list becomes empty. Unsatisfied Link State Requests +are retransmitted at intervals of RxmtInterval. There should be at most +one Link State Request packet outstanding at any one time. + +When the Link state request list becomes empty, and the neighbor state +is Loading (i.e., a complete sequence of Database Description packets +has been received from the neighbor), the Loading Done neighbor event is +generated. + + +10.10 An Example + +Figure 14 shows an example of an adjacency forming. Routers RT1 and RT2 +are both connected to a broadcast network. It is assumed that RT2 is +the Designated Router for the network, and that RT2 has a higher Router +ID that router RT1. + +The neighbor state changes realized by each router are listed on the + + + +[Moy] [Page 73] + +RFC 1247 OSPF Version 2 July 1991 + + +sides of the figure. + + +At the beginning of Figure 14, router RT1's interface to the network +becomes operational. It begins sending hellos, although it doesn't know +the identity of the Designated Router or of any other neighboring +routers. Router RT2 hears this hello (moving the neighbor to Init +state), and in its next hello indicates that it is itself the Designated +Router and that it has heard hellos from RT1. This in turn causes RT1 +to go to state ExStart, as it starts to bring up the adjacency. + +RT1 begins by asserting itself as the master. When it sees that RT2 is +indeed the master (because of RT2's higher Router ID), RT1 transitions +to slave state and adopts its neighbor's sequence number. Database +Description packets are then exchanged, with polls coming from the +master (RT2) and responses from the slave (RT1). This sequence of +Database Description Packets ends when both the poll and associated +response has the M-bit off. + +In this example, it is assumed that RT2 has a completely up to date +database. In that case, RT2 goes immediately into Full state. RT1 will +go into Full state after updating the necessary parts of its database. +This is done by sending Link State Request Packets, and receiving Link +State Update Packets in response. Note that, while RT1 has waited until +a complete set of Database Description Packets has been received (from +RT2) before sending any Link State Request Packets, this need not be the +case. RT1 could have interleaved the sending of Link State Request +Packets with the reception of Database Description Packets. + + +11. The Routing Table Structure + +The routing table data structure contains all the information necessary +to forward an IP data packet toward its destination. Each routing table +entry describes the collection of best paths to a particular +destination. When forwarding an IP data packet, the routing table entry +providing the best match for the packet's IP destination is located. + + + ________________________________________ + + (Figure not included in text version.) + + Figure 14: An adjacency bring-up example + ________________________________________ + + + + + + +[Moy] [Page 74] + +RFC 1247 OSPF Version 2 July 1991 + + +The matching routing table entry then provides the next hop towards the +packet's destination. OSPF also provides for the existence of a default +route (Destination ID = DefaultDestination). When the default route +exists, it matches all IP destinations (although any other matching +entry is a better match). Finding the routing table entry that best +matches an IP destination is further described in Section 11.1. + +There is a single routing table in each router. Two sample routing +tables are described in Sections 11.2 and 11.3. The building of the +routing table is discussed in Section 16. + +The rest of this section defines the fields found in a routing table +entry. The first set of fields describes the routing table entry's +destination. + + +Destination Type + The destination can be one of three types. Only the first type, + Network, is actually used when forwarding IP data traffic. The + other destinations are used solely as intermediate steps in the + routing table build process. + + Network + A range of IP addresses, to which IP data traffic may be + forwarded. This includes IP networks (class A, B, or C), IP + subnets, and single IP hosts. The default route also falls in + this category. + + Area border router + Routers that are connected to multiple OSPF areas. Such routers + originate summary link advertisements. These routing table + entries are used when calculating the inter-area routes (see + Section 16.2). These routing table entries may also be + associated with configured virtual links. + + AS boundary router + Routers that originate AS external link advertisements. These + routing table entries are used when calculating the AS external + routes (see Section 16.4). + +Destination ID + The destination's identifier or name. This depends on the + destination's type. For networks, the identifier is their + associated IP address. For all other types, the identifier is the + OSPF Router ID.[9] + +Address Mask + Only defined for networks. The network's IP address together with + + + +[Moy] [Page 75] + +RFC 1247 OSPF Version 2 July 1991 + + + its address mask defines a range of IP addresses. For IP subnets, + the address mask is referred to as the subnet mask. For host + routes, the mask is "all ones" (0xffffffff). + +Optional Capabilities + When the destination is a router (either an area border router or an + AS boundary router) this field indicates the optional OSPF + capabilities supported by the destination router. The two optional + capabilities currently defined by this specification are the ability + to route based on IP TOS and the ability to process AS external + advertisements. For a further discussion of OSPF's optional + capabilities, see Section 4.5. + + +The set of paths to use for a destination may vary based on IP Type of +Service and the OSPF area to which the paths belong. This means that +there may be multiple routing table entries for the same destination, +depending on the values of the next two fields. + + +Type of Service + There can be a separate set of routes for each IP Type of Service. + The encoding of TOS in OSPF link state advertisements is described + in Section 12.3. + +Area + This field indicates the area whose link state information has led + to the routing table entry's collection of paths. This is called + the entry's associated area. For sets of AS external paths, this + field is not defined. For destinations of type "area border + router", there may be separate sets of paths (and therefore separate + routing table entries) associated with each of several areas. This + will happen when two area border routers share multiple areas in + common. For all other destination types, only the set of paths + associated with the best area (the one providing the shortest route) + is kept. + + +The rest of the routing table entry describes the set of paths to the +destination. The following fields pertain to the set of paths as a +whole. In other words, each one of the paths contained in a routing +table entry is of the same path-type and cost (see below). + + +Path-type + There are four possible types of paths used to route traffic to the + destination, listed here in order of preference: intra-area, inter- + area, type 1 external or type 2 external. Intra-area paths indicate + + + +[Moy] [Page 76] + +RFC 1247 OSPF Version 2 July 1991 + + + destinations belonging to one of the router's attached areas. + Inter-area paths are paths to destinations in other OSPF areas. + These are discovered through the examination of received summary + link advertisements. AS external paths are paths to destinations + external to the AS. These are detected through the examination of + received AS external link advertisements. + +Cost + The link state cost of the path to the destination. For all paths + except type 2 external paths this describes the entire path's cost. + For Type 2 external paths, this field describes the cost of the + portion of the path internal to the AS. This cost is calculated as + the sum of the costs of the path's constituent links. + +Type 2 cost + Only valid for type 2 external paths. For these paths, this field + indicates the cost of the path's external portion. This cost has + been advertised by an AS boundary router, and is the most + significant part of the total path cost. For example, an external + type 2 path with type 2 cost of 5 is always preferred over a path + with type 2 cost of 10, regardless of the cost of the two paths' + internal components. + +Link State Origin + Valid only for intra-area paths, this field indicates the link state + advertisement (router links or network links) that directly + references the destination. For example, if the destination is a + transit network, this is the transit network's network links + advertisement. If the destination is a stub network, this is the + router links advertisement for the attached router. The + advertisement is discovered during the shortest-path tree + calculation (see Section 16.1). Multiple advertisements may + reference the destination, however a tie-breaking scheme always + reduces the choice to a single advertisement. + + This field is for informational purposes only. The advertisement + could be used as a root for an SPF calculation when building a + reverse path forwarding tree. This is beyond the scope of this + specification. + + +When multiple paths of equal path-type and cost exist to a destination +(called elsewhere "equal-cost" paths), they are stored in a single +routing table entry. Each one of the "equal-cost" paths is +distinguished by the following fields: + + + + + + +[Moy] [Page 77] + +RFC 1247 OSPF Version 2 July 1991 + + +Next hop + The outgoing router interface to use when forwarding traffic to the + destination. On multi-access networks, the next hop also includes + the IP address of the next router (if any) in the path towards the + destination. This next router will always be one of the adjacent + neighbors. + +Advertising router + Valid only for inter-area and AS external paths. This field + indicates the Router ID of the router advertising the summary link + or AS external link that led to this path. + + +11.1 Routing table lookup + +When an IP data packet is received, an OSPF router finds the routing +table entry that best matches the packet's destination. This routing +table entry then provides the outgoing interface and next hop router to +use in forwarding the packet. This section describes the process of +finding the best matching routing table entry. The process consists of a +number of steps, wherein the collection of routing table entries is +progressively pruned. In the end, the single routing table entry +remaining is the called best match. + +Note that the steps described below may fail to produce a best match +routing table entry (i.e., all existing routing table entries are pruned +for some reason or another). In this case, the packet's IP destination +is considered unreachable. Instead of being forwarded, the packet should +be dropped and an ICMP destination unreachable message should be +returned to the packet's source. + + +(1) Select the complete set of "matching" routing table entries from the + routing table. Each routing table entry describes a (set of) + path(s) to a range of IP addresses. If the data packet's IP + destination falls into an entry's range of IP addresses, the routing + table entry is called a match. (It is quite likely that multiple + entries will match the data packet. For example, a default route + will match all packets.) + +(2) Suppose that the packet's IP destination falls into one of the + router's configured area address ranges (see Section 3.5), and that + the particular area address range is active. This means that there + are one or more reachable (by intra-area paths) networks contained + in the area address range. The packet's IP destination is then + required to belong to one of these constituent networks. For this + reason, only matching routing table entries with path-type of + intra-area are considered (all others are pruned). If no such + + + +[Moy] [Page 78] + +RFC 1247 OSPF Version 2 July 1991 + + + matching entries exist, the destination is unreachable (see above). + Otherwise, skip to step 4. + +(3) Reduce the set of matching entries to those having the most + preferential path-type (see Section 11). OSPF has a four level + hierarchy of paths. Intra-area paths are the most preferred, + followed in order by inter-area, Type 1 external and Type 2 external + paths. + +(4) Select the remaining routing table entry that provides the longest + (most specific) match. Another way of saying this is to choose the + remaining entry that specifies the narrowest range of IP + addresses.[10] For example, the entry for the address/mask pair of + (128.185.1.0, 0xffffff00) is more specific than an entry for the + pair (128.185.0.0, 0xffff0000). The default route is the least + specific match, since it matches all destinations. + +(5) At this point, there may still be multiple routing table entries + remaining. Each routing entry will specify the same range of IP + addresses, but a different IP Type of Service. Select the routing + table entry whose TOS value matches the TOS found in the packet + header. If there is no routing table entry for this TOS, select the + routing table entry for TOS 0. In other words, packets requesting + TOS X are routed along the TOS 0 path if a TOS X path does not + exist. + + +11.2 Sample routing table, without areas + +Consider the Autonomous System pictured in Figure 2. No OSPF areas have +been configured. A single metric is shown per outbound interface, +indicating that routes will not vary based on TOS. The calculation +router RT6's routing table proceeds as described in Section 2.1. The +resulting routing table is shown in Table 12. Destination types are +abbreviated: Network as "N", area border router as "BR" and AS boundary +router as "ASBR". + +There are no instances of multiple equal-cost shortest paths in this +example. Also, since there are no areas, there are no inter-area paths. + +Routers RT5 and RT7 are AS boundary routers. Intra-area routes have +been calculated to routers RT5 and RT7. This allows external routes to +be calculated to the destinations advertised by RT5 and RT7 (i.e., +networks N12, N13, N14 and N15). It is assumed all AS external +advertisements originated by RT5 and RT7 are advertising type 1 external +metrics. This results in type 1 external paths being calculated to +destinations N12-N15. + + + + +[Moy] [Page 79] + +RFC 1247 OSPF Version 2 July 1991 + + +11.3 Sample routing table, with areas + +Consider the previous example, this time split into OSPF areas. An OSPF +area configuration is pictured in Figure 6. Router RT4's routing table +will be described for this area configuration. Router RT4 has a +connection to Area 1 and a backbone connection. This causes Router RT4 +to view the AS as the concatenation of the two graphs shown in Figures 7 +and 8. The resulting routing table is displayed in Table 13. + +Again, routers RT5 and RT7 are AS boundary routers. Routers RT3, RT4, +RT7, RT10 and RT11 are area border routers. Note that there are two +routing entries (in this case having identical paths) for router RT7, in +its dual capacities as an area border router and an AS boundary router. +Note also that there are two routing entries for the area border router +RT3, since it has two areas in common with RT4 (Area 1 and the +backbone). + +Backbone paths have been calculated to all area border routers (BR). +These are used when determining the inter-area routes. Note that all of + + +Type Dest Area Path Type Cost Next Hop(s) Adv. Router(s) +__________________________________________________________________________ +N N1 0 intra-area 10 RT3 * +N N2 0 intra-area 10 RT3 * +N N3 0 intra-area 7 RT3 * +N N4 0 intra-area 8 RT3 * +N Ib 0 intra-area 7 * * +N Ia 0 intra-area 12 RT10 * +N N6 0 intra-area 8 RT10 * +N N7 0 intra-area 12 RT10 * +N N8 0 intra-area 10 RT10 * +N N9 0 intra-area 11 RT10 * +N N10 0 intra-area 13 RT10 * +N N11 0 intra-area 14 RT10 * +N H1 0 intra-area 21 RT10 * +ASBR RT5 0 intra-area 6 RT5 * +ASBR RT7 0 intra-area 8 RT10 * +__________________________________________________________________________ +N N12 * type 1 external 10 RT10 RT7 +N N13 * type 1 external 14 RT5 RT5 +N N14 * type 1 external 14 RT5 RT5 +N N15 * type 1 external 17 RT10 RT7 + + + Table 12: The routing table for Router RT6 (no configured areas). + + + + + +[Moy] [Page 80] + +RFC 1247 OSPF Version 2 July 1991 + + +the inter-area routes are associated with the backbone; this is always +the case when the router is itself an area border router. Routing +information is condensed at area boundaries. In this example, we assume +that Area 3 has been defined so that networks N9-N11 and the host route +to H1 are all condensed to a single route when advertised to the +backbone (by router RT11). Note that the cost of this route is the +minimum of the set of costs to its individual components. + +There is a virtual link configured between routers RT10 and RT11. +Without this configured virtual link, RT11 would be unable to advertise +a route for networks N9-N11 and host H1 into the backbone, and there +would not be an entry for these networks in router RT4's routing table. + +In this example there are two equal-cost paths to network N12. However, +they both use the same next hop (Router RT5). + + + +Router RT4's routing table would improve (i.e., some of the paths in the +routing table would become shorter) if an additional virtual link were +configured between router RT4 and router RT3. The new virtual link +would itself be associated with the first entry for area border router +RT3 in Table 13 (an intra-area path through Area 1). This would yield a +cost of 1 for the virtual link. The routing table entries changes that +would be caused by the addition of this virtual link are shown in Table +14. + + + +12. Link State Advertisements + +Each router in the Autonomous System originates one or more link state +advertisements. There are five distinct types of link state +advertisements, which are described in Section 4.3. The collection of +link state advertisements forms the link state or topological database. +Each separate type of advertisement has a separate function. Router +links and network links advertisements describe how an area's routers +and networks are interconnected. Summary link advertisements provide a +way of condensing an area's routing information. AS external +advertisements provide a way of transparently advertising externally- +derived routing information throughout the Autonomous System. + +Each link state advertisement begins with a standard 20-byte header. +This link state header is discussed below. + + + + + + + +[Moy] [Page 81] + +RFC 1247 OSPF Version 2 July 1991 + + + + +Type Dest Area Path Type Cost Next Hop(s) Adv. Router(s) +_______________________________________________________________________________ +N N1 1 intra-area 4 RT1 * +N N2 1 intra-area 4 RT2 * +N N3 1 intra-area 1 * * +N N4 1 intra-area 3 RT3 * +BR RT3 1 intra-area 1 * * +_______________________________________________________________________________ +N Ib 0 intra-area 22 RT5 * +N Ia 0 intra-area 27 RT5 * +BR RT3 0 intra-area 21 RT5 * +BR RT7 0 intra-area 14 RT5 * +BR RT10 0 intra-area 22 RT5 * +BR RT11 0 intra-area 25 RT5 * +ASBR RT5 0 intra-area 8 * * +ASBR RT7 0 intra-area 14 RT5 * +_______________________________________________________________________________ +N N6 0 inter-area 15 RT5 RT7 +N N7 0 inter-area 19 RT5 RT7 +N N8 0 inter-area 18 RT5 RT7 +N N9-N11,H1 0 inter-area 26 RT5 RT11 +_______________________________________________________________________________ +N N12 * type 1 external 16 RT5 RT5,RT7 +N N13 * type 1 external 16 RT5 RT5 +N N14 * type 1 external 16 RT5 RT5 +N N15 * type 1 external 23 RT5 RT7 + + + Table 13: Router RT4's routing table in the presence of areas. + + +Type Dest Area Path Type Cost Next Hop(s) Adv. Router(s) +__________________________________________________________________________ +N Ib 0 intra-area 16 RT3 * +N Ia 0 intra-area 21 RT3 * +BR RT3 0 intra-area 1 * * +BR RT10 0 intra-area 16 RT3 * +BR RT11 0 intra-area 19 RT3 * +__________________________________________________________________________ +N N9-N11,H1 0 inter-area 20 RT3 RT11 + + + Table 14: Changes resulting from an additional virtual link. + +12.1 The Link State Header + + + + +[Moy] [Page 82] + +RFC 1247 OSPF Version 2 July 1991 + + +The link state header contains the LS type, Link State ID and +Advertising Router fields. The combination of these three fields +uniquely identifies the link state advertisement. + +There may be several instances of an advertisement present in the +Autonomous System, all at the same time. It must then be determined +which instance is more recent. This determination is made be examining +the LS sequence, LS checksum and LS age fields. These fields are also +contained in the 20-byte link state header. + +Several of the OSPF packet types list link state advertisements. When +the instance is not important, an advertisement is referred to by its LS +type, Link State ID and Advertising Router (see Link State Request +Packets). Otherwise, the LS sequence number, LS age and LS checksum +fields must also be referenced. + +A detailed explanation of the fields contained in the link state header +follows. + + +12.1.1 LS age + +This field is the age of the link state advertisement in seconds. It +should be processed as an unsigned 16-bit integer. It is set to 0 when +the link state advertisement is originated. It must be incremented by +InfTransDelay on every hop of the flooding procedure. Link state +advertisements are also aged as they are held in each router's database. + +The age of a link state advertisement is never incremented past MaxAge. +Advertisements having age MaxAge are not used in the routing table +calculation. When an advertisement's age first reaches MaxAge, it is +reflooded. A link state advertisement of age MaxAge is finally flushed +from the database when it is no longer contained on any neighbor Link +state retransmission lists. This indicates that it has been +acknowledged by all adjacent neighbors. For more information on the +aging of link state advertisements, consult Section 14. + +Ages are examined when a router receives two instances of a link state +advertisement, both having identical sequence numbers and checksums. An +instance of age MaxAge is then always accepted as most recent; this +allows old advertisements to be flushed quickly from the routing domain. +Otherwise, if the ages differ by more than MaxAgeDiff, the instance +having the smaller age is accepted as most recent.[11] See Section 13.1 +for more details. + + + + + + + +[Moy] [Page 83] + +RFC 1247 OSPF Version 2 July 1991 + + +12.1.2 Options + +The options field in the link state header indicates which optional +capabilities are associated with the advertisement. OSPF's optional +capabilities are described in Section 4.5. There are currently two +optional capabilities defined; they are represented by the T-bit and E- +bit found in the options field. The rest of the options field should be +set to zero. + +The E-bit represents OSPF's external routing capability. This bit +should be set in all advertisements associated with the backbone, and +all advertisements associated with non-stub areas (see Section 3.6). It +should also be set in all AS external advertisements. It should be +reset in all router links, network links and summary link advertisements +associated with a stub area. For all link state advertisements, the +setting of the E-bit is for informational purposes only; it does not +affect the routing table calculation. + +The T-bit represents OSPF's TOS routing capability. This bit should be +set in a router links advertisement if and only if the router is capable +of calculating separate routes for each IP TOS (see Section 2.4). The +T-bit should always be set in network links advertisements. It should +be set in summary link and AS external link advertisements if and only +if the advertisement describes paths for all TOS values, instead of just +the TOS 0 path. Note that, with the T-bit set, there may still be only +a single metric in the advertisement (the TOS 0 metric). This would +mean that paths for non-zero TOS exist, but are equivalent to the TOS 0 +path. A link state advertisement's T-bit is examined when calculating +the routing table's non-zero TOS paths (see Section 16.9). + + +12.1.3 LS type + +The LS type field dictates the format and function of the link state +advertisement. Advertisements of different types have different names +(e.g., router links or network links). All advertisement types, except +the AS external link advertisements (LS type = 5), are flooded +throughout a single area only. AS external link advertisements are +flooded throughout the entire Autonomous System, excluding stub areas +(see Section 3.6). Each separate advertisement type is briefly +described below in Table 15. + + + LS Type Advertisement description + __________________________________________________ + 1 These are the router links + advertisements. They describe the + + + + +[Moy] [Page 84] + +RFC 1247 OSPF Version 2 July 1991 + + + LS Type Advertisement description + __________________________________________________ + collected states of the router's + interfaces. For more information, + consult Section 12.4.1. + __________________________________________________ + 2 These are the network links + advertisements. They describe the set + of routers attached to the network. For + more information, consult + Section 12.4.2. + __________________________________________________ + 3 or 4 These are the summary link + advertisements. They describe + inter-area routes, and enable the + condensation of routing information at + area borders. Originated by area border + routers, the Type 3 advertisements + describe routes to networks while the + Type 4 advertisements describe routes to + AS boundary routers. + __________________________________________________ + 5 These are the AS external link + advertisements. Originated by AS + boundary routers, they describe routes + to destinations external to the + Autonomous System. A default route for + the Autonomous System can also be + described by an AS external link + advertisement. + + + Table 15: OSPF link state advertisements. + + +12.1.4 Link State ID + +This field identifies the piece of the routing domain that is being +described by the advertisement. Depending on the advertisement's LS +type, the Link State ID takes on the values listed in Table 16. + + + + + + + + + + + +[Moy] [Page 85] + +RFC 1247 OSPF Version 2 July 1991 + + + + LS Type Link State ID + ______________________________________________________________________ + 1 The originating router's Router ID. + 2 The IP interface address of the network's Designated Router. + 3 The destination network's IP address. + 4 The Router ID of the described AS boundary router. + 5 The destination network's IP address. + + + Table 16: The advertisement's Link State ID. + + +When the link state advertisement is describing a network, the Link +State ID is either the network's IP address (as in type 3 summary link +advertisements and in AS external link advertisements) or the network's +IP address is easily derivable from the Link State ID (note that masking +a network links advertisement's Link State ID with the network's subnet +mask yields the network's IP address). When the link state +advertisement is describing a router, the Link State ID is always the +described router's OSPF Router ID. + +When an AS external advertisement (LS Type = 5) is describing a default +route, its Link State ID is set to DefaultDestination (0.0.0.0). + + +12.1.5 Advertising Router + +This field specifies the OSPF Router ID of the advertisement's +originator. For router links advertisements, this field is identical to +the Link State ID field. Network link advertisements are originated by +the network's Designated Router. Summary link advertisements are +originated by area border routers. Finally, AS external link +advertisements are originated by AS boundary routers. + + +12.1.6 LS sequence number + +The sequence number field is a signed 32-bit integer. It is used to +detect old and duplicate link state advertisements. The space of +sequence numbers is linearly ordered. The larger the sequence number +(when compared as signed 32-bit integers) the more recent the +advertisement. To describe to sequence number space more precisely, let +N refer in the discussion below to the constant 2**31. + +The sequence number -N (0x80000000) is reserved (and unused). This +leaves -N + 1 (0x80000001) as the smallest (and therefore oldest) +sequence number. A router uses this sequence number the first time it + + + +[Moy] [Page 86] + +RFC 1247 OSPF Version 2 July 1991 + + +originates any link state advertisement. Afterwards, the +advertisement's sequence number is incremented each time the router +originates a new instance of the advertisement. When an attempt is made +to increment the sequence number past the maximum value of of N - 1 +(0x7fffffff), the current instance of the advertisement must first be +flushed from the routing domain. This is done by prematurely aging the +advertisement (see Section 14.1) and reflooding it. As soon as this +flood has been acknowledged by all adjacent neighbors, a new instance +can be originated with sequence number of -N + 1 (0x80000001). + +The router may be forced to promote the sequence number of one of its +advertisements when a more recent instance of the advertisement is +unexpectedly received during the flooding process. This should be a +rare event. This may indicate that an out-of-date advertisement, +originated by the router itself before its last restart/reload, still +exists in the Autonomous System. For more information see Section 13.4. + +,uh "12.1.7 LS checksum" + +This field is the checksum of the complete contents of the +advertisement, excepting the age field. The age field is excepted so +that an advertisement's age can be incremented without updating the +checksum. The checksum used is the same that is used for ISO +connectionless datagrams; it is commonly referred to as the Fletcher +checksum. It is documented in Annex C of [RFC 994]. The link state +header also contains the length of the advertisement in bytes; +subtracting the size of the age field (two bytes) yields the amount of +data to checksum. + +The checksum is used to detect data corruption of an advertisement. +This corruption can occur while an advertisement is being flooded, or +while it is being held in a router's memory. The LS checksum field +cannot take on the value of zero; the occurrence of such a value should +be considered a checksum failure. In other words, calculation of the +checksum is not optional. + +The checksum of a link state advertisement is verified in two cases: a) +when it is received in a Link State Update Packet and b) at times during +the aging of the link state database. The detection of a checksum +failure leads to separate actions in each case. See Sections 13 and 14 +for more details. + +Whenever the LS sequence number field indicates that two instances of an +advertisement are the same, the LS checksum field is examined. If there +is a difference, the instance with the larger checksum is considered to +be most recent.[12] See Section 13.1 for more details. + + + + + +[Moy] [Page 87] + +RFC 1247 OSPF Version 2 July 1991 + + +12.2 The link state database + +A router has a separate link state database for every area to which it +belongs. The link state database has been referred to elsewhere in the +text as the topological database. All routers belonging to the same +area have identical topological databases for the area. + +The databases for each individual area are always dealt with separately. +The shortest path calculation is performed separately for each area (see +Section 16). Components of the area topological database are flooded +throughout the area only. Finally, when an adjacency (belonging to Area +A) is being brought up, only the database for Area A is synchronized +between the two routers. + +The area database is composed of router links advertisements, network +links advertisements, and summary link advertisements (all listed in the +area data structure). In addition, external routes (AS external +advertisements) are included in all non-stub area databases (see Section +3.6). + +An implementation of OSPF must be able to access individual pieces of an +area database. This lookup function is based on an advertisement's LS +type, Link State ID and Advertising Router.[13] There will be a single +instance (the most up-to-date) of each link state advertisement in the +database. The database lookup function is invoked during the link state +flooding procedure (Section 13) and the routing table calculation +(Section 16). In addition, using this lookup function the router can +determine whether it has itself ever originated a particular link state +advertisement, and if so, with what LS sequence number. + +A link state advertisement is added to a router's database when either +a) it is received during the flooding process (Section 13) or b) it is +originated by the router itself (Section 12.4). A link state +advertisement is deleted from a router's database when either a) it has +been overwritten by a newer instance during the flooding process +(Section 13) or b) the router originates a newer instance of one of its +self-originated advertisements (Section 12.4) or c) the advertisement +ages out and is flushed from the routing domain (Section 14). Whenever +a link state advertisement is deleted from the database it must also be +removed from all neighbors' Link state retransmission lists (see Section +10). + + +12.3 Representation of TOS + +All OSPF link state advertisements (with the exception of network links +advertisements) specify metrics. In router links advertisements, the +metrics indicate the costs of the described interfaces. In summary link + + + +[Moy] [Page 88] + +RFC 1247 OSPF Version 2 July 1991 + + +and AS external link advertisements, the metric indicates the cost of +the described path. In all of these advertisements, a separate metric +can be specified for each IP TOS. TOS is encoded in an OSPF link state +advertisement as the following mapping of the Delay (D), Throughput (T) +and Reliability (R) flags found in the IP packet header's TOS field (see +[RFC 791]). + + + + OSPF encoding D T R + _________________________ + 0 0 0 0 + 4 0 0 1 + 8 0 1 0 + 12 0 1 1 + 16 1 0 0 + 20 1 0 1 + 24 1 1 0 + 28 1 1 1 + + + Table 17: Representing TOS in OSPF. + + +Each OSPF link state advertisement must specify the TOS 0 metric. Other +TOS metrics, if they appear, must appear in order of increasing TOS +encoding. For example, the TOS 8 (high throughput) metric must always +appear before the TOS 16 (low delay) metric when both are specified. If +a metric for some non-zero TOS is not specified, its cost defaults to +the cost for TOS 0, unless the T-bit is reset in the advertisement's +options field (see Section 12.1.2 for more details). + +Note that if more TOS types are defined in a future IP architecture, +OSPF's TOS encoding can be extended in a straightforward manner. + + +12.4 Originating link state advertisements + +A router may originate many types of link state advertisements. A +router originates a router links advertisement for each area to which it +belongs. If the router is also the Designated Router for any of its +attached networks, it will originate a network links advertisement for +that network. + +Area border routers originate a single summary links advertisement for +each known inter-area destination. AS boundary routers originate a +single AS external links advertisement for each known AS external +destination. Destinations are advertised one at a time so that the + + + +[Moy] [Page 89] + +RFC 1247 OSPF Version 2 July 1991 + + +change in any single route can be flooded without reflooding the entire +collection of routes. During the flooding procedure, many link state +advertisements can be carried by a single Link State Update packet. + +As an example, consider router RT4 in Figure 6. It is an area border +router, having a connection to Area 1 and the backbone. Router RT4 +originates 5 distinct link state advertisements into the backbone (one +router links, and one summary link for each of the networks N1-N4). +Router RT4 will also originate 8 distinct link state advertisements into +Area 1 (one router links and seven summary link advertisements as +pictured in Figure 7). If RT4 has been selected as Designated Router +for network N3, it will also originate a network links advertisement for +N3 into Area 1. + +In this same figure, router RT5 will be originating 3 distinct AS +external link advertisements (one for each of the networks N12-N14). +These will be flooded throughout the entire AS, assuming that none of +the areas have been configured as stubs. However, if area 3 has been +configured as a stub area, the external advertisements for networks +N12-N14 will not be flooded into area 3 (see Section 3.6). Instead, +router RT11 would originate a default summary link advertisement that +would be flooded throughout area 3 (see Section 12.4.3). This instructs +all of area 3's internal routers to send their AS external traffic to +RT11. + +Whenever a new instance of a link state advertisement is originated, its +LS sequence number is incremented, its LS age is set to 0, its LS +checksum is calculated, and the advertisement is added to the link state +database and flooded out the appropriate interfaces. See Section 13.2 +for details concerning the installation of the advertisement into the +link state database. See Section 13.3 for details concerning the +flooding of newly originated advertisements. + + +The eight events that cause a new instance of a link state advertisement +to be originated are: + + +(1) The LS refresh timer firing. There is a LS refresh timer for each + link state advertisement that the router has originated. The LS + refresh timer is an interval timer, with length LSRefreshTimer. The + LS refresh timer guarantees periodic originations regardless of any + other events that cause new instances. This periodic updating of + link state advertisements adds robustness to the link state + algorithm. Link state advertisements that solely describe + unreachable destinations should not be refreshed, but should instead + be flushed from the routing domain (see Section 14.1). + + + + +[Moy] [Page 90] + +RFC 1247 OSPF Version 2 July 1991 + + +When whatever is being described by a link state advertisement changes, +a new advertisement is originated. Two instances of the same link state +advertisement may not be originated within the time period +MinLSInterval. This may require that the generation of the next +instance to be delayed by up to MinLSInterval. The following changes +may cause a router to originate a new instance of an advertisement. +These changes should cause new originations only if the contents of the +new advertisement would be different. + + +(2) An interface's state changes (see Section 9.1). This may mean that + it is necessary to produce a new instance of the router links + advertisement. + +(3) An attached network's Designated Router changes. A new router links + advertisement should be originated. Also, if the router itself is + now the Designated Router, a new network links advertisement should + be produced. + +(4) One of the neighboring routers changes to/from the FULL state. This + may mean that it is necessary to produce a new instance of the + router links advertisement. Also, if the router is itself the + Designated Router for the attached network, a new network links + advertisement should be produced. + + +The next three events concern area border routers only. + + +(5) An intra-area route has been added/deleted/modified in the routing + table. This may cause a new instance of a summary links + advertisement (for this route) to be originated in each attached + area (this includes the backbone). + +(6) An inter-area route has been added/deleted/modified in the routing + table. This may cause a new instance of a summary links + advertisement (for this route) to be originated in each attached + area (but NEVER for the backbone). + +(7) The router becomes newly attached to an area. The router must then + originate summary link advertisements into the newly attached area + for all pertinent intra-area and inter-area routes in its routing + table. See Section 12.4.3 for more details. + + +The last event concerns AS boundary routers only. + + + + + +[Moy] [Page 91] + +RFC 1247 OSPF Version 2 July 1991 + + +(8) An external route gained through direct experience with an external + routing protocol (like EGP) changes. This will cause the AS + boundary router to originate a new instance of an external links + advertisement. + + +The construction of each type of the link state advertisement is +explained below. In general, these sections describe the contents of +the advertisement body (i.e., the part coming after the 20-byte +advertisement header). For information concerning the building of the +link state advertisement header, see Section 12.1. + + + +12.4.1 Router links + +A router originates a router links advertisement for each area that it +belongs to. Such an advertisement describes the collected states of the +router's links to the area. The advertisement is flooded throughout the +particular area, and no further. + +The format of a router links advertisement is shown in Appendix A +(Section A.4.2). The first 20 bytes of the advertisement consist of the +generic link state header that was discussed in Section 12.1. Router +links advertisements have LS type = 1. The router indicates whether it +is willing to calculate separate routes for each IP TOS by setting (or +resetting) the T-bit of the link state advertisement's Options field. + +A router also indicates whether it is an area border router, or an AS +boundary router, by setting the appropriate bits in its router links +advertisements. This enables paths to those types of routers to be +saved in the routing table, for later processing of summary link +advertisements and AS external link advertisements. + +The router links advertisement then describes the router's working +connections (links) to the area. Each link is typed according to the + + + _________________________________________ + + (Figure not included in text version.) + + Figure 15: Area 1 with IP addresses shown + Figure 16: Forwarding address example + _________________________________________ + + + + + + +[Moy] [Page 92] + +RFC 1247 OSPF Version 2 July 1991 + + +kind of attached network. Each link is also labelled with its Link ID. +This ID gives a name to the entity that is on the other end of the link. +Table 18 summarizes the values used for the type and Link ID fields. + + + +Link type Description Link ID +____________________________________________________________________________ +1 Point-to-point link Neighbor Router ID +2 Link to transit network Interface address of Designated Router +3 Link to stub network IP network number +4 Virtual link Neighbor Router ID + + + Table 18: Link descriptions in the router links advertisement. + + +In addition, the Link Data field is specified for each link. This field +gives 32 bits of extra information for the link. For links to routers +and transit networks, this field specifies the IP interface address of +the associated router interface (this is needed by the routing table +calculation, see Section 16.3). For links to stub networks, this field +specifies the network's IP address mask. + +Finally, the cost of using the link for output (possibly specifying a +different cost for each type of service) is specified. The output cost +of a link is configurable. It must always be non-zero. + +To further describe the process of building the list of link records, +suppose a router wishes to build router links advertisement for an Area +A. The router examines its collection of interface data structures. +For each interface, the following steps are taken: + + +o If the attached network does not belong to Area A, no links are + added to the advertisement, and the next interface should be + examined. + +o Else, if the state of the interface is Down, no links are added. + +o Else, if the state of the interface is Point-to-Point, then add + links according to the following: + + - If the neighboring router is fully adjacent, add a Type 1 link + (point-to-point) if this is an interface to a point-to-point + network, or add a type 4 link (virtual link) if this is a + virtual link. The Link ID should be set to the Router ID of the + neighboring router, and the Link Data should specify the + + + +[Moy] [Page 93] + +RFC 1247 OSPF Version 2 July 1991 + + + interface IP address. + + - If this is a numbered point-to-point network (i.e, not a virtual + link and not an unnumbered point-to-point network) and the + neighboring router's IP address is known, add a Type 3 link + (stub network) whose Link ID is the neighbor's IP address, whose + Link Data is the mask 0xffffffff indicating a host route, and + whose cost is the interface's configured output cost. + +o Else if the state of the interface is Loopback, add a Type 3 link + (stub network) as long as this is not an interface to an unnumbered + serial line. The Link ID should be set to the IP interface address, + the Link Data set to the mask 0xffffffff (indicating a host route), + and the cost set to 0. + +o Else if the state of the interface is Waiting, add a Type 3 link + (stub network) whose Link ID is the IP network number of the + attached network and whose Link Data is the attached network's + address mask. + +o Else, there has been a Designated Router selected for the attached + network. If the router is fully adjacent to the Designated Router, + or if the router itself is Designated Router and is fully adjacent + to at least one other router, add a single Type 2 link (transit + network) whose whose link ID is the IP interface address of the + attached network's Designated Router (which may be the router + itself) and whose Link Data is the interface IP address. Otherwise, + add a link as if the interface state were Waiting (see above). + + +Unless otherwise specified, the cost of each link generated by the above +procedure is equal to the output cost of the associated interface. Note +that in the case of serial lines, multiple links may be generated by a +single interface. + +After consideration of all the router interfaces, host links are added +to the advertisement by examining the list of attached hosts. A host +route is represented as a Type 3 link (stub network) whose link ID is +the host's IP address and whose Link Data is the mask of all ones +(0xffffffff). + +As an example, consider the router links advertisements generated by +router RT3, as pictured in Figure 6. The area containing router RT3 +(Area 1) has been redrawn, with actual network addresses, in Figure 15. +Assume that the last byte of all of RT3's interface addresses is 3, +giving it the interface addresses 192.1.1.3 and 192.1.4.3, and that the +other routers have similar addressing schemes. In addition, assume that +all links are functional, and that Router IDs are assigned as the + + + +[Moy] [Page 94] + +RFC 1247 OSPF Version 2 July 1991 + + +smallest IP interface address. + +RT3 originates two router links advertisements, one for Area 1 and one +for the backbone. Assume that router RT4 has been selected as the +Designated router for network 192.1.1.0. RT3's router links +advertisement for Area 1 is then shown below. It indicates that RT3 has +two connections to Area 1, the first a link to the transit network +192.1.1.0 and the second a link to the stub network 192.1.4.0. Note +that the transit network is identified by the IP interface of its +Designated Router (i.e., the Link ID = 192.1.1.4 which is the Designated +Router RT4's IP interface to 192.1.1.0). Note also that RT3 has +indicated that it is capable of calculating separate routes based on IP +TOS, through setting the T-bit in the Options field. It has also +indicated that it is an area border router. + + ; RT3's router links advertisement for Area 1 + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 1 ;indicates router links + Link State ID = 192.1.1.3 ;RT3's Router ID + Advertising Router = 192.1.1.3 ;RT3's Router ID + bit E = 0 ;not an AS boundary router + bit B = 1 ;RT3 is an area border router + #links = 2 + Link ID = 192.1.1.4 ;IP address of Designated Router + Link Data = 192.1.1.3 ;RT3's IP interface to net + Type = 2 ;connects to transit network + # other metrics = 0 + TOS 0 metric = 1 + + Link ID = 192.1.4.0 ;IP Network number + Link Data = 0xffffff00 ;Network mask + Type = 3 ;connects to stub network + # other metrics = 0 + TOS 0 metric = 2 + +Next RT3's router links advertisement for the backbone is shown. It +indicates that RT3 has a single attachment to the backbone. This +attachment is via an unnumbered point-to-point link to router RT6. RT3 +has again indicated that it is TOS-capable, and that it is an area +border router. + + ; RT3's router links advertisement for the backbone + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 1 ;indicates router links + + + +[Moy] [Page 95] + +RFC 1247 OSPF Version 2 July 1991 + + + Link State ID = 192.1.1.3 ;RT3's router ID + Advertising Router = 192.1.1.3 ;RT3's router ID + bit E = 0 ;not an AS boundary router + bit B = 1 ;RT3 is an area border router + #links = 1 + Link ID = 18.10.0.6 ;Neighbor's Router ID + Link Data = 0.0.0.0 ;Interface to unnumbered SL + Type = 1 ;connects to router + # other metrics = 0 + TOS 0 metric = 8 + +Even though router RT3 has indicated that it is TOS-capable in the above +examples, only a single metric (the TOS 0 metric) has been specified for +each interface. Different metrics can be specified for each TOS. The +encoding of TOS in OSPF link state advertisements is described in +Section 12.3. + +As an example, suppose the point-to-point link between routers RT3 and +RT6 in Figure 15 is a satellite link. The AS administrator may want to +encourage the use of the line for high bandwidth traffic. This would be +done by setting the metric artificially low for that TOS. Router RT3 +would then originate the following router links advertisement for the +backbone (IP TOS 8 = high bandwidth): + + ; RT3's router links advertisement for the backbone + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 1 ;indicates router links + Link State ID = 192.1.1.3 ;RT3's Router ID + Advertising Router = 192.1.1.3 + bit E = 0 ;not an AS boundary router + bit B = 1 ;RT3 is an area border router + #links = 1 + Link ID = 18.10.0.6 ; Neighbor's Router ID + Link Data = 0.0.0.0 ;Interface to unnumbered SL + Type = 1 ;connects to router + # other metrics = 1 + TOS 0 metric = 8 + TOS = 8 ;High bandwidth + metric = 1 ;traffic preferred + + +12.4.2 Network links + +A network links advertisement is generated for every transit multi- +access network. (A transit network is a network having two or more +attached routers). The network links advertisement describes all the + + + +[Moy] [Page 96] + +RFC 1247 OSPF Version 2 July 1991 + + +routers that are attached to the network. + +The Designated Router for the network originates the advertisement. The +Designated Router originates the advertisement only if it is fully +adjacent to at least one other router on the network. The network links +advertisement is flooded throughout the area that contains the transit +network, and no further. The networks links advertisement lists those +routers that are fully adjacent to the Designated Router; each fully +adjacent router is identified by its OSPF Router ID. The Designated +Router includes itself in this list. + +The Link State ID for a network links advertisement is the IP interface +address of the Designated Router. This value, masked by the network's +address mask (which is also contained in the network links +advertisement) yields the network's IP address. + +A router that has formerly been the Designated Router for a network, but +is no longer, should flush the network links advertisement that it had +previously originated. This advertisement is no longer used in the +routing table calculation. It is flushed by prematurely incrementing +the advertisement's age to MaxAge and reflooding (see Section 14.1). + +As an example of a network links advertisement, again consider the area +configuration in Figure 6. Network links advertisements are originated +for network N3 in Area 1, networks N6 and N8 in Area 2, and network N9 +in Area 3. Assuming that router RT4 has been selected as the Designated +Router for network N3, the following network links advertisement is +generated by RT4 on behalf of network N3 (see Figure 15 for the address +assignments): + + ; network links advertisement for network N3 + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 2 ;indicates network links + Link State ID = 192.1.1.4 ;IP address of Designated Router + Advertising Router = 192.1.1.4 ;RT4's Router ID + Network Mask = 0xffffff00 + Attached Router = 192.1.1.4 ;Router ID + Attached Router = 192.1.1.1 ;Router ID + Attached Router = 192.1.1.2 ;Router ID + Attached Router = 192.1.1.3 ;Router ID + + +12.4.3 Summary links + +Each summary link advertisement describes a route to a single +destination. Summary link advertisements are flooded throughout a + + + +[Moy] [Page 97] + +RFC 1247 OSPF Version 2 July 1991 + + +single area only. The destination described is one that is external to +the area, yet still belonging to the Autonomous System. + +The DefaultDestination can also be specified in summary link +advertisements. This is used when implementing OSPF's stub area +functionality (see Section 3.6). In a stub area, instead of importing +external routes each area border router originates a "default summary +link" (Link State ID = DefaultDestination) into the area. + +Summary link advertisements are originated by area border routers. The +precise summary routes to advertise into an area are determined by +examining the routing table structure (see Section 11). Only intra-area +routes are advertised into the backbone. Both intra-area and inter-area +routes are advertised into the other areas. + +To determine which routes to advertise into an attached Area A, each +routing table entry is processed as follows: + + +o Only Destination types of network and AS boundary router are + advertised in summary link advertisements. If the routing table + entry's Destination type is area border router, examine the next + routing table entry. + +o AS external routes are never advertised in summary link + advertisements. If the routing table entry has Path-type type 1 + external or type 2 external, examine the next routing table entry. + +o Else, if the area associated with this set of paths is the Area A + itself, do not generate a summary link advertisement for the + route.[14] + +o Else, if the destination of this route is an AS boundary router, + generate a Type 4 link state advertisement for the destination, with + Link State ID equal to the AS boundary router's ID and metric equal + to the routing table entry's cost. These advertisements should not + be generated if area A has been configured as a stub area. + +o Else, the Destination type is network. If this is an inter-area + route, generate a Type 3 advertisement for the destination, with + Link State ID equal to the network's address and metric equal to the + routing table cost. + +o The one remaining case is an intra-area route to a network. This + means that the network is contained in one of the router's directly + attached areas. In general, this information must be condensed + before appearing in summary link advertisements. Remember that an + area has been defined as a list of address ranges, each range + + + +[Moy] [Page 98] + +RFC 1247 OSPF Version 2 July 1991 + + + consisting of an [address,mask] pair. A single Type 3 advertisement + must be made for each range, with Link State ID equal to the range's + address and cost equal to the smallest cost of any of the component + networks. + + If virtual links are being used to provide/increase connectivity of + the backbone, routing information concerning the backbone networks + should not be condensed before being summarized into the virtual + links' transit areas. In other words, the backbone ranges should be + ignored when originating summary links into these areas. The + existence of virtual links can be determined during the shortest + path calculation for the backbone (see Section 16.1). + + +In addition, if area A has been configured as a stub area and the router +is an area border router, it should advertise a default summary link +into Area A. The Link State ID for the advertisement should be set to +DefaultDestination, and the metric set to the (per-area) configurable +parameter StubDefaultCost. + +If a router advertises a summary advertisement for a destination which +then becomes unreachable, the router must then flush the advertisement +from the routing domain by setting its age to MaxAge and reflooding (see +Section 14.1). Also, if the destination is still reachable, yet can no +longer be advertised according to the above procedure (e.g., it is now +an inter-area route, when it used to be an intra-area route associated +with some non-backbone area; it would thus no longer be advertisable to +the backbone), the advertisement should also be flushed from the routing +domain. + +For an example of summary link advertisements, consider again the area +configuration in Figure 6. Routers RT3, RT4, RT7, RT10 and RT11 are all +area border routers, and therefore are originating summary links +advertisements. Consider in particular router RT4. Its routing table +was calculated as the example in Section 11.3. RT4 originates summary +link advertisements into both the backbone and Area 1. Into the +backbone, router RT4 originates separate advertisements for each of the +networks N1-N4. Into Area 1, router RT4 originates separate +advertisements for networks N6-N8 and the AS boundary routers RT5,RT7. +It also condenses host routes Ia and Ib into a single summary +advertisement. Finally, the routes to networks N9,N10,N11 and host H9 +are advertised by a single summary link. This condensation was +originally performed by the router RT11. + +These advertisements are illustrated graphically in Figures 7 and 8. +Two of the summary link advertisements originated by router RT4 follow. +The actual IP addresses for the networks and routers in question have +been assigned in Figure 15. + + + +[Moy] [Page 99] + +RFC 1247 OSPF Version 2 July 1991 + + + ; summary link advertisement for network N1, + ; originated by router RT4 into the backbone + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 3 ;indicates summary link to IP net + Link State ID = 192.1.2.0 ;N1's IP network number + Advertising Router = 192.1.1.4 ;RT4's ID + TOS = 0 + metric = 4 + + ; summary link advertisement for AS boundary router RT7 + ; originated by router RT4 into Area 1 + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 4 ;indicates summary link to ASBR + Link State ID = router RT7's ID + Advertising Router = 192.1.1.4 ;RT4's ID + TOS = 0 + metric = 14 + +Summary link advertisements pertain to a single destination (IP network +or AS boundary router). However, for a single destination there may be +separate sets of paths, and therefore separate routing table entries, +for each Type of Service. All these entries must be considered when +building the summary link advertisement for the destination; a single +advertisement must specify the separate costs (if they exist) for each +TOS. The encoding of TOS in OSPF link state advertisements is described +in Section 12.3. + +Clearing the T-bit in the Options field of a summary link advertisement +indicates that there is a TOS 0 path to the destination, but no paths +for non-zero TOS. This can happen when non-TOS capable routers exist in +the routing domain (see Section 2.4). + + +12.4.4 AS external links + +AS external link advertisements describe routes to destinations external +to the Autonomous System. Most AS external link advertisements describe +routes to specific external destinations. However, a default route for +the Autonomous System can be described in an AS external advertisement +by setting the advertisement's Link State ID to DefaultDestination +(0.0.0.0). AS external link advertisements are originated by AS +boundary routers. An AS boundary router originates a single AS external +link advertisement for each external route that it has learned, either +through another routing protocol (such as EGP), or through configuration + + + +[Moy] [Page 100] + +RFC 1247 OSPF Version 2 July 1991 + + +information. + +In general, AS external link advertisements are the only type of link +state advertisements that are flooded throughout the entire Autonomous +System; all other types of link state advertisements are specific to a +single area. However, AS external advertisements are not flooded +into/throughout stub areas (see Section 3.6). This enables a reduction +in link state database size for routers internal to stub areas. + +The metric that is advertised for an external route can be one of two +types. Type 1 metrics are comparable to the link state metric. Type 2 +metrics are assumed to be larger than the cost of any intra-AS path. As +with summary link advertisements, if separate paths exist based on TOS, +separate TOS costs can be included in the AS external link +advertisement. The encoding of TOS in OSPF link state advertisements is +described in Section 12.3. If the T-bit of the advertisement's Options +field is clear, no non-zero TOS paths to the destination exist. + +If a router advertises an AS external link advertisement for a +destination which then becomes unreachable, the router must then flush +the advertisement from the routing domain by setting its age to MaxAge +and reflooding (see Section 14.1). + +For an example of AS external link advertisements, consider once again +the AS pictured in Figure 6. There are two AS boundary routers: RT5 and +RT7. Router RT5 originates three external link advertisements, for +networks N12-N14. Router RT7 originates two external link +advertisements, for networks N12 and N15. Assume that RT7 has learned +its route to N12 via EGP, and that it wishes to advertise a Type 2 +metric to the AS. RT7 would then originate the following advertisement +for N12: + + ; AS external link advertisement for network N12, + ; originated by router RT7 + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 5 ;indicates AS external link + Link State ID = N12's IP network number + Advertising Router = Router RT7's ID + bit E = 1 ;Type 2 metric + TOS = 0 + metric = 2 + Forwarding address = 0.0.0.0 + +In the above example, the forwarding address field has been set to +0.0.0.0, indicating that packets for the external destination should be +forwarded to the advertising OSPF router (RT7). This is not always + + + +[Moy] [Page 101] + +RFC 1247 OSPF Version 2 July 1991 + + +desirable. Consider the example pictured in Figure 16. There are three +OSPF routers (RTA, RTB and RTC) connected to a common network. Only one +of these routers, RTA, is exchanging EGP information with the non-OSPF +router RTX. RTA must then originate AS external link state +advertisements for those destinations it has learned from RTX. By using +the AS external advertisement's forwarding address field, RTA can +specify that packets for these destinations be forwarded directly to +RTX. Without this feature, routers RTB and RTC would take an extra hop +to get to these destinations. + +Note that when the forwarding address field is non-zero, it should point +to a router belonging to another Autonomous System. + +A forwarding address can also be specified for the default route. For +example, in figure 16 RTA may want to specify that all externally- +destined packets should by default be forwarded to its EGP peer RTX. +The resulting AS external link advertisement is pictured below. Note +that the Link State ID is set to DefaultDestination. + + ; Default route, originated by router RTA + ; Packets forwarded through RTX + + LS age = 0 ;always true on origination + Options = (T-bit|E-bit) ;TOS-capable + LS type = 5 ;indicates AS external link + Link State ID = DefaultDestination ; default route + Advertising Router = Router RTA's ID + bit E = 1 ;Type 2 metric + TOS = 0 + metric = 1 + Forwarding address = RTX's IP address + +In figure 16, suppose instead that both RTA and RTB exchange EGP +information with RTX. In this case, RTA and RTB would originate the +same set of external advertisements. These advertisements, if they +specify the same metric, would be functionally equivalent since they +would specify the same destination and forwarding address (RTX). This +leads to a clear duplication of effort. If only one of RTA or RTB +originated the set of external advertisements, the routing would remain +the same, and the size of the link state database would decrease. +However, it must be unambiguously defined as to which router originates +the advertisements (otherwise neither may, or the identity of the +originator may oscillate). The following rule is thereby established: +if two routers, both reachable from one another, originate functionally +equivalent AS external advertisements (i.e., same destination, cost and +non-zero forwarding address), then the advertisement originated by the +router having the highest OSPF Router ID is used. The router having the +lower OSPF Router ID can then flush its advertisement. Flushing a link + + + +[Moy] [Page 102] + +RFC 1247 OSPF Version 2 July 1991 + + +state advertisement is discussed in Section 14.1. + + +13. The Flooding Procedure + +Link State Update packets provide the mechanism for flooding link state +advertisements. A Link State Update packet may contain several distinct +advertisements, and floods each advertisement one hop further from its +point of origination. To make the flooding procedure reliable, each +advertisement must be acknowledged separately. Acknowledgments are +transmitted in Link State Acknowledgment packets. Many separate +acknowledgments can be grouped together into a single packet. + +The flooding procedure starts when a Link State Update packet has been +received. Many consistency checks have been made on the received packet +before being handed to the flooding procedure (see Section 8.2). In +particular, the Link State Update packet has been associated with a +particular neighbor, and a particular area. If the neighbor is in a +lesser state than Exchange, the packet should be dropped without further +processing. + +All types of link state advertisements, other than AS external links, +are associated with a specific area. However, link state advertisements +do not contain an area field. A link state advertisement's area must be +deduced from the Link State Update packet header. + +For each link state advertisement contained in the packet, the following +steps are taken: + + +(1) Validate the advertisement's link state checksum. If the checksum + turns out to be invalid, discard the advertisement and get the next + one from the Link State Update packet. + +(2) Examine the link state advertisement's LS type. If the LS type is + unknown, discard the advertisement and get the next one from the + Link State Update Packet. This specification defines LS Types 1-5 + (see Section 4.3). + +(3) Else if this is a AS external advertisement (LS type = 5), and the + area has been configured as a stub area, discard the advertisement + and get the next one from the Link State Update Packet. AS external + advertisements are not flooded into/throughout stub areas (see + Section 3.6). + +(4) Else if the advertisement's age is equal to MaxAge, and there is + currently no instance of the advertisement in the router's link + state database, then take the following actions: + + + +[Moy] [Page 103] + +RFC 1247 OSPF Version 2 July 1991 + + + (a) Acknowledge the receipt of the advertisement by sending a Link + State Acknowledgment packet back to the sending neighbor (see + Section 13.5). + + (b) Purge all outstanding requests for equal or previous instances + of the advertisement from the sending neighbor's Link State + Request list (see Section 10). + + (c) If the sending neighbor is in state Exchange or in state + Loading, then install the MaxAge advertisement in the link state + database. Otherwise, simply discard the advertisement. In + either case, examine the next advertisement (if any) listed in + the Link State Update packet. + +(5) Otherwise, find the instance of this advertisement that is currently + contained in the router's link state database. If there is no + database copy, or the received advertisement is more recent than the + database copy (see Section 13.1 below for the determination of which + advertisement is more recent) the following steps must be performed: + + (a) If there is already a database copy, and if the database copy + was installed less than MinLSInterval seconds ago, discard the + new advertisement (without acknowledging it) and examine the + next advertisement (if any) listed in the Link State Update + packet. + + (b) Otherwise immediately flood the new advertisement out some + subset of the router's interfaces (see Section 13.3). In some + cases (e.g., the state of the receiving interface is DR and the + advertisement was received from a router other than the Backup + DR) the advertisement will be flooded back out the receiving + interface. This occurrence should be noted for later use by the + acknowledgment process (Section 13.5). + + (c) Remove the current database copy from all neighbors' Link state + retransmission lists. + + (d) Install the new advertisement in the link state database + (replacing the current database copy). This may cause the + routing table calculation to be scheduled. In addition, + timestamp the new advertisement with the current time (i.e., the + time it was received). The flooding procedure cannot overwrite + the newly installed advertisement until MinLSInterval seconds + have elapsed. The advertisement installation process is + discussed further in Section 13.2. + + (e) Possibly acknowledge the receipt of the advertisement by sending + a Link State Acknowledgment packet back out the receiving + + + +[Moy] [Page 104] + +RFC 1247 OSPF Version 2 July 1991 + + + interface. This is explained below in Section 13.5. + + (f) If this new link state advertisement indicates that it was + originated by this router itself, the router must advance the + advertisement's link state sequence number, and issue a new + instance of the advertisement (see Section 13.4). + +(6) Else, if there is an instance of the advertisement on the sending + neighbor's Link state request list, an error has occurred in the + Database Description process. In this case, restart the Database + Description process by generating the neighbor event BadLSReq for + the sending neighbor and stop processing the Link State Update + packet. + +(7) Else, if the received advertisement is the same instance as the + database copy (i.e., neither one is more recent) the following two + steps should be performed: + + (a) If the advertisement is listed in the Link state retransmission + list for the receiving adjacency, the router itself is expecting + an acknowledgment for this advertisement. The router should + treat the received advertisement as an acknowledgment, by + removing the advertisement from the Link state retransmission + list. This is termed an "implied acknowledgment". Its + occurrence should be noted for later use by the acknowledgment + process (Section 13.5). + + (b) Possibly acknowledge the receipt of the advertisement by sending + a Link State Acknowledgment packet back out the receiving + interface. This is explained below in Section 13.5. + +(8) Else, the database copy is more recent. Note an unusual event to + network management, discard the advertisement and process the next + link state advertisement contained in the packet. + + +13.1 Determining which link state is newer + +When a router encounters two instances of a link state advertisement, it +must determine which is more recent. This occurred above when comparing +a received advertisement to the database copy. This comparison must +also be done during the database exchange procedure which occurs during +adjacency bring-up. + +A link state advertisement is identified by its LS type, Link State ID +and Advertising Router. For two instances of the same advertisement, +the LS sequence number, LS age, and LS checksum fields are used to +determine which instance is more recent: + + + +[Moy] [Page 105] + +RFC 1247 OSPF Version 2 July 1991 + + +o The advertisement having the newer LS sequence number is more + recent. See Section 12.1.6 for an explanation of the LS sequence + number space. If both instances have the same LS sequence number, + then: + +o If the two instances have different LS checksums, then the instance + having the larger LS checksum (when considered as a 16-bit unsigned + integer) is considered more recent. + +o Else, if only one of the instances is of age MaxAge, the instance of + age MaxAge is considered to be more recent. + +o Else, if the ages of the two instances differ by more than + MaxAgeDiff, the instance having the smaller (younger) age is + considered to be more recent. + +o Else, the two instances are considered to be identical. + + +13.2 Installing link state advertisements in the database + +Installing a new link state advertisement in the database, either as the +result of flooding or a newly self originated advertisement, may cause +the routing table structure to be recalculated. The contents of the new +advertisement should be compared to the old instance, if present. If +there is no difference, there is no need to recalculate the routing +table. (Note that even if the contents are the same, the LS checksum +will probably be different, since the checksum covers the LS sequence +number.) + +If the contents are different, the following pieces of the routing table +must be recalculated, depending on the LS type field: + + +Router links, network links + The entire routing table must be recalculated, starting with the + shortest path calculations for each area (not just the area whose + topological database has changed). The reason that the shortest + path calculation cannot be restricted to the single changed area has + to do with the fact that AS boundary routers may belong to multiple + areas. A change in the area currently providing the best route may + force the router to use an intra-area route provided by a different + area.[15] + +Summary link + The best route to the destination described by the summary link + advertisement must be re-examined (see Section 16.5). If this + destination is an AS boundary router, it may also be necessary to + + + +[Moy] [Page 106] + +RFC 1247 OSPF Version 2 July 1991 + + + re-examine all the AS external link advertisements. + +AS external link + The best route to the destination described by the AS external link + advertisement must be re-examined (see Section 16.6). + + +Also, any old instance of the advertisement must be removed from the +database when the new advertisement is installed. This old instance +must also be removed from all neighbors' Link state retransmission lists +(see Section 10). + + +13.3 Next step in the flooding procedure + +When a new (and more recent) advertisement has been received, it must be +flooded out some set of the router's interfaces. This section describes +the second part of flooding procedure (the first part being the +processing that occurred in Section 13), namely, selecting the outgoing +interfaces and adding the advertisement to the appropriate neighbors' +Link state retransmission lists. Also included in this part of the +flooding procedure is the maintenance of the neighbors' Link state +request lists. + +This section is equally applicable to the flooding of an advertisement +that the router itself has just originated (see Section 12.4). For +these advertisements, this section provides the entirety of the flooding +procedure (i.e., the processing of Section 13 is not performed, since, +for example, the advertisement has not been received from a neighbor and +therefore does not need to be acknowledged). + +Depending upon the advertisement's LS type, the advertisement can be +flooded out only certain interfaces. These interfaces, defined by the +following, are called the eligible interfaces: + + +AS external links (LS Type = 5) + AS external links are flooded throughout the entire AS, with the + exception of stub areas (see Section 3.6). The eligible interfaces + are all the router's interfaces, excluding virtual links and those + interfaces attaching to stub areas. + +All other types + All other types are specific to a single area (Area A). The + eligible interfaces are all those interfaces attaching to the Area + A. If Area A is the backbone, this includes all the virtual links. + + + + + +[Moy] [Page 107] + +RFC 1247 OSPF Version 2 July 1991 + + +Link state databases must remain synchronized over all adjacencies +associated with the above eligible interfaces. This is accomplished by +executing the following steps on each eligible interface. It should be +noted that this procedure may decide not to flood a link state +advertisement out a particular interface, if there is a high probability +that the attached neighbors have already received the advertisement. +However, in these cases the flooding procedure must be absolutely sure +that the neighbors eventually do receive the advertisement, so the +advertisement is still added to each adjacency's Link state +retransmission list. For each eligible interface: + + +(1) Each of the neighbors attached to this interface are examined, to + determine whether they must receive the new advertisement. The + following steps are executed for each neighbor: + + (a) If the neighbor is in a lesser state than Exchange, it does not + participate in flooding, and the next neighbor should be + examined. + + (b) Else, if the adjacency is not yet full (neighbor state is + Exchange or Loading), examine the Link state request list + associated with this adjacency. If there is an instance of the + new advertisement on the list, it indicates that the neighboring + router has an instance of the advertisement already. Compare + the new advertisement to the neighbor's copy: + + o If the new advertisement is less recent, then try the next + neighbor. + + o If the two copies are the same instance, then delete the + advertisement from the Link state request list, and try the + next neighbor.[16] + + o Else, the new advertisement is more recent. Delete the + advertisement from the Link state request list. + + (c) If the new advertisement was received from this neighbor, try + the next neighbor. + + (d) At this point we are not positive that the new neighbor has an + up-to-date instance of this new advertisement. Add the new + advertisement to the Link state retransmission list for the + adjacency. This ensures that the flooding procedure is + reliable; the advertisement will be retransmitted at intervals + until an acknowledgment is seen from the neighbor. + + + + + +[Moy] [Page 108] + +RFC 1247 OSPF Version 2 July 1991 + + +(2) The router must now decide whether to flood the new link state + advertisement out this interface. If in the previous step, the link + state advertisement was NOT added to any of the Link state + retransmission lists, there is no need to flood the advertisement + and the next interface should be examined. + +(3) If the new advertisement was received on this interface, and it was + received from either the Designated Router or the Backup Designated + Router, chances are all the neighbors have received the + advertisement already. Therefore, examine the next interface. + +(4) If the new advertisement was received on this interface, and the + interface state is Backup (i.e., the router itself is the Backup + Designated Router), examine the next interface. The Designated + Router will do the flooding on this interface. If the Designated + Router fails, this router will end up retransmitting the updates. + +(5) If this step is reached, the advertisement must be flooded out the + interface. Send a Link State Update packet (with the new + advertisement as contents) out the interface. The advertisement's + LS age must be incremented by InfTransDelay (which must be > 0) when + copied into the outgoing packet (until the LS age field reaches its + maximum value of MaxAge). + + On broadcast networks, the Link State Update packets are multicast. + The destination IP address specified for the Link State Update + Packet depends on the state of the interface. If the interface + state is DR or Backup, the address AllSPFRouters should be used. + Otherwise, the address AllDRouters should be used. + + On non-broadcast, multi-access networks, separate Link State Update + packets must be sent, as unicasts, to each adjacent neighbor (i.e., + those in state Exchange or greater). The destination IP addresses + for these packets are the neighbors' IP addresses. + + +13.4 Receiving self-originated link state + +It is a common occurrence to receive a self-originated link state +advertisement via the flooding procedure. If the advertisement received +is a newer instance than the last instance that the router actually +originated, the router must take special action. + +The reception of such an advertisement indicates that there are link +state advertisements in the routing domain that were originated before +the last time the router was restarted. In this case, the router must +advance the sequence number for the advertisement one past the received +sequence number, and originate a new instance of the advertisement. + + + +[Moy] [Page 109] + +RFC 1247 OSPF Version 2 July 1991 + + +Note also that if the type of the advertisement is Summary link or AS +external link, the router may no longer have an (advertisable) route to +the destination. In this case, the advertisement should be flushed from +the routing domain by incrementing the advertisement's LS age to MaxAge +and reflooding (see Section 14.1). + + +13.5 Sending Link State Acknowledgment packets + +Each newly received link state advertisement must be acknowledged. This +is usually done by sending Link State Acknowledgment packets. However, +acknowledgments can also be accomplished implicitly by sending Link +State Update packets (see step 7a of Section 13). + +Many acknowledgments may be grouped together into a single Link State +Acknowledgment packet. Such a packet is sent back out the interface +that has received the advertisements. The packet can be sent in one of +two ways: delayed and sent on an interval timer, or sent directly (as a +unicast) to a particular neighbor. The particular acknowledgment +strategy used depends on the circumstances surrounding the receipt of +the advertisement. + +Sending delayed acknowledgments accomplishes several things: it +facilitates the packaging of multiple acknowledgments in a single +packet; it enables a single packet to indicate acknowledgments to +several neighbors at once (through multicasting); and it randomizes the +acknowledgment packets sent by the various routers attached to a multi- +access network. The fixed interval between a router's delayed +transmissions must be short (less than RxmtInterval) or needless +retransmissions will ensue. + +Direct acknowledgments are sent to a particular neighbor in response to +the receipt of duplicate link state advertisements. These +acknowledgments are sent as unicasts, and are sent immediately when the +duplicate is received. + +The precise procedure for sending Link State Acknowledgment packets is +described in Table 19. The circumstances surrounding the receipt of the +advertisement are listed in the left column. The acknowledgment action +then taken is listed in one of the two right columns. This action +depends on the state of the concerned interface; interfaces in state +Backup behave differently from interfaces in all other states. + + + Action taken in state + Circumstances Backup All other states + ______________________________________________________________ + + + + +[Moy] [Page 110] + +RFC 1247 OSPF Version 2 July 1991 + + + Action taken in state + Circumstances Backup All other states + ______________________________________________________________ +Advertisement has No acknowledgment No acknowledgment +been flooded back sent. sent. +out receiving in- +terface (see Sec- +tion 13, step 5b). +______________________________________________________________ +Advertisement is Delayed ack- Delayed ack- +more recent than nowledgment sent nowledgment sent. +database copy, but if advertisement +was not flooded received from DR, +back out receiving otherwise do noth- +interface ing +______________________________________________________________ +Advertisement is a Delayed ack- No acknowledgment +duplicate, and was nowledgment sent sent. +treated as an im- if advertisement +plied acknowledg- received from DR, +ment (see Section otherwise do noth- +13, step 7a). ing +______________________________________________________________ +Advertisement is a Direct acknowledg- Direct acknowledg- +duplicate, and was ment sent. ment sent. +not treated as an +implied ack- +nowledgment. +______________________________________________________________ +Advertisement's age Direct acknowledg- Direct acknowledg- +is equal to MaxAge, ment sent. ment sent. +and there is no +current instance of +the advertisement in +the link state +database (see +Section 13, step 4). + + + Table 19: Sending link state acknowledgements. + +Delayed acknowledgments must be delivered to all adjacent routers +associated with the interface. On broadcast networks, this is +accomplished by sending the delayed Link State Acknowledgment packets as +multicasts. The Destination IP address used depends on the state of the +interface. If the state is DR or Backup, the destination AllSPFRouters +is used. In other states, the destination AllDRouters is used. On +non-broadcast networks, delayed acks must be unicast separately over + + + +[Moy] [Page 111] + +RFC 1247 OSPF Version 2 July 1991 + + +each adjacency (neighbor whose state is >= Exchange). + +The reasoning behind sending the above packets as multicasts is best +explained by an example. Consider the network configuration depicted in +Figure 15. Suppose RT4 has been elected as DR, and RT3 as Backup for +the network N3. When router RT4 floods a new advertisement to network +N3, it is received by routers RT1, RT2, and RT3. These routers will not +flood the advertisement back onto net N3, but they still must ensure +that their topological databases remain synchronized with their adjacent +neighbors. So RT1, RT2, and RT4 are waiting to see an acknowledgment +from RT3. Likewise, RT4 and RT3 are both waiting to see acknowledgments +from RT1 and RT2. This is best achieved by sending the acknowledgments +as multicasts. + +The reason that the acknowledgment logic for Backup DRs is slightly +different is because they perform differently during the flooding of +link state advertisements (see Section 13.3, step 4). + + + +13.6 Retransmitting link state advertisements + +Advertisements flooded out an adjacency are placed on the adjacency's +Link state retransmission list. In order to ensure that flooding is +reliable, these advertisements are retransmitted until they are +acknowledged. The length of time between retransmissions is a +configurable per-interface value, RxmtInterval. If this is set too low +for an interface, needless retransmissions will ensue. If the value is +set too high, the speed of the flooding, in the face of lost packets, +may be affected. + +Several retransmitted advertisements may fit into a single Link State +Update packet. When advertisements are to be retransmitted, only the +number fitting in a single Link State Update packet should be +transmitted. Another packet of retransmissions can be sent when some of +the advertisements are acknowledged, or on the next firing of the +retransmission timer. + +Link State Update Packets carrying retransmissions are always sent as +unicasts (directly to the physical address of the neighbor). They are +never sent as multicasts. Each advertisement's LS age must be +incremented by InfTransDelay (which must be > 0) when copied into the +outgoing packet (until the LS age field reaches its maximum value of +MaxAge). + +If the adjacent router goes down, retransmissions may occur until the +adjacency is destroyed by OSPF's Hello Protocol. When the adjacency is +destroyed, the Link state retransmission list is cleared. + + + +[Moy] [Page 112] + +RFC 1247 OSPF Version 2 July 1991 + + +13.7 Receiving link state acknowledgments + +Many consistency checks have been made on a received Link State +Acknowledgment packet before it is handed to the flooding procedure. In +particular, it has been associated with a particular neighbor. If this +neighbor is in a lesser state than Exchange, the packet is discarded. + +Otherwise, for each acknowledgment in the packet, the following steps +are performed: + + +o Does the advertisement acknowledged have an instance on the Link + state retransmission list for the neighbor? If not, examine the + next acknowledgment. Otherwise: + +o If the acknowledgment is for the same instance that is contained on + the list, remove the item from the list and examine the next + acknowledgment. Otherwise: + +o Log the questionable acknowledgment, and examine the next one. + + +14. Aging The Link State Database + +Each link state advertisement has an age field. The age is expressed in +seconds. An advertisement's age field is incremented while it is +contained in a router's database. Also, when copied into a Link State +Update Packet for flooding out a particular interface, the +advertisement's age is incremented by InfTransDelay. + +An advertisement's age is never incremented past the value MaxAge. +Advertisements having age MaxAge are not used in the routing table +calculation. As a router ages its link state database, an +advertisement's age may reach MaxAge.[17] At this time, the router must +attempt to flush the advertisement from the routing domain. This is +done simply by reflooding the MaxAge advertisement just as if it was a +newly originated advertisement (see Section 13.3). + +When a Database summary list for a newly adjacent neighbor is formed, +any MaxAge advertisements present in the link state database are added +to the neighbor's Link state retransmission list instead of the +neighbor's Database summary list. See Section 10.3 for more details. + +A MaxAge advertisement is removed entirely from the router's link state +database when a) it is no longer contained on any neighbor Link state +retransmission lists and b) none of the router's neighbors are in states +Exchange or Loading. + + + + +[Moy] [Page 113] + +RFC 1247 OSPF Version 2 July 1991 + + +When, in the process of aging the link state database, an +advertisement's age hits a multiple of CheckAge, its checksum should be +verified. If the checksum is incorrect, a program or memory error has +been detected, and at the very least the router itself should be +restarted. + + +14.1 Premature aging of advertisements + +A link state advertisement can be flushed from the routing domain by +setting its age to MaxAge and reflooding the advertisement. This +procedure follows the same course as flushing an advertisement whose age +has naturally reached the value MaxAge (see Section 14). In particular, +the MaxAge advertisement is removed from the router's link state +database as soon as a) it is no longer contained on any neighbor Link +state retransmission lists and b) none of the router's neighbors are in +states Exchange or Loading. We call the setting of an advertisement's +age to MaxAge premature aging. + +Premature aging is used when it is time for a self-originated +advertisement's sequence number field to wrap. At this point, the +current advertisement instance (having LS sequence number of 0x7fffffff) +must be prematurely aged and flushed from the routing domain before a +new instance with sequence number 0x80000001 can be originated. See +Section 12.1.6 for more information. + +Premature aging can also be used when, for example, one of the router's +previously advertised external routes is no longer reachable. In this +circumstance, the router can flush its external advertisement from the +routing domain via premature aging. This procedure is preferable to the +alternative, which is to originate a new advertisement for the +destination specifying a metric of LSInfinity. + +A router may only prematurely age its own (self-originated) link state +advertisements. These are the link state advertisements having the +router's own OSPF Router ID in the Advertising Router field. + + +15. Virtual Links + +The single backbone area (Area ID = 0) cannot be disconnected, or some +areas of the Autonomous System will become unreachable. To +establish/maintain connectivity of the backbone, virtual links can be +configured through non-backbone areas. Virtual links serve to connect +separate components of the backbone. The two endpoints of a virtual +link are area border routers. The virtual link must be configured in +both routers. The configuration information in each router consists of +the other virtual endpoint (the other area border router), and the non- + + + +[Moy] [Page 114] + +RFC 1247 OSPF Version 2 July 1991 + + +backbone area the two routers have in common (called the transit area). +Virtual links cannot be configured through stub areas (see Section 3.6). + +The virtual link is treated as if it were an unnumbered point-to-point +network (belonging to the backbone) joining the two area border routers. +An attempt is made to establish an adjacency over the virtual link. +When this adjacency is established, the virtual link will be included in +backbone router links advertisements, and OSPF packets pertaining to the +backbone area will flow over the adjacency. Such an adjacency has been +referred to as a "virtual adjacency". + +In each endpoint router, the cost and viability of the virtual link is +discovered by examining the routing table entry for the other endpoint +router. (The entry's associated area must be the configured transit +area). Actually, there may be a separate routing table entry for each +Type of Service. These are called the virtual link's corresponding +routing table entries. The Interface Up event occurs for a virtual link +when its corresponding TOS 0 routing table entry becomes reachable. +Conversely, the Interface Down event occurs when its TOS 0 routing table +entry becomes unreachable.[18] In other words, the virtual link's +viability is determined by the existence of an intra-area path, through +the transit area, between the two endpoints. The other details +concerning virtual links are as follows: + +o AS external links are NEVER flooded over virtual adjacencies. This + would be duplication of effort, since the same AS external links are + already flooded throughout the virtual link's transit area. For + this same reason, AS external link advertisements are not summarized + over virtual adjacencies during the database exchange process. + +o The cost of a virtual link is NOT configured. It is defined to be + the cost of the intra-area path between the two defining area border + routers. This cost appears in the virtual link's corresponding + routing table entry. When the cost of a virtual link changes, a new + router links advertisement should be originated for the backbone + area. + +o Just as the virtual link's cost and viability are determined by the + routing table build process (through construction of the routing + table entry for the other endpoint), so are the IP interface address + for the virtual interface and the virtual neighbor's IP address. + These are used when sending protocol packets over the virtual link. + +o In each endpoint's router links advertisement for the backbone, the + virtual link is represented as a link having link type 4, Link ID + set to the virtual neighbor's OSPF Router ID and Link Data set to + the virtual interface's IP address. See Section 12.4.1 for more + information. Also, it may be the case that there is a TOS 0 path, + + + +[Moy] [Page 115] + +RFC 1247 OSPF Version 2 July 1991 + + + but no non-zero TOS paths to the other endpoint router. In this + case, non-zero TOS costs must be set to LSInfinity in the router + links advertisement. + +o When virtual links are configured for the backbone, information + concerning backbone networks should not be condensed before being + summarized for the transit areas. In other words, each backbone + network should be advertised in a separate summary link + advertisement, regardless of the backbone's configured area address + ranges. See Section 12.4.3 for more information. + +o The time between link state retransmissions, RxmtInterval, is + configured for a virtual link. This should be well over the + expected round-trip delay between the two routers. This may be hard + to estimate for a virtual link. It is better to err on the side of + making it too large. + + +16. Calculation Of The Routing Table + +This section details the OSPF routing table calculation. Using its +attached areas' link state databases as input, a router runs the +following algorithm, building its routing table step by step. At each +step, the router must access individual pieces of the link state +databases (e.g., a router links advertisement originated by a certain +router). This access is performed by the lookup function discussed in +Section 12.2. The lookup process may return a link state advertisement +whose LS age is equal to MaxAge. Such an advertisement should not be +used in the routing table calculation, and is treated just as if the +lookup process had failed. + +The OSPF routing table's organization is explained in Section 11. Two +examples of the routing table build process are presented in Sections +11.2 and 11.3. This process can be broken into the following steps: + + +(1) The present routing table is invalidated. The routing table is + built again from scratch. The old routing table is saved so that + changes in routing table entries can be identified. + +(2) The intra-area routes are calculated by building the shortest path + tree for each attached area. In particular, all routing table + entries whose Destination type is "area border router" are + calculated in this step. This step is described in two parts. At + first the tree is constructed by only considering those links + between routers and transit networks. Then the stub networks are + incorporated into the tree. + + + + +[Moy] [Page 116] + +RFC 1247 OSPF Version 2 July 1991 + + +(3) The inter-area routes are calculated, through examination of summary + link advertisements. If the router is attached to multiple areas + (i.e., it is an area border router), only backbone summary link + advertisements are examined. + +(4) For those routing entries whose next hop is over a virtual link, a + real (physical) next hop is calculated. The real next hop will be + on one of the router's directly attached networks. This step only + concerns routers having configured virtual links. + +(5) Routes to external destinations are calculated, through examination + of AS external link advertisements. The location of the AS boundary + routers (which originate the AS external link advertisements) has + been determined in steps 2-4. + + +Steps 2-5 are explained in further detail below. The explanations +describe the calculations for TOS 0 only. It may also be necessary to +perform each step (separately) for each of the non-zero TOS values.[19] +For more information concerning the building of non-zero TOS routes see +Section 16.9. + +Changes made to routing table entries as a result of these calculations +can cause the OSPF protocol to take further actions. For example, a +change to an intra-area route will cause an area border router to +originate new summary link advertisements (see Section 12.4). See +Section 16.7 for a complete list of the OSPF protocol actions resulting +from routing table table changes. + + +16.1 Calculating the shortest-path tree for an area + +This calculation yields the set of intra-area routes associated with an +area (called hereafter Area A). A router calculates the shortest-path +tree using itself as the root.[20] The formation of the shortest path +tree is done here in two stages. In the first stage, only links between +routers and transit networks are considered. Using the Dijkstra +algorithm, a tree is formed from this subset of the link state database. +In the second stage, leaves are added to the tree by considering the +links to stub networks. + +The procedure will be explained using the graph terminology that was +introduced in Section 2. The area's link state database is represented +as a directed graph. The graph's vertices are routers, transit networks +and stub networks. The first stage of the procedure concerns only the +transit vertices (routers and transit networks) and their connecting +links. Throughout the shortest path calculation, the following data is +also associated with each transit vertex: + + + +[Moy] [Page 117] + +RFC 1247 OSPF Version 2 July 1991 + + +Vertex (node) ID + A 32-bit number uniquely identifying the vertex. For router + vertices this is the OSPF Router ID. For network vertices, this is + the IP address of the network's Designated Router. + +A link state advertisement + Each transit vertex has an associated link state advertisement. For + router vertices, this is a router links advertisement. For transit + networks, this is a network links advertisement (which is actually + originated by the network's Designated Router). In any case, the + advertisement's Link State ID is always equal to the above Vertex + ID. + +List of next hops + The list of next hops for the current shortest paths from the root + to this vertex. There can be multiple shortest paths due to the + equal-cost multipath capability. Each next hop indicates the + outgoing router interface to use when forwarding traffic to the + destination. On multi-access networks, the next hop also includes + the IP address of the next router (if any) in the path towards the + destination. + +Distance from root + The link state cost of the current shortest path(s) from the root to + the vertex. The link state cost of a path is calculated as the sum + of the costs of the path's constituent links (as advertised in + router links and network links advertisements). One path is said to + be "shorter" than another if it has a smaller link state cost. + + +The first stage of the procedure can now be summarized as follows. At +each iteration of the algorithm, there is a list of candidate vertices. +The shortest paths from the root to these vertices have not +(necessarily) been found. The candidate vertex closest to the root is +added to the shortest-path tree, removed from the candidate list, and +its adjacent vertices are examined for possible addition to/modification +of the candidate list. The algorithm then iterates again. It +terminates when the candidate list becomes empty. + +The following steps describe the first stage in detail. Remember that +we are computing the shortest path tree for Area A. All references to +link state database lookup below are from Area A's database. + + +(1) Initialize the algorithm's data structures. Clear the list of + candidate vertices. Initialize the shortest-path tree to only the + root (which is the router doing the calculation). + + + + +[Moy] [Page 118] + +RFC 1247 OSPF Version 2 July 1991 + + +(2) Call the vertex just added to the tree vertex V. Examine the link + state advertisement associated with vertex V. This is a lookup in + the area link state database based on the Vertex ID. Each link + described by the advertisement gives the cost to an adjacent vertex. + For each described link, (say it joins vertex V to vertex W): + + (a) If this is a link to a stub network, examine the next link in + V's advertisement. Links to stub networks will be considered in + the second stage of the shortest path calculation. + + (b) Otherwise, W is a transit vertex (router or transit network). + Look up the vertex W's link state advertisement (router links or + network links) in Area A's link state database. If the + advertisement does not exist, or its age is equal to MaxAge, or + it does not have a link back to vertex V, examine the next link + in V's advertisement. Both ends of a link must advertise the + link before it will be used for data traffic.[21] + + (c) If vertex W is already on the shortest-path tree, examine the + next link in the advertisement. + + (d) If the cost of the link (from V to W) is LSInfinity, the link + should not be used for data traffic. In this case, examine the + next link in the advertisement. + + (e) Calculate the link state cost D of the resulting path from the + root to vertex W. D is equal to the sum of the link state cost + of the (already calculated) shortest path to vertex V and the + advertised cost of the link between vertices V and W. If D is: + + o Greater than the value that already appears for vertex W on + the candidate list, then examine the next link. + + o Equal to the value that appears for vertex W on the the + candidate list, calculate the set of next hops that result + from using the advertised link. Input to this calculation + is the destination (W), and its parent (V). This + calculation is shown in Section 16.1.1. This set of hops + should be added to the next hop values that appear for W on + the candidate list. + + o Less than the value that appears for vertex W on the the + candidate list, or if W does not yet appear on the candidate + list, then set the entry for W on the candidate list to + indicate a distance of D from the root. Also calculate the + list of next hops that result from using the advertised + link, setting the next hop values for W accordingly. The + next hop calculation is described in Section 16.1.1; it + + + +[Moy] [Page 119] + +RFC 1247 OSPF Version 2 July 1991 + + + takes as input the destination (W) and its parent (V). + +(3) If at this step the candidate list is empty, the shortest-path tree + (of transit vertices) has been completely built and this stage of + the algorithm terminates. Otherwise, choose the vertex belonging to + the candidate list that is closest to the root, and add it to the + shortest-path tree (removing it from the candidate list in the + process). + +(4) Possibly modify the routing table. For those routing table entries + modified, the associated area will be set to Area A, the path type + will be set to intra-area, and the cost will be set to the newly + discovered shortest path's calculated distance. + + If the newly added vertex is an area border router, a routing table + entry is added whose destination type is "area border router". The + Options field found in the associated router links advertisement is + copied into the routing table entry's Optional capabilities field. + + If the newly added vertex is an AS boundary router, the routing + table entry of type "AS boundary router" for the destination is + located. Since routers can belong to more than one area, it is + possible that several sets of intra-area paths exist to the AS + boundary router, each set using a different area. However, the AS + boundary router's routing table entry must indicate a set of paths + which utilize a single area. The area leading to the routing table + entry is selected as follows: A set of intra-area paths having no + virtual next hops is always preferred over a set of intra-area paths + in which some virtual next hops appear[22] ; all other things being + equal the set of paths having lower cost is preferred. Note that + whenever an AS boundary router's routing table entry is + added/modified, the Options found in the associated router links + advertisement is copied into the routing table entry's Optional + capabilities field. + + If the newly added vertex is a transit network, the routing table + entry for the network is located. The entry's destination ID is the + IP network number, which can be obtained by masking the Vertex ID + (Link State ID) with its associated subnet mask (found in the + associated network links advertisement). If the routing table entry + already exists (i.e., there is already an intra-area route to the + destination installed in the routing table), multiple vertices have + mapped to the same IP network. For example, this can occur when a + new Designated Router is being established. In this case, the + current routing table entry should be overwritten if and only if the + newly found path is just as short and the current routing table + entry's Link State Origin has a smaller Link State ID than the newly + added vertex' link state advertisement. + + + +[Moy] [Page 120] + +RFC 1247 OSPF Version 2 July 1991 + + + If there is no routing table entry for the network (the usual case), + a routing table entry for the IP network should be added. The + routing table entry's Link State origin should be set to the newly + added vertex' link state advertisement. + +(5) Iterate the algorithm by returning to Step 2. + + +The stub networks are added to the tree in the procedure's second stage. +In this stage, all router vertices are again examined. Those that have +been determined to be unreachable in the above first phase are +discarded. For each reachable router vertex (call it V), the associated +router links advertisement is found in the link state database. Each +stub network link appearing in the advertisement is then examined, and +the following steps are executed: + + +(1) If the cost of the stub network link is LSInfinity, the link should + not be used for data traffic. In this case, go on to examine the + next stub network link in the advertisement. + +(2) Otherwise, Calculate the distance D of stub network from the root. + D is equal to the distance from the root to the router vertex + (calculated in stage 1), plus the stub network link's advertised + cost. Compare this distance to the current best cost to the stub + network. This is done by looking up the network's current routing + table entry. If the calculated distance D is larger, go on to + examine the next stub network link in the advertisement. + +(3) If this step is reached, the stub network's routing table entry must + be updated. Calculate the set of next hops that would result from + using the stub network link. This calculation is shown in Section + 16.1.1; input to this calculation is the destination (the stub + network) and the parent vertex (the router vertex). If the distance + D is the same as the current routing table cost, simply add this set + of next hops to the routing table entry's list of next hops. In + this case, the routing table already has a Link State origin. If + this Link State origin is a router links advertisement whose Link + State ID is smaller than V's Router ID, reset the Link State origin + to V's router links advertisement. + + Otherwise D is smaller than the routing table cost. Overwrite the + current routing table entry by setting the routing table entry's + cost to D, and by setting the entry's list of next hops to the newly + calculated set. Set the routing table entry's Link State origin to + V's router links advertisement. Then go on to examine the next stub + network link. + + + + +[Moy] [Page 121] + +RFC 1247 OSPF Version 2 July 1991 + + +For all routing table entries added/modified in the second stage, the +associated area will be set to Area A and the path type will be set to +intra-area. When the list of reachable router links is exhausted, the +second stage is completed. At this time, all intra-area routes +associated with Area A have been determined. + +The specification does not require that the above two stage method be +used to calculate the shortest path tree. However, if another algorithm +is used, an identical tree must be produced. For this reason, it is +important to note that links between transit vertices must be +bidirectional in ordered to be included in the above tree. It should +also be mentioned that algorithms exist for incrementally updating the +shortest-path tree (see [BBN]). + + +16.1.1 The next hop calculation + +This section explains how to calculate the current set of next hops to +use for a destination. Each next hop consists of the outgoing interface +to use in forwarding packets to the destination together with the next +hop router (if any). The next hop calculation is invoked each time a +shorter path to the destination is discovered. This can happen in +either stage of the shortest-path tree calculation (see Section 16.1). +In stage 1 of the shortest-path tree calculation a shorter path is found +as the destination is added to the candidate list, or when the +destination's entry on the candidate list is modified (Step 2e of Stage +1). In stage 2 a shorter path is discovered each time the destination's +routing table entry is modified (Step 3 of Stage 2). + +The set of next hops to use for the destination may be recalculated +several times during the shortest-path tree calculation, as shorter and +shorter paths are discovered. In the end, the destination's routing +table entry will always reflect the next hops resulting from the +absolute shortest path(s). + +Input to the next hop calculation is a) the destination and b) its +parent in the current shortest path between the root (the calculating +router) and the destination. The parent is always a transit vertex +(i.e., always a router or a transit network). + +If there is at least one intervening router in the current shortest path +between the destination and the root, the destination simply inherits +the set of next hops from the parent. Otherwise, there are two cases. +In the first case, the parent vertex is the root (the calculating router +itself). This means that the destination is either a directly connected +network or directly connected router. The next hop in this case is +simply the OSPF interface connecting to the network/router; no next hop +router is required. + + + +[Moy] [Page 122] + +RFC 1247 OSPF Version 2 July 1991 + + +In the second case, the destination is a router, and its parent vertex +is a network. The list of next hops is then determined by examining the +destination's router links advertisement. For each link in the +advertisement that points back to the parent network, the link's Link +Data field provides the IP address of a next hop router. The outgoing +interface to use can then be derived from the next hop IP address (or it +can be inherited from the parent network). + + +16.2 Calculating the inter-area routes + +The inter-area routes are calculated by examining summary link +advertisements. If the router has active attachments to multiple areas, +only backbone summary link advertisements are examined. Routers +attached to a single area examine that area's summary links. In either +case, the summary links examined below are all part of a single area's +link state database (call it Area A). + +Summary link advertisements are originated by the area border routers. +Each summary link advertisement in Area A is considered in turn. +Remember that the destination described by a summary link advertisement +is either a network (type 3 summary link advertisements) or an AS +boundary router (type 4 summary link advertisements). For each summary +link advertisement: + + +(1) If the cost specified by the advertisement is LSInfinity, then + examine the next advertisement. + +(2) If the advertisement was originated by the calculating router + itself, examine the next advertisement. + +(3) If the collection of destinations described by the summary link + falls into one of the router's configured area address ranges (see + Section 3.5) and the particular area address range is active, the + summary link should be ignored. Active means that there are one or + more reachable (by intra-area paths) networks contained in the area + range. In this case, all addresses in the area range are assumed to + be either reachable via intra-area paths, or else to be unreachable + by any other means. + +(4) Else, call the destination described by the advertisement N, and the + area border originating the advertisement BR. Look up the routing + table entry for BR having A as its associated area. If no such + entry exists for router BR (i.e., BR is unreachable in Area A), do + nothing with this advertisement and consider the next in the list. + Else, this advertisement describes an inter-area path to destination + N, whose cost is the distance to BR plus the cost specified in the + + + +[Moy] [Page 123] + +RFC 1247 OSPF Version 2 July 1991 + + + advertisement. Call the cost of this inter-area path IAC. + +(5) Next, look up the routing table entry for the destination N. (The + entry's Destination type is either Network or AS boundary router.) + If no entry exists for N or if the entry's path type is "AS + external", install the inter-area path to N, with associated area A, + cost IAC, next hop equal to the list of next hops to router BR, and + advertising router equal to BR. + +(6) Else, if the paths present in the table are intra-area paths, do + nothing with the advertisement (intra-area paths are always + preferred). + +(7) Else, the paths present in the routing table are also inter-area + paths. Install the new path through BR if it is cheaper, overriding + the paths in the routing table. Otherwise, if the new path is the + same cost, add it to the list of paths that appear in the routing + table entry. + + +16.3 Resolving virtual next hops + +This step is only necessary in area-border routers having configured +virtual links. In these routers, some of the routing table entries may +have virtual next hops. That is, one or more of the next hops installed +in Sections 16.1 and 16.2 may be over a virtual link. However, when +forwarding data traffic to a destination, the next hops must always be +on a directly attached network. + +In this section, each virtual next hop is replaced by a real next hop. +In the process a new routing table distance is calculated that may be +smaller than the previously calculated distance. In this case, the list +of next hops is pruned so that only those giving rise to the new +shortest distance are included, and the routing table entry's distance +is updated accordingly. + + + + + ______________________________________ + + (Figure not included in text version.) + + Figure 17: Resolving virtual next hops + ______________________________________ + + + + + + +[Moy] [Page 124] + +RFC 1247 OSPF Version 2 July 1991 + + +This resolution of virtual next hops is done only for Destination types +Network or AS Boundary router. Suppose that one of a routing table +entry's next hops is a virtual link. This is determined by the +following combination: the routing table entry's path type is either +intra-area or inter-area, the area associated with the routing table +entry must be the backbone, yet the next hop belongs to a different area +(the virtual link's transit area). + +Let N be the above entry's destination, and A the virtual link's transit +area. The real next hop (and new distance) is calculated as follows. +Let D be a distance counter, and set the real next hop NH to null. +Then, look up all the summary link advertisements for N in area A's +database, performing the following steps for each advertisement:[23] + + +(1) Call the border router that originated the advertisement BR. If + there is no routing table entry for BR having A as associated area + (i.e., BR is unreachable through Area A), examine the next + advertisement. + +(2) Else, let X be the distance to BR via Area A. If the cost + advertised by BR (call it Y) to the destination is LSInfinity, + examine the next summary link advertisement. Else, the cost to + destination N through area border router BR is X+Y. + +(3) If next hop NH is null or X+Y is smaller is smaller than D, set D to + X+Y and set the next hop NH to the next hop specified in router BR's + routing table entry. + + +At this point, the real next hop NH should be set, and the distance D +calculated should be less than or equal to the cost originally specified +in destination N's routing table entry. This same calculation should be +done for all of N's virtual next hops, and then N's new cost set to the +minimum calculated distance, with the its new set of next hops that +combination of non-virtual and recalculated next hops that correspond to +this (possibly same as original) distance. + +The resolving of virtual next hops may produce unexpected results. +After the virtual next hops are resolved, traffic that was originally +scheduled to go over the virtual link may instead take a different path +through the virtual link's transit area. In other words, virtual links +allow transit traffic to be forwarded through an area, but do not +dictate the precise path that the traffic will take. + +As an example, consider the Autonomous System pictured in Figure 17. +There is a single non-backbone area (Area 1) that physically divides the +backbone into two separate pieces. To maintain connectivity of the + + + +[Moy] [Page 125] + +RFC 1247 OSPF Version 2 July 1991 + + +backbone, a virtual link has been configured between routers RT1 and +RT4. On the right side of the figure, network N1 belongs to the +backbone. The dotted lines indicate that there is a much shorter +intra-area backbone path between router RT5 and network N1 (cost 20) +than there is between router RT4 and network N1 (cost 100). Both router +RT4 and router RT5 will inject summary link advertisements for network +N1 into Area 1. + +After the shortest-path tree has been calculated for the backbone, +router RT1 (one end of the virtual link) will have selected router RT4 +as the virtual next hop for all data traffic destined for network N1. +However, since router RT5 is so much closer to network N1, all routers +internal to Area 1 (e.g., routers RT2 and RT3) will forward their +network N1 traffic towards router RT5, instead of RT4. And indeed, +after resolving the virtual next hop by the above calculation, router +RT1 will also forward network N1 traffic towards RT5. So, in this +example the virtual link enables network N1 traffic to be forwarded +through the transit Area 1, but the actual path the data traffic takes +does not follow the virtual link. + + +16.4 Calculating AS external routes + +AS external routes are calculated by examining AS external link +advertisements. Each of the AS external link advertisements is +considered in turn. Most AS external advertisements describe routes to +specific IP destinations. An AS external advertisement can also +describe a default route for the Autonomous System (destination = +DefaultDestination). For each AS external link advertisement: + + +(1) If the cost specified by the advertisement is LSInfinity, then + examine the next advertisement. + +(2) If the advertisement was originated by the calculating router + itself, examine the next advertisement. + +(3) Call the destination described by the advertisement N. Look up the + routing table entry for the AS boundary router (ASBR) that + originated the advertisement. If no entry exists for router ASBR + (i.e., ASBR is unreachable), do nothing with this advertisement and + consider the next in the list. + + Else, this advertisement describes an AS external path to + destination N. Examine the forwarding address specified in the + external advertisement. This indicates the IP address to which + packets for the destination should be forwarded. If forwarding + address is set to 0.0.0.0, packets should be sent to the ASBR + + + +[Moy] [Page 126] + +RFC 1247 OSPF Version 2 July 1991 + + + itself. Otherwise, look up the forwarding address in the routing + table.[24] An intra-area or inter-area path must exist to the + forwarding address. If no such path exists, do nothing with the + advertisement and consider the next in the list. + + Call the routing table distance to the forwarding address X (when + the forwarding address is set to 0.0.0.0, this is the distance to + the ASBR itself), and the cost specified in the advertisement Y. X + is in terms of the link state metric, and Y is a Type 1 or 2 + external metric. + +(4) Next, look up the routing table entry for the destination N. If no + entry exists for N, install the AS external path to N, with next hop + equal to the list of next hops to the forwarding address, and + advertising router equal to ASBR. If the external metric type is 1, + then the path-type is set to type 1 external and the cost is equal + to X+Y. If the external metric type is 2, the the path-type is set + to type 2 external, the link state component of the route's cost is + X, and the Type 2 cost is Y. + +(5) Else, if the paths present in the table are not type 1 or type 2 + external paths, do nothing (AS external paths have the lowest + priority). + +(6) Otherwise, compare the cost of this new AS external path to the ones + present in the table. Type 1 external paths are always shorter than + Type 2 external paths. Type 1 external paths are compared by + looking at the sum of the distance to the forwarding address and the + advertised Type 1 metric (X+Y). Type 2 external paths are compared + by looking at the advertised Type 2 metrics, and then if necessary, + the distance to the forwarding addresses. + + If the new path is shorter, it replaces the present paths in the + routing table entry. If the new path is the same cost, it is added + to the routing table entry's list of paths. + + +16.5 Incremental updates --- summary links + +When a new summary link advertisement is received, it is not necessary +to recalculate the entire routing table. Call the destination described +by the summary link advertisement N, and let A be the area to which the +advertisement belongs. + +Look up the routing table entry for N. If the next hop to N is a +virtual link through Area A (this means that the entry's associated area +is the backbone, and the listed next hop does not belong to the +backbone, but instead belongs to Area A), the real next hop must again + + + +[Moy] [Page 127] + +RFC 1247 OSPF Version 2 July 1991 + + +be resolved. This means running the algorithm in Section 16.3 for +destination N only. + +Else, if there is an intra-area route to destination N nothing need be +done (intra-area routes always take precedence). Otherwise, if Area A +is the router's sole attached area, or Area A is the backbone, the +procedure in Section 16.2 will have to be performed, but only for those +summary link advertisements whose destination is N. Before this +procedure is performed, the present routing table entry for N should be +invalidated (but kept for comparison purposes). If this procedure leads +to a virtual next hop, the algorithm in Section 16.3 will again have to +be performed in order to calculate the real next hop. + +If N's routing table entry changes, and N is an AS boundary router, the +AS external links will have to be reexamined (Section 16.4). + + +16.6 Incremental updates --- AS external links + +When a new AS external link advertisement is received, it is not +necessary to recalculate the entire routing table. Call the destination +described by the AS external link advertisement N. If there is already +an intra-area or inter-area route to the destination, no recalculation +is necessary (these routes take precedence). + +Otherwise, the procedure in Section 16.4 will have to be performed, but +only for those AS external link advertisements whose destination is N. +Before this procedure is performed, the present routing table entry for +N should be invalidated. + + +16.7 Events generated as a result of routing table changes + +Changes to routing table entries sometimes cause the OSPF area border +routers to take additional actions. These routers need to act on the +following routing table changes: + + +o The cost or path type of a routing table entry has changed. If the + destination described by this entry is a Network or AS boundary + router, and this is not simply a change of AS external routes, new + summary link advertisements may have to be generated (potentially + one for each attached area, including the backbone). See Section + 12.4.3 for more information. If a previously advertised entry has + been deleted, or is no longer advertisable to a particular area, the + advertisement must be flushed from the routing domain by setting its + age to MaxAge and reflooding (see Section 14.1). + + + + +[Moy] [Page 128] + +RFC 1247 OSPF Version 2 July 1991 + + +o A routing table entry associated with a configured virtual link has + changed. The destination of such a routing table entry is an area + border router. The change indicates a modification to the virtual + link's cost or viability. + + If the entry indicates that the area border router is newly + reachable (via TOS 0), the corresponding virtual link is now + operational. An Interface Up event should be generated for the + virtual link, which will cause a virtual adjacency to begin to form + (see Section 10.3). At this time the virtual interface's IP address + and the virtual neighbor's IP address are also calculated. + + If the entry indicates that the area border router is no longer + reachable (via TOS 0), the virtual link and its associated adjacency + should be destroyed. This means an Interface Down event should be + generated for the associated virtual link. + + If the cost of the entry has changed, and there is a fully + established virtual adjacency, a new router links advertisement for + the backbone must be originated. This in turn may cause further + routing table changes. + + +16.8 Equal-cost multipath + +The OSPF protocol maintains multiple equal-cost routes to all +destinations. This can be seen in the steps used above to calculate the +routing table, and in the definition of the routing table structure. + +Each one of the multiple routes will be of the same type (intra-area, +inter-area, type 1 external or type 2 external), cost, and will have the +same associated area. However, each route specifies a separate next hop +and advertising router. + +There is no requirement that a router running OSPF keep track of all +possible equal-cost routes to a destination. An implementation may +choose to keep only a fixed number of routes to any given destination. +This does not affect any of the algorithms presented in this +specification. + + +16.9 Building the non-zero-TOS portion of the routing table + +The OSPF protocol can calculate a different set of routes for each IP +TOS (see Section 2.4). Support for TOS-based routing is optional. +TOS-capable and non-TOS-capable routers can be mixed in an OSPF routing +domain. Routers not supporting TOS calculate only the TOS 0 route to +each destination. These routes are then used to forward all data + + + +[Moy] [Page 129] + +RFC 1247 OSPF Version 2 July 1991 + + +traffic, regardless of the TOS indications in the data packet's IP +header. A router that does not support TOS indicates this fact to the +other OSPF routers by clearing the T-bit in the Options field of its +router links advertisement. + +The above sections detailing the routing table calculations handle the +TOS 0 case only. In general, for routers supporting TOS-based routing, +each piece of the routing table calculation must be rerun separately for +the non-zero TOS values. When calculating routes for TOS X, only TOS X +metrics can be used. Any link state advertisement may specify a +separate cost for each TOS (a cost for TOS 0 must always be specified). +The encoding of TOS in OSPF link state advertisements is described in +Section 12.3. + +An advertisement can specify that it is restricted to TOS 0 (i.e., non- +zero TOS is not handled) by clearing the T-bit in the link state +advertisement's Option field. Such advertisements are not used when +calculating routes for non-zero TOS. For this reason, it is possible +that a destination is unreachable for some non-zero TOS. In this case, +the TOS 0 path is used when forwarding packets (see Section 11.1). + +The following lists the modifications needed when running the routing +table calculation for a non-zero TOS value (called TOS X). In general, +routers and advertisements that do not support TOS are omitted from the +calculation. + + +Calculating the shortest-path tree (Section 16.1). + Routers that do not support TOS-based routing should be omitted from + the shortest-path tree calculation. These routers are identified as + those having the T-bit reset in their router links advertisements. + Such routers should never be added to the Dijktra algorithm's + candidate list, nor should their router links advertisements be + examined when adding the stub networks to the tree. + +Calculating the inter-area routes (Section 16.2). + Inter-area paths are the concatenation of a path to an area border + router with a summary link. When calculating TOS X routes, both + path components must also specify TOS X. In other words, only TOS X + paths to the area border router are examined, and the area border + router must be advertising a TOS X route to the destination. Note + that this means that summary link advertisements having the T-bit + reset in their Options field are not considered. + +Resolving virtual next hops (Section 16.3). + This calculation again considers the concatenation of a path to an + area border router with a summary link. As with inter-area routes, + only TOS X paths to the area border router are examined, and the + + + +[Moy] [Page 130] + +RFC 1247 OSPF Version 2 July 1991 + + + area border router must be advertising a TOS X route to the + destination. + +Calculating AS external routes (Section 16.4). + This calculation considers the concatenation of a path to a + forwarding address with an AS external link. Only TOS X paths to + the forwarding address are examined, and the AS boundary router must + be advertising a TOS X route to the destination. Note that this + means that AS external link advertisements having the T-bit reset in + their Options field are not considered. + + In addition, the advertising AS boundary router must also be + reachable for its advertisements to be considered (see Section + 16.4). However, if the advertising router and the forwarding + address are not one in the same, the advertising router need only be + reachable via TOS 0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 131] + +RFC 1247 OSPF Version 2 July 1991 + + + [1]The graph's vertices represent either routers, transit networks, + or stub networks. Since routers may belong to multiple areas, it is + not possible to color the graph's vertices. + + [2]It is possible for all of a router's interfaces to be unnumbered + point-to-point links. In this case, an IP address must be assigned + to the router. This address will then be advertised in the router's + router links advertisement as a host route. + + [3]Note that in these cases both interfaces, the non-virtual and the + virtual, would have the same IP address. + + [4]Note that no host route is generated for, and no IP packets can + be addressed to, interfaces to unnumbered point-to-point networks. + This is regardless of such an interface's state. + + [5]It is instructive to see what happens when the Designated Router + for the network crashes. Call the Designated Router for the network + RT1, and the the Backup Designated Router RT2. If router RT1 + crashes (or maybe its interface to the network dies), the other + routers on the network will detect RT1's absence within + RouterDeadInterval seconds. All routers may not detect this at + precisely the same time; the routers that detect RT1's absence + before RT2 does will, for a time, select RT2 to be both Designated + Router and Backup Designated Router. When RT2 detects that RT1 is + gone it will move itself to Designated Router. At this time, the + remaining router having highest Router Priority will be selected as + Backup Designated Router. + + [6]On point-to-point networks, the lower level protocols indicate + whether the neighbor is up and running. Likewise, existence of the + neighbor on virtual links is indicated by the routing table + calculation. However, in both these cases, the Hello Protocol is + still used. This ensures that communication between the neighbors + is bidirectional, and that each of the neighbors has a functioning + routing protocol layer. + + [7]When the identity of the Designated Router is changing, it may be + quite common for a neighbor in this state to send the router a + Database Description packet; this means that there is some momentary + disagreement on the Designated Router's identity. + + [8]Note that it is possible for a router to resynchronize any of its + fully established adjacencies by setting the adjacency's state back + to ExStart. This will cause the other end of the adjacency to + process a Seq Number Mismatch event, and therefore to also go back + to ExStart state. + + + + +[Moy] [Page 132] + +RFC 1247 OSPF Version 2 July 1991 + + + [9]The address space of IP networks and the address space of OSPF + Router IDs may overlap. That is, a network may have an IP address + which is identical (when considered as a 32-bit number) to some + router's Router ID. + + [10]It is assumed that, for two different address ranges matching + the destination, one range is more specific than the other. Non- + contiguous subnet masks can be configured to violate this + assumption. Such subnet mask configurations cannot be handled by the + OSPF protocol. + + [11]MaxAgeDiff is an architectural constant. It indicates the + maximum dispersion of ages, in seconds, that can occur for a single + link state instance as it is flooded throughout the routing domain. + If two advertisements differ by more than this, they are assumed to + be different instances of the same advertisement. This can occur + when a router restarts and loses track of its previous sequence + number. See Section 13.4 for more details. + + [12]When two advertisements have different checksums, they are + assumed to be separate instances. This can occur when a router + restarts, and loses track of its previous sequence number. In this + case, since the two advertisements have the same sequence number, it + is not possible to determine which link state is actually newer. If + the wrong advertisement is accepted as newer, the originating router + will originate another instance. See Section 13.4 for further + details. + + [13]There is one instance where a lookup must be done based on + partial information. This is during the routing table calculation, + when a network links advertisement must be found based solely on its + Link State ID. The lookup in this case is still well defined, since + no two network advertisements can have the same Link State ID. + + [14]This clause covers the case: Inter-area routes are not + summarized to the backbone. This is because inter-area routes are + always associated with the backbone area. + + [15]By keeping more information in the routing table, it is possible + for an implementation to recalculate the shortest path tree only for + a single area. In fact, there are incremental algorithms that allow + an implementation to recalculate only a portion of the shortest path + tree [BBN]. These algorithms are beyond the scope of this + specification. + + [16]This is how the Link state request list is emptied, which + eventually causes the neighbor state to transition to Full. See + Section 10.9 for more details. + + + +[Moy] [Page 133] + +RFC 1247 OSPF Version 2 July 1991 + + + [17]It should be a relatively rare occurrence for an advertisement's + age to reach MaxAge. Usually, the advertisement will be replaced by + a more recent instance before it ages out. + + [18]Only the TOS 0 routes are important here. This is because all + routing protocol packets are sent with TOS= 0. See Appendix A. + + [19]It may be the case that paths to certain destinations do not + vary based on TOS. For these destinations, the routing calculation + need not be repeated for each TOS value. In addition, there need + only be a single routing table entry for these destinations (instead + of a separate entry for each TOS value). + + [20]Strictly speaking, because of equal-cost multipath, the + algorithm does not create a tree. We continue to use the "tree" + terminology because that is what occurs most often in the existing + literature. + + [21]This means that before data traffic will flow between a pair of + neighboring routers, their link state databases must be + synchronized. Before synchronization (neighbor state < Full), a + router will not include the connection to its neighbor in its link + state advertisements. + + [22]As a result of this clause, when a virtual link exists between + the calculating router and an AS boundary router, the intra-area + path through the virtual link's transit area is always preferred + over the virtual link itself. + + [23]Note the similarity between this procedure and the calculation + of inter-area routes by a router internal to Area A. + + [24]When the forwarding address is non-zero, it should point to a + router belonging to another Autonomous System. See Section 12.4.4 + for more details. + + + + + + + + + + + + + + + + +[Moy] [Page 134] + +RFC 1247 OSPF Version 2 July 1991 + + +References + + +[BBN] McQuillan, J.M., Richer, I. and Rosen, E.C. ARPANET + Routing Algorithm Improvements. BBN Technical Report 3803, + April 1978. + +[DEC] Digital Equipment Corporation. Information processing + systems -- Data communications -- Intermediate System to + Intermediate System Intra-Domain Routing Protocol. October + 1987. + +[McQuillan] McQuillan, J. et.al. The New Routing Algorithm for the + Arpanet. IEEE Transactions on Communications, May 1980. + +[Perlman] Perlman, Radia. Fault-Tolerant Broadcast of Routing + Information. Computer Networks, Dec. 1983. + +[RFC 791] Postel, Jon. Internet Protocol. September 1981 + +[RFC 944] ANSI X3S3.3 86-60. Final Text of DIS 8473, Protocol for + Providing the Connectionless-mode Network Service. March + 1986. + +[RFC 1060] Reynolds, J. and Postel, J. Assigned Numbers. March 1990. + +[RFC 1112] Deering, S.E. Host extensions for IP multicasting. May + 1988. + +[RFC 1131] Moy, J. The OSPF Specification. October 1989. + +[RS-85-153] Leiner, Dr. Barry M., et.al. The DARPA Internet Protocol + Suite. DDN Protocol Handbook, April 1985. + + + + + + + + + + + + + + + + + + +[Moy] [Page 135] + +RFC 1247 OSPF Version 2 July 1991 + + +A. OSPF data formats + +This appendix describes the format of OSPF protocol packets and OSPF +link state advertisements. The OSPF protocol runs directly over the IP +network layer. Before any data formats are described, the details of +the OSPF encapsulation are explained. + +Next the OSPF options field is described. This field describes various +capabilities that may or may not be supported by pieces of the OSPF +routing domain. It is contained both in OSPF protocol packets and in +OSPF link state advertisements. + +OSPF packet formats are detailed in Section A.3. A description of OSPF +link state advertisements appears in Section A.4. + + +A.1 Encapsulation of OSPF packets + +OSPF runs directly over the Internet Protocol's network layer. OSPF +packets are therefore encapsulated solely by IP and local network +headers. + +OSPF does not define a way to fragment its protocol packets, and depends +on IP fragmentation when transmitting packets larger than the network +MTU. The OSPF packet types that are likely to be large (Database +Description Packets, Link State Request, Link State Update, and Link +State Acknowledgment packets) can usually be split into several separate +protocol packets, without loss of functionality. This is recommended; +IP fragmentation should be avoided whenever possible. Using this +reasoning, an attempt should be made to limit the sizes of packets sent +over virtual links to 576 bytes. However, if necessary, the length of +OSPF packets can be up to 65,535 bytes (including the IP header). + +The other important features of OSPF's IP encapsulation are: + + +o Use of IP multicast. Some OSPF messages are multicast, when sent + over multi-access networks. Two distinct IP multicast addresses are + used. Packets destined to these multicast addresses should never be + forwarded. Such packets are meant to travel a single hop only. To + ensure that these packets will not travel multiple hops, their IP + TTL must be set to 1. + + AllSPFRouters + This multicast address has been assigned the value 224.0.0.5. + All routers running OSPF should be prepared to receive packets + sent to this address. Hello packets are always sent to this + destination. Also, certain protocol packets are sent to this + + + +[Moy] [Page 136] + +RFC 1247 OSPF Version 2 July 1991 + + + address during the flooding procedure. + + AllDRouters + This multicast address has been assigned the value 224.0.0.6. + Both the Designated Router and Backup Designated Router must be + prepared to receive packets destined to this address. Certain + packets are sent to this address during the flooding procedure. + +o OSPF is IP protocol number 89. This number has been registered with + the Network Information Center. IP protocol number assignments are + documented in [RFC 1060]. + +o Routing protocol packets are sent with IP TOS of 0. The OSPF + protocol supports TOS-based routing. Routes to any particular + destination may vary based on TOS. However, all OSPF routing + protocol packets are sent with the DTR bits in the IP header's TOS + field (see [RFC 791]) set to 0. + +o Routing protocol packets are sent with IP precedence set to + Internetwork Control. OSPF protocol packets should be given + precedence over regular IP data traffic, in both sending and + receiving. Setting the IP precedence field in the IP header to + Internetwork Control [RFC 791] may help implement this objective. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 137] + +RFC 1247 OSPF Version 2 July 1991 + + +A.2 The options field + +The OSPF options field is present in OSPF Hello packets, Database +Description packets and all link state advertisements. The options +field enables OSPF routers to support (or not support) optional +capabilities, and to communicate their capability level to other OSPF +routers. Through this mechanism routers of differing capabilities can +be mixed within an OSPF routing domain. + +When used in Hello packets, the options field allows a router to reject +a neighbor because of a capability mismatch. Alternatively, when +capabilities are exchanged in Database Description packets a router can +choose not to forward certain LSA types to a neighbor because of its +reduced functionality. Lastly, listing capabilities in LSAs allows +routers to route traffic around reduced functionality routers, by +excluding them from parts of the routing table calculation. + +Two capabilities are currently defined. For each capability, the effect +of the capability's appearance (or lack of appearance) in Hello packets, +Database Description packets and link state advertisements is specified +below. For example, the external routing capability (below called the +E-bit) has meaning only in OSPF Hello Packets. Routers should reset +(i.e. clear) the unassigned part of the capability field when sending +Hello packets or Database Description packets and when originating link +state advertisements. + +Additional capabilities may be assigned in the future. Routers +encountering unrecognized capabilities in received Hello Packets, +Database Description packets or link state advertisements should ignore +the capability and process the packet/advertisement normally. + + +-+-+-+-+-+-+-+-+ + | | | | | | |E|T| + +-+-+-+-+-+-+-+-+ + + The options field + + +T-bit + This describes the router's TOS capability. If the T-bit is reset, + then the router supports only a single TOS (TOS 0). Such a router + is also said to be incapable of TOS-routing. The absence of the T- + bit in a router links advertisement causes the router to be skipped + when building a non-zero TOS shortest-path tree (see Section 16.9). + In other words, routers incapable of TOS routing will be avoided as + much as possible when forwarding data traffic requesting a non-zero + TOS. The absence of the T-bit in a summary link advertisement or an + AS external link advertisement indicates that the advertisement is + + + +[Moy] [Page 138] + +RFC 1247 OSPF Version 2 July 1991 + + + describing a TOS 0 route only (and not routes for non-zero TOS). + +E-bit + AS external link advertisements are not flooded into/through OSPF + stub areas (see Section 3.6). The E-bit ensures that all members of + a stub area agree on that area's configuration. The E-bit is + meaningful only in OSPF Hello packets. When the E-bit is reset in + the Hello packet sent out a particular interface, it means that the + router will neither send nor receive AS external link state + advertisements on that interface (in other words, the interface + connects to a stub area). Two routers will not become neighbors + unless they agree on the state of the E-bit. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 139] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3 OSPF Packet Formats + +There are five distinct OSPF packet types. All OSPF packet types begin +with a standard 24 byte header. This header is described first. Each +packet type is then described in a succeeding section. In these +sections each packet's division into fields is displayed, and then the +field definitions are enumerated. + +All OSPF packet types (other than the OSPF Hello packets) deal with +lists of link state advertisements. For example, Link State Update +packets implement the flooding of advertisements throughout the OSPF +routing domain. Because of this, OSPF protocol packets cannot be parsed +unless the format of link state advertisements is also understood. The +format of Link state advertisements is described in Section A.4. + +The receive processing of OSPF packets is detailed in Section 8.2. The +sending of OSPF packets is explained in Section 8.1. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 140] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.1 The OSPF packet header + +Every OSPF packet starts with a common 24 byte header. This header +contains all the necessary information to determine whether the packet +should be accepted for further processing. This determination is +described in Section 8.2 of the specification. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | Type | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Version # + The OSPF version number. This specification documents version 2 of + the protocol. + +Type + The OSPF packet types are as follows. The format of each of these + packet types is described in a succeeding section. + + + + Type Description + ________________________________ + 1 Hello + 2 Database Description + 3 Link State Request + 4 Link State Update + 5 Link State Acknowledgment + + + + + + + + +[Moy] [Page 141] + +RFC 1247 OSPF Version 2 July 1991 + + +Packet length + The length of the protocol packet in bytes. This length includes + the standard OSPF header. + +Router ID + The Router ID of the packet's source. In OSPF, the source and + destination of a routing protocol packet are the two ends of an + (potential) adjacency. + +Area ID + A 32 bit number identifying the area that this packet belongs to. + All OSPF packets are associated with a single area. Most travel a + single hop only. Packets travelling over a virtual link are + labelled with the backbone area ID of 0. + +Checksum + The standard IP checksum of the entire contents of the packet, + excluding the 64-bit authentication field. This checksum is + calculated as the 16-bit one's complement of the one's complement + sum of all the 16-bit words in the packet, excepting the + authentication field. If the packet's length is not an integral + number of 16-bit words, the packet is padded with a byte of zero + before checksumming. + +AuType + Identifies the authentication scheme to be used for the packet. + Authentication is discussed in Appendix E of the specification. + Consult Appendix E for a list of the currently defined + authentication types. + +Authentication + A 64-bit field for use by the authentication scheme. + + + + + + + + + + + + + + + + + + + +[Moy] [Page 142] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.2 The Hello packet + +Hello packets are OSPF packet type 1. These packets are sent +periodically on all interfaces (including virtual links) in order to +establish and maintain neighbor relationships. In addition, Hellos are +multicast on those physical networks having a multicast or broadcast +capability, enabling dynamic discovery of neighboring routers. + +All routers connected to a common network must agree on certain +parameters (network mask, hello and dead intervals). These parameters +are included in Hello packets, so that differences can inhibit the +forming of neighbor relationships. A detailed explanation of the +receive processing for Hello packets is presented in Section 10.5. The +sending of Hello packets is covered in Section 9.5. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 1 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Network Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | HelloInt | Options | Rtr Pri | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | DeadInt | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Designated Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Backup Designated Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Neighbor | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + + + + + +[Moy] [Page 143] + +RFC 1247 OSPF Version 2 July 1991 + + +Network mask + The network mask associated with this interface. For example, if + the interface is to a class B network whose third byte is used for + subnetting, the network mask is 0xffffff00. + +Options + The optional capabilities supported by the router, as documented in + Section A.2. + +HelloInt + The number of seconds between this router's Hello packets. + +Rtr Pri + This router's Router Priority. Used in (Backup) Designated Router + election. If set to 0, the router will be ineligible to become + (Backup) Designated Router. + +Deadint + The number of seconds before declaring a silent router down. + +Designated Router + The identity of the Designated Router for this network, in the view + of the advertising router. The Designated Router is identified here + by its IP interface address on the network. Set to 0 if there is no + Designated Router. + +Backup Designated Router + The identity of the Backup Designated Router for this network, in + the view of the advertising router. The Backup Designated Router is + identified here by its IP interface address on the network. Set to + 0 if there is no backup Designated Router. + +Neighbor + The Router IDs of each router from whom valid Hello packets have + been seen recently on the network. Recently means in the last + DeadInt seconds. + + + + + + + + + + + + + + + +[Moy] [Page 144] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.3 The Database Description packet + +Database Description packets are OSPF packet type 2. These packets are +exchanged when an adjacency is being initialized. They describe the +contents of the topological database. Multiple packets may be used to +describe the database. For this purpose a poll-response procedure is +used. One of the routers is designated to be master, the other a slave. +The master sends Database Description packets (polls) which are +acknowledged by Database Description packets sent by the slave +(responses). The responses are linked to the polls via the packets' +sequence numbers. + +The format of the Database Description packet is very similar to both +the Link State Request and Link State Acknowledgment packets. The main +part of all three is a list of items, each item describing a piece of +the topological database. The sending of Database Description Packets +is documented in Section 10.8. The reception of Database Description +packets is documented in Section 10.6. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 2 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 | 0 | Options |0|0|0|0|0|I|M|MS + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | DD sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- -+ + | A | + +- Link State Advertisement -+ + | Header | + +- -+ + | | + +- -+ + | | + + + +[Moy] [Page 145] + +RFC 1247 OSPF Version 2 July 1991 + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + + +0 These fields are reserved. They must be 0. + +Options + The optional capabilities supported by the router, as documented in + Section A.2. + +I-bit + The Init bit. When set to 1, this packet is the first in the + sequence of database descriptions. + +M-bit + The More bit. When set to 1, it indicates that more database + descriptions are to follow. + +MS-bit + The Master/Slave bit. When set to 1, it indicates that the router + is the master during the database exchange process. Otherwise, the + router is the slave. + +DD sequence number + Used to sequence the collection of database description packets. + The initial value (indicated by the Init bit being set) should be + unique. The sequence number then increments until the complete + database description has been sent. + + +The rest of the packet consists of a (possibly partial) list of the +topological database's pieces. Each link state advertisement in the +database is described by its link state header. The link state header +is documented in Section A.4.1. It contains all the information +required to uniquely identify both the advertisement and the +advertisement's current instance. + + + + + + + + + + + + + +[Moy] [Page 146] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.4 The Link State Request packet + +Link State Request packets are OSPF packet type 3. After exchanging +Database Description packets with a neighboring router, a router may +find that parts of its topological database are out of date. The Link +State Request packet is used to request the pieces of the neighbor's +database that are more up to date. Multiple Link State Request packets +may need to be used. The sending of Link State Request packets is the +last step in bringing up an adjacency. + +A router that sends a Link State Request packet has in mind the precise +instance of the database pieces it is requesting (defined by LS sequence +number, LS checksum, and LS age). It may receive even more recent +instances in response. + +The sending of Link State Request packets is documented in Section 10.9. +The reception of Link State Request packets is documented in Section +10.7. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 3 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS type | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + +Each advertisement requested is specified by its LS type, Link State ID, +and Advertising Router. This uniquely identifies the advertisement, but +not its instance. Link State Request packets are understood to be +requests for the most recent instance (whatever that might be). + + + +[Moy] [Page 147] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.5 The Link State Update packet + +Link State Update packets are OSPF packet type 4. These packets +implement the flooding of link state advertisements. Each Link State +Update packet carries a collection of link state advertisements one hop +further from its origin. Several link state advertisements may be +included in a single packet. + +Link State Update packets are multicast on those physical networks that +support multicast/broadcast. In order to make the flooding procedure +reliable, flooded advertisements are acknowledged in Link State +Acknowledgment packets. If retransmission of certain advertisements is +necessary, the retransmitted advertisements are always carried by +unicast Link State Update packets. For more information on the reliable +flooding of link state advertisements, consult Section 13. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 4 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | # advertisements | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- +-+ + | Link state advertisements | + +- +-+ + | ... | + + + +# advertisements + The number of link state advertisements included in this update. + + +The body of the Link State Update packet consists of a list of link +state advertisements. Each advertisement begins with a common 20 byte + + + +[Moy] [Page 148] + +RFC 1247 OSPF Version 2 July 1991 + + +header, the link state advertisement header. This header is described +in Section A.4.1. Otherwise, the format of each of the five types of +link state advertisements is different. Their formats are described in +Section A.4. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 149] + +RFC 1247 OSPF Version 2 July 1991 + + +A.3.6 The Link State Acknowledgment packet + +Link State Acknowledgment Packets are OSPF packet type 5. To make the +flooding of link state advertisements reliable, flooded advertisements +are explicitly acknowledged. This acknowledgment is accomplished +through the sending and receiving of Link State Acknowledgment packets. +Multiple link state advertisements can be acknowledged in a single +packet. + +Depending on the state of the sending interface and the source of the +advertisements being acknowledged, a Link State Acknowledgment packet is +sent either to the multicast address AllSPFRouters, to the multicast +address AllDRouters, or as a unicast. The sending of Link State +Acknowledgement packets is documented in Section 13.5. The reception of +Link State Acknowledgement packets is documented in Section 13.7. + +The format of this packet is similar to that of the Data Description +packet. The body of both packets is simply a list of link state +advertisement headers. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Version # | 5 | Packet length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Router ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Area ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Checksum | Autype | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Authentication | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- -+ + | A | + +- Link State Advertisement -+ + | Header | + +- -+ + | | + +- -+ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + + +[Moy] [Page 150] + +RFC 1247 OSPF Version 2 July 1991 + + +Each acknowledged link state advertisement is described by its link +state header. The link state header is documented in Section A.4.1. It +contains all the information required to uniquely identify both the +advertisement and the advertisement's current instance. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 151] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4 Link state advertisement formats + +There are five distinct types of link state advertisements. Each link +state advertisement begins with a standard 20-byte link state header. +This header is explained in Section A.4.1. Succeeding sections then +diagram the separate link state advertisement types. + +Each link state advertisement describes a piece of the OSPF routing +domain. Every router originates a router links advertisement. In +addition, whenever the router is elected Designated Router, it +originates a network links advertisement. Other types of link state +advertisements may also be originated (see Section 12.4). All link +state advertisements are then flooded throughout the OSPF routing +domain. The flooding algorithm is reliable, ensuring that all routers +have the same collection of link state advertisements. (See Section 13 +for more information concerning the flooding algorithm). This +collection of advertisements is called the link state (or topological) +database. + +From the link state database, each router constructs a shortest path +tree with itself as root. This yields a routing table (see Section 11). +For the details of the routing table build process, see Section 16. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 152] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4.1 The Link State Advertisement header + +All link state advertisements begin with a common 20 byte header. This +header contains enough information to uniquely identify the +advertisement (LS type, Link State ID, and Advertising Router). +Multiple instances of the link state advertisement may exist in the +routing domain at the same time. It is then necessary to determine +which instance is more recent. This is accomplished by examining the LS +age, LS sequence number and LS checksum fields that are also contained +in the link state advertisement header. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS age | Options | LS type | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS checksum | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +LS age + The time in seconds since the link state advertisement was + originated. + +Options + The optional capabilities supported by the described portion of the + routing domain. OSPF's optional capabilities are documented in + Section A.2. + +LS type + The type of the link state advertisement. Each link state type has + a separate advertisement format. The link state types are as + follows (see Section 12.1.3 for further explanation): + + + + + + + + + + +[Moy] [Page 153] + +RFC 1247 OSPF Version 2 July 1991 + + + + LS Type Description + ___________________________________ + 1 Router links + 2 Network links + 3 Summary link (IP network) + 4 Summary link (ASBR) + 5 AS external link + + + + +Link State ID + This field identifies the portion of the internet environment that + is being described by the advertisement. The contents of this field + depend on the advertisement's LS type. For example, in network + links advertisements the Link State ID is set to the IP interface + address of the network's Designated Router (from which the network's + IP address can be derived). The Link State ID is further discussed + in Section 12.1.4. + +Advertising Router + The Router ID of the router that originated the link state + advertisement. For example, in network links advertisements this + field is set to the Router ID of the network's Designated Router. + +LS sequence number + Detects old or duplicate link state advertisements. Successive + instances of a link state advertisement are given successive LS + sequence numbers. See Section 12.1.6 for more details. + +LS checksum + The Fletcher checksum of the complete contents of the link state + advertisement. See Section 12.1.7 for more details. + +length + The length in bytes of the link state advertisement. This includes + the 20 byte link state header. + + + + + + + + + + + + + +[Moy] [Page 154] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4.2 Router links advertisements + +Router links advertisements are the Type 1 link state advertisements. +Each router in an area originates a router links advertisement. The +advertisement describes the state and cost of the router's links (or +interfaces) to the area. All of the router's links to the area must be +described in a single router links advertisement. For details +concerning the construction of router links advertisements, see Section +12.4.1. + +In router links advertisements, the Link State ID field is set to the +router's OSPF Router ID. The T-bit is set in the advertisement's Option +field if and only if the router is able to calculate a separate set of +routes for each IP TOS. Router links advertisements are flooded +throughout a single area only. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS age | Options | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS checksum | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 |E|B| 0 | # links | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link Data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type | # TOS | TOS 0 metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TOS | 0 | metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TOS | 0 | metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link Data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +[Moy] [Page 155] + +RFC 1247 OSPF Version 2 July 1991 + + + | ... | + + + +bit E + When set, the router is an AS boundary router (E is for external) + +bit B + When set, the router is an area border router (B is for border) + +# links + The number of router links described by this advertisement. This + must be the total collection of router links to the area. + + +The following fields are used to describe each router link. Each router +link is typed (see the below Type field). The type field indicates the +kind of link being described. It may be a link to a transit network, to +another router or to a stub network. The values of all the other fields +describing a router link depend on the link's type. For example, each +link has an associated 32-bit data field. For links to stub networks +this field specifies the network's IP address mask. For the other link +types the Link Data specifies the router's associated IP interface +address. + + +Type + A quick description of the router link. One of the following. Note + that host routes are classified as links to stub networks whose + network mask is 0xffffffff. + + + + Type Description + __________________________________________________ + 1 Point-to-point connection to another router + 2 Connection to a transit network + 3 Connection to a stub network + 4 Virtual link + + + + +Link ID + Identifies the object that this router link connects to. Value + depends on the link's type. When connecting to an object that also + originates a link state advertisement (i.e., another router or a + transit network) the Link ID is equal to the other advertisement's + + + +[Moy] [Page 156] + +RFC 1247 OSPF Version 2 July 1991 + + + Link State ID. This provides the key for looking up said + advertisement in the link state database. See Section 12.2 for more + details. + + + + Type Link ID + ______________________________________ + 1 Neighboring router's ID + 2 IP address of Designated Router + 3 IP network/subnet number + 4 Neighboring router's ID + + + + +Link Data + Contents again depend on the link's Type field. For connections to + stub network, it specifies the network mask. For the other link + types it specifies the router's associated IP interface address. + This latter piece of information is needed during the routing table + build process, when calculating the IP address of the next hop. See + Section 16.1.1 for more details. + +#metrics + The number of different TOS metrics given for this link, not + counting the required metric for TOS 0. For example, if no + additional TOS metrics are given, this field should be set to 0. + +TOS 0 metric + The cost of using this router link for TOS 0. + + +For each link, separate metrics may be specified for each Type of +Service (TOS). The metric for TOS 0 must always be included, and was +discussed above. Metrics for non-zero TOS are described below. The +encoding of TOS in OSPF link state advertisements is described in +Section 12.3. Note that the cost for non-zero TOS values that are not +specified defaults to the TOS 0 cost. Metrics must be listed in order +of increasing TOS encoding. For example, the metric for TOS 16 must +always follow the metric for TOS 8 when both are specified. + + +TOS IP type of service that this metric refers to. The encoding of TOS + in OSPF link state advertisements is described in Section 12.3. + +metric + The cost of using this outbound router link, for traffic of the + + + +[Moy] [Page 157] + +RFC 1247 OSPF Version 2 July 1991 + + + specified TOS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 158] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4.3 Network links advertisements + +Network links advertisements are the Type 2 link state advertisements. +A network links advertisement is originated for each transit network in +the area. A transit network is a multi-access network that has more +than one attached router. The network links advertisement is originated +by the network's Designated Router. The advertisement describes all +routers attached to the network, including the Designated Router itself. +The advertisement's Link State ID field lists the IP interface address +of the Designated Router. + +The distance from the network to all attached routers is zero, for all +types of service. This is why the TOS and metric fields need not be +specified in the network links advertisement. For details concerning +the construction of network links advertisements, see Section 12.4.2. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS age | Options | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS checksum | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Network Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Attached Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + +Network Mask + The IP address mask for the network. For example, a class A network + would have the mask 0xff000000. + +Attached Router + The Router IDs of each of the routers attached to the network. + Actually, only those routers that are fully adjacent to the + Designated Router are listed. The Designated Router includes itself + in this list. The number of routers included can be deduced from + the link state advertisement's length field. + + + +[Moy] [Page 159] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4.4 Summary link advertisements + +Summary link advertisements are the Type 3 and 4 link state +advertisements. These advertisements are originated by area border +routers. A separate summary link advertisement is made for each +destination (known to the router) which belongs to the AS, yet is +outside the area. For details concerning the construction of summary +link advertisements, see Section 12.4.3. + +Type 3 link state advertisements are used when the destination is an IP +network. In this case the advertisement's Link State ID field is an IP +network number. When the destination is an AS boundary router, a Type 4 +advertisement is used, and the Link State ID field is the AS boundary +router's OSPF Router ID. (To see why it is necessary to advertise the +location of each ASBR, consult Section 16.4.) Other than the difference +in the Link State ID field, the format of Type 3 and 4 link state +advertisements is identical. + +For stub areas, type 3 summary link advertisements can also be used to +describe a (per-area) default route. Default summary routes are used in +stub areas instead of flooding a complete set of external routes. When +describing a default summary route, the advertisement's Link State ID is +always set to DefaultDestination (0.0.0.0) and the Network Mask is set +to 0.0.0.0. + +Separate costs may be advertised for each IP Type of Service. The +encoding of TOS in OSPF link state advertisements is described in +Section 12.3. Note that the cost for TOS 0 must be included, and is +always listed first. If the T-bit is reset in the advertisement's +Option field, only a route for TOS 0 is described by the advertisement. +Otherwise, routes for the other TOS values are also described; if a cost +for a certain TOS is not included, its cost defaults to that specified +for TOS 0. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS age | Options | 3 or 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS checksum | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +[Moy] [Page 160] + +RFC 1247 OSPF Version 2 July 1991 + + + | Network Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | TOS | metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + +Network Mask + For Type 3 link state advertisements, this indicates the + destination's IP network mask. For example, when advertising the + location of a class A network the value 0xff000000 would be used. + This field is not meaningful and must be zero for Type 4 link state + advertisements. + + +For each specified type of service, the following fields are defined. +The number of TOS routes included can be calculated from the link state +advertisement's length field. Values for TOS 0 must be specified; they +are listed first. Other values must be listed in order of increasing +TOS encoding. For example, the cost for TOS 16 must always follow the +cost for TOS 8 when both are specified. + + +TOS The Type of Service that the following cost concerns. The encoding + of TOS in OSPF link state advertisements is described in Section + 12.3. + +metric + The cost of this route. Expressed in the same units as the + interface costs in the router links advertisements. + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 161] + +RFC 1247 OSPF Version 2 July 1991 + + +A.4.5 AS external link advertisements + +AS external link advertisements are the Type 5 link state +advertisements. These advertisements are originated by AS boundary +routers. A separate advertisement is made for each destination (known +to the router) which is external to the AS. For details concerning the +construction of AS external link advertisements, see Section 12.4.3. + +AS external link advertisements usually describe a particular external +destination. For these advertisements the Link State ID field specifies +an IP network number. AS external link advertisements are also used to +describe a default route. Default routes are used when no specific +route exists to the destination. When describing a default route, the +Link State ID is always set to DefaultDestination (0.0.0.0) and the +Network Mask is set to 0.0.0.0. + +Separate costs may be advertised for each IP Type of Service. The +encoding of TOS in OSPF link state advertisements is described in +Section 12.3. Note that the cost for TOS 0 must be included, and is +always listed first. If the T-bit is reset in the advertisement's +Option field, only a route for TOS 0 is described by the advertisement. +Otherwise, routes for the other TOS values are also described; if a cost +for a certain TOS is not included, its cost defaults to that specified +for TOS 0. + + + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS age | Options | 5 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Link State ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Advertising Router | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS sequence number | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | LS checksum | length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Network Mask | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |E| TOS | metric | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Forwarding address | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | External Route Tag | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | ... | + + + +[Moy] [Page 162] + +RFC 1247 OSPF Version 2 July 1991 + + +Network Mask + The IP network mask for the advertised destination. For example, + when advertising a class A network the mask 0xff000000 would be + used. + + +For each specified type of service, the following fields are defined. +The number of TOS routes included can be calculated from the link state +advertisement's length field. Values for TOS 0 must be specified; they +are listed first. Other values must be listed in order of increasing +TOS encoding. For example, the cost for TOS 16 must always follow the +cost for TOS 8 when both are specified. + + +bit E + The type of external metric. If bit E is set, the metric specified + is a Type 2 external metric. This means the metric is considered + larger than any link state path. If bit E is zero, the specified + metric is a Type 1 external metric. This means that is is + comparable directly (without translation) to the link state metric. + +Forwarding address + Data traffic for the advertised destination will be forwarded to + this address. If the Forwarding address is set to 0.0.0.0, data + traffic will be forwarded instead to the advertisement's originator + (i.e., the responsible AS boundary router). + +TOS The Type of Service that the following cost concerns. The encoding + of TOS in OSPF link state advertisements is described in Section + 12.3. + +metric + The cost of this route. Interpretation depends on the external type + indication (bit E above). + +External Route Tag + A 32-bit field attached to each external route. This is not used by + the OSPF protocol itself. It may be used to communicate information + between AS boundary routers; the precise nature of such information + is outside the scope of this specification. + + + + + + + + + + + +[Moy] [Page 163] + +RFC 1247 OSPF Version 2 July 1991 + + +B. Architectural Constants + +Several OSPF protocol parameters have fixed architectural values. These +parameters have been referred to in the text by names such as +LSRefreshTimer. The same naming convention is used for the configurable +protocol parameters. They are defined in appendix C. + +The name of each architectural constant follows, together with its value +and a short description of its function. + + +LSRefreshTime + The maximum time between distinct originations of any particular + link state advertisement. For each link state advertisement that a + router originates, an interval timer should be set to this value. + Firing of this timer causes a new instance of the link state + advertisement to be originated. The value of LSRefreshTime is set + to 30 minutes. + +MinLSInterval + The minimum time between distinct originations of any particular + link state advertisement. The value of MinLSInterval is set to 5 + seconds. + +MaxAge + The maximum age that a link state advertisement can attain. When an + advertisement's age reaches MaxAge, it is reflooded. It is then + removed from the database as soon as this flood is acknowledged, + i.e., as soon as it has been removed from all neighbor Link state + retransmission lists. Advertisements having age MaxAge are not used + in the routing table calculation. The value of MaxAge must be + greater than LSRefreshTime. The value of MaxAge is set to 1 hour. + +CheckAge + When the age of a link state advertisement (that is contained in the + link state database) hits a multiple of CheckAge, the + advertisement's checksum is verified. An incorrect checksum at this + time indicates a serious error. The value of CheckAge is set to 5 + minutes. + +MaxAgeDiff + The maximum time dispersion that can occur, as a link state + advertisement is flooded throughout the AS. Most of this time is + accounted for by the link state advertisements sitting on router + output queues (and therefore not aging) during the flooding process. + The value of MaxAgeDiff is set to 15 minutes. + + + + + +[Moy] [Page 164] + +RFC 1247 OSPF Version 2 July 1991 + + +LSInfinity + The link state metric value indicating that the destination is + unreachable. It is defined to be the binary value of all ones. It + depends on the size of the metric field, which is 16 bits in router + links advertisements, and 24 bits in both summary and AS external + links advertisements. + +DefaultDestination + The Destination ID that indicates the default route. This route is + used when no other matching routing table entry can be found. The + default destination can only be advertised in AS external link + advertisements and in type 3 summary link advertisements for stub + areas. Its value is the IP address 0.0.0.0. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 165] + +RFC 1247 OSPF Version 2 July 1991 + + +C. Configurable Constants + +The OSPF protocol has quite a few configurable parameters. These +parameters are listed below. They are grouped into general functional +categories (area parameters, interface parameters, etc.). Sample values +are given for some of the parameters. + +Some parameter settings need to be consistent among groups of routers. +For example, all routers in an area must agree on that area's +parameters, and all routers attached to a network must agree on that +network's IP network number and mask. + +Some parameters may be determined by router algorithms outside of this +specification (e.g., the address of a host connected to the router via a +SLIP line). From OSPF's point of view, these items are still +configurable. + + +C.1 Global parameters + +In general, a separate copy of the OSPF protocol is run for each area. +Because of this, most configuration parameters are defined on a per-area +basis. The few global configuration parameters are listed below. + + +Router ID + This is a 32-bit number that uniquely identifies the router in the + Autonomous System. One algorithm for Router ID assignment is to + choose the largest or smallest IP address assigned to the router. + If a router's OSPF Router ID is changed, the router's OSPF software + should be restarted before the new Router ID takes effect. + +TOS capability + This item indicates whether the router will calculate separate + routes based on TOS. For more information, see Sections 4.5 and + 16.9. + + +C.2 Area parameters + +All routers belonging to an area must agree on that area's +configuration. Disagreements between two routers will lead to an +inability for adjacencies to form between them, with a resulting +hindrance to the flow of routing protocol traffic. The following items +must be configured for an area: + + + + + + +[Moy] [Page 166] + +RFC 1247 OSPF Version 2 July 1991 + + +Area ID + This is a 32-bit number that identifies the area. The Area ID of 0 + is reserved for the backbone. If the area represents a subnetted + network, the IP network number of the subnetted network may be used + for the area ID. + +List of address ranges + An OSPF area is defined as a list of [IP address, mask] pairs. Each + pair describes a range of IP addresses. Networks and hosts are + assigned to an area depending on whether their addresses fall into + one of the area's defining address ranges. Routers are viewed as + belonging to multiple areas, depending on their attached networks' + area membership. Routing information is condensed at area + boundaries. External to the area, a single route is advertised for + each address range. + + As an example, suppose an IP subnetted network is to be its own OSPF + area. The area would be configured as a single address range, whose + IP address is the address of the subnetted network, and whose mask + is the natural class A, B, or C internet mask. A single route would + be advertised external to the area, describing the entire subnetted + network. + +Authentication type + Each area can be configured for a separate type of + authentication. See Appendix E for a discussion of the + defined authentication types. + +External routing capability + Whether AS external advertisements will be flooded into/throughout + the area. If AS external advertisements are excluded from the area, + the area is called a "stub". Internal to stub areas, routing to + external destinations will be based solely on a default summary + route. The backbone cannot be configured as a stub area. Also, + virtual links cannot be configured through stub areas. For more + information, see Section 3.6. + +StubDefaultCost + If the area has been configured as a stub area, and the router + itself is an area border router, then the StubDefaultCost indicates + the cost of the default summary link that the router should + advertise into the area. There can be a separate cost configured + for each IP TOS. See Section 12.4.3 for more information. + + + + + + + + +[Moy] [Page 167] + +RFC 1247 OSPF Version 2 July 1991 + + +C.3 Router interface parameters + +Some of the configurable router interface parameters (such as IP +interface address and subnet mask) actually imply properties of the +attached networks, and therefore must be consistent across all the +routers attached to that network. The parameters that must be +configured for a router interface are: + + +IP interface address + The IP protocol address for this interface. This uniquely + identifies the router over the entire internet. An IP address is + not required on serial lines. Such a serial line is called + "unnumbered". + +IP interface mask + This denotes the portion of the IP interface address that + identifies the attached network. This is often referred to + as the subnet mask. + +Interface output cost(s) + The cost of sending a packet on the interface, expressed in the link + state metric. This is advertised as the link cost for this + interface in the router's router links advertisement. There may be + a separate cost for each IP Type of Service. The interface output + cost(s) must always be greater than 0. + +RxmtInterval + The number of seconds between link state advertisement + retransmissions, for adjacencies belonging to this interface. Also + used when retransmitting Database Description and Link State Request + Packets. This should be well over the expected round-trip delay + between any two routers on the attached network. The setting of + this value should be conservative or needless retransmissions will + result. It will need to be larger on low speed serial lines and + virtual links. Sample value for a local area network: 5 seconds. + +InfTransDelay + The estimated number of seconds it takes to transmit a Link State + Update Packet over this interface. Link state advertisements + contained in the update packet must have their age incremented by + this amount before transmission. This value should take into + account the transmission and propagation delays for the interface. + It must be greater than 0. Sample value for a local area network: 1 + second. + +Router Priority + An 8-bit unsigned integer. When two routers attached to a network + + + +[Moy] [Page 168] + +RFC 1247 OSPF Version 2 July 1991 + + + both attempt to become Designated Router, the one with the highest + Router Priority takes precedence. If there is still a tie, the + router with the highest Router ID takes precedence. A router whose + Router Priority is set to 0 is ineligible to become Designated + Router on the attached network. Router Priority is only configured + for interfaces to multi-access networks. + +HelloInterval + The length of time, in seconds, between the Hello packets that the + router sends on the interface. This value is advertised in the + router's Hello packets. It must be the same for all routers + attached to a common network. The smaller the hello interval, the + faster topological changes will be detected, but more routing + traffic will ensue. Sample value for a X.25 PDN network: 30 + seconds. Sample value for a local area network: 10 seconds. + +RouterDeadInterval + The number of seconds that a router's Hellos have not been seen + before its neighbors declare the router down. This is also + advertised in the router's Hello Packets in the DeadInt field. This + should be some multiple of the HelloInterval (say 4). This value + again must be the same for all routers attached to a common network. + +Authentication key + This configured data allows the authentication procedure to generate + and/or verify the authentication field in the OSPF header. For + example, if the authentication type indicates simple password, the + authentication key would be a 64-bit password. This key would be + inserted directly into the OSPF header when originating routing + protocol packets. There could be a separate password for each + network. + + +C.4 Virtual link parameters + +Virtual links are used to restore/increase connectivity of the backbone. +Virtual links may be configured between any pair of area border routers +having interfaces to a common (non-backbone) area. The virtual link +appears as an unnumbered point-to-point link in the graph for the +backbone. The virtual link must be configured in both of the area +border routers. + +A virtual link appears in router links advertisements (for the backbone) +as if it were a separate router interface to the backbone. As such, it +has all of the parameters associated with a router interface (see +Section C.3). Although a virtual link acts like an unnumbered point- +to-point link, it does have an associated IP interface address. This +address is used as the IP source in protocol packets it sends along the + + + +[Moy] [Page 169] + +RFC 1247 OSPF Version 2 July 1991 + + +virtual link, and is set dynamically during the routing table build +process. Interface output cost is also set dynamically on virtual links +to be the cost of the intra-area path between the two routers. The +parameter RxmtInterval must be configured, and should be well over the +expected round-trip delay between the two routers. This may be hard to +estimate for a virtual link. It is better to err on the side of making +it too large. Router Priority is not used on virtual links. + +A virtual link is defined by the following two configurable parameters: +the Router ID of the virtual link's other endpoint, and the (non- +backbone) area through which the virtual link runs (referred to as the +virtual link's transit area). Virtual links cannot be configured +through stub areas. + + +C.5 Non-broadcast, multi-access network parameters + +OSPF treats a non-broadcast, multi-access network much like it treats a +broadcast network. Since there many be many routers attached to the +network, a Designated Router is selected for the network. This +Designated Router then originates a networks links advertisement, which +lists all routers attached to the non-broadcast network. + +However, due to the lack of broadcast capabilities, it is necessary to +use configuration parameters in the Designated Router selection. These +parameters need only be configured in those routers that are themselves +eligible to become Designated Router (i.e., those router's whose DR +Priority for the network is non-zero): + + +List of all other attached routers + The list of all other routers attached to the non-broadcast network. + Each router is listed by its IP interface address on the network. + Also, for each router listed, that router's eligibility to become + Designated Router must be defined. When an interface to a non- + broadcast network comes up, the router sends Hello packets only to + those neighbors eligible to become Designated Router, until the + identity of the Designated Router is discovered. + +PollInterval + If a neighboring router has become inactive (hellos have not been + seen for RouterDeadInterval seconds), it may still be necessary to + send Hellos to the dead neighbor. These Hellos will be sent at the + reduced rate PollInterval, which should be much larger than + HelloInterval. Sample value for a PDN X.25 network: 2 minutes. + + + + + + +[Moy] [Page 170] + +RFC 1247 OSPF Version 2 July 1991 + + +C.6 Host route parameters + +Host routes are advertised in network links advertisements as stub +networks with mask 0xffffffff. They indicate either router interfaces +to point-to-point networks, looped router interfaces, or IP hosts that +are directly connected to the router (e.g., via a SLIP line). For each +host directly connected to the router, the following items must be +configured: + + +Host IP address + The IP address of the host. + +Cost of link to host + The cost of sending a packet to the host, in terms of the link state + metric. There may be multiple costs configured, one for each IP + TOS. However, since the host probably has only a single connection + to the internet, the actual configured cost(s) in many cases is + unimportant (i.e., will have no effect on routing). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 171] + +RFC 1247 OSPF Version 2 July 1991 + + +D. Required Statistics + +An OSPF implementation must provide a minimum set of statistics +indicating the operational state of the protocol. These statistics must +be accessible to the user; this will probably be accomplished through +some sort of network management interface. + +It is hoped that these statistics will aid in the debugging of the +implementation, and in the analysis of the protocol's performance. + +The statistics can be broken into two broad categories. The first +consists of what we will call logging messages. These are messages +produced in real time, with generally a single message produced as the +result of a single protocol event. Such messages are also commonly +referred to as traps. + +The second category will be referred to as cumulative statistics. These +are counters whose value have collected over time, such as the count of +link state retransmissions over the last hour. Also falling into this +category are dumps of the various routing data structures. + + +D.1 Logging messages + +A logging message should be produced on every significant protocol +event. The major events are listed below. Most of these events +indicate a topological change in the routing domain. However, some +number of logging messages can be expected even when the routing domain +remains intact for long periods of time. For example, link state +originations will still happen due to the link state refresh timer +firing. + +Any of the messages that refer to link state advertisements should print +the area associated with the advertisement. There is no area associated +with AS external link advertisements. + +The following list of logging messages indicate topological changes in +the routing domain: + + +T1 The state of a router interface changes. Interface state changes + are documented in Section 9.3. In general, they will cause new link + state advertisements to be originated. The logging message produced + should include the interface's IP address (or other name), interface + type (virtual link, etc.) and old and new state values (as + documented in Section 9.1). + + + + + +[Moy] [Page 172] + +RFC 1247 OSPF Version 2 July 1991 + + +T2 The state of a neighbor changes. Neighbor state changes are + documented in Section 10.3. The logging message produced should + include the neighbor IP address, and old and new state values. + +T3 The (Backup) Designated Router has changed on one of the attached + networks. See Section 9.4. The logging message produced should + include the network IP address, and the old and new (Backup) + Designated Routers. + +T4 The router is originating a new instance of a link state + advertisement. The logging message produced should indicate the LS + type, Link State ID and Advertising Router associated with the + advertisement (see Section 12.4). + +T5 The router has received a new instance of a link state + advertisement. The router receives these in Link State Update + packets. This will cause recalculation of the routing table. The + logging message produced should indicate the advertisement's LS + type, Link State ID and Advertising Router. The message should also + include the neighbor from whom the advertisement was received. + +T6 An entry in the routing table has changed (see Section 11). The + logging message produced should indicate the Destination type, + Destination ID, and the old and new paths to the destination. + + +The following logging messages may indicate that there is a network +configuration error: + + +C1 A received OSPF packet is rejected due to errors in its IP/OSPF + header. The reasons for rejection are documented in Section 8.2. + They include OSPF checksum failure, authentication failure, and + inability to match the source with an active OSPF neighbor. The + logging message produced should include the IP source and + destination addresses, the router ID in the OSPF header, and the + reason for the rejection. + +C2 An incoming Hello packet is rejected due to mismatches between the + Hello's parameters and those configured for the receiving interface + (see Section 10.5). This indicates a configuration problem on the + attached network. The logging message should include the Hello's + source, the receiving interface, and the non-matching parameters. + +C3 An incoming Database Description packet, Link State Request Packet, + Link State Acknowledgment Packet or Link State Update packet is + rejected due to the source neighbor being in the wrong state (see + Sections 10.6, 10.7, 13.7 , and 13 respectively). This can be + + + +[Moy] [Page 173] + +RFC 1247 OSPF Version 2 July 1991 + + + normal when the identity of the network's Designated Router changes, + causing momentary disagreements over the validity of adjacencies. + The logging message should include the source neighbor, its state, + and the packet's type. + +C4 A Database Description packet has been retransmitted. This may mean + that the value of RxmtInterval that has been configured for the + associated interface is too small. The logging message should + include the neighbor to whom the packet is being sent. + + +The following messages can be caused by packet transmission errors, or +software errors in an OSPF implementation: + + +E1 The checksum in a received link state advertisement is incorrect. + The advertisement is discarded (see Section 13). The logging + message should include the advertisement's LS type, Link State ID + and Advertising Router (which may be incorrect). The message should + also include the neighbor from whom the advertisement was received. + +E2 During the aging process, it is discovered that one of the link + state advertisements in the database has an incorrect checksum. + This indicates memory corruption or a software error in the router + itself. The router should be dumped and restarted. + + +The following messages are an indication that a router has restarted, +losing track of its previous LS sequence number. Should these messages +continue, it may indicate the presence of duplicate Router IDs: + + +R1 Two link state advertisements have been seen, whose LS type, Link + State ID, Advertising Router and LS sequence number are the same, + yet with differing LS checksums. These are considered to be + different instances of the same advertisement. The instance with + the larger checksum is accepted as more recent (see Section 12.1.7, + 13.1). The logging message should include the LS type, Link State + ID, Advertising Router, LS sequence number and the two differing + checksums. + +R2 Two link state advertisements have been seen, whose LS type, Link + State ID, Advertising Router, LS sequence number and LS checksum are + the same, yet can be distinguished by their LS age fields. This + means that one of the advertisement's LS age is MaxAge, or the two + LS age fields differ by more than MaxAgeDiff. The logging message + should include the LS type, Link State ID, Advertising Router, LS + sequence number and the two differing ages. + + + +[Moy] [Page 174] + +RFC 1247 OSPF Version 2 July 1991 + + +R3 The router has received an instance of one of its self-originated + advertisements, that is considered to be more recent. This forces + the router to originate a new advertisement (see Section 13.4). The + logging message should include the advertisement's LS type, Link + State ID, and Advertising Router along with the neighbor from whom + the advertisement was received. + +R4 An acknowledgment has been received for an instance of an + advertisement that is not currently contained in the router's + database (see Section 13.7). The logging message should detail the + instance being acknowledged and the database copy (if any), along + with the neighbor from whom the acknowledgment was received. + +R5 An advertisement has been received through the flooding procedure + that is LESS recent the the router's current database copy (see + Section 13). The logging message should include the received + advertisement's LS type, Link State ID, Advertising Router, LS + sequence number, LS age and LS checksum. Also, the message should + display the neighbor from whom the advertisement was received. + + +The following messages are indication of normal, yet infrequent protocol +events. These messages will help in the interpretation of some of the +above messages: + + +N1 The Link state refresh timer has fired for one of the router's + self-originated advertisements (see Section 12.4). A new instance + of the advertisement must be originated. The message should include + the advertisement's LS type, Link State ID and Advertising Router. + +N2 One of the advertisements in the router's link state database has + aged to MaxAge (see Section 14). At this point, the advertisement + is no longer included in the routing table calculation, and is + reflooded. The message should list the advertisement's LS type, + Link State ID and Advertising Router. + +N3 An advertisement of age MaxAge has been flushed from the router's + database. This occurs after the advertisement has been acknowledged + by all adjacent neighbors. The message should list the + advertisement's LS type, Link State ID and Advertising Router. + + +D.2 Cumulative statistics + +These statistics display collections of the routing data structures. +They should be able to be obtained interactively, through some kind of +network management facility. + + + +[Moy] [Page 175] + +RFC 1247 OSPF Version 2 July 1991 + + +All the following statistics displays, with the exception of the area +list, routing table and the AS external links, are specific to a single +area. As noted in Section 4, most OSPF protocol mechanisms work on each +area separately. + +The following statistics displays should be available: + + +(1) A list of all the areas attached to the router, along with the + authentication type to use for the area, the number of router + interfaces attaching to the area, and the total number of nets and + routers belonging to the area. + + For example, consider the router RT3 pictured in Figure 15. It has + interfaces to two separate areas, Area 1 and the backbone (Area 0). + Table 20 then indicates that the backbone is using a simple password + for authentication, and that Area 1 is not using any authentication. + The number of nets includes IP networks, subnets, and hosts (this is + the reason for 2 backbone nets -- they are the host routes + corresponding to the serial line between backbone routers RT6 and + RT10). + + + + Area ID # ifcs AuType # nets # routers + ______________________________________________ + 0 1 1 2 7 + 1 2 0 4 4 + + + Table 20: Sample OSPF area display. + + + +(2) A list of all the router's interfaces to an area, along with their + addresses, output cost, current state, the (Backup) Designated + Router for the attached network, and the number of neighbors + currently associated with the interface. Some number of these + neighbors will have become adjacent, the number of these is noted in + the display also. + + Again consider router RT3 in Figure 15. Table 21 below indicates + that RT4 has been selected as Designated Router for network N3, and + router RT1 has been selected as Backup. Adjacencies have been + established to both of these routers. There are no routers besides + RT3 attached to network N4, so it becomes DR, yet still advertises + the network as a stub in its router links advertisements. + + + + +[Moy] [Page 176] + +RFC 1247 OSPF Version 2 July 1991 + + + + Ifc IP address state cost DR Backup # nbrs # adjs + __________________________________________________________________________ + 192.1.1.3 DR other 1 192.1.1.4 192.1.1.1 3 2 + 192.1.4.3 DR 2 192.1.4.3 none 0 0 + + + Table 21: Sample OSPF interface display. + + + +(3) The list of neighbors associated with a particular interface. Each + neighbor's IP address, router ID, state, and the length of the three + link state advertisement queues (see Section 10) to the neighbor is + displayed. + + Suppose router RT4 is the Designated Router for network N3, and + router RT1 is the Backup Designated router. Suppose also that the + adjacency between router RT3 and RT1 has not yet fully formed. The + display of router RT3's neighbors (associated with its interface to + network N3) may then look like Table 22. The display indicates that + RT3 and RT1 are still in the database exchange procedure, Router RT3 + has more Database Description packets to send to RT1, and RT1 has at + least one link state advertisement that RT3 doesn't. Also, there is + a single link state advertisement that has been flooded, but not + acknowledged, to each neighbor that participates in the flooding + procedure (state >= Exchng). (In the following examples we assume + that a router's Router ID is assigned to be its smallest IP + interface address). + + + + Nbr IP address Router ID state LS rxmt len DB summ len LS req len + ____________________________________________________________________________ + 192.1.1.1 192.1.1.1 Exchng 1 10 1 + 192.1.1.2 192.1.1.2 2-Way 0 0 0 + 192.1.1.4 192.1.1.4 Full 1 0 0 + + + Table 22: Sample OSPF neighbor display. + + + +(4) A list of the area's link state database. This is the same in all + of the routers attached to the area. It is composed of that area's + router links, network links, and summary links advertisements. + Also, the AS external link advertisements are a part of all the + areas' databases. + + + +[Moy] [Page 177] + +RFC 1247 OSPF Version 2 July 1991 + + + The link state database for Area 1 in Figure 15 might look like + Table 23 (compare this with Figure 7). Assume the the Designated + Router for network N3 is router RT4, as above. Both routers RT3 and + RT4 are originating summary link advertisements into Area 1, since + they are area border routers. Routers RT5 and RT7 are AS external + routers. Their location must be described in summary links + advertisements. Also, their AS external link advertisements are + flooded throughout the entire AS. + + Router RT3 can locate its self-originated advertisements by looking + for its own router ID (192.1.1.3) in advertisements' Advertising + Router fields. + + The LS sequence number, LS age, and LS checksum fields indicate the + advertisement's instance. Their values are stored in the + advertisement's link state header; we have not bothered to make up + values for the example. + + +LS type Link State ID Advertising Router LS seq no LS age LS checksum +_______________________________________________________________________________ +1 192.1.1.1 192.1.1.1 * * * +1 192.1.1.2 192.1.1.2 * * * +1 192.1.1.3 192.1.1.3 * * * +1 192.1.1.4 192.1.1.4 * * * +_______________________________________________________________________________ +2 192.1.1.4 192.1.1.4 * * * +_______________________________________________________________________________ +3 Ia,Ib 192.1.1.3 * * * +3 N6 192.1.1.3 * * * +3 N7 192.1.1.3 * * * +3 N8 192.1.1.3 * * * +3 N9-N11,H1 192.1.1.3 * * * +3 Ia,Ib 192.1.1.4 * * * +3 N6 192.1.1.4 * * * +3 N7 192.1.1.4 * * * +3 N8 192.1.1.4 * * * +3 N9-N11,H1 192.1.1.4 * * * +4 RT5 192.1.1.3 * * * +4 RT7 192.1.1.3 * * * +4 RT5 192.1.1.4 * * * +4 RT7 192.1.1.4 * * * +_______________________________________________________________________________ +4 N12 RT5's ID * * * +4 N13 RT5's ID * * * +4 N14 RT5's ID * * * +4 N12 RT7's ID * * * + + + + +[Moy] [Page 178] + +RFC 1247 OSPF Version 2 July 1991 + + +LS type Link State ID Advertising Router LS seq no LS age LS checksum +_______________________________________________________________________________ +4 N15 RT7's ID * * * + + + Table 23: Sample OSPF link state database display. + + +(5) The contents of any particular link state advertisement. For + example, a listing of the router links advertisement for Area 1, + with LS type = 1 and Link State ID = 192.1.1.3 is shown in Section + 12.4.1. + +(6) A listing of the entire routing table. Several examples are shown + in Section 11. The routing table is calculated from the combined + databases of each attached area (see Section 16). It may be + desirable to sort the routing table by Type of Service, or by + destination, or a combination of the two. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 179] + +RFC 1247 OSPF Version 2 July 1991 + + +E. Authentication + +All OSPF protocol exchanges are authenticated. The OSPF packet header +(see Section A.3.1) includes an authentication type field, and 64-bits +of data for use by the appropriate authentication scheme (determined by +the type field). + +The authentication type is configurable on a per-area basis. Additional +authentication data is configurable on a per-interface basis. For +example, if an area uses a simple password scheme for authentication, a +separate password may be configured for each network contained in the +area. + +Authentication types 0 and 1 are defined by this specification. All +other authentication types are reserved for definition by the IANA +(iana@ISI.EDU). The current list of authentication types is described +below in Table 24. + + + + AuType Description + _______________________________________________________________ + 0 No authentication + 1 Simple password + All others Reserved for assignment by the IANA (iana@ISI.EDU) + + + Table 24: OSPF authentication types. + + + +E.1 Autype 0 -- No authentication + +Use of this authentication type means that routing exchanges in the area +are not authenticated. The 64-bit field in the OSPF header can contain +anything; it is not examined on packet reception. + + +E.2 Autype 1 -- Simple password + +Using this authentication type, a 64-bit field is configured on a per- +network basis. All packets sent on a particular network must have this +configured value in their OSPF header 64-bit authentication field. This +essentially serves as a "clear" 64-bit password. + +This guards against routers inadvertently coming up in the area. They +must first be configured with their attached networks' passwords before +they can join the routing domain. + + + +[Moy] [Page 180] + +RFC 1247 OSPF Version 2 July 1991 + + +F. Version 1 differences + +This section documents the changes between OSPF version 1 and OSPF +version 2. The impetus for these changes derives from comments received +on RFC 1131 and recent field experience with the OSPF protocol. +Unfortunately, the changes are not backward-compatible. For that +reason, OSPF version 1 will not interoperate with OSPF version 2. +However, the changes are small in scope and should not greatly affect +any existing implementations. In addition, some of the proposed changes +should enable future protocol additions to be made in a backward- +compatible manner (see Section F.4). + + +F.1 Protocol Enhancements + +The following enhancements were made to the OSPF protocol. + + +F.1.1 Stub area support + +In many Autonomous Systems, the majority of the OSPF link state database +consists of AS external advertisements. In these Autonomous Systems, +some OSPF areas may be organized in such a way that external +advertisements can be safely ignored, enabling a reduction of the area's +database size. This applies to OSPF areas where there is only a single +exit/entry that is used by all externally addressed packets, or to cases +where some sub-optimality of external routing is acceptable. + +Therefore, an OSPF area configuration option has been added (see +Sections 3.6 and C.2) allowing the import of external advertisements to +be disabled for an area. When this option is enabled, no AS external +advertisements will be flooded into the area (Sections 13, 13.3 and +10.3). Instead, within the area all data traffic to external +destinations will follow a (per-area) default route. These areas are +called "stub" areas. + +To implement this, all area border routers attached to stub areas will +originate a default summary link advertisement for the area (Section +12.4.3). This will direct all internal routers to an area border router +when forwarding externally addressed packets. In addition, to ensure +that stub areas are configured consistently, an Options field has been +added to OSPF Hello packets (Sections A.2 and A.3.2). A bit is reset in +the Options field indicating that the attached area is a stub area +(Section 9.5). A router will not accept a neighbor's hellos unless they +both agree on the area's ability to process AS external advertisements +(Section 10.5). In this way, a system administrator will be able to +discover incorrectly configured routers, and data traffic will be routed +around them (in order to avoid potential looping situations) until their + + + +[Moy] [Page 181] + +RFC 1247 OSPF Version 2 July 1991 + + +configuration can be repaired. + + +F.1.2 Optional TOS support + +In OSPF there is conceptually a separate routing table for each TOS; the +calculations detailed in steps 1-5 of Section 16 must be done separately +for each TOS. (Note however that link and summary costs need not be +specified separately for each TOS; costs for unspecified TOS values +default to the cost of TOS 0). + +In version 1 of the OSPF specification, all OSPF routers were required +to route based on TOS. However, producing a separate routing table for +each TOS may prove costly, both in terms of memory and processor +resources. For this reason, version 2 allows the system administrator +to configure routers to calculate/use only a single routing table (the +TOS 0 table). When this is done, some traffic may take non-optimal +routes. But all packets will still be delivered, and routing will +remain loop free (see Section 2.4). + +In order to avoid routing loops, a router (router X) using a single +table must communicate this information to its peers. This is done by +resetting the new TOS-capable bit in the router X's router links +advertisement (Section 12.4.1). Then, when its peers perform the +Dijkstra calculation (Section 16.1) for non-zero TOS values, they will +omit router X from the calculation. In effect, an attempt will be made +to bypass router X when forwarding non-zero TOS traffic. Summary link +and AS external link advertisements can also indicate their non- +availability for non-zero TOS traffic (Sections 12.4.3 and 12.4.4). + +The result may be that no route can be found for some non-zero value of +TOS. When this happens, the packet is routed along the TOS 0 route +instead (Section 11.1). + +It is still mandatory for all OSPF implementations to be able to +construct separate routing tables for each TOS value, if desired by the +system administrator. + + +F.1.3 Preventing external extra-hops + +In some cases, version 1 of the OSPF specification will introduce +extra-hops when calculating routes to external destinations. This is +because it is implicit in the format of AS external advertisements that +packets should be forwarded through the advertising router. However, +consider the situation where multiple OSPF routers share a LAN with an +external router (call it router Y) , and only one OSPF router (call it +router X) exchanges routing information with Y. The OSPF routers on the + + + +[Moy] [Page 182] + +RFC 1247 OSPF Version 2 July 1991 + + +LAN other than X will forward packets destined for Y and beyond through +X, generating an extra hop (see Section 2.2). + +To fix this, a new field has been added to AS external advertisements. +This field (called the forwarding address) will indicate the router +address to which packets should be forwarded (Section 12.4.4). In the +above example, router X will put Y's IP address into this field. If the +field is 0, packets are (as before) forwarded to the originator of the +advertisement. A different forwarding address can be specified for each +TOS value. + +Whenever possible, this new field should be set to 0. This is because +setting it to an actual router address incurs additional cost during the +routing table build process (Section 16.4). + +Besides preventing extra-hops, there are two other applications for this +field. The first is for use by "route servers". Using the forwarding +address, a router in the middle of the Autonomous System can gather +external routing information and originate AS external advertisements +that specify the correct exit route to use for each external destination +(Section 2.2). + +The other application possibly enables the reduction of the number of AS +external advertisements that need be imported. Suppose in the example +at the beginning of this section that there are two routers (X and Z) +exchanging EGP information with the non-OSPF router Y. It is then +likely that both X and Z will originate the same set of external routes. +Two AS external advertisements that specify the same (non-zero) +forwarding address, destination and cost are obviously functionally +equivalent, regardless of their originators (advertising routers). The +OSPF specification dictates that the advertisement originated by the +router with the largest Router ID will always be used. This allows the +other router to flush its equivalent advertisement (Section 12.4.4). + + +F.2 Corrected problems + +The following problems in OSPF version 1 have been corrected in version +2. + + +F.2.1 LS sequence number space changes + +The LS sequence number space has been changed from version 1's lollipop +shape to a linear sequence space (Section 12.1.6). Sequence numbers +will now be compared as signed 32-bit integers. Link state +advertisements having larger sequence numbers will be considered more +recent. The sequence number space will still begin at (-N+1) (where N = + + + +[Moy] [Page 183] + +RFC 1247 OSPF Version 2 July 1991 + + +2**31). The value of -N remains reserved. The LS sequence number of +successive instances of an advertisement will continue to be incremented +until it reaches the maximum possible value: N-1. At this point, when a +new instance of the advertisement must be originated (due either to +topological change of the expiration of the LS refresh timer) the +current instance must first be "prematurely aged". + +There will be a new section discussing premature aging (Section 14.1). +This is a method for flushing a link state advertisement from the +routing domain: the advertisement's age is set to MaxAge and +advertisement is reflooded just as if it were a newly received +advertisement. As soon as the new flooding is acknowledged by all of +the router's adjacent neighbors, the advertisement is flushed from the +database. + +Premature aging can also be used when, for example, a previously +advertised external route is no longer reachable. In this circumstance, +premature aging is preferable to the alternative, which is to originate +a new advertisement for the destination specifying a metric of +LSInfinity. + +A router may only prematurely age its own (self-originated) link state +advertisements. These are the link state advertisements having the +router's own OSPF router ID in the Advertising Router field. + + +F.2.2 Flooding of unexpected MaxAge advertisements + +Version 1 of the OSPF omitted the handling of a special case in the +flooding procedure: the reception of a MaxAge advertisement that has no +database instance. A paragraph has been added to Section 13 to deal +with this occurrence. Without this paragraph, retransmissions of MaxAge +advertisements could possibly delay their being flushed from the routing +domain. + + +F.2.3 Virtual links and address ranges + +When summarizing information into a virtual link's transit area, version +2 of the OSPF specification prohibits the collapsing of multiple +backbone IP networks/subnets into a single summary link. This +restriction has been added to deal with certain anomalous OSPF area +configurations. See Sections 15 and 12.4.3 for more information. + + + + + + + + +[Moy] [Page 184] + +RFC 1247 OSPF Version 2 July 1991 + + +F.2.4 Routing table lookup explained + +When forwarding an IP data packet, a router looks up the packet's IP +destination in the routing table. This determines the packet's next +hop. A new section (Section 11.1) has been added describing the routing +table lookup (instead of just specifying a "best match"). This section +clarifies OSPF's four level routing hierarchy (i.e., intra-area, inter- +area, external type 1 and external type 2 routes). It also specifies +the effect of TOS on routing. + + +F.2.5 Sending Link State Request packets + +OSPF Version 2 eases the restrictions on the sending of Link State +Request packets. Link State Request packets can now be sent to a +neighboring router before a complete set of Database Description packets +have been exchanged. This enables a more efficient use of a router's +memory resources; an OSPF version 2 implementation may limit the size of +the neighbor Link state request lists. See Sections 10.9, 10.7 and 10.3 +for more details. + + +F.2.6 Changes to the Database description process + +The specification has been modified to ensure that, when two routers are +synchronizing their databases during the Database Description process, +none of the component link state advertisements can have their sequence +numbers decrease. A link state advertisement's sequence number +decreases when it is flushed from the routing domain via premature- +aging, and then reoriginated with the smallest sequence number +0x80000001 (see Section 14.1). So the specification now dictates that +an advertisement cannot be flushed from a router's database until both +a) it no longer appears on any neighbor Link State Retransmission lists +and b) none of the router's neighbors are in states Exchange or Loading. +See Sections 13 (step 4c) and 14.1 for more details. + +In addition, a new step has been added to the flooding procedure +(Section 13) in order to make the Database Description process more +robust. This step detects when a neighbor lists one instance of an +advertisement in its Database Description packets, but responds to Link +State Request packets by sending another (earlier) instance. This +behavior now causes the event BadLSReq to be generated, which restarts +the Database Description process with the neighbor. In OSPF version 1, +the neighbor event BadLSReq erroneously did not restart the Database +Description process. + + + + + + +[Moy] [Page 185] + +RFC 1247 OSPF Version 2 July 1991 + + +F.2.7 Receiving OSPF Hello packets + +The section detailing the receive processing of OSPF Hello packets +(Section 10.5) has been modified to include the generation of the +neighbor Backup Seen event. In addition, the section detailing the +Designated Router election algorithm (Section 9.4) has been modified to +include the algorithm's initial state. + + +F.2.8 Network mask defined for default route + +The network mask for the default route, when it appears as the +destination in either an AS external link advertisement or in a summary +link advertisement, has been set to 0.0.0.0. See Sections A.4.4 and +A.4.5 for more details. + + +F.2.9 Rate limit imposed on flooding + +When an advertisement is installed in the link state database, it is +timestamped. The flooding procedure is then not allowed to install a +new instance of the advertisement until MinLSInterval seconds have +elapsed. This enforces a rate limit on the flooding procedure; a new +instance can be flooded only once every MinLSInterval seconds. This +guards against routers that disregard the limit on self-originated +advertisements (already present in OSPF version 1) of one origination +every MinLSInterval seconds. For more information, see Section 13. + + +F.3 Packet format changes + +The following changes have been made to the format of OSPF packets and +link state advertisements. Some of these changes were required to +support the added functionality listed above. Other changes were made +to further simplify the parsing of OSPF packets. + + +F.3.1 Adding a Capability bitfield + +To support the new "stub area" and "optional TOS" features, a bitfield +listing protocol capabilities has been added to the Hello packet, +Database Description packet and all link state advertisements. When +used in Hello packets, this allows a router to reject a neighbor because +of a capability mismatch. Alternatively, when capabilities are +exchanged in Database Description packets a router can choose not to +forward certain link state advertisements to a neighbor because of its +reduced functionality. Lastly, listing capabilities in link state +advertisements allows routers to route traffic around reduced + + + +[Moy] [Page 186] + +RFC 1247 OSPF Version 2 July 1991 + + +functionality router, by excluding them from parts of the routing table +calculation. See Section A.2 for more details. + + +F.3.2 Packet simplification + +To simplify the format of Database Description packets and Link State +Acknowledgment packets, their description of link state advertisements +has been modified. Each advertisement is now be described by its 20- +byte link state header (see Section A.4). This does not consume any +additional space in the packets. The one additional piece of +information that will be present is the LS length. However, this field +need not be used when processing the Database Description and Link State +Acknowledgment packets. + + +F.3.3 Adding forwarding addresses to AS external advertisements + +As discussed in Section F.1.3, a forwarding address field has been added +to the AS external advertisement. + + +F.3.4 Labelling of virtual links + +Virtual links will be labelled as such in router links advertisements. +This separates virtual links from unnumbered point-to-point links, +allowing all backbone routers to discover whether any virtual links are +in use. See Section 12.4.1 for more details. + + +F.3.5 TOS costs ordered + +When a link state advertisement specifies a separate cost depending on +TOS, these costs must be ordered by increasing TOS value. For example, +the cost for TOS 16 must always follow the cost for TOS 8. + + +F.3.6 OSPF's TOS encoding redefined + +The way that OSPF encodes TOS in its link state advertisements has been +redefined in version 2. OSPF's encoding of the Delay (D), Throughput (T) +and Reliability (R) TOS flags defined by [RFC 791] is described in +Section 12.3. + + + + + + + + +[Moy] [Page 187] + +RFC 1247 OSPF Version 2 July 1991 + + +F.4 Backward-compatibility provisions + +Additional functionality will probably be added to OSPF in the future. +One example of this is a multicast routing capability, which is +currently under development. In order to be able to add such features +in a backward-compatible manner, the following provisions have been made +in the OSPF specification. + +New capabilities will probably involve the introduction of new link +state advertisements. If a router receives a link state advertisement +of unknown type during the flooding procedure, the advertisement is +simply ignored (Section 13. The router should not attempt to further +flood the advertisement, nor acknowledge it. The advertisement should +not be installed into the link state database. If the router receives +an advertisement of unknown type during the Database Description +process, this is an error (see Sections 10.6 and 10.3). The Database +Description process is then restarted. + +There is also an Options field in both the Hello packets, Database +Description packets and the link state advertisement headers. +Unrecognized capabilities found in these places should be ignored, and +should not affect the normal processing of protocol packets/link state +advertisements (see Sections 10.5 and 10.6). Routers will originate +their Hello packets, Database Description packets and link state +advertisements with unrecognized capabilities set to 0 (see Sections +9.5, 10.8 and 12.1.2). + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 188] + +RFC 1247 OSPF Version 2 July 1991 + + +Security Considerations + +All OSPF protocol exchanges are authenticated. This is accomplished +through authentication fields contained in the OSPF packet header. For +more information, see Sections 8.1, 8.2, and Appendix E. + + +Author's Address + +John Moy +Proteon, Inc. +2 Technology Drive +Westborough, MA 01581 + +Phone: (508) 898-2800 +EMail: jmoy@proteon.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Moy] [Page 189] + diff --git a/app/kens/testenv.hpp b/app/kens/testenv.hpp index 86116b425..b0f68dcd6 100644 --- a/app/kens/testenv.hpp +++ b/app/kens/testenv.hpp @@ -358,8 +358,8 @@ class TestEnv3 : public KensTesting { } }; -//#define UNRELIABLE -//#define RUN_SOLUTION +// #define UNRELIABLE +// #define RUN_SOLUTION #ifdef RUN_SOLUTION typedef TestEnv1 TestEnv_Reliable; #ifdef UNRELIABLE diff --git a/app/pwospf/CMakeLists.txt b/app/pwospf/CMakeLists.txt new file mode 100644 index 000000000..f7bab3faa --- /dev/null +++ b/app/pwospf/CMakeLists.txt @@ -0,0 +1,26 @@ +project(pwospf) + +# Build pwospf + +set(pwospf_SOURCES PWOSPFAssignment.cpp PWOSPFAssignment.hpp) +add_library(pwospf SHARED ${pwospf_SOURCES}) +target_link_libraries(pwospf PUBLIC e) + +set(pwospf-targets pwospf) + +if(TARGET pwospf-ref) + list(APPEND pwospf-targets pwospf-ref) +endif() + +foreach(pwospf-traget ${pwospf-targets}) + add_executable(${pwospf-traget}-all testpwospf.cpp) + target_link_libraries(${pwospf-traget}-all PUBLIC ${pwospf-traget} gtest_main) + if(${CMAKE_VERSION} VERSION_GREATER "3.15.0") + set_target_properties(${pwospf-traget}-all PROPERTIES XCODE_GENERATE_SCHEME + ON) + set_target_properties(${pwospf-traget}-all PROPERTIES XCODE_SCHEME_ARGUMENTS + "--gtest_color=no") + set_target_properties(${pwospf-traget}-all + PROPERTIES XCODE_SCHEME_ENVIRONMENT "GTEST_COLOR=no") + endif() +endforeach() diff --git a/app/pwospf/PWOSPFAssignment.cpp b/app/pwospf/PWOSPFAssignment.cpp new file mode 100644 index 000000000..4e11d5148 --- /dev/null +++ b/app/pwospf/PWOSPFAssignment.cpp @@ -0,0 +1,50 @@ +/* + * E_PWOSPFAssignment.cpp + * + */ + +#include +#include +#include +#include +#include +#include + +#include "PWOSPFAssignment.hpp" + +namespace E { + +PWOSPFAssignment::PWOSPFAssignment(Host &host) + : HostModule("OSPF", host), RoutingInfoInterface(host), + TimerModule("OSPF", host) {} + +PWOSPFAssignment::~PWOSPFAssignment() {} + +void PWOSPFAssignment::initialize() {} + +void PWOSPFAssignment::finalize() {} + +/** + * @brief Query cost for a host + * + * @param ipv4 querying host's IP address + * @return cost or -1 for no found host + */ +Size PWOSPFAssignment::pwospfQuery(const ipv4_t &ipv4) { + // Implement below + + return -1; +} + +void PWOSPFAssignment::packetArrived(std::string fromModule, Packet &&packet) { + // Remove below + (void)fromModule; + (void)packet; +} + +void PWOSPFAssignment::timerCallback(std::any payload) { + // Remove below + (void)payload; +} + +} // namespace E diff --git a/app/pwospf/PWOSPFAssignment.hpp b/app/pwospf/PWOSPFAssignment.hpp new file mode 100644 index 000000000..a7809da6e --- /dev/null +++ b/app/pwospf/PWOSPFAssignment.hpp @@ -0,0 +1,140 @@ +/* + * E_PWOSPFAssignment.hpp + * + */ + +#ifndef E_PWOSPFASSIGNMENT_HPP_ +#define E_PWOSPFASSIGNMENT_HPP_ + +#include +#include +#include +#include +#include + +namespace E { + +constexpr Size MaxCost = 20; +constexpr Size calc_cost_lcm(size_t a) { + return a == 1 ? 1 : std::lcm(a, calc_cost_lcm(a - 1)); +} +constexpr Size CostLCM = calc_cost_lcm(MaxCost); + +/* Router Configuration */ + +// 32 bit area ID +constexpr uint32_t AreaID = 1; +// 16 bit lsuint - interval in seconds between link state update broadcasts +constexpr uint16_t LSUInt = 30; +constexpr uint16_t TTLInitial = 16; + +// 32 bit mask mask - subnet mask of assocaited interface +constexpr ipv4_t SubnetMask = {255, 255, 255, 0}; + +// 16 bit helloint - interval in seconds between HELLO broadcasts +constexpr uint16_t HelloInt = 60; + +/* Router Configuration End*/ + +#ifdef HAVE_PRAGMA_PACK +#pragma pack(push, 1) +#elif !defined(HAVE_ATTR_PACK) +#error "Compiler must support packing" +#endif + +struct pwospf_header_t { + uint8_t version; + uint8_t type; + uint16_t length; + uint32_t router_id; + uint32_t area_id; + uint16_t checksum; + uint16_t authtype; + uint64_t authentication; +} +#if defined(HAVE_ATTR_PACK) +__attribute__((packed)); +#else +; +#endif + +struct pwospf_hello_t { + struct pwospf_header_t header; + uint32_t network_mask; + uint16_t hello_int; + uint16_t padding; +} +#if defined(HAVE_ATTR_PACK) +__attribute__((packed)); +#else +; +#endif + +struct pwospf_lsu_entry_t { + uint32_t subnet; + uint32_t mask; + uint32_t router_id; + uint32_t cost; +} +#if defined(HAVE_ATTR_PACK) +__attribute__((packed)); +#else +; +#endif + +struct pwospf_lsu_t { + struct pwospf_header_t header; + uint16_t sequence; + uint16_t ttl; + uint32_t num_advertisements; + struct pwospf_lsu_entry_t entries[]; +} +#if defined(HAVE_ATTR_PACK) +__attribute__((packed)); +#else +; +#endif + +class PWOSPFAssignment : public HostModule, + private RoutingInfoInterface, + public TimerModule { +private: + virtual void timerCallback(std::any payload) final; + +public: + PWOSPFAssignment(Host &host); + + /** + * @brief Query cost for a host + * + * @param ipv4 querying host's IP address + * @return cost or -1 for no found host + */ + Size pwospfQuery(const ipv4_t &ipv4); + + /** + * @brief Get cost for local port (link) + * + * @param port_num querying port's number + * @return local link cost + */ + Size linkCost(int port_num) { + Size bps = this->getWireSpeed(port_num); + return CostLCM / bps; + } + + virtual void initialize(); + virtual void finalize(); + virtual ~PWOSPFAssignment(); + +protected: + virtual std::any diagnose(std::any param) final { + auto ip = std::any_cast(param); + return pwospfQuery(ip); + } + virtual void packetArrived(std::string fromModule, Packet &&packet) final; +}; + +} // namespace E + +#endif /* E_PWOSPFASSIGNMENT_HPP_ */ diff --git a/app/pwospf/pwospf.lua b/app/pwospf/pwospf.lua new file mode 100644 index 000000000..b95031eae --- /dev/null +++ b/app/pwospf/pwospf.lua @@ -0,0 +1,80 @@ +p_pwospf = Proto("pwospf", "PWOSPF") +local f = p_pwospf.fields +f.ver = ProtoField.uint8("pwospf.ver", "Version", base.DEC) +f.tp = ProtoField.uint8("pwospf.tp", "Type", base.DEC) +f.length = ProtoField.uint16("pwospf.length", "Packet length", base.DEC) +f.routerid = ProtoField.ipv4("pwospf.routerid", "Router ID") +f.areaid = ProtoField.ipv4("pwospf.areaid", "Area ID") +f.checksum = ProtoField.uint16("pwospf.checksum", "Checksum", base.HEX) +f.authtype = ProtoField.uint16("pwospf.authtype", "Autype", base.HEX) +f.authentication = ProtoField.uint64("pwospf.authentication", "Authentication", base.HEX) + +f.netmask = ProtoField.ipv4("pwospf.netmask", "Network Mask") +f.helloint = ProtoField.uint16("pwospf.helloint", "HelloInt", base.DEC) +f.padding = ProtoField.uint16("pwospf.padding", "Padding", base.HEX) + +f.sequnce = ProtoField.uint16("pwospf.sequnce", "Sequence", base.DEC) +f.ttl = ProtoField.uint16("pwospf.ttl", "TTL", base.DEC) +f.numadvertisements = ProtoField.uint16("pwospf.numadvertisements", "# advertisements", base.DEC) + +f.lsusubnet = ProtoField.ipv4("pwospf.lsusubnet", "Subnet") +f.lsumask = ProtoField.ipv4("pwospf.lsumask", "Mask") +f.lsurouterid = ProtoField.ipv4("pwospf.lsurouterid", "Router ID") +f.lsumetric = ProtoField.uint32("pwospf.lsumetric", "Metric") + +function p_pwospf.dissector(buffer, pinfo, tree) + if buffer:len() == 0 then + return + end + + subtree = tree:add(p_pwospf, buffer(0)) + subtree:add(f.ver, buffer(0, 1)) + subtree:add(f.tp, buffer(1, 1)) + subtree:add(f.length, buffer(2, 2)) + subtree:add(f.routerid, buffer(4, 4)) + subtree:add(f.areaid, buffer(8, 4)) + subtree:add(f.checksum, buffer(12, 2)) + subtree:add(f.authtype, buffer(14, 2)) + subtree:add(f.authentication, buffer(16, 8)) + + local tp = buffer(1, 1):uint() + + if tp == 1 then + subtree:add(f.netmask, buffer(24, 4)) + subtree:add(f.helloint, buffer(28, 2)) + subtree:add(f.padding, buffer(30, 2)) + pinfo.cols.protocol = "PWOSPF (Hello)" + elseif tp == 4 then + subtree:add(f.sequnce, buffer(24, 2)) + subtree:add(f.ttl, buffer(26, 2)) + subtree:add(f.numadvertisements, buffer(28, 4)) + + local numadvertisements = buffer(28, 4):uint() + + local i = 0 + + while i < numadvertisements do + local subtree2 = subtree:add('Link state advertisement ' .. i) + subtree2:add(f.lsusubnet, buffer(32 + i * 16, 4)) + subtree2:add(f.lsumask, buffer(36 + i * 16, 4)) + subtree2:add(f.lsurouterid, buffer(40 + i * 16, 4)) + subtree2:add(f.lsumetric, buffer(44 + i * 16, 4)) + + i = i + 1 + end + + pinfo.cols.protocol = "PWOSPF (LSU)" + else + pinfo.cols.protocol = p_pwospf.name + + end + + pinfo.cols.info = "" + +end + +function p_pwospf.init() +end + +local ip_dissector_table = DissectorTable.get("ip.proto") +ip_dissector_table:add(89, p_pwospf) diff --git a/app/pwospf/testpwospf.cpp b/app/pwospf/testpwospf.cpp new file mode 100644 index 000000000..12dc8174e --- /dev/null +++ b/app/pwospf/testpwospf.cpp @@ -0,0 +1,421 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "PWOSPFAssignment.hpp" + +#define RANDOM_SEED_DEFAULT 1614233283 +constexpr size_t routing_run_time = 3000; + +using namespace E; + +template class RouteTesting : public ::testing::Test { +protected: + void setup_env() { + + int seed = RANDOM_SEED_DEFAULT; + + const char *random_seed = std::getenv("RANDOM_SEED"); + if (random_seed) { + seed = atoi(random_seed); + } + srand(seed); + RecordProperty("random_seed", seed); + printf("[RANDOM_SEED : %d]\n", seed); + } + + NetworkSystem netSystem; + std::array, N> routers; + + size_t next_mac_id; + size_t next_network_id; + + std::vector> switches; + + RouteTesting() { + next_mac_id = 1; + next_network_id = 1; + } + + mac_t mac_addr(size_t mac_id) { + mac_t mac{0xBC, 0, 0, 0, 0, 0}; + size_t i = 5; + while (mac_id > 0 && i > 0) { + mac[i] = mac_id % 0x100; + i -= 1; + mac_id /= 0x100; + } + assert(mac_id == 0); + return mac; + } + + ipv4_t network_addr(size_t network_id) { + ipv4_t network{10, 0, 0, 0}; + size_t i = 2; + while (network_id > 0 && i > 0) { + network[i] = network_id % 256; + i -= 1; + network_id /= 256; + } + assert(network_id == 0); + return network; + } + + bool intialized = false; + void + setupGraph(const std::vector> &graph) { + assert(!intialized); + intialized = true; + + // Install Routers + for (size_t i = 0; i < N; ++i) { + routers[i] = + netSystem.addModule("Router" + std::to_string(i), netSystem); + } + + // Connect Routers + for (auto &edge : graph) { + + size_t network_id = next_network_id++; + ipv4_t network = network_addr(network_id); + + auto sw = netSystem.addModule( + "Switch" + std::to_string(network_id), netSystem); + + size_t i = std::get<0>(edge); + size_t j = std::get<1>(edge); + size_t cost = std::get<2>(edge); + + size_t bps = CostLCM / cost; + + auto ports_i = netSystem.addWire(*routers[i], *sw, 1000000, bps).second; + auto ports_j = netSystem.addWire(*routers[j], *sw, 1000000, bps).second; + + size_t i_mac_id = next_mac_id++; + size_t j_mac_id = next_mac_id++; + + mac_t i_mac = mac_addr(i_mac_id); + mac_t j_mac = mac_addr(j_mac_id); + + ipv4_t i_ipv4 = network; + i_ipv4[3] = 1; + ipv4_t j_ipv4 = network; + j_ipv4[3] = 2; + + int i_port = ports_i.first; + int j_port = ports_j.first; + + routers[i]->setMACAddr(i_mac, i_port); + routers[i]->setARPTable(j_mac, j_ipv4); + routers[i]->setIPAddr(i_ipv4, i_port); + routers[i]->setRoutingTable(network, 24, i_port); + + routers[j]->setMACAddr(j_mac, j_port); + routers[j]->setARPTable(i_mac, i_ipv4); + routers[j]->setIPAddr(j_ipv4, j_port); + routers[j]->setRoutingTable(network, 24, j_port); + + sw->addMACEntry(ports_i.second, i_mac); + sw->addMACEntry(ports_j.second, j_mac); + + const ::testing::TestInfo *const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + std::string file_name(test_info->name()); + file_name.append("-Network"); + file_name.append(std::to_string(network_id)); + file_name.append(".pcap"); + + sw->enablePCAPLogging(file_name); + + switches.push_back(sw); + } + + // Intialize Routers + for (size_t i = 0; i < N; ++i) { + Host &router = *routers[i]; + router.addHostModule(router); + router.addHostModule(router); + router.addHostModule(router); + router.initializeHostModule("OSPF"); + } + } + + void doTesting( + const std::vector> &test_vectors) { + for (auto &vec : test_vectors) { + size_t router_i = std::get<0>(vec); + size_t router_j = std::get<1>(vec); + size_t cost = std::get<2>(vec); + { + size_t port_num = 0; + ipv4_t ip = routers[router_i]->getIPAddr(port_num).value(); + size_t cost_ret = std::any_cast( + routers[router_j]->diagnoseHostModule("OSPF", ip)); + EXPECT_EQ(cost_ret, cost); + } + + { + size_t port_num = 0; + ipv4_t ip = routers[router_j]->getIPAddr(port_num).value(); + size_t cost_ret = std::any_cast( + routers[router_i]->diagnoseHostModule("OSPF", ip)); + EXPECT_EQ(cost_ret, cost); + } + } + } + + void cleanUpGraph() { + for (size_t i = 0; i < N; ++i) { + routers[i]->cleanUp(); + routers[i]->finalizeHostModule("OSPF"); + } + } + + virtual void TearDown() {} +}; + +class RoutingEnvOSPFTwoNodes : public RouteTesting<2> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = {{0, 1, 1}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = {{0, 1, 1}}; + doTesting(test_vector); + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPFCustomTwoNodes : public RouteTesting<2> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = {{0, 1, 10}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = {{0, 1, 10}}; + doTesting(test_vector); + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPF1 : public RouteTesting<4> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 1}, {0, 2, 1}, {0, 3, 1}, {1, 2, 1}, {2, 3, 1}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 1}, {0, 3, 1}, {1, 2, 1}, {1, 3, 2}, {2, 3, 1}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPFCustom1 : public RouteTesting<4> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 1}, {0, 2, 3}, {0, 3, 7}, {1, 2, 1}, {2, 3, 2}}; + + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 2}, {0, 3, 4}, {1, 2, 1}, {1, 3, 3}, {2, 3, 2}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPF2 : public RouteTesting<7> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 1}, {0, 2, 1}, {0, 5, 1}, {1, 2, 1}, {1, 3, 1}, {2, 3, 1}, + {2, 4, 1}, {2, 5, 1}, {3, 4, 1}, {4, 5, 1}, {4, 6, 1}, {5, 6, 1}}; + + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 1}, {0, 3, 2}, {0, 4, 2}, {0, 5, 1}, {0, 6, 2}, + {1, 2, 1}, {1, 3, 1}, {1, 4, 2}, {1, 5, 2}, {1, 6, 3}, {2, 3, 1}, + {2, 4, 1}, {2, 5, 1}, {2, 6, 2}, {3, 4, 1}, {3, 5, 2}, {3, 6, 2}, + {4, 5, 1}, {4, 6, 1}, {5, 6, 1}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; +class RoutingEnvOSPFCustom2 : public RouteTesting<7> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 2}, {0, 2, 4}, {0, 5, 7}, {1, 2, 3}, {1, 3, 3}, {2, 3, 4}, + {2, 4, 3}, {2, 5, 8}, {3, 4, 6}, {4, 5, 6}, {4, 6, 8}, {5, 6, 12}}; + + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 2}, {0, 2, 4}, {0, 3, 5}, {0, 4, 7}, {0, 5, 7}, {0, 6, 15}, + {1, 2, 3}, {1, 3, 3}, {1, 4, 6}, {1, 5, 9}, {1, 6, 14}, {2, 3, 4}, + {2, 4, 3}, {2, 5, 8}, {2, 6, 11}, {3, 4, 6}, {3, 5, 12}, {3, 6, 14}, + {4, 5, 6}, {4, 6, 8}, {5, 6, 12}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPF3 : public RouteTesting<5> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 1}, {0, 3, 1}, {1, 2, 1}, {1, 4, 1}, {2, 3, 1}, {2, 4, 1}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 2}, {0, 3, 1}, {0, 4, 2}, {1, 2, 1}, + {1, 3, 2}, {1, 4, 1}, {2, 3, 1}, {2, 4, 1}, {3, 4, 2}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; +class RoutingEnvOSPFCustom3 : public RouteTesting<5> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 1}, {0, 3, 2}, {1, 2, 3}, {1, 4, 6}, {2, 3, 3}, {2, 4, 2}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 4}, {0, 3, 2}, {0, 4, 6}, {1, 2, 3}, + {1, 3, 3}, {1, 4, 5}, {2, 3, 3}, {2, 4, 2}, {3, 4, 5}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +class RoutingEnvOSPF4 : public RouteTesting<9> { +protected: + virtual void SetUp() { + setup_env(); + + std::vector> graph = { + {0, 1, 1}, {0, 3, 1}, {1, 2, 1}, {1, 4, 1}, {3, 4, 1}, {3, 6, 1}, + {4, 5, 1}, {4, 7, 1}, {5, 8, 1}, {6, 7, 1}, {7, 8, 1}}; + + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 1}, {0, 2, 2}, {0, 3, 1}, {0, 4, 2}, {0, 5, 3}, {0, 6, 2}, + {0, 7, 3}, {0, 8, 4}, {1, 2, 1}, {1, 3, 2}, {1, 4, 1}, {1, 5, 2}, + {1, 6, 3}, {1, 7, 2}, {1, 8, 3}, {2, 3, 3}, {2, 4, 2}, {2, 5, 3}, + {2, 6, 4}, {2, 7, 3}, {2, 8, 4}, {3, 4, 1}, {3, 5, 2}, {3, 6, 1}, + {3, 7, 2}, {3, 8, 3}, {4, 5, 1}, {4, 6, 2}, {4, 7, 1}, {4, 8, 2}, + {5, 6, 3}, {5, 7, 2}, {5, 8, 1}, {6, 7, 1}, {6, 8, 2}, {7, 8, 1}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; +class RoutingEnvOSPFCustom4 : public RouteTesting<9> { +protected: + virtual void SetUp() { + setup_env(); + std::vector> graph = { + {0, 1, 8}, {0, 3, 1}, {1, 2, 1}, {1, 4, 1}, {3, 4, 1}, {3, 6, 1}, + {4, 5, 1}, {4, 7, 1}, {5, 8, 1}, {6, 7, 1}, {7, 8, 1}}; + setupGraph(graph); + } + void runTest() { + netSystem.run(TimeUtil::makeTime(routing_run_time, TimeUtil::SEC)); + + std::vector> test_vector = { + {0, 1, 3}, {0, 2, 4}, {0, 3, 1}, {0, 4, 2}, {0, 5, 3}, {0, 6, 2}, + {0, 7, 3}, {0, 8, 4}, {1, 2, 1}, {1, 3, 2}, {1, 4, 1}, {1, 5, 2}, + {1, 6, 3}, {1, 7, 2}, {1, 8, 3}, {2, 3, 3}, {2, 4, 2}, {2, 5, 3}, + {2, 6, 4}, {2, 7, 3}, {2, 8, 4}, {3, 4, 1}, {3, 5, 2}, {3, 6, 1}, + {3, 7, 2}, {3, 8, 3}, {4, 5, 1}, {4, 6, 2}, {4, 7, 1}, {4, 8, 2}, + {5, 6, 3}, {5, 7, 2}, {5, 8, 1}, {6, 7, 1}, {6, 8, 2}, {7, 8, 1}}; + doTesting(test_vector); + + cleanUpGraph(); + netSystem.run(TimeUtil::makeTime(2000, TimeUtil::SEC)); + } +}; + +TEST_F(RoutingEnvOSPFTwoNodes, TestRoutingOSPFTwoNodes) { this->runTest(); } +TEST_F(RoutingEnvOSPFCustomTwoNodes, TestRoutingOSPFCustomTwoNodes) { + this->runTest(); +} +TEST_F(RoutingEnvOSPF1, TestRoutingOSPF1) { this->runTest(); } +TEST_F(RoutingEnvOSPFCustom1, TestRoutingOSPFCustom1) { this->runTest(); } +TEST_F(RoutingEnvOSPF2, TestRoutingOSPF2) { this->runTest(); } +TEST_F(RoutingEnvOSPFCustom2, TestRoutingOSPFCustom2) { this->runTest(); } +TEST_F(RoutingEnvOSPF3, TestRoutingOSPF3) { this->runTest(); } +TEST_F(RoutingEnvOSPFCustom3, TestRoutingOSPFCustom3) { this->runTest(); } +TEST_F(RoutingEnvOSPF4, TestRoutingOSPF4) { this->runTest(); } +TEST_F(RoutingEnvOSPFCustom4, TestRoutingOSPFCustom4) { this->runTest(); } diff --git a/app/rip/CMakeLists.txt b/app/rip/CMakeLists.txt new file mode 100644 index 000000000..6c4e163c1 --- /dev/null +++ b/app/rip/CMakeLists.txt @@ -0,0 +1,27 @@ +project(rip) + +# Build rip + +set(rip_SOURCES RIPAssignment.cpp RIPAssignment.hpp) +add_library(rip SHARED ${rip_SOURCES}) +target_link_libraries(rip PUBLIC e) + + +set(rip-targets rip) + +if (TARGET rip-ref) +list(APPEND rip-targets rip-ref) +endif() + + +foreach(rip-traget ${rip-targets}) + add_executable(${rip-traget}-all testrip.cpp) + target_link_libraries(${rip-traget}-all PUBLIC ${rip-traget} gtest_main) + if(${CMAKE_VERSION} VERSION_GREATER "3.15.0") + set_target_properties(${rip-traget}-all PROPERTIES XCODE_GENERATE_SCHEME ON) + set_target_properties(${rip-traget}-all PROPERTIES XCODE_SCHEME_ARGUMENTS + "--gtest_color=no") + set_target_properties(${rip-traget}-all PROPERTIES XCODE_SCHEME_ENVIRONMENT + "GTEST_COLOR=no") + endif() +endforeach() diff --git a/app/routing/RoutingAssignment.cpp b/app/rip/RIPAssignment.cpp similarity index 58% rename from app/routing/RoutingAssignment.cpp rename to app/rip/RIPAssignment.cpp index e37351b9e..0289e77c3 100644 --- a/app/routing/RoutingAssignment.cpp +++ b/app/rip/RIPAssignment.cpp @@ -1,5 +1,5 @@ /* - * E_RoutingAssignment.cpp + * E_RIPAssignment.cpp * */ @@ -10,19 +10,19 @@ #include #include -#include "RoutingAssignment.hpp" +#include "RIPAssignment.hpp" namespace E { -RoutingAssignment::RoutingAssignment(Host &host) +RIPAssignment::RIPAssignment(Host &host) : HostModule("UDP", host), RoutingInfoInterface(host), TimerModule("UDP", host) {} -RoutingAssignment::~RoutingAssignment() {} +RIPAssignment::~RIPAssignment() {} -void RoutingAssignment::initialize() {} +void RIPAssignment::initialize() {} -void RoutingAssignment::finalize() {} +void RIPAssignment::finalize() {} /** * @brief Query cost for a host @@ -30,19 +30,19 @@ void RoutingAssignment::finalize() {} * @param ipv4 querying host's IP address * @return cost or -1 for no found host */ -Size RoutingAssignment::ripQuery(const ipv4_t &ipv4) { +Size RIPAssignment::ripQuery(const ipv4_t &ipv4) { // Implement below return -1; } -void RoutingAssignment::packetArrived(std::string fromModule, Packet &&packet) { +void RIPAssignment::packetArrived(std::string fromModule, Packet &&packet) { // Remove below (void)fromModule; (void)packet; } -void RoutingAssignment::timerCallback(std::any payload) { +void RIPAssignment::timerCallback(std::any payload) { // Remove below (void)payload; } diff --git a/app/routing/RoutingAssignment.hpp b/app/rip/RIPAssignment.hpp similarity index 85% rename from app/routing/RoutingAssignment.hpp rename to app/rip/RIPAssignment.hpp index 0e236c115..b1fdab8bc 100644 --- a/app/routing/RoutingAssignment.hpp +++ b/app/rip/RIPAssignment.hpp @@ -1,10 +1,10 @@ /* - * E_RoutingAssignment.hpp + * E_RIPAssignment.hpp * */ -#ifndef E_ROUTINGASSIGNMENT_HPP_ -#define E_ROUTINGASSIGNMENT_HPP_ +#ifndef E_RIPASSIGNMENT_HPP_ +#define E_RIPASSIGNMENT_HPP_ #include #include @@ -60,14 +60,14 @@ __attribute__((packed)); ; #endif -class RoutingAssignment : public HostModule, - private RoutingInfoInterface, - public TimerModule { +class RIPAssignment : public HostModule, + private RoutingInfoInterface, + public TimerModule { private: virtual void timerCallback(std::any payload) final; public: - RoutingAssignment(Host &host); + RIPAssignment(Host &host); /** * @brief Query cost for a host @@ -90,7 +90,7 @@ class RoutingAssignment : public HostModule, virtual void initialize(); virtual void finalize(); - virtual ~RoutingAssignment(); + virtual ~RIPAssignment(); protected: virtual std::any diagnose(std::any param) final { @@ -102,4 +102,4 @@ class RoutingAssignment : public HostModule, } // namespace E -#endif /* E_ROUTINGASSIGNMENT_HPP_ */ +#endif /* E_RIPASSIGNMENT_HPP_ */ diff --git a/app/routing/testrouting.cpp b/app/rip/testrip.cpp similarity index 99% rename from app/routing/testrouting.cpp rename to app/rip/testrip.cpp index 0d5d36440..e4924c9be 100644 --- a/app/routing/testrouting.cpp +++ b/app/rip/testrip.cpp @@ -17,7 +17,7 @@ #include -#include "RoutingAssignment.hpp" +#include "RIPAssignment.hpp" #define RANDOM_SEED_DEFAULT 1614233283 constexpr size_t routing_run_time = 3000; @@ -150,7 +150,7 @@ template class RouteTesting : public ::testing::Test { Host &router = *routers[i]; router.addHostModule(router); router.addHostModule(router); - router.addHostModule(router); + router.addHostModule(router); router.initializeHostModule("UDP"); } } diff --git a/app/routing/CMakeLists.txt b/app/routing/CMakeLists.txt deleted file mode 100644 index 6ec655d20..000000000 --- a/app/routing/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -project(routing) - -# Build routing - -set(routing_SOURCES RoutingAssignment.cpp RoutingAssignment.hpp) -add_library(routing SHARED ${routing_SOURCES}) -target_link_libraries(routing PUBLIC e) - - -set(routing-targets routing) - -if (TARGET routing-ref) -list(APPEND routing-targets routing-ref) -endif() - - -foreach(routing-traget ${routing-targets}) - add_executable(${routing-traget}-all testrouting.cpp) - target_link_libraries(${routing-traget}-all PUBLIC ${routing-traget} gtest_main) - if(${CMAKE_VERSION} VERSION_GREATER "3.15.0") - set_target_properties(${routing-traget}-all PROPERTIES XCODE_GENERATE_SCHEME ON) - set_target_properties(${routing-traget}-all PROPERTIES XCODE_SCHEME_ARGUMENTS - "--gtest_color=no") - set_target_properties(${routing-traget}-all PROPERTIES XCODE_SCHEME_ENVIRONMENT - "GTEST_COLOR=no") - endif() -endforeach() diff --git a/include/E/E_System.hpp b/include/E/E_System.hpp index e3745f0d7..c47a2fbf2 100644 --- a/include/E/E_System.hpp +++ b/include/E/E_System.hpp @@ -68,6 +68,7 @@ class System : private Log { timerQueue; std::unordered_map activeTimer; std::unordered_set activeUUID; + UUID currentUUID = 0; UUID allocateUUID(); bool deallocateUUID(UUID uuid); diff --git a/include/E/Networking/E_Packet.hpp b/include/E/Networking/E_Packet.hpp index 955250e0f..064ccff1a 100644 --- a/include/E/Networking/E_Packet.hpp +++ b/include/E/Networking/E_Packet.hpp @@ -23,10 +23,8 @@ class NetworkSystem; */ class Packet : public Module::MessageBase { private: - Packet(UUID uuid, size_t maxSize); + Packet(UUID uuid, size_t size); std::vector buffer; - size_t bufferSize; - size_t dataSize; UUID packetID; @@ -61,9 +59,9 @@ class Packet : public Module::MessageBase { Packet &operator=(Packet &&other) noexcept; /** - * @param maxSize Maximum packet size. + * @param size Packet size. */ - Packet(size_t maxSize); + Packet(size_t size); ~Packet() override; @@ -92,7 +90,7 @@ class Packet : public Module::MessageBase { /** * @brief Change the size of this Packet - * The size cannot be larger than the internal buffer. + * The size can be larger than the internal buffer. * @param size New size. * @return Actual changed size. */ @@ -103,6 +101,11 @@ class Packet : public Module::MessageBase { */ size_t getSize() const; + /** + * @return Packet UUID. + */ + UUID getUUID() const; + void clearContext(); friend class NetworkSystem; diff --git a/include/E/Networking/TCP/E_CCModule.hpp b/include/E/Networking/TCP/E_CCModule.hpp deleted file mode 100644 index e3fbb4d46..000000000 --- a/include/E/Networking/TCP/E_CCModule.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef E_CCModule_HPP_ -#define E_CCModule_HPP_ - -#include - -namespace E { - -constexpr int TCP_MSS = 512; - - -class CCModule { -public: - virtual int packetSent(Packet &&packet) { return TCP_MSS; } - virtual int packetArrived(Packet &&packet) { return TCP_MSS; } - virtual int packetTimeout(Packet &&packet) { return TCP_MSS; } -}; - -} // namespace E -#endif \ No newline at end of file diff --git a/src/E/E_System.cpp b/src/E/E_System.cpp index 9b90c67e4..54037cbab 100644 --- a/src/E/E_System.cpp +++ b/src/E/E_System.cpp @@ -43,16 +43,14 @@ UUID System::sendMessage(const ModuleID from, const ModuleID to, return uuid; } UUID System::allocateUUID() { - UUID startID = currentID; - do { - UUID candidate = currentID++; - if (activeUUID.find(candidate) == activeUUID.end()) { - activeUUID.insert(candidate); - return candidate; - } - } while (startID != currentID); - assert(0); - return 0; + + UUID candidate = ++currentUUID; + if (activeUUID.find(candidate) == activeUUID.end()) { + activeUUID.insert(candidate); + return candidate; + } else { + assert(0); + } } bool System::deallocateUUID(UUID candidate) { diff --git a/src/Networking/E_Packet.cpp b/src/Networking/E_Packet.cpp index 169ecf86b..c9efa5859 100644 --- a/src/Networking/E_Packet.cpp +++ b/src/Networking/E_Packet.cpp @@ -27,53 +27,45 @@ UUID Packet::allocatePacketUUID() { } void Packet::freePacketUUID(UUID uuid) { packetUUIDSet.erase(uuid); } -Packet::Packet(UUID uuid, size_t maxSize) - : buffer(maxSize), bufferSize(maxSize), dataSize(maxSize), packetID(uuid) { +Packet::Packet(UUID uuid, size_t size) : buffer(size), packetID(uuid) { std::fill(this->buffer.begin(), this->buffer.end(), 0); } Packet::Packet(const Packet &other) - : buffer(other.buffer), bufferSize(other.bufferSize), - dataSize(other.dataSize), packetID(other.packetID) {} + : buffer(other.buffer), packetID(other.packetID) {} Packet::Packet(Packet &&other) noexcept - : buffer(std::move(other.buffer)), bufferSize(other.bufferSize), - dataSize(other.dataSize), packetID(other.packetID) { - other.dataSize = 0; + : buffer(std::move(other.buffer)), packetID(other.packetID) { + other.buffer.clear(); } Packet &Packet::operator=(const Packet &other) { buffer = other.buffer; - bufferSize = other.bufferSize; - dataSize = other.dataSize; packetID = other.packetID; return *this; } Packet &Packet::operator=(Packet &&other) noexcept { buffer = std::move(other.buffer); - bufferSize = std::move(other.bufferSize); - dataSize = std::move(other.dataSize); packetID = std::move(other.packetID); return *this; } -Packet::Packet(size_t maxSize) : Packet(allocatePacketUUID(), maxSize) {} +Packet::Packet(size_t size) : Packet(allocatePacketUUID(), size) {} Packet::~Packet() { freePacketUUID(this->packetID); } Packet Packet::clone() const { - Packet pkt(this->bufferSize); - pkt.setSize(this->dataSize); + Packet pkt(this->buffer.size()); pkt.buffer = this->buffer; return pkt; } size_t Packet::writeData(size_t offset, const void *data, size_t length) { - size_t actual_offset = std::min(offset, dataSize); - size_t actual_write = std::min(length, dataSize - actual_offset); + size_t actual_offset = std::min(offset, buffer.size()); + size_t actual_write = std::min(length, buffer.size() - actual_offset); if (actual_write == 0) return 0; @@ -83,8 +75,8 @@ size_t Packet::writeData(size_t offset, const void *data, size_t length) { return actual_write; } size_t Packet::readData(size_t offset, void *data, size_t length) const { - size_t actual_offset = std::min(offset, dataSize); - size_t actual_read = std::min(length, dataSize - actual_offset); + size_t actual_offset = std::min(offset, buffer.size()); + size_t actual_read = std::min(length, buffer.size() - actual_offset); if (actual_read == 0) return 0; @@ -94,10 +86,12 @@ size_t Packet::readData(size_t offset, void *data, size_t length) const { return actual_read; } size_t Packet::setSize(size_t size) { - this->dataSize = std::min(size, this->bufferSize); - return this->dataSize; + buffer.resize(size); + return buffer.size(); } -size_t Packet::getSize() const { return this->dataSize; } +size_t Packet::getSize() const { return buffer.size(); } + +UUID Packet::getUUID() const { return this->packetID; } void Packet::clearContext() {} diff --git a/src/Networking/Ethernet/E_Ethernet.cpp b/src/Networking/Ethernet/E_Ethernet.cpp index 0bcdf8eeb..07737d2a7 100644 --- a/src/Networking/Ethernet/E_Ethernet.cpp +++ b/src/Networking/Ethernet/E_Ethernet.cpp @@ -12,6 +12,12 @@ namespace E { +static const std::set ip_broadcasts = {{ + {255, 255, 255, 255}, // IP broadcast + {224, 0, 0, 5}, // OSPF multicast (AllSPFRouters) + {224, 0, 0, 6}, // OSPF multicast (AllDRouters) +}}; + Ethernet::Ethernet(Host &host) : HostModule("Ethernet", host), RoutingInfoInterface(host) {} Ethernet::~Ethernet() {} @@ -37,20 +43,39 @@ void Ethernet::packetArrived(std::string fromModule, Packet &&packet) { ipv4_t dst_ip; packet.readData(30, dst_ip.data(), 4); - constexpr ipv4_t ip_broadcast = {255, 255, 255, 255}; constexpr mac_t mac_broadcast = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - if (dst_ip == ip_broadcast) { - // TODO: general IP broadcast + if (ip_broadcasts.find(dst_ip) != ip_broadcasts.end()) { ipv4_t src_ip; packet.readData(26, src_ip.data(), 4); int port = this->getRoutingTable(src_ip); auto src = this->getMACAddr(port); + + if (!src.has_value()) { + printf("Unrecognized port: %d. Packet[%ld] is dropped.\n", port, + packet.getUUID()); + return; + } + packet.writeData(0, mac_broadcast.data(), 6); packet.writeData(6, src.value().data(), 6); } else { int port = this->getRoutingTable(dst_ip); auto src = this->getMACAddr(port); auto dst = this->getARPTable(dst_ip); + + if (!src.has_value()) { + printf("Unrecognized port: %d. Packet[%ld] is dropped.\n", port, + packet.getUUID()); + return; + } + + if (!dst.has_value()) { + printf( + "Destination unreachable: %d.%d.%d.%d. Packet[%ld] is dropped.\n", + dst_ip[0], dst_ip[1], dst_ip[2], dst_ip[3], packet.getUUID()); + return; + } + packet.writeData(0, dst.value().data(), 6); packet.writeData(6, src.value().data(), 6); } diff --git a/src/Networking/IPv4/E_IPv4.cpp b/src/Networking/IPv4/E_IPv4.cpp index 47ec86b89..4345676e0 100644 --- a/src/Networking/IPv4/E_IPv4.cpp +++ b/src/Networking/IPv4/E_IPv4.cpp @@ -50,10 +50,14 @@ void IPv4::packetArrived(std::string fromModule, Packet &&packet) { } else if (protocol == 0x11) // UDP { this->sendPacket("UDP", std::move(packet)); + } else if (protocol == 0x59) // OSPF + { + this->sendPacket("OSPF", std::move(packet)); } else { // Not TCP/UDP } - } else if (fromModule.compare("TCP") == 0 || fromModule.compare("UDP") == 0) { + } else if (fromModule.compare("TCP") == 0 || fromModule.compare("UDP") == 0 || + fromModule.compare("OSPF") == 0) { uint8_t proto = 0; size_t ip_start = 14; if (fromModule.compare("TCP") == 0) { @@ -62,6 +66,9 @@ void IPv4::packetArrived(std::string fromModule, Packet &&packet) { if (fromModule.compare("UDP") == 0) { proto = 0x11; } + if (fromModule.compare("OSPF") == 0) { + proto = 0x59; + } uint8_t buf; {