OvS编译完成后执行sudo insmod datapath/linux/openvswitch.ko
后提示“insmod: ERROR: could not insert module datapath/linux/openvswitch.ko: Unknown symbol in module”如何解决?
执行modinfo datapath/linux/openvswitch.ko显示驱动信息,从depends一项可以看出openvswitch.ko依赖其它驱动,依次执行sudo modprobe nf_conntrack,sudo modprobe tunnel16...。加载完所有依赖驱动后再加载openvswitch驱动就可以了。
不知道你这个问题是否已经解决, 如果还没有解决的话:ovs-vsctl
ovs-vsctl
是一个管理或配置ovs-vswitchd
的高级命令行工具,高级是说其操作对用户友好,封装了对数据库的操作细节。它是管理OVS最常用的命令,除了配置flows之外,其它大部分操作比如Bridge/Port/Interface/Controller/Database/Vlan等都可以完成
#添加网桥br0
ovs-vsctl add-br br0
#列出所有网桥
ovs-vsctl list-br
#添加一个Port p1到网桥br0
ovs-vsctl add-port br0 p1
#查看网桥br0上所有Port
ovs-vsctl list-ports br0
#获取br0网桥的OpenFlow控制器地址,没有控制器则返回空
ovs-vsctl get-controller br0
#设置OpenFlow控制器,控制器地址为192.168.1.10,端口为6633
ovs-vsctl set-controller br0 tcp:192.168.1.10:6633
#移除controller
ovs-vsctl del-controller br0
#删除网桥br0
ovs-vsctl del-br br0
#设置端口p1的vlan tag为100
ovs-vsctl set Port p1 tag=100
#设置Port p0类型为internal
ovs-vsctl set Interface p0 type=internal
#添加vlan10端口,并设置vlan tag为10,Port类型为Internal
ovs-vsctl add-port br0 vlan10 tag=10 -- set Interface vlan10 type=internal
#添加隧道端口gre0,类型为gre,远端IP为1.2.3.4
ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=1.2.3.4
ovsdb-tool
ovsdb-tool
是一个专门管理OVS数据库文件的工具,不常用,它不直接与ovsdb-server
进程通信
ovsdb-tool -h
ovsdb-tool: Open vSwitch database management utility
usage: ovsdb-tool [OPTIONS] COMMAND [ARG...]
create [DB [SCHEMA]] create DB with the given SCHEMA
compact [DB [DST]] compact DB in-place (or to DST)
convert [DB [SCHEMA [DST]]] convert DB to SCHEMA (to DST)
db-version [DB] report version of schema used by DB
db-cksum [DB] report checksum of schema used by DB
schema-version [SCHEMA] report SCHEMA's schema version
schema-cksum [SCHEMA] report SCHEMA's checksum
query [DB] TRNS execute read-only transaction on DB
transact [DB] TRNS execute read/write transaction on DB
[-m]... show-log [DB] print DB's log entries
The default DB is /etc/openvswitch/conf.db.
The default SCHEMA is /usr/share/openvswitch/vswitch.ovsschema.
Logging options:
-v, --verbose=[SPEC] set logging levels
-v, --verbose set maximum verbosity level
--log-file[=FILE] enable logging to specified FILE
(default: /var/log/openvswitch/ovsdb-tool.log)
Other options:
-m, --more increase show-log verbosity
-h, --help display this help message
-V, --version display version information
ovsdb-tool show-log
record 0: "Open_vSwitch" schema, version="7.3.0", cksum="2483452374 20182"
record 1: 2021-08-11 03:35:01.298 "ovs-vsctl: ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.3.0"
record 2: 2021-08-11 03:35:01.320 "ovs-vsctl: ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.0.0 "external-ids:system-id=\"a842ca16-33d6-4439-aec8-c4e13ac0f5c7\"" "system-type=\"unknown\"" "system-version=\"unknown\"""
record 3: 2021-08-11 03:35:04.352 "ovs-vsctl: ovs-vsctl add-br br1"
record 4: 2021-08-11 03:35:04.373
record 5: 2021-08-11 03:35:04.374
record 6: 2021-08-11 03:35:06.263 "ovs-vsctl: ovs-vsctl add-br br2"
record 7: 2021-08-11 03:35:06.271
record 8: 2021-08-11 03:35:13.323 "ovs-vsctl: ovs-vsctl add-port br1 tap1 -- set Interface tap1 type=internal"
record 9: 2021-08-11 03:35:13.332
record 10: 2021-08-11 03:35:13.937 "ovs-vsctl: ovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internal"
record 11: 2021-08-11 03:35:13.945
record 12: 2021-08-11 03:35:56.200 "ovs-vsctl: ovs-vsctl add-port br1 patch-ovs-1 -- set Interface patch-ovs-1 type=patch options:peer=patch-ovs-2"
record 13: 2021-08-11 03:35:56.202
record 14: 2021-08-11 03:35:56.977 "ovs-vsctl: ovs-vsctl add-port br2 patch-ovs-2 -- set Interface patch-ovs-2 type=patch options:peer=patch-ovs-1"
record 15: 2021-08-11 03:35:56.978
record 16: 2021-08-11 03:37:06.667 "ovs-vsctl: ovs-vsctl add-port br1 vx1 -- set interface vx1 type=vxlan options:remote_ip=172.16.0.100 options:key=100"
ovsdb-tool show-log -m
record 0: "Open_vSwitch" schema, version="7.3.0", cksum="2483452374 20182"
record 1: 2021-08-11 03:35:01.298 "ovs-vsctl: ovs-vsctl --no-wait -- init -- set Open_vSwitch . db-version=7.3.0"
table Open_vSwitch insert row b8ddda9c:
record 2: 2021-08-11 03:35:01.320 "ovs-vsctl: ovs-vsctl --no-wait set Open_vSwitch . ovs-version=2.0.0 "external-ids:system-id=\"a842ca16-33d6-4439-aec8-c4e13ac0f5c7\"" "system-type=\"unknown\"" "system-version=\"unknown\"""
table Open_vSwitch row b8ddda9c (b8ddda9c):
record 3: 2021-08-11 03:35:04.352 "ovs-vsctl: ovs-vsctl add-br br1"
table Port insert row "br1" (199a602c):
table Bridge insert row "br1" (aa6f3faf):
table Interface insert row "br1" (61bc80af):
table Open_vSwitch row b8ddda9c (b8ddda9c):
record 4: 2021-08-11 03:35:04.373
table Interface row "br1" (61bc80af):
record 5: 2021-08-11 03:35:04.374
table Open_vSwitch row b8ddda9c (b8ddda9c):
record 6: 2021-08-11 03:35:06.263 "ovs-vsctl: ovs-vsctl add-br br2"
table Port insert row "br2" (c7dc6595):
table Bridge insert row "br2" (b14f70db):
table Interface insert row "br2" (fdca67e7):
table Open_vSwitch row b8ddda9c (b8ddda9c):
ovsdb-client
ovsdb-client
是ovsdb-server
进程的命令行工具,主要是从正在运行的ovsdb-server
中查询信息,操作的是数据库相关
#列出主机上的所有databases,默认只有一个库Open_vSwitch
ovsdb-client list-dbs
#获取指定数据库的schema信息
ovsdb-client get-schema [DATABASE]
#列出指定数据库的所有表
ovsdb-client list-tables [DATABASE]
#dump指定数据库所有数据,默认dump所有table数据,如果指定table,只dump指定table数据
ovsdb-client dump [DATABASE] [TABLE]
#监控指定数据库中的指定表记录改变
ovsdb-client monitor DATABASE TABLE
ovs-ofctl
ovs-ofctl
是专门管理配置OpenFlow交换机的命令行工具,我们可以用它手动配置OVS中的OpenFlow flows,注意其不能操作datapath flows和”hidden” flows
#查看br-tun中OpenFlow flows
ovs-ofctl dump-flows br-tun
#查看br-tun端口信息
ovs-ofctl show br-tun
#添加新的flow:对于从端口p0进入交换机的数据包,如果它不包含任何VLAN tag,则自动为它添加VLAN tag 101
ovs-ofctl add-flow br0 "priority=3,in_port=100,dl_vlan=0xffff,actions=mod_vlan_vid:101,normal"
#对于从端口3进入的数据包,若其vlan tag为100,去掉其vlan tag,并从端口1发出
ovs-ofctl add-flow br0 in_port=3,dl_vlan=101,actions=strip_vlan,output:1
#添加新的flow: 修改从端口p1收到的数据包的源地址为9.181.137.1,show 查看p1端口ID为100
ovs-ofctl add-flow br0 "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal"
#添加新的flow: 重定向所有的ICMP数据包到端口 p2
ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102
#删除编号为 100 的端口上的所有流表项
ovs-ofctl del-flows br0 "in_port=100"