Submission Guidelines

Programming Assignment #3



Implementation Requirements

1- You should submit a tar file that contains the source code for your implementation.

2- Like the previous programs, you should submit a tar file. The tar file should include:

    1. Makefile that compiles your implementation. The executable file should be named "node"
    2. Source code of your implementation.
    3. The typescripts output of running your implementation. There should be one typescript per node (numbered typescript.1, ...) for the scenario given below.

The CSC cluster, i.e. on Alpha stations


Questions

1- What should I display?

There are two cases in which you are going to display information.
Case 1: Change of topology as a result of receiving a HELLO packet or LSP (Link State Packet)

Your code should display the information received in the following format:
Link (source, destination) is ON/OFF
Node <node-number is ALIVE/DEAD
Please refer to the scenario given later in this page.

Case 2: Change In Routing Table

Your code should display the routing table in the following format (this should be done each ROUTE_UPDATE_INTERVAL) :

Destination

GoTo

 

 

 

 

 

 


2- How are you going to run my program?

1. First, I'll untar the submitted file. Please don't create any directories.

2- Then, copy network.parameters, and network.config to the current directory. The first file will contain my parameters as defined in the assignment handout. The second file will contain the network topology I am going to use to test your code. I am going to use different topologies to test different cases.
You have to make sure that your code reads these files from the current directory.

3- Type "make". The name of the executable file should be node.
   There is no partial credit if your code does not compile successfully with no errors.

4- Run your program by typing "node node-number" where node number represents the number of the current running node. For example:

node fe90::0001


3- How do I submit my project?
You make a tar archive and then call a certain program from my directory called submit. The exact path is

~jh41701/BIN/submit

Finally to submit your program, type

submit 3 filename

There is only one filename which is the tar file.


4- How am I going to test your code?
Assume that your program has compiled with no errors and an executable file, node, has been successfully generated. Also assume that I am using the topology defined in network.config . Following is a simple scenario that I can use to test your code:
 

1- Open 4 windows each correspond to a certain node in the config file. All windows are running on tracy, of course.
2- Start node fe90::0002 by typing:

node fe90::0002

node fe90::0002

  • Create threads.
  • Send HELLO packet to all neighbors.
  • Continue normal operation.

No information is displayed on the screen so far.

3- Start node fe90::0003, in another window, by typing:

node fe90::0003

node fe90::0003

  • Create threads.
  • Send HELLO packet to all neighbors.
  • Continue normal operation.

node fe90::0002

  • Receives HELLO packet from node fe90::0003.
  • Record the link as operational & node fe90::0003 is alive.
  • Send HELLO_ACK to node fe90::0003.

The following information is displayed in the window running node fe90::0002:

 

Receiving HELLO Packet from node fe90::0003
Link (fe90::0002, fe90::0003) is ON
Node fe90::0003 is ALIVE

Destination

GoTo

fe90::0001

-

fe90::0003

fe90::0003

fe90::0004

-

node fe90::0003

  • Receives HELLO_ACK from node fe90::0002.

The following information is displayed in the window running node fe90::0003:

 

Receiving HELLO_ACK Packet from node fe90::0002
Link (fe90::0003, fe90::0002) is ON
Node fe90::0002 is ALIVE

Destination 

GoTo

fe90::0001 

-

fe90::0002 

fe90::0002

fe90::0004 

-

 

 

4- Start node fe90::0004, in another window, by typing:

node fe90::0004

node fe90::0004

  • Create threads.
  • Send HELLO packet to all neighbors.
  • Continue normal operation.

node fe90::0002

  • Receives HELLO packet from node fe90::0004.
  • Record the link as operational & node fe90::0004 is alive.
  • Send HELLO_ACK to node fe90::0004.

The following information is displayed in the window running node fe90::0002:

 

Receiving HELLO Packet from node fe90::0004
Link (fe90::0002, fe90::0004) is ON
Node fe90::0004 is ALIVE

Destination 

GoTo

fe90::0001 

-

fe90::0003 

fe90::0003

fe90::0004 

fe90::0004


 

node fe90::0003

  • Receives HELLO packet from node fe90::0004.
  • Record the link as operational & node fe90::0004 is alive.
  • Send HELLO_ACK to node fe90::0004.

The following information is displayed in the window running node fe90::0003:

 

Receiving HELLO_ACK Packet from node fe90::0004
Link (fe90::0003, fe90::0004) is ON
Node fe90::0004 is ALIVE

Destination 

GoTo

fe90::0001 

-

fe90::0002 

fe90::0002

fe90::0004 

fe90::0004


 

node fe90::0004

  • Receives HELLO_ACK from node fe90::0002 & node fe90::0003 (order is not determined).

The following information is displayed in the window running node fe90::0004

 

Receiving HELLO_ACK Packet from node fe90::0002
Link (fe90::0004, fe90::0002) is ON
Node fe90::0002 is ALIVE
Receiving HELLO_ACK Packet from node fe90::0003
Link (fe90::0004, fe90::0003) is ON
Node fe90::0003 is ALIVE

Destination 

GoTo

fe90::0001 

-

fe90::0002 

fe90::0002

fe90::0003 

fe90::0003


 

node fe90::0002

  • Receives an LSP (Link Sate Packet) from node fe90::0003.

The following information is displayed in the window running node fe90::0002

 

Receiving LSP from node fe90::0003
Link (fe90::0003, fe90::0004) is ON

(Note: routing table is not displayed since it does not change)

node fe90::0002

  • Receives an LSP (Link Sate Packet) from node fe90::0004.

The following information is displayed in the window running node fe90::0002

 

Receiving LSP from node fe90::0004
Link (fe90::0004, fe90::0003) is ON

(Note: routing table is not displayed since it does not change)

The order of displaying the above information is not important.

node fe90::0004

  • In a similar way, will update its topology.

The following information is displayed in the window running node fe90::0004

 

Receiving LSP from node fe90::0002
Link (fe90::0002, fe90::0003) is ON

Receiving LSP from node fe90::0003
Link (fe90::0003, fe90::0002) is ON

5- During the above operations, HELLO packets, and LSP (Link State Packets), are traveling inside the network between active nodes. However, no information is displayed at any node unless it represents something new.

6- Start node fe90::0001, in another window, by typing:

node fe90::0001

node fe90::0001

  • Create threads.
  • Send HELLO packet to all neighbors.
  • Continue normal operation.

node fe90::0002

  • Receives HELLO packet from node fe90::0001.
  • Record the link as operational & node fe90::0001 is alive.
  • Send HELLO_ACK to node fe90::0001 (Note that HELLO_ACK is sent regardless the link (fe90::0001, fe90::0002) is unidirectional or bi-directional).

The following information is displayed in the window running node fe90::0002

 

Receiving HELLO Packet from node fe90::0001
Node fe90::0001 is ALIVE

(Note: routing table is not displayed since it does not change)
 

node fe90::0001

  • Receives HELLO_ACK from node fe90::0002.

The following information is displayed in the window running node fe90::0001

 

Receiving HELLO_ACK Packet from node fe90::0002
Link (fe90::0001, fe90::0002) is ON
Node fe90::0002 is ALIVE

Destination 

GoTo

fe90::0002 

fe90::0002

fe90::0003 

-

fe90::0004 

-


 

node fe90::0002

  • Later on, will send LSP to all nodes, including node fe90::0001 regardless of the link is unidirectional.

node fe90::0001

  • Receives LSP from node fe90::0002

The following information is displayed in the window running node fe90::0001

 

Receiving LSP from node fe90::0003
Link (fe90::0002, fe90::0003) is ON
Link (fe90::0002, fe90::0004) is ON
Node fe90::0003 is ALIVE
Node fe90::0004 is ALIVE

Destination 

GoTo

fe90::0002 

fe90::0002

fe90::0003 

fe90::0002

fe90::0004 

fe90::0002


 

node fe90::0003

  • Receives LSP from node fe90::0002.

The following information is displayed in the window running node fe90::0003

 

Receiving LSP from node fe90::0002
Node fe90::0001 is ALIVE

(Note: routing table is not displayed since it does not change)
 

node fe90::0004

  • Receives LSP from node fe90::0002.

The following information is displayed in the window running node fe90::0004

 

Receiving LSP from node fe90::0002
Node fe90::0001 is ALIVE

(Note: routing table is not displayed since it does not change)
 

node fe90::0003/4

  • Later on, will send LSP to all nodes, including node fe90::0001 regardless of the link is unidirectional.

The following information is displayed in the window running node fe90::0001

 

Receiving LSP from node fe90::0003
Link (fe90::0003, fe90::0002) is ON
Receiving LSP from node fe90::0004
Link (fe90::0004, fe90::0002) is ON

(Note: routing table is not displayed since it does not change)

The order of the above communications is not important.


Grading Guidelines:
These are only guidelines to give you a hint about what I am going to test in your code. The points may be redistributed later during grading the assignment.
 

Proper submission: submitted a tar file containing the files specified above specially Makefile.

10

Timer Thread (timeouts are correct)

20

Displaying exact format and information as specified above and in the cases defined in the scenario.

10

Correct Dijkstra's Algorithm

10

HELLO & HELLO_ACK  (new alive nodes)

15

LSP implementation 

15

Receiving & Sending data

10

Handling Node Failure

10

Total points: 

100