1、背景
os : Kylin V10
内核:4.19.90-25.0
现象:编译安装openvswitch,多节点租户网使用geneve,发现无法通信
2、排查问题
多节点执行,ovs-vsctl show (发现br-int报错,geneve port端口报错)
其中一个节点报错,could not add network device ovn-baaeb8-0 to ofproto (Address family not supported by protocol)
其他节点,diagnostic="No Diagnostic", flap_count="0", forwarding="false", remote_diagnostic="No Diagnostic", remote_state=down, state=down
3、解决问题
1. 编译安装其他版本openvswitch仍然存在问题
2. ll /lib/modules/4.19.90-25.0.v2111.ky10.sw_64/kernel/net/openvswitch/ 查看目录,发现没有vport-geneve.ko文件
3. lsmod | grep geneve 发现内核模块没有genve
4. 因无有权限账号,决定投机取巧,找到了openeuler相同内核版本的源码 [geneve源码文件](https://gitee.com/openeuler/kernel/blob/4.19.90-2111.7.0/drivers/net/geneve.c#)
5. 将geneve.c文件下载下来,放到/usr/src/kernels/4.19.90-25.0.v2111.ky10.sw_64/drivers/net/目录(如果没有内核目录,yum install kernel-devel试一试)
6. cd /usr/src/kernels/4.19.90-25.0.v2111.ky10.sw_64/drivers/net 备份原有Makefile,重新编写Makefile(详细内容在下面)
7. make -C /lib/modules/`uname -r`/build M=`pwd`,即可编译geneve.ko成功
8. cp geneve.ko /usr/lib/modules/4.19.90-25.0.v2111.ky10.sw_64/kernel/drivers/net
9. cp geneve.ko /opt/cpio/kernel/lib/modules/4.19.90-25.0.v2111.ky10.sw_64/kernel/drivers/net(这一步有些情况不需要)
10. modprobe geneve(如果报错modprobe: fatal: module geneve not found in directory /lib/modules,执行modprobe之前,执行depmod -a)
11. lsmod | grep geneve 验证已有geneve模块
12. 将geneve.ko放到开机模块自动加载 vim /etc/modules-load.d/geneve.conf, 输入geneve
# Makefile
KERNELDIR := /usr/src/kernels/4.19.90-25.0.v2111.ky10.sw_64
CURRENT_PATH := $(shell pwd)
obj-m := geneve.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
以上为个人解决方案,谨在此记录,方便后续查找,希望能帮助到有需要的伙伴儿~~