ryu的RESTAPI简介——我主要用于下发和查看流表

一.Rest API简介

REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

表述性状态转移是一组构架约束条件和原则,满足这些约束和原则的应用程序或设计就是RESTful,REST是设计风格而不是标准,它通常基于使用HTTP,URI,XML以及HTML这些现有的广泛流行的协议和标准。

REST定义了一组体系构架原则,可以根据这些原则设计以系统资源为中心的Web服务,包括使用不同语言编写的客户端如何通过HTTP处理和传输资源状态。

二.ryu中REST API简介

ryu已经提供了一些RESTAPI的定义,在ryu/app目录下可以找到如下相关的文件:

ofctl_rest.py rest_topology.py rest_firewall.py rest_qos.py rest_router.py

打开这些文件简单浏览下可以发现他们分别提供了和OpenFlow协议,拓扑等相关的信息查询和配置,查询的结果以json格式返回给浏览器,而配置会调用相关模块的相关函数,可以简单的看下获取SDN网络中的交换机的代码。获取switches的指令为:http://ip:port/stats/switches,首先会解析出Http请求(GET),以及所需要的内容(switches),然后调用对应的函数(get_dpids)。在函数中,得到对应的内容,然后以json形式返回

path = ‘/stats‘
uri = path + ‘/switches‘
mapper.connect(‘stats‘, uri,
                        controller=StatsController, action=‘get_dpids‘,
                        conditions=dict(method=[‘GET‘]))

def get_dpids(self, req, **_kwargs):
    dps = list(self.dpset.dps.keys())
    body = json.dumps(dps)
    return Response(content_type=‘application/json‘, body=body)

了解代码是为了更好的用它,或者可以轻易的修改,得到自己想要的结果,浅尝辄止,不宜重复造车

在使用对应的RESTAPI之前,需要用ryu-manager *.rest*..py加载对应的模块

三. ryu常用的RESTAPI简介

最常用RESTAPI是ofctl_rest.py提供的RESTAPI,它提供了与OpenFlow相关的接口,如查看交换机,最有用的应该是查看、添加、修改流表等。在oftcl_rest.py文件的前面注释部分我们可以得到接口的使用方法,列举如下:

# Retrieve the switch stats
#
# get the list of all switches
# GET /stats/switches
#
# get the desc stats of the switch
# GET /stats/desc/<dpid>
#
# get flows stats of the switch
# GET /stats/flow/<dpid>
#
# get flows stats of the switch filtered by the fields
# POST /stats/flow/<dpid>
#
# get aggregate flows stats of the switch
# GET /stats/aggregateflow/<dpid>
#
# get aggregate flows stats of the switch filtered by the fields
# POST /stats/aggregateflow/<dpid>
#
# get table stats of the switch
# GET /stats/table/<dpid>

比如为了得到SDN网络中的所有交换机,需要用GET /stats/switches,如果要用浏览器进行查看,使用http://ip:port/stats/switches发送GET请求

四. ryu中RESTAPI的三种使用方式

  1. 在浏览器中输入类似http://ip:port/stats/switches命令来发送GET请求,获取信息,ip为控制器的IP,ryu提供的port为8080
  2. 用curl(curl是利用URL语法在命令行方式下工作的开源文件传输工具)代替浏览器,在终端输入curl http://ip:port/stats/switches来传输内容
  3. 利用chrome等浏览器提供的插件Postman,经过使用,非常推荐这种方法,原因如下:
    1. 提供了Pretty和Raw两种结果展示方法,Raw和前面两种方法的返回格式一样,但是Pretty的格式的可视性和便读性远远好于Raw
    2. 提供了JSON和XML两种格式展示结果
    3. 下发流表同样简单,可视化比较好,只需要在body里面按照python字典的格式书写流表,然后下发即可
    4. 可以显示对请求的response,比如成功的话STATUS会显示200 OK

流表的灵活性是SDN网络的优势之一,利用上述方法在查看流表,验证网络功能,开发APP具有非常重要的作用

时间: 2024-12-11 12:27:43

ryu的RESTAPI简介——我主要用于下发和查看流表的相关文章

