# ip link set wlan0 netns 1
RTNETLINK answers: Invalid argument
Это работает для обычного Ethernet. Это также работает для проприетарного драйвера "wl" Broadcom.
Как это сделать для обычного драйвера на основе mac80211?
# ip link set wlan0 netns 1
RTNETLINK answers: Invalid argument
Это работает для обычного Ethernet. Это также работает для проприетарного драйвера "wl" Broadcom.
Как это сделать для обычного драйвера на основе mac80211?
Вам нужно переместить PHY:
iw phy phy0 set netns 666
Где 666 - pid некоторого процесса, выполняющегося в этом пространстве имен сети; для сетевых пространств, созданных инструментами iproute2
(с ip netns
), вы можете создать там недолговечный процесс и получить его pid:
iw phy phy0 set netns "$(ip netns exec mynetns sh -c '
sleep 1 >&- & echo "$!"')"
Чтобы переместить его обратно в корневое пространство имен:
ip netns exec mynetns iw phy phy0 set netns 1
Реализовал мой собственный обходной путь: vethify
ip link add type veth
; ip link set veth1 netns <some_pid>
; vethify wlan0 veth0
в пространстве имен сети хоста. Он скопирует все захваченные на wlan0 в veth0 и обратно;ethtool --offload veth1 rx off tx off && ethtool -K veth1 gso off
.Примечание: vethify видит все пакеты в пространстве имен сети, а не только wlan0 и veth0. Это добавит задержку и вызовет дополнительные издержки.