Professional Documents
Culture Documents
First
(FSPF)
Revision 0.1
Ezio Valdevit
ezio@brocade.com
(408)487-8110
Fabric Shortest Path First March 6, 2000
1. Introduction
FSPF, or Fabric Shortest Path First, is Brocade Communication’s path selection protocol for Fibre Channel Fab-
rics. FSPF Version 1 was released in March of 1997. In May of 1998 Version 2 was released. The two versions
are not interoperable.
This documents specifies message formats and protocols for FSPF Version 2. Version 1 is not addressed, since
there is no significant installed base of FSPF Version 1 Fabrics.
2. Protocol Overview
FSPF is a Link State path selection protocol, similar to OSPF, which is an Interior Gateway Protocol (IGP)
widely used in IP networks.
This protocol keeps track of the state of the links on all switches in the Fabric. It also associates a cost with each
link. The protocol computes paths from a switch to all the other switches in the fabric, by adding the cost of all
the links traversed by the path, and choosing the path that minimizes the cost. In order for the protocol to work,
the cost must be a positive integer number.
The collection of link states (including cost) of all the switches in a fabric constitutes the topology database.
• A Hello protocol, used to establish connectivity with a neighbor switch, to establish the identity of the neigh-
bor switch, and to exchange FSPF parameters and capabilities.
• A replicated topology database, with the protocols and mechanisms to keep the databases synchronized
across the fabric.
• A path computation algorithm.
• A routing table update.
The topology database synchronization in turn consists of two major components: an initial database synchroni-
zation, and an update mechanism. The initial database synchronization is used when a switch is booted, or when
an Inter Switch Link (ISL) comes up. The update mechanism is used in two circumstances:
• When there is a link state change, for example an ISL going down or coming up.
• On a periodic basis, to prevent switches from deleting topology information from the database.
The path computation algorithm can be any algorithm that yields a minimum cost path, as defined above. One
possible candidate is the Dijkstra’s algorithm, but this is not a requirement for interoperability.
The routing table update is not covered in this specification, since it is strictly implementation dependent. Differ-
ent switches can have different internal routing mechanisms, and still interoperate.
3. Addressing
A path selection protocol requires an addressing scheme to uniquely identify every switch in the Fabric. FSPF
supports the FC-SW addressing scheme, with a 24-bit Fibre Channel address subdivided in three parts, with 8
bits used as switch identifier. However, FSPF uses a 32-bit field as a switch identifier, so that other addressing
schemes could be supported as well in the future.
4. Message Format
The following paragraphs describes in detail the format of FSPF Version 2 messages. A message is a sequence of
one or more frames. Fields are defined in network order, which is Big Endian.
Three messages are defined: Hello (HLO), Link State Update (LSU) and Link State Acknowledgment (LSA).
The message formats are listed below. All the messages carry a Protocol Version field, to insure backward com-
patibility with future versions, and a command field to discriminate between messages
‘Reserved’ fields should be set to 0 by the sender. Undefined bits in bitmap fields should be set to 0 by the sender.
TABLE 1. Commands
Command Description
hex ‘14000000’ Hello
hex ‘15000000’ Link State Update
hex ‘16000000’ Link State Acknowledgment
Each FSPF message starts with a header. The header is common to all the messages, and includes a command
code (see Table 1)
Size
Bytes Item
4 Command Code
1 Version
1 Section ID
1 Authentication Type
1 Reserved
4 Originating Domain ID
8 Authentication
Section ID: Identifies a Section, that is a set of switches that share an identical topology database.
It is used for hierarchical routing. It should be set to 0 for a non-hierarchical fabric.
Authentication Type: The type of authentication to be used in the ‘Authentication’ field. It should be set to 0
for no authentication.
Originating Domain ID: The ID of the switch that transmitted the message.
Size
Bytes Item
20 FSPF Header
4 Options
4 Hello Interval
4 Dead Interval
4 Recipient Domain ID
4 Originating Port ID
Options: Bit map that indicates the options supported by the sending switch. An option is sup-
ported if the corresponding bit is set to 1. All other bits should be 0. Unicast routing is
supported by default, so it does not require an Option bit.
Hello Interval: The interval in seconds between two consecutive Hello messages that the sending
switch will transmit for the life of the adjacency.
Dead Interval: The maximum interval, in seconds, that the sending switch will wait for two consecu-
tive Hello messages from the neighbor switch, before declaring the adjacency down.
Recipient Domain ID: The ID of the switch that the Hello message is transmitted to.
Originating Port ID: The port ID that the Hello message is transmitted to.
Size
Bytes Item
20 FSPF Header
4 Flags
4 Number of Link State Records
Variable Link State Record #1
......
......
Variable Link State Record #n
Flags: Bit map that contains information required to synchronize the topology database.
DE bit = 0x1
DC bit = 0x2
The DE (Database Exchange) bit indicates that this LSU is used for initial database
synchronization, rather that an ongoing topology update.
The DC (Database Complete) bit indicates that this is the last sequence of the data-
base synchronization.
Number of LSRs: The number of Link State Records included in this message. The message may but
does not necessary include all the LSRs in the database.
Size
Bytes Item
20 FSPF Header
4 Flags
4 Number of Link State Record Headers
24 Link State Record Header #1
......
......
24 Link State Record Header #n
Flags: Match the flags in the LSU message that this Ack refers to. Acks to LSRs from the
initial database synchronization LSU cannot be carried in the same LSA as acks from
a flooded topology update.
Number of LSR Headers: The number of Link State Record Headers included in this message
The LSA message does not include the full LSR that is being acknowledged, but only the LSR Header.
The LSU message contains one or more Link State Records (LSR) that make up the topology database. In the
Database Exchange state, all the LSRs in the database are included in the LSU message(s). During the flooding
procedure, only LSR that have changed are included.
An LSR describes the connectivity of a switch, that is the complete list of its ISLs, and the cost associated with
sending a data frame over each ISL. A LSR begins with a Header, and includes one Link Descriptor for each ISL
on the switch.
Size
Bytes Item
1 Type
1 Reserved
2 Link State Record Age
4 Options
4 Link State ID
4 Advertising Domain ID
4 Link State Incarnation #
2 Checksum
2 LSR Length
Type: Type of this Link State Record. Currently defined types are:
TABLE 7. LS Types
LS type Description
1 Unicast Path Selection
LSR Age: Time in seconds since the record has been generated. Used to flush old records from
the distributed database.
Options: Options supported by the switch described by this LSR. This field should be 0 if no
options are supported.
Advertising Domain ID: Identifies the switch that issued the LSR.
Incarnation #: A number that is incremented by the originator of the Link State Record every time a
record is updated and flooded through the fabric. Used to detect duplicate and old
records.
TABLE 8. LSR
Size
Bytes Item
24 Link State Record Header
2 Reserved
2 Number of Links
16 Link Descriptor #1
......
......
16 Link Descriptor #n
Number of links: The number of links that are usable for routing frames. Note that a switch keeps a list of all its
ISLs, but only those ones that are in “Full” state are advertised in the LSR.
Size
Bytes Item
4 Link ID
4 Output Port
4 Neighbor Port
1 Link Type
1 Reserved
2 Cost
Link ID: Identifies the link. Set to the Domain_ID of neighbor switch.
Output Port: The Port ID connected to the link on the switch described by this LSR.
Neighbor port: The Port ID that the neighbor switch connects to, on the other side of the link.
Link Type: Describes the type of link. Point to point links have a Link Type of 1.
5. Protocol Behavior
TBD.