Linux
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 }
預設情況下,載入ifb核心模組時會創建兩個ifb介面。這是由於過時的原因,與載入虛擬核心模組時創建兩個虛擬介面的方式相同。這些介面是在初始網路命名空間中創建的。例如,如果系統位於容器內或只是(非初始)網路命名空間,則此處不存在ifb介面。
不要載入模組,希望得到ifb介面。反過來做:創建一個ifb介面,如果需要,核心模組無論如何都會被載入。不要再依賴
ifconfig
Linux 上的哪個工具現在已經過時了。例子:
ip link add name newifbdev type ifb ip link set dev newifbdev up
您現在已經呼叫了一個ifb介面
newifbdev
,並可用於tc-mirred數據包。儘管無法從此類使用者命名空間手動載入ifb核心模組,但這甚至可以在以 開頭的使用者命名空間內工作*。*如果尚未載入,模組仍將通過創建介面間接載入(並且使用預設設置,兩個額外的 ifb 介面也將作為副作用出現在初始命名空間中)。
unshare -U -r -n