目录:
./pox.pyopenflow.of_01 --address=x.x.x.x –port=yy py
Import pox.openflow.libopenflow_01 as of
core.openflow.connections.keys()
core.openflow.connections[key].send(msg)
2.1说明:若规则无动作则默认为丢弃;规则中没有显示的设置出端口的需要在相应动作之后添加出端口。
msg.actions.append(of.ofp_action_output(port=x))
msg.actions.append(of.ofp_action_enqueue(port=x,queue_id=y))
msg.actions.append(of.ofp_action_dl_addr.set_dst(“mac”))
msg.actions.append(of.ofp_action_dl_addr.set_src(“mac”))
msg.actions.append(of.ofp_action_nw_tos(nw_tos=x))
msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=x))
msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=x))
add flow-匹配源mac,动作为设置vlan并指定出端口
说明:
环境windowsor linux
编译器:python2.7+
pox:pox-betta
第1章OPENFLOW操作(match)
./pox.py openflow.of_01--address=x.x.x.x –port=yy py
命令:./pox.pyopenflow.of_01 --address=x.x.x.x –port=yy py
功能:控制器开启对应地址监控进程
参数:address,port,py
缺省情况:无。
命令模式:路径包含pox.py的命令行。
使用指南:./pox.pyopenflow.of_01 --address=x.x.x.x –port=yy py。
举例:
控制端:
开启pox地址监控,默认使用6633端口,进入交互模式
root@long-Aspire-4733Z:/home/long/usr/pox#./pox.py openflow.of_01 --address=6.6.6.6 py
POX0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al.
INFO:core:POX0.1.0 (betta) is up.
Thisprogram comes with ABSOLUTELY NO WARRANTY. This program is freesoftware,
andyou are welcome to redistribute it under certain conditions.
Type'help(pox.license)' for details.
Ready.
POX>
Pc端:
DCRS-6500-52X(config)#openflowmode
DCRS-6500-52X(config-openflow)#openflowtcp 6.6.6.6 6633
控制端:
交换机连接提醒
POX>INFO:openflow.of_01:[00-03-0f-27-5e-91 1] connected
Importpox.openflow.libopenflow_01 as of
命令:importpox.openflow.libopenflow_01 as of
功能:导出核心模块,并命名为of
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:importpox.openflow.libopenflow_01 as of,导出核心模块,并命名为of
举例:
控制端:
POX>import pox.openflow.libopenflow_01 as of
core.openflow.connections.keys()
命令:core.openflow.connections.keys()
功能:获取连接控制端的ofswitch的key
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:core.openflow.connections.keys(),获取key之后通过key发送msg
举例:
控制端:
POX>core.openflow.connections.keys()
core.openflow.connections[key].send(msg)
命令:core.openflow.connections[key].send(msg)
功能:通过特定key发送msg
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:core.openflow.connections[key].send(msg),key为上一条命令获取的switch代号
举例:
控制端:
POX>core.openflow.connections[key].send(msg)
msg=of.ofp_flow_mod()
命令:msg=of.ofp_flow_mod()
功能:编辑消息,消息类型为flowmod
参数:command:0为ADD(添加流),1为MODIFY,2为MODIFY_STRICT,3为DELETE(删除所有流规则),4为DELETE_STRICT(严格匹配掩码和优先级删除流规则)
缺省情况:command:0
命令模式:交互模式,pox>
使用指南:msg=of.ofp_flow_mod(),msg的消息类型为flowmod
举例:
控制端:
POX>msg=of.ofp_flow_mod()
msg.priority=x
命令:msg.priority=x
功能:设置规则的优先级
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.priority=x,必须初始化priority,priority的有效范围1-5
举例:
控制端:
POX>msg.priority=5
msg.match.in_port=y
命令:msg.match.in_port=y
功能:匹配入端口
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.in_port=y,y为字段的值
举例:
控制端:
指定规则匹配入端口为1
POX>msg.match.in_port=1
msg.match.dl_src=EthAddr(“”)
命令:msg.match.dl_src=EthAddr(“”)
功能:匹配源mac
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.dl_src=EthAddr(“”)
举例:
控制端
指定规则匹配源mac为00:00:00:00:00:11
POX>msg.match.dl_src=EthAddr(“00:00:00:00:00:11”)
msg.match.dl_dst=EthAddr(“”)
命令:msg.match.dl_dst=EthAddr(“”)
功能:匹配目的mac
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.dl_dst=EthAddr(“”)
举例:
控制端
指定规则匹配目的mac为00:00:00:00:00:11
POX>msg.match.dl_dst=EthAddr(“00:00:00:00:00:11”)
msg.match.dl_type=x
命令:msg.match.dl_type=x
功能:匹配以太类型
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.dl_type=
举例:
控制端
指定规则匹配ip类型报文
POX>msg.match.dl_type=0x800
msg.match.dl_vlan=x
命令:msg.match.dl_vlan=x
功能:匹配vlanid
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.dl_vlan=
举例:
控制端
指定规则匹配vlanid
POX>msg.match.dl_vlan=3
说明:dl_vlan必须为ofvlan。
msg.match.dl_vlan_pcp=x
命令:msg.match.dl_vlan_pcp=x
功能:匹配tos值
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.dl_vlan_pcp=
举例:
控制端
指定规则匹配cos值
POX>msg.match.dl_vlan_pcp=3
说明:dl_vlan_pcp必须在0-7之内。
msg.match.nw_src=
命令:msg.match.nw_src=
功能:匹配源ip地址
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.nw_src=
举例:
控制端
指定规则匹配源IP
POX>msg.match.dl_type=0x800
POX>msg.match.nw_src=“192.168.2.133/24”
说明:必须指定匹配的以太类型,ip的掩码指定可以以/的形式表示
msg.match.nw_dst=
命令:msg.match.nw_dst=
功能:匹配目的ip地址
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.nw_dst=
举例:
控制端
指定规则匹配目的IP地址
POX>msg.match.dl_type=0x800
POX>msg.match.nw_dst=“192.168.2.133/24”
说明:必须指定匹配的以太类型,ip的掩码指定可以以/的形式表示
msg.match.nw_proto=x
命令:msg.match.nw_proto=x
功能:匹配协议类型
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.nw_proto=
举例:
控制端
指定规则匹配IP类型报文
POX>msg.match.dl_type=0x800
POX>msg.match.nw_proto=6
说明:必须指定匹配的以太网类型,再匹配ip协议类型。
msg.match.nw_tos=x
命令:msg.match.nw_tos=x
功能:匹配tos
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.nw_tos=
举例:
控制端
指定规则匹配IP类型报文
POX>msg.match.dl_type=0x800
POX>msg.match.nw_tos=64
说明:必须指定匹配的以太网类型,再匹配tos值。
msg.match.tp_src=x
命令:msg.match.tp_src=
功能:匹配tcp源端口
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.tp_src=
举例:
控制端
指定规则匹配源tcp端口
POX>msg.match.dl_type=0x800
POX>msg.match.nw_proto=6
POX>msg.match.tp_src=179
说明:必须指定匹配的以太网类型,再匹配ip协议类型,最后匹配tcpport。
msg.match.tp_dst=x
命令:msg.match.tp_dst=
功能:匹配tcp目的端口
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.match.tp_dst=
举例:
控制端
指定规则匹配目的tcp端口
POX>msg.match.dl_type=0x800
POX>msg.match.nw_proto=6
POX>msg.match.tp_dst=179
说明:必须指定匹配的以太网类型,再匹配ip协议类型,最后匹配tcpport。
msg.idle_timeout=x
命令:msg.idle_timeout=
功能:在idle时间内,如果没有报文触发此动作,该条规则将删除
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.idle_timeout=30
举例:
控制端
指定规则的idle时间为30秒
POX>msg.idle_timeout=30
说明:无
msg.hard_timeout=x
命令:msg.hard_timeout=
功能:在到达hard时间时,无论如何,该条规则将删除
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.hard_timeout=30
举例:
控制端
指定规则的hard时间为30秒
POX>msg.hard_timeout=30
说明:无
第2章OPENFLOW操作(action)
msg.actions.append(of.ofp_action_output(port=x))
命令:msg.actions.append(of.ofp_action_output(port=))
功能:指定出端口动作
参数:无
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_output(port=))
举例:
控制端:指定报文出端口
POX>msg.actions.append(of.ofp_action_output(port=20))
说明:port号是ofvlan内的端口
msg.actions.append(of.ofp_action_output(port=x))
命令:msg.actions.append(of.ofp_action_output(port=))
功能:转发指定的端口类型
参数:IN_PORT= 0xfff8:从入端口将报文发出。FLOOD=0xfffb:除了入端口和stp不允许的端口的所有端口。ALL= 0xfffc:除了入端口的其余端口。CONTROLLER= 0xfffd:发送给控制器。NONE= 0xffff:和物理端口无关
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_output(port=))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_output(port=all))
说明:向所有端口发送一份报文除了入端口
msg.actions.append(of.ofp_action_enqueue(port=x,queue_id=y))
命令:msg.actions.append(of.ofp_action_enqueue(port=x,queue_id=y))
功能:转发指定的端口和队列
参数:port,queue_id(队列号)
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_enqueue(port=x,enqueue_id=y))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_enqueue(port=13,queue_id=4))
msg.actions.append(of.ofp_action_dl_addr.set_dst(“mac”))
命令:msg.actions.append(of.ofp_action_dl_addr.set_dst(“”))
功能:改变目的mac为指定mac
参数:dstmac
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_dl_addr.set_dst(“11:11:11:11:11:11”))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_dl_addr.set_dst(“11:11:11:11:11:11”))
msg.actions.append(of.ofp_action_dl_addr.set_src(“mac”))
命令:msg.actions.append(of.ofp_action_dl_addr.set_src(“”))
功能:改变源mac为指定mac
参数:srcmac
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_dl_addr.set_src(“00:03:11:11:11:11”))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_dl_addr.set_src(“00:03:11:11:11:11”))
msg.actions.append(of.ofp_action_nw_tos(nw_tos=x))
命令:msg.actions.append(of.ofp_action_nw_tos(nw_tos=))
功能:设定tos值
参数:nw_tos
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_nw_tos(nw_tos=56))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_nw_tos(nw_tos=56))
msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=x))
命令:msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=))
功能:设定vlan值
参数:vlan_vid
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=3))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=3))
msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=x))
命令:msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=))
功能:设定vlancos值
参数:vlancos
缺省情况:无。
命令模式:交互模式,pox>
使用指南:msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=3))
举例:
控制端:
POX>msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=3))
POX>msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=4))
说明:设置cos值时必须先设置vlanid
第3章OPENFLOW操作(examples)
add flow-匹配入端口,动作为出端口
POX>importpox.openflow.libopenflow_01 as of
POX>msg2=of.ofp_flow_mod()
POX>msg2.priority=3
POX>msg2.match.in_port=193
POX>msg2.actions.append(of.ofp_action_output(port=194))
POX>core.openflow.connections[13136560386L].send(msg2)
add flow-匹配目的mac,动作为出端口
POX>importpox.openflow.libopenflow_01 as of
POX>msg2=of.ofp_flow_mod()
POX>msg2.priority=3
POX>msg2.match.dl_src=EthAddr("ff:ff:ff:ff:ff:ff")
POX>msg2.actions.append(of.ofp_action_output(port=194))
POX>core.openflow.connections[13136560386L].send(msg2)
addflow-匹配以太类型,动作为出端口和队列
POX>msg=of.ofp_flow_mod()
POX>msg.priority=5
POX>msg.match.dl_type=0x800
POX>msg.actions.append(of.ofp_action_enqueue(queue_id=5,port=194))
POX>core.openflow.connections[13136560386L].send(msg)
addflow-匹配源mac,动作为设置vlan并指定出端口
POX>msg=of.ofp_flow_mod()
POX>msg.priority=5
POX>msg.match.dl_src=EthAddr(“00:03:0f:01:12:43”)
POX>msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=3))
POX>msg.actions.append(of.ofp_action_output(port=194))
POX>core.openflow.connections[13136560386L].send(msg)
addflow-匹配入端口,动作为设置vlan、cos,并指定出端口
POX>msg=of.ofp_flow_mod()
POX>msg.priority=5
POX>msg.match.in_port=193
POX>msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=4))
POX>msg.actions.append(of.ofp_action_vlan_pcp(vlan_pcp=5))
POX>msg.actions.append(of.ofp_action_output(port=194))
POX>core.openflow.connections[13136560386L].send(msg)
del flow
POX>msg=of.ofp_flow_mod(command=3)
POX>core.openflow.connections[13136560386L].send(msg)
del flow-strict
POX>msg=of.ofp_flow_mod(command=4)
POX>msg.wildcards=4194302
POX>msg.priority=5
POX>core.openflow.connections[13136560386L].send(msg)