OSPF HEADER OSPF HEADER for this project
Version (1 byte) Pkt type (1 byte) 2 Type
Length of Pkt (2 bytes) don’t care
Source Router ID (4 bytes) IP:PORT (8 bytes!!)
Area ID (4 bytes) don’t care
Checksum (2 bytes) don’t care
Authentication type (2 bytes) don’t care
Authentication data (8 bytes) Don’t care
Type = 1 -> HELLO
Type = 3 -> link state request
Types we will use Type = 4 -> link state update
Type = 5 -> link state ACK
OSPF Header with OSPF Header with
Type = 1 (HELLO) Type = 1 (HELLO)
Network Mask (4 bytes) Don’t care (4 bytes)
Hello Interval (2 bytes) 10 (2 bytes)
standard Neighbors are the
options priority this project Don’t care
Ids (IP:Port) that
Dead interval (4 bytes) 40 (4 bytes) have been send a
HELLO since the
Designated router Don’t care
(4 bytes) (4 bytes)
in the previous 40
Backup designated router Don’t care
(4 bytes) (4 bytes) interval).
1st recent neighbor ID 1st Neighbor ID
(4 bytes) (8 bytes) Put the senders ID
last as a delimiter.
last recent neighbor ID SENDER ID
(4 bytes) (8 bytes)
Every hello interval (10 sec) you must send out a hello to ALL neighbors.
The HELLOs are even sent across links that seem to be down.
During initialization, a HELLO is sent to all neighbors.
If a HELLO is received and 1. The receiving node is listed in the recent
neighbors list and 2. the sending node’s BIDIRECTIONAL flag is zero, then
set it to one and send immediately respond with a HELLO, with, of course,
the node that just sent the HELLO on the recent neighbors list.
If a HELLO is received and the receiving node is not listed in the recent
neighbors list, then immediately respond with a HELLO, with, of course, the
node that just sent the HELLO on the recent neighbors list.
Whenever a HELLO is received, set the sending node’s
LAST_HELLO_TIME to the current time.
The Link State Update packet
OSPF Header with LSA Age
Type = 4 (update) options LS type
Number of LSAs Link State ID
LSA1 LSA Header
LS Sequence Number
router type 0
Number of Links
Link 1 6 bytes
Link type TOS
The Link State Update Packet for Project
Link State ID
OSPF Header with
Type = 4 (update)
Number of LSAs LSA Header
LS Sequence Number
LSA1 don’t care
LSA2 Number of Links
Link 1 6 bytes
Link type TOS
This is not according to the OSPF standard.
It will generate more control traffic than the standard, and will not work in all
situations. But, it is simpler to program and will suffice for this project.
When a link switches to bidirectional, a full database exchange should take place.
Suppose that node A has switched its bidirectional flag to node B to one,
then node A initializes a database exchange:
•Node A sends an OSPF link state request packet to node B.
•Node B responds by all its LSA’s in one packet.
•If A does not get a LSA from B within 2 seconds, A resends an OSPF link state request packet to node B until either it
gets an LSA or the link is no longer BIDIRECTIONAL.
•When A receives the LSA database, it responds with a link state ACK packet.
•If B fails to get a link state ACK within 2 seconds, B retransmits the LSA database. (Remember to not miss sending and
receiving HELLO messages while sending a database).
•B continues to retransmit the LSA database until the link is no longer BIDIRECTIONAL or the entire database has been
Note, since both ends will switch the link to bidirectional, both ends will initiate a database exchange
Reception of link state update
A link state update is made up of one or more LSAs
When an link state update arrives, send a link state ACK to sending node (not quite the standard).
•For each in the LSA in the update
•if the sequence number is larger than the sequence number in the current
•If the Link State ID of in the LSA is not the same as this node’s ID, then
•Update link state database
•Flood this LSA to all neighbor except the one that sent it.
•Generate a new LSA with sequence number equal to one plus the
sequence number in the arrived LSA.
•Flood this LSA to ALL neighbors.
•If the LSA sequence number is less than or equal to the one currently in the
database, then don’t do anything.
• When a packet is to be flooded, put it in the
• This list should contain the packet to be flooded,
the address to where it should be sent and the time
out, the next time it should be resent.
• Hint: Since you should check periodically if
packets need to be resent, you can initially put the
packet in the list with an expired time out.
• When you get an ACK, the packet should be
removed from the ToBeFlooded list.
wait for packet arrival
Initialize Send HELLOs (but don’t wait more than 2 sec)
receive LS update
receive LS ACK
Forward data packet receive LS request WaitingForUpdate
Clear entry on ToBeFlooded List
Reply to HELLO ? flag
Reply to HELLO does update
contains new LSAs?
update LSA database
Set Bidirectional Set
and compute new routing table flag
Request LS update
Set waiting for LS update from XXX flag0 Add to ToBeFlooded List
Any LS update request
need to be resent?
Send HELLOs if needed
Make new routing table
send ToBeFlooded list entries
Any overdue HELLOs?
yes Set compute new routing
Generate new LSA
Add to be flooded list
Clear LSA with MAXAGE yes Age LSA
and add ToBeFlooded list Any overdue LSA?