switch_sim
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:
switch_sim
==========
This is a dumb L1 switch simulator, written in Python/Django.  It supports a few (most basic) L1 switch operations, such as
* listing the ports
* listing the port mappings
* map 2 ports
* unmap 2 ports
* clear all port mappings

It also has a few basic managment operations, such as 
* get a list of simulated switches
* for a particular switch, show me the details
* for a particular switch, add/delete a bunch of ports

---

### Installation
1.  clone a copy of the whole project form github: https://github.com/ahmay98/switch_sim
2.  modify the /src/switch_sim/settings.py, and update the sqlite DB's absolute path -- the path should be your /src/sqlite.db
3.  make sure you have python 2.7.x and django installed
4.  'cd' to your /src
5.  'python manage.py runserver'
5a.  btw, default port is 8000
6.  bring up a browser, and hit 'http://localhost:8000/sim'

---

### Operations
This is a complete REST WS interface...most of the operations will return some sort of JSON object as the response, (with one exception).

#### Swich List

http://localhost:8000/sim

No further HTTP request parameters needed.  This request will return a JSON object describing the 
* (switch) count
* a list of switch simulations


{
    "count": 1, 
    "switches": [
        {
            "description": "blah blah blah", 
            "id": 1, 
            "name": "MRV 1", 
            "port_count": 144, 
            "status": "online"
        }
    ]
}


---

#### Swtich Detail

http://localhost:8000/sim/\

\ -- switch ID one can read from the switch listing result

No additional HTTP request parameters needed.  This request will return a JSON object describing the details of a switch, including all the ports for this switch.


{
    "description": "blah blah blah", 
    "id": "1", 
    "name": "MRV 1", 
    "ports": [
        {
            "is_cabled": true, 
            "is_mapped": true, 
            "name": "1.1.1"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.2"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.3"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": true, 
            "name": "1.1.4"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.5"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.6"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.7"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.8"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.9"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.10"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.11"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.12"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.13"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.14"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.15"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.16"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.17"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.18"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.19"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.20"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.21"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.22"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.23"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.24"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.25"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.26"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.27"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.28"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.29"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.30"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.31"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.32"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.33"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.34"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.35"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.36"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.37"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.38"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.39"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.40"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.41"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.42"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.43"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.44"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.45"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.46"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.47"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.48"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.49"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.50"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.51"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.52"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.53"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.54"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.55"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.56"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.57"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.58"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.59"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.60"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.61"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.62"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.63"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.64"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.65"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.66"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.67"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.68"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.69"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.70"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.71"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.72"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.73"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.74"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.75"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.76"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.77"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.78"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.79"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.80"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.81"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.82"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.83"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.84"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.85"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.86"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.87"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.88"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.89"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.90"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.91"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.92"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.93"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.94"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.95"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.96"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.97"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.98"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.99"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.100"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.101"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.102"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.103"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.104"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.105"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.106"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.107"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.108"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.109"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.110"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.111"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.112"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.113"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.114"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.115"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.116"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.117"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.118"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.119"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.120"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.121"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.122"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.123"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.124"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.125"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.126"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.127"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.128"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.129"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.130"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.131"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.132"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.133"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.134"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.135"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.136"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.137"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.138"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.139"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.140"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.141"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.142"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.143"
        }, 
        {
            "is_cabled": true, 
            "is_mapped": false, 
            "name": "1.1.144"
        }
    ], 
    "status": "online"
}


---

#### Management interface -- Add Ports


http://localhost:8000/sim/1/addPorts?prefix=1.1&start=21&end=144


This operation adds a bunch of ports to the specified switch -- switch is identified by the \

##### HTTP Request Parameters
* prefix -- prefix to the port name
* start -- starting native port number
* end -- end native port number

##### HTTP Response

{
    "result": "done"
}


---

#### Management interface -- Delete Ports


http://localhost:8000/sim/1/deletePorts?prefix=1.1&start=100&end=144


This operation deletes a bunch of ports to the specified switch -- switch is identified by the \

##### HTTP Request Parameters
* prefix -- prefix to the port name
* start -- starting native port number
* end -- end native port number

##### HTTP Response

{
    "result": "done"
}


---

#### Get Port Status

Operation to get the port status on a named port (on a specified switch)


http://localhost:8000/sim/1/portStatus?port=1.1.2


##### HTTP Request Parameter
* port -- port name

##### HTTP Response

This is the only operation which does not return a JSON object, and it returns a simple string.

There are 2 options to the response --
* signalDetect -- the port is (supposedly) up and running, but no port mapping from the switch's point of view
* link -- the port is (again, supposedly) up and running, AND the port is currently mapped

---

#### Map 2 Ports


http://localhost:8000/sim/1/map?src=1.1.1&dest=1.1.4


Create a link between the 2 ports specified.

##### HTTP Request Parameter
* src -- source port name
* dest -- destination port name

##### HTTP Response

{
    "result": "done"
}


----

#### Unmap 2 Ports


http://localhost:8000/sim/1/unmap?src=1.1.3&dest=1.1.4


Clears the mapping between 2 specified ports.

##### HTTP Request Parameter
* src -- source port name
* dest -- destination port name

##### HTTP Response

{
    "result": "done"
}


---

#### List Port Mappings


http://localhost:8000/sim/1/listMappings


This operation lists all the port mappings for a said switch.

##### HTTT Response

[
    {
        "from": "1.1.1", 
        "to": "1.1.4"
    }
]


---

#### Clear Port Mappings


http://localhost:8000/sim/1/clearMapping


This operation clears all the port mappings of a specified switch.

##### HTTT Response

{
    "result": "done"
}



本源码包内暂不包含可直接显示的源代码文件,请下载源码包。