RYU REST API-編程示範

import urllib2  
import json  

def get_all_switches():  
    url = "http://127.0.0.1:8080/v1.0/topology/switches"  
    req = urllib2.Request(url)  
    res_data = urllib2.urlopen(req)  
    res = res_data.read()  
    res = json.loads(res)  
    return res  

def get_all_links():  
    url = "http://127.0.0.1:8080/v1.0/topology/links"  
    req = urllib2.Request(url)  
    res_data = urllib2.urlopen(req)  
    res = res_data.read()  
    res = json.loads(res)  
    return res  
def get_switch(dpid):  
    url = "http://127.0.0.1:8080/v1.0/topology/switches/" + dpid  
    req = urllib2.Request(url)  
    res_data = urllib2.urlopen(req)  
    res = res_data.read()  
    res = json.loads(res)  
    return res  

def get_flow_entries(dpid):  
    url = "http://127.0.0.1:8080/stats/flow/" + dpid  
    req = urllib2.Request(url)  
    res_data = urllib2.urlopen(req)  
    res = res_data.read()  
    res = json.loads(res)  
    return res  

def add_flow_entry(dpid,match,priority,actions):  
    url = "http://127.0.0.1:8080/stats/flowentry/add"  
    post_data = "{'dpid':%s,'match':%s,'priority':%s,'actions':%s}" % (dpid,str(match),priority,str(actions))  
    req = urllib2.Request(url,post_data)  
    res = urllib2.urlopen(req)  
    return res.getcode()  

def delete_flow_entry(dpid, match=None, priority=None, actions=None):  
    url = "http://127.0.0.1:8080/stats/flowentry/delete"  
    post_data = "{'dpid':%s" % dpid  
    if match is not None:  
        post_data += ",'match':%s" % str(match)  
    if priority is not None:  
        post_data += ",'priority':%s" % priority  
    if actions is not None:  
        post_data += ",'actions':%s" % str(actions)  
    post_data += "}"  

    req = urllib2.Request(url,post_data)  
    res = urllib2.urlopen(req)  
    return res.getcode()

函數說明

  • get_all_switches()

參數:無
返回結果:一個包含所有交換機信息的列表
結果示例:
[{“ports”: [{“hw_addr”: “12:ad:47:17:6d:1d”, “name”: “s1-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000001”}, {“hw_addr”: “62:bf:89:79:68:67”, “name”: “s1-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000001”}], “dpid”: “0000000000000001”}, {“ports”: [{“hw_addr”: “da:d7:cb:f8:a4:7f”, “name”: “s2-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000002”}, {“hw_addr”: “ce:31:74:a1:c1:2d”, “name”: “s2-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000002”}], “dpid”: “0000000000000002”}, {“ports”: [{“hw_addr”: “ea:c5:e8:ee:72:f7”, “name”: “s3-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000003”}, {“hw_addr”: “da:57:80:b2:74:67”, “name”: “s3-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000003”}], “dpid”: “0000000000000003”}]

  • get_all_links()

參數:無
返回結果:一個包含所有鏈路信息的列表
結果示例:
[{“src”: {“hw_addr”: “12:ad:47:17:6d:1d”, “name”: “s1-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000001”}, “dst”: {“hw_addr”: “da:d7:cb:f8:a4:7f”, “name”: “s2-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000002”}}, {“src”: {“hw_addr”: “ea:c5:e8:ee:72:f7”, “name”: “s3-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000003”}, “dst”: {“hw_addr”: “ce:31:74:a1:c1:2d”, “name”: “s2-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000002”}}, {“src”: {“hw_addr”: “da:d7:cb:f8:a4:7f”, “name”: “s2-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000002”}, “dst”: {“hw_addr”: “12:ad:47:17:6d:1d”, “name”: “s1-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000001”}}, {“src”: {“hw_addr”: “ce:31:74:a1:c1:2d”, “name”: “s2-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000002”}, “dst”: {“hw_addr”: “ea:c5:e8:ee:72:f7”, “name”: “s3-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000003”}}]

  • get_switch(dpid)

參數:dpid爲字符串,比如”0000000000000001”
返回結果:一個包含dpid對應的交換機的信息的列表
結果示例:
[{“ports”: [{“hw_addr”: “12:ad:47:17:6d:1d”, “name”: “s1-eth1”, “port_no”: “00000001”, “dpid”: “0000000000000001”}, {“hw_addr”: “62:bf:89:79:68:67”, “name”: “s1-eth2”, “port_no”: “00000002”, “dpid”: “0000000000000001”}], “dpid”: “0000000000000001”}]

  • get_flow_entries(dpid)

參數:dpid爲字符串,比如”0000000000000001”
返回結果:一個包含流表項的字典
結果示例:
{“1”: [{“actions”: [“OUTPUT:65533”], “idle_timeout”: 0, “cookie”: 0, “packet_count”: 2252, “hard_timeout”: 0, “byte_count”: 114852, “duration_nsec”: 370000000, “priority”: 65535, “duration_sec”: 2026, “table_id”: 0, “match”: {“dl_type”: 35020, “nw_dst”: “0.0.0.0”, “dl_vlan_pcp”: 0, “dl_src”: “00:00:00:00:00:00”, “nw_tos”: 0, “tp_src”: 0, “dl_vlan”: 0, “nw_src”: “0.0.0.0”, “nw_proto”: 0, “tp_dst”: 0, “dl_dst”: “01:80:c2:00:00:0e”, “in_port”: 0}}, {“actions”: [“OUTPUT:2”], “idle_timeout”: 0, “cookie”: 0, “packet_count”: 0, “hard_timeout”: 0, “byte_count”: 0, “duration_nsec”: 864000000, “priority”: 1111, “duration_sec”: 104, “table_id”: 0, “match”: {“dl_type”: 0, “nw_dst”: “0.0.0.0”, “dl_vlan_pcp”: 0, “dl_src”: “00:00:00:00:00:00”, “nw_tos”: 0, “tp_src”: 0, “dl_vlan”: 0, “nw_src”: “0.0.0.0”, “nw_proto”: 0, “tp_dst”: 0, “dl_dst”: “00:00:00:00:00:00”, “in_port”: 1}}]}
其中開頭的“1”表示dpid號

  • add_flow_entry(dpid,match,priority,actions)

參數:
dpid爲字符串,比如”0000000000000001”
match爲字典,比如match = {“in_port”:00000001},其他鍵的名稱見《ryu Documentation》P161的Flow Match Structure
priority爲字符串,比如”1111”
actions爲列表,比如actions = [{“type”:”OUTPUT”,”port”:00000002}],其他元素名稱見《ryu Documentation》P282的actions
返回結果:整數,HTTP狀態碼,200表示添加流表項成功
結果示例:200,403,404

  • delete_flow_entry(dpid,match,priority,actions)

參數:
dpid爲字符串,比如”0000000000000001”
match爲字典,比如match = {“in_port”:00000001},其他鍵的名稱見《ryu Documentation》P161的Flow Match Structure
priority爲字符串,比如”1111”
actions爲列表,比如actions = [{“type”:”OUTPUT”,”port”:00000002}],其他元素名稱見《ryu Documentation》P282的actions
返回結果:整數,HTTP狀態碼,200表示刪除流表項成功
結果示例:200,403,404

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章