Ryu基本操作的REST API调用示例

转载 2016年05月31日 19:35:16
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/" + str(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/" + str(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

Ryu基本操作的REST API调用示例

import urllib2 import json def get_all_switches(): url = "http://127.0.0.1:8080/v1.0/topology/s...

SharePoint REST API - 基本操作(一)

博客地址:http://blog.csdn.net/FoxDave 你可以使用SharePoint提供的REST接口执行基本的增删查改操作。REST接口暴露了所有的SharePoint客户端API中可...
  • FoxDave
  • FoxDave
  • 2017年08月04日 16:55
  • 773

Ryu控制器部署及其与Rest API接口调用问题解决

系统环境为Ubuntu14.04 所用restful接口调用软件为postman 首先要安装部署Ryu控制器,这个很多人没成功我觉得其实主要是前面的基本环境和依赖包要先搞好,即以下步骤一所示: ...

RYU实战,REST API流表控制(1)

前言本月上旬到海南出差,现在回来终于可以继续乱入SDN了。本次学习的是如何使用RYU提供的REST API接口对交换机的流表进行控制。对流表的控制无外呼就是增删改查了。本节先使用POSTMAN进行实验...
  • jmh1996
  • jmh1996
  • 2017年05月23日 09:21
  • 1244

Spring Boot实战之Rest接口开发及数据库基本操作

Spring Boot实战之Rest接口开发及数据库基本操作 1、修改pom.xml,添加依赖库,本文使用的是mysql                 org.springframework...
  • sun_t89
  • sun_t89
  • 2016年07月14日 21:07
  • 17524

MSR寄存器的基本操作示例

  • 2014年12月06日 14:02
  • 2KB
  • 下载

solr基本操作代码示例

import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ryu基本操作的REST API调用示例
举报原因:
原因补充:

(最多只允许输入30个字)