openswitch中的而一些命令

来源:互联网 发布:七天网络查分系统登录 编辑:程序博客网 时间:2024/04/29 20:07
  启动openvswitch


(1)加载 libcrc32c.ko和openvswitch.ko(大部分已经自动加载)
$ sudo insmod /lib/modules/2.6.32-431.el6.i686/kernel/lib/libcrc32c.ko
$ sudo insmod datapath/linux/openvswitch.ko


2)首次运行需要生成初始配置文件/etc/openvswitch/conf.db,
sudo /usr/local/binof/ovsdb-tool create etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema




(3)启动数据库服务器
sudo /usr/local/sbin/ovsdb-server /etc/openvswitch/conf.db -vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO --remote=punix:/var/run/openvswitch/db.sock --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid –detach
(4)# 首次运行,需要初始化数据库,后续运行不再需要
$ sudo ovs-vsctl --no-wait init


(5)启动 OpenvSwitch 服务进程
sudo /usr/local/sbin/ovs-vswitchd unix:/var/run/openvswitch/db.sock
-vANY:CONSOLE:EMER -vANY:SYSLOG:ERR -vANY:FILE:INFO --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach



(2,4两步不是必须的)


启动后br和ports以及他们的绑定都是之前设置好的,没有被重置。






ovs的几个命令:


ovs-vsctl list-br 列出所有网桥
ovs-vsctl list-ports br0 列出网桥br0上的所有网络接口




ovs-vsctl show 查看ovs是否连接上控制器




ovs-ofctl show br0 查看br0的openflow信息
ovs-ofctl dump-ports br0 查看br0各交换机端口的状态
ovs-ofctl dump-flows br0 查看br0上的所有流表规则(流表项) 
ovs-ofctl dump-tables br0 查看交换机中的所有 Table


ovs-appctl --version 查看ovs版本
ovs-ofctl --version 查看那ovs支持的of协议的版本


ovs-ofctl del-flows br0 "in_port=100"   删除编号为 100 的端口上的所有流表项


与制定的控制器链接
ifconfig br0<ip>netmask<Netmask>up
ovs-vsctl set-controller br0 tcp:<controller IP>:<port>




启动pox
P:


python pox.py openflow.of_01 --address=100.1.1.5 -port=6633 py




from pox.lib.addresses import IPAddr
from pox.lib.addresses import EthAddr
import random
import pox.openflow.libopenflow_01 as of
core.openflow.connections.keys()


得到 193864321579124L






msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=3
msg.match.nw_proto=1
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=1))
core.openflow.connections[193864321579124L].send(msg)



msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=3
msg.match.dl_type = 0x0806
msg.actions.append(of.ofp_action_output(port=1))
core.openflow.connections[193864321579124L].send(msg)




msg.priority=20
msg.match.in_port=1
msg.match.dl_type = 0x0806
msg.actions.append(of.ofp_action_output(port=3))
core.openflow.connections[193864321579124L].send(msg)






msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=1
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=3))
core.openflow.connections[193864321579124L].send(msg)




msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=3
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=1))
core.openflow.connections[193864321579124L].send(msg)








msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=1
msg.match.nw_proto=6
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=3))
core.openflow.connections[193864321579124L].send(msg)





msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=3
msg.match.nw_proto=6
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=1))
core.openflow.connections[193864321579124L].send(msg)






msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=1
msg.match.nw_proto=17
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=3))
core.openflow.connections[193864321579124L].send(msg)




msg=of.ofp_flow_mod()
msg.priority=20
msg.match.in_port=3
msg.match.nw_proto=17
msg.match.dl_type = 0x0800
msg.actions.append(of.ofp_action_output(port=1))
core.openflow.connections[193864321579124L].send(msg)






pox删除已经加入的流表
msg=of.ofp_flow_mod(command=3)
core.openflow.connections[193864321579124L].send(msg)




floodlight 2.3.1 监听的端口是6653
floodlight 每次重启都会向ovs交换机发253个流表,每个流表里只有一个流表项,也就是253个流表项。且全部actions=CONTROL






如果想获得网络接口的 OpenFlow 编号,也可以在 OVS 的数据库中查询
$ ovs-vsctl get Interface br0 ofport
100
(br0 可以换成eth0,eth1,就是br0中加入的端口)




查看 datapath 的信息
$ ovs-dpctl show
0 0
原创粉丝点击