Linux

modprobe 無法載入 ifb 設備

  • November 1, 2020

我有這個腳本,它檢查 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
}

預設情況下,載入ifb核心模組時會創建兩個ifb介面。這是由於過時的原因,與載入虛擬核心模組時創建兩個虛擬介面的方式相同。這些介面是在初始網路命名空間中創建的。例如,如果系統位於容器內或只是(非初始)網路命名空間,則此處不存在ifb介面。

不要載入模組,希望得到ifb介面。反過來做:創建一個ifb介面,如果需要,核心模組無論如何都會被載入。不要再依賴ifconfigLinux 上的哪個工具現在已經過時了。

例子:

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

您現在已經呼叫了一個ifb介面newifbdev,並可用於tc-mirred數據包。

儘管無法從此類使用者命名空間手動載入ifb核心模組,但這甚至可以在以 開頭的使用者命名空間內工作*。*如果尚未載入,模組仍將通過創建介面間接載入(並且使用​​預設設置,兩個額外的 ifb 介面也將作為副作用出現在初始命名空間中)。unshare -U -r -n

引用自:https://unix.stackexchange.com/questions/617388