• 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

  • 相关阅读:
    C#中判断是否为数值
    html中网页自动刷新设置
    html中多行文本及文件提交
    商品库存秒杀方案总结
    记一次asp.net core 线上崩溃解决总结
    Eova 怎么放在 Docker中,使用阿里云流水线构建Eova!!
    阿里云 asp.net core nginx 单机部署
    Tidb go mac 上开发环境搭建
    jexus+.netcore+identityserver4 部署支持ssl(https)
    使用mha 构建mysql高可用碰到几个问题
  • 原文地址:https://www.cnblogs.com/llguanli/p/8430564.html
Copyright © 2020-2023  润新知