modprobe 无法加载 ifb 设备

modprobe 无法加载 ifb 设备

我有这个脚本,它检查 veth 对并在其上设置一个 ifb 设备,但每次它都说找不到该特定 veth 对的免费 ifb 设备。

可能是什么问题呢?即使我尝试运行modprobe默认创建两个的命令ifb,它也会抛出相同的错误。

#return 0 if the ifb is free

check_ifb() 
{
    local installed=`nl-qdisc-list -d $1`
    [ -n "$installed" ] && return 1

    return 0
}

setup_ifb() 
{

    for ifb in `ifconfig -a -s|egrep ^ifb|cut -d ' ' -f1`
    do
        check_ifb "$ifb" || continue
        IFB="$ifb"
        break
    done

    if [ -z "IFB" ]
    then
        echo "Unable to find a free ifb device for $vifname"
        exit -1
    fi

    ip link set dev "IFB" up
    
    if [ $? -ne 0 ]
    then
        echo ip link set dev "IFB" up failed
        exit -1
    fi
}

答案1

默认情况下有两个IFB加载时创建接口IFB内核模块。这是出于过时的原因,同样的方式两个假的加载时创建接口假的内核模块。这些接口是在初始网络命名空间中创建的。例如,如果系统位于容器内或只是一个(非初始)网络命名空间,则没有IFB接口将存在于此处。

不加载模块,希望得到IFB接口。反过来做:创造一个IFB接口,如果需要,内核模块无论如何都会被加载。不要再依赖ifconfigLinux 上现在已经过时的工具。

例子:

ip link add name newifbdev type ifb
ip link set dev newifbdev up

你现在有一个IFBnewifbdev调用并可用的接口TC-镜像数据包。

这甚至可以在一个用户例如,命名空间以 开头unshare -U -r -n,尽管无法手动加载IFB来自此类用户命名空间的内核模块。如果尚未加载,该模块仍将通过创建接口来间接加载(并且使用默认设置,两个附加的 ifb 接口也会作为副作用出现在初始命名空间中)。

相关内容