<commit_before># SDN Launcher

In this work, we will utilize the SAVI testbed alongside a software 
defined switch (OpenVSwitch) to dynamically create network topologies 
specified by the user. Similar to mininet, the users will be able to 
specify the number of hosts and switches and specify how they want them 
to be connected. 

The goal is to create a layer 2 or a layer 3 network and linking up the 
nodes as defined by the user topology. For this purpose, we use SAVI TB
and VXLAN tunneling protocol to create arbitrary overlay networks. 

These overlay networks could be used in variety of applications from 
deploying a large scale OpenFlow network in order to test a SDN controller
and application to running a large scale distributed application on a 
desired topology.

## Usage

### Credentials
    
Make a copy of the config.py.example file and call it config.py..
Open the file and specify your savi username and password
        by changing the value of the variables **user** and **password**
        E.x. 
            **user = "your_username"**
            **password = "<PASSWORD>"**
Specify your **keypair name** and **private key path** by changing the 
        values of variables **private_key_file** and **key_name**.
Optionally, change the tenant and region name.
Save and close the file.

### Specifying Topology
    
    1. Modify the topology file.
    2. Specify the controller IP address and port number for the **cont_addr**
        variable as a colon separated string.
    3. Specify all the hosts and switches in the nodes dictionary.
        For the switch, specify the region, the flavor, the bridge name, the internal ip.
        For the host, specify the region and flavor.
        Additionally, the region and flavor fields can be left blank, 
        and the default values will be used. 

```python 
nodes = {}
nodes["sw1"] = {'contr_addr': contr_addr, 'region':'CORE', 'flavor': 'm1.small', 'bridge_name': 'sw1_br', 'int_ip':('p1', '192.168.200.18')}
nodes["sw2"] = {'contr_addr': contr_addr, 'region':'CORE', 'flavor': 'm1.small'}<commit_msg>changed formatting in readme file<commit_after># SDN Launcher

In this work, we will utilize the SAVI testbed alongside a software 
defined switch (OpenVSwitch) to dynamically create network topologies 
specified by the user. Similar to mininet, the users will be able to 
specify the number of hosts and switches and specify how they want them 
to be connected. 

The goal is to create a layer 2 or a layer 3 network and linking up the 
nodes as defined by the user topology. For this purpose, we use SAVI TB
and VXLAN tunneling protocol to create arbitrary overlay networks. 

These overlay networks could be used in variety of applications from 
deploying a large scale OpenFlow network in order to test a SDN controller
and application to running a large scale distributed application on a 
desired topology.

## Usage

### Credentials
    
Make a copy of the config.py.example file and call it config.py...


Open the file and specify your savi username and password
        by changing the value of the variables **user** and **password**
        E.x. 
            **user = "your_username"**
            **password = "<PASSWORD>"**


Specify your **keypair name** and **private key path** by changing the 
        values of variables **private_key_file** and **key_name**.


Optionally, change the tenant and region name.


Save and close the file.

### Specifying Topology
    
    1. Modify the topology file.
    2. Specify the controller IP address and port number for the **cont_addr**
        variable as a colon separated string.
    3. Specify all the hosts and switches in the nodes dictionary.
        For the switch, specify the region, the flavor, the bridge name, the internal ip.
        For the host, specify the region and flavor.
        Additionally, the region and flavor fields can be left blank, 
        and the default values will be used. 

```python 
nodes = {}
nodes["sw1"] = {'contr_addr': contr_addr, 'region':'CORE', 'flavor': 'm1.small', 'bridge_name': 'sw1_br', 'int_ip':('p1', '192.168.200.18')}
nodes["sw2"] = {'contr_addr': contr_addr, 'region':'CORE', 'flavor': 'm1.small'}
{'fraction_non_alphanumeric': 0.07882829245058347, 'fraction_numerical': 0.01047868540128602, 'mean_word_length': 3.5258620689655173, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1706752', 'n_tokens_mistral': 1181, 'n_tokens_neox': 1105, 'n_words': 581}