In this assignment you will write a program that does simplified BGP route advertising. Your program will take four command-line arguments:
It will first read the routes from the routing table file. Then, it will listen on the specified TCP port and accept connections from BGP peers. When a peer connects, it will send BGP UPDATE messages to the new peer, advertising the routes currently in the routing table.
Additionally, it will periodically check the modification time of the routing table file and if it detects that it has changed, it will re-read it and
send BGP UPDATEs reflecting the changes to all connected peers. This functionality is described in more detail below.
1. Routing table file
The file format will be very similar to the one in assignment 2, except that the nexthop value will be an actual IP address. That is, the format will be:
where all three values are in IPv4 dotted decimal and are seperated by spaces. Example:
112.23.56.0 255.255.255.0 1.2.3.4
Note that the nexthop address is from the point of view of routers outside of your AS. Another difference from the previous assignment is that the routing table may change after your program has started and you need to be able to detect changes. The simplest way to do that is to periodically check the file modification time and compare it against a previously stored modification time. If the time changes, that means that the file has been changed and you should re-read it and send an update to the currently connected peers.
To check a file's modification time you can use "os.path.getmtime()" (after importing the "os" module). You can check the time every 10 seconds (or less for testing) and you should only re-read the file if the time has changed.
2. Communication with BGP peers
When a new client connects to your server, you should first send a BGP OPEN message with your AS number and BGP ID and no parameters (see next section for more details on the message format). You should also try to read a BGP OPEN message from the newly connected peer. If the message you read is invalid (e.g. does not start with marker = 16 FF's or the type field is not set to 1 or the length is incorrect for a BGP OPEN with no parameters) you should print a warning and disconnect the client. If the remote peer's AS or ID is the same as yours, you should also print a warning and disconnect the client.
After the connection has been established an you have exchanged OPEN messages, you should send a BGP UPDATE messages to the peer, advertising all of the routes currently in your routing table.
Attachment:- Assignment.pdf