openflow流表项中有关ip掩码的匹配的问题(控制器为ryu)

一.写在前面 唉,被分配到sdn安全方向,顶不住,顶不住,感觉搞不出来什么有搞头的东西.可若是让我水水的应付,我想我也是做不到的,世上无难事只怕有心人.好了,进入正题,本次要讨论的时一个比较细节的东西,在流表项中的有关ip掩码的问题.对了,本文适合于,有一定基础的openflow使用者,一点点就行. 二.问题描述 若不是机缘巧合,我甚至完全不会注意到这个问题,为什么,咱来看一个平时实验环境中最为常见的流表项长啥样,如图1                                      

Floodlight下发流表过程分析

转载请注明出处:http://blog.csdn.net/vonzhoufz/article/details/32166445 当一个packet到达openflow交换机,会进行流表的匹配,如果没有找到相应的流表项,就会发送一个packet_in消息 到达SDN controller端,控制器根据一定的路由算法决策后,会向该路径上的所有交换机下发流表(也就是发送FLOW_MOD消息,里面有对应的action).这里要知道的是在SDN的环境下,控制器具有全局拓扑信息,每当有链路状态改变时就会跟新

SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络

邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工程师.-----------------------------------------------------------------------------------------------------[分享正文]今天想跟大家分享如何通过ODL控制器下发流表来创建VxLAN网络.ODL作为当前

oracle 索引的(创建、简介、技巧、怎样查看)

一.索引简介1.索引相当于目录2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率.3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取值分散的列上,避免对同一张表创建过多的索引4.索引的使用对用户来说是透明的,由系统来决定什么时候使用索引.5.Oracle支持多种类型的索引,可以按列的多少.索引值是否唯一和索引数据的组织形式对索引进行分类,以满足各种表和查询条件的要求.(请见附件)a. 单列索引和复合索引    b.B树索引(creat

Activiti基础教程--01(简介、代码生成Activiti的25张表、Activiti配置文件activiti.cfg.xml生成25张表、在Eclipse上安装Activiti插件)

一.简介 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现. 创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来. Activiti是一个独立运作和经营的开源项目品牌,并将独立于Alfresco开

sdn下发流表

1.首先我创建了简单的拓扑,深度为2,扇面为2. 1 1 mn --controller remote --topo tree,fanout=3,depth=2 2.使用 1 net 来查看网络的连接情况.如下所示: 3. 1 dpctl dump-flows 1 该命令可以用来查看所有节点的信息. 但是还有一种看个别交换机的流表信息. 1 sh ovs-ofctl dump-flows s1 4. 1 xterm s1 可以打开一个黑色框框,一个小终端吧. 5.刚打开的拓扑,actions字段

Openflow流表应用测试--逻辑隔离

1.搭建拓扑 搭建了三层的二叉树结构网络,开启SimpleSwitch3.py无法完成pingall联通测试,于是将拓扑结构更改为简单的line,四个交换机(OF13)连成一线,每个交换机下挂两个主机,依次h1--h8 s1 = net.addSwitch('s1', cls=OVSKernelSwitch, protocols='OpenFlow13', mac='00:00:00:00:00:11')    s2 = net.addSwitch('s2', cls=OVSKernelSwit

基于RYU应用开发之负载均衡(源码开放)

编者按:本文介绍的是如何在RYU上通过使用select group 来实现multipath,从而实现流量的调度,完成简单的负载均衡Demo.在OpenFlow13中有group table,可用于实现组播和冗余容灾等功能.实验中还使用了OpenvSwitch的队列queue完成了对链路带宽的保障. 要完成多径传输,那么网络拓扑必然有loop,所以首先要解决由于loop而可能产生的storm,解决方案在<基于SDN的RYU应用开发之ARP代理>文中已经提出. 网络拓扑: ""

实践一:sdn-mininet、ryu控制器

启动ryu控制器命令:ryu-manager simple_switch.py 启动mininet:sudo mn -custom experl.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 mininet中流表相关操作的命令: 1.dpctl dump-flows 查看流表 2.dpctl add-flow in_port=1,actions=drop 添加进口是1的放弃流表 3.pingall 测试连通性 4.dpct