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

Ryu基本操作的REST API调用演示样例的更多相关文章

  1. 跨域JSONP原理及调用详细演示样例

      上篇博客介绍了同源策略和跨域訪问概念,当中提到跨域经常使用的基本方式:JSONP和CORS.   那这篇博客就介绍JSONP方式.   JSONP原理   在同源策略下,在某个server下的页面 ...

  2. 通过Canvas及File API缩放并上传图片完整演示样例

    创建一个只管的用户界面,并同意你控制图片的大小.上传到server端的数据,并不须要处理enctype为 multi-part/form-data 的情况.只一个简单的POST表单处理程序就能够了. ...

  3. PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

    一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉 ...

  4. 在.Net MVC结构API接口中推断http头信息实现公共的权限验证过滤器演示样例

    //control   action public class TestController : ApiController { [MyAuthFilter] public string test(s ...

  5. HBase总结(十一)hbase Java API 介绍及使用演示样例

    几个相关类与HBase数据模型之间的相应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  8. 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  9. WebGL自学教程——WebGL演示样例:開始

    最终開始WebGL的演示样例了,...... 開始 使用WebGL的步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊> ...

随机推荐

  1. tring.Format格式化用法

    (数字保留两位小数,且每隔3为用逗号隔开): string.format("1f,.2d",333) -->333.00 string.format("1f,.2d ...

  2. HDU 2643

    (第二类斯特林数*N的阶乘 )的和. #include <iostream> #include <cstdio> #include <algorithm> #def ...

  3. Firefox OS简单介绍

    Firefox OS系统架构框图 一些Firefox相关的术语简单介绍: B2G Boot to Gecko 的简称. Boot to Gecko Firefox OS 操作系统的project代号. ...

  4. 开心的小明(南阳oj49)(01背包)

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 小明今天非常开心.家里购置的新房就要领钥匙了,新房里有一间他自己专用的非常宽敞的房间.更让他高兴的是,妈妈 ...

  5. javaweb学习总结(六)——Servlet开发(三) 常见问题疑问

    [1]response.getWriter().write()与out.print()的区别http://blog.csdn.net/javaloveiphone/article/details/81 ...

  6. sql-查看执行计划的方法

    sql执行计划:把SQL语句拆分为每个的操作步骤组合,按照一定的顺序执行得出结果,查看并看懂执行计划是调优的关键步骤 查看执行计划的方法 DBMS_XPLAN包 sql*plus AUTO trace ...

  7. activity(工作流)初步学习记录

    1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期 ...

  8. oracle动态磁盘管理

    一.ASM发展: oracle 想做硬件: 收购sum公司的小型机业务 推出一体机Exadata 1.sum服务器 2.磁盘柜(没做存储) 推出asm建库方式配合一体机(自动使用磁盘柜的盘)(抛弃ra ...

  9. NOIp模拟赛三十一

    持续降智 分数:100+0+0=100 C题subtask是假的,根本没有部分分中的情况...还我20分QAQ A:[BZOJ4444]国旗计划 B:[agc006f]blackout C:[arc0 ...

  10. [arc076f]Exhausted? - 贪心

    题意: 给你m个椅子可以坐人,初始坐标为正整数1~m,有n个人,每个人希望坐的位置$\leq L_i$或者$\geq R_i$,可以添加若干个椅子在任意的实数位置,求最少要添加多少椅子使得所有人都有位 ...