@@ -8,7 +8,7 @@ This repository stores the implementation of this protocol. The implementation i
- Linux machine
- Python3 (we have written all code to be compatible with at least Python v3.2)
- pip (to install all dependencies)
- pip (to install all dependencies)
# Installation
...
...
@@ -29,62 +29,116 @@ To interact with the protocol you need to execute the `pim-dm` command. You may
`pim-dm -COMMAND ARGUMENTS`
In order to determine which commands are available you can call the help command:
`pim-dm -h`
#### Start protocol process
or
In order to start the protocol you first need to explicitly start it. This will start a daemon process, which will be running in the background. The command is the following:
```
sudo pim-dm -start
```
`pim-dm --help`
In order to start the protocol you first need to explicitly start it. This will start a daemon process, which will be running in the background. The command is the following:
#### Add interface
`sudo pim-dm -start`
After starting the protocol process you can enable the protocol in specific interfaces. You need to specify which interfaces will have IGMP enabled and which interfaces will have PIM-DM enabled.
Then you can enable the protocol in specific interfaces. You need to specify which interfaces will have IGMP enabled and which interfaces will have the PIM-DM enabled.
To enable PIM-DM, without State-Refresh, in a given interface, you need to run the following command:
- To enable PIM-DM without State-Refresh, in a given interface, you need to run the following command:
`sudo pim-dm -ai INTERFACE_NAME`
```
sudo pim-dm -ai INTERFACE_NAME
```
To enable PIM-DM, with State-Refresh, in a given interface, you need to run the following command:
- To enable PIM-DM with State-Refresh, in a given interface, you need to run the following command:
`sudo pim-dm -aisf INTERFACE_NAME`
```
sudo pim-dm -aisf INTERFACE_NAME
```
To enable IGMP in a given interface, you need to run the following command:
-To enable IGMP in a given interface, you need to run the following command:
`sudo pim-dm -aiigmp INTERFACE_NAME`
```
sudo pim-dm -aiigmp INTERFACE_NAME
```
If you have previously enabled an interface without State-Refresh and want to enable it, in the same interface, you first need to disable this interface, and the run the command -aisr. The same happens when you want to disable State Refresh in a previously enabled StateRefresh interface.
If you have previously enabled PIM-DM on an interface without State-Refresh and want to enable it, you first need to disable this interface, and then run the command -aisr. The same happens when you want to disable State Refresh in a previously enabled StateRefresh interface.
#### Remove interface
To remove a previously added interface, you need run the following commands:
To remove a previously added PIM-DM interface:
`sudo pim-dm -ri INTERFACE_NAME`
To remove a previously added IGMP interface:
- To remove a previously added PIM-DM interface:
```
sudo pim-dm -ri INTERFACE_NAME
```
- To remove a previously added IGMP interface:
`sudo pim-dm -riigmp INTERFACE_NAME`
```
sudo pim-dm -riigmp INTERFACE_NAME
```
#### Stop protocol process
If you want to stop the protocol process, and stop the daemon process, you need to explicitly run this command:
`sudo pim-dm -stop`
```
sudo pim-dm -stop
```
## Commands for monitoring the protocol process
We have built some list commands that can be used to check the "internals" of the implementation.
- List neighbors:
Verify neighbors that have established a neighborhood relationship
`sudo pim-dm -ln`
- #### List neighbors
Verify neighbors that have established a neighborhood relationship.
```
sudo pim-dm -ln
```
-List state:
-#### List state
List all state machines and corresponding state of all trees that are being monitored. Also list IGMP state for each group being monitored.
`sudo pim-dm -ls`
- Multicast Routing Table:
List Linux Multicast Routing Table (equivalent to ip mroute -show)
`sudo pim-dm -mr`
```
sudo pim-dm -ls
```
- #### Multicast Routing Table
List Linux Multicast Routing Table (equivalent to `ip mroute -show`)
```
sudo pim-dm -mr
```
## Help command
In order to determine which commands and corresponding arguments are available you can call the help command:
```
pim-dm -h
```
or
```
pim-dm --help
```
## Change settings
Files tree/globals.py and igmp/igmp_globals.py store all timer values and some configurations regarding IGMP and the PIM-DM. If you want to tune the implementation, you can change the values of these files. These configurations are used by all interfaces, meaning that there is no tuning per interface.
## Tests
We have performed tests to our PIM-DM implementation. You can check on the corresponding branches:
-[Test_PIM_Hello](https://github.com/pedrofran12/pim_dm/tree/Test_PIM_Hello) - Topology used to test the establishment of adjacency between routers.
-[Test_PIM_BroadcastTree](https://github.com/pedrofran12/pim_dm/tree/Test_PIM_BroadcastTree) - Topology used to test our implementation regarding the creation and maintenance of the broadcast tree.
-[Test_PIM_Assert](https://github.com/pedrofran12/pim_dm/tree/Test_PIM_Assert) - Topology used to test the election of the AssertWinner.
-[Test_PIM_Join_Prune_Graft](https://github.com/pedrofran12/pim_dm/tree/Test_PIM_Join_Prune_Graft) - Topology used to test the Pruning and Grafting of the multicast distribution tree.
-[Test_PIM_StateRefresh](https://github.com/pedrofran12/pim_dm/tree/Test_PIM_StateRefresh) - Topology used to test PIM-DM State Refresh.
-[Test_IGMP](https://github.com/pedrofran12/hpim_dm/tree/Test_IGMP) - Topology used to test our IGMPv2 implementation.