OvS编译完成后安装驱动报错如何解决?

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安装配置时出现configure: error:……,version newer than 5.0.x is not supported
  • 除此之外, 这篇博客: openvswitch 架构介绍中的 ovs-*工具的使用及区别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    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-clientovsdb-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"    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^