Resposta curta : você não pode, a menos que você a envolva em uma função de shell. Versão de um homem pobre:
function ifaddrmtu() {
# Call: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254
# or: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254 1400
local label=$1
local ip=$2
local mask=$3
local mtu=$4
sudo ip addr add $ip/$mask brd + dev ${label%:*} label $label
[ ! -z $mtu ] && sudo ip link set mtu $mtu dev $label
}
Agora, se você realmente quiser mapear o antigo comportamento ifconfig
para iproute2
, será necessário escrever um analisador, que mapeie ifconfig
sintaxe e semântica para iproute2
. Um pouco mais de dez anos atrás, eu escrevi um biest na concha para uma empresa que eu trabalhei. Se você precisar, posso tentar extraí-lo de um dos meus discos rígidos antigos. Foi muito legal e também veio com maneiras mais fáceis de mostrar as tabelas de roteamento e suas entradas.
Uma resposta mais detalhada : Usar a estrutura iproute2
adicionando um endereço IP e definindo o mtu de um dispositivo são duas coisas bastante diferentes do ponto de vista do kernel. Enquanto ifconfig
usa a comunicação ioctl de estilo antigo para alterar a configuração na pilha de rede do kernel (o kernel subseqüentemente faz todo o trabalho chamando internamente funções diferentes para adicionar um endereço IP e configurar o mtu), iproute2
usa o netlink
estrutura de mensagens para se comunicar com a pilha de rede.
É melhor vê-lo usando strace (trecho da minha VM do Linux):
# ip addr del 1.1.1.1/32 dev eth4
# strace -e ioctl ifconfig eth4:new 1.1.1.1 netmask 255.255.255.255 mtu 1400
ioctl(4, SIOCSIFADDR, {ifr_name="eth4:new", ifr_addr={AF_INET, inet_addr("1.1.1.1")}}) = 0
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFNETMASK, {ifr_name="eth4:new", ifr_netmask={AF_INET, inet_addr("255.255.255.255")}}) = 0
ioctl(4, SIOCSIFMTU, {ifr_name="eth4:new", ifr_mtu=1400}) = 0
# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
inet 1.1.1.1/32 scope global eth4:new
# ip addr del 1.1.1.1/32 dev eth4
# strace -e "send,sendmsg,recvmsg" ip addr add 1.1.1.1/32 dev eth4 label eth4:new
send(3, "function ifaddrmtu() {
# Call: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254
# or: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254 1400
local label=$1
local ip=$2
local mask=$3
local mtu=$4
sudo ip addr add $ip/$mask brd + dev ${label%:*} label $label
[ ! -z $mtu ] && sudo ip link set mtu $mtu dev $label
}
# ip addr del 1.1.1.1/32 dev eth4
# strace -e ioctl ifconfig eth4:new 1.1.1.1 netmask 255.255.255.255 mtu 1400
ioctl(4, SIOCSIFADDR, {ifr_name="eth4:new", ifr_addr={AF_INET, inet_addr("1.1.1.1")}}) = 0
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFNETMASK, {ifr_name="eth4:new", ifr_netmask={AF_INET, inet_addr("255.255.255.255")}}) = 0
ioctl(4, SIOCSIFMTU, {ifr_name="eth4:new", ifr_mtu=1400}) = 0
# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
inet 1.1.1.1/32 scope global eth4:new
# ip addr del 1.1.1.1/32 dev eth4
# strace -e "send,sendmsg,recvmsg" ip addr add 1.1.1.1/32 dev eth4 label eth4:new
send(3, "%pre%%pre%%pre%%pre%6R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0%pre%%pre%%pre%%pre%6R7%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"%pre%%pre%%pre%%pre%%pre%6R7%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8%pre%%pre%%pre%%pre%7R%pre%%pre%%pre%%pre% %pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 56}], msg_controllen=0, msg_flags=0}, 0) = 56
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$%pre%%pre%%pre%%pre%%pre%%pre%7R7%pre%%pre%%pre%%pre%%pre%%pre%08%pre%%pre%%pre%%pre%7R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36 = ?
# strace -e "send,sendmsg,recvmsg" ip link set mtu 1420 dev eth4
send(3, " %pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 32, 0) = 32
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"4%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%5777 %pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 8192}], msg_controllen=0, msg_flags=0}, 0) = 52
send(3, "%pre%%pre%%pre%%pre%;R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0%pre%%pre%%pre%%pre%;R0%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"%pre%%pre%%pre%%pre%%pre%;R0%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"(%pre%%pre%%pre%%pre%%pre%<R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 40}], msg_controllen=0, msg_flags=0}, 0) = 40
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$%pre%%pre%%pre%%pre%%pre%%pre%<R0%pre%%pre%%pre%%pre%%pre%%pre%(%pre%%pre%%pre%%pre%%pre%<R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36
# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1420 qdisc pfifo_fast state UP qlen 1000
inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
inet 1.1.1.1/32 scope global eth4:new
%pre%%pre%6R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0%pre%%pre%%pre%%pre%6R7%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"%pre%%pre%%pre%%pre%%pre%6R7%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8%pre%%pre%%pre%%pre%7R%pre%%pre%%pre%%pre% %pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 56}], msg_controllen=0, msg_flags=0}, 0) = 56
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$%pre%%pre%%pre%%pre%%pre%%pre%7R7%pre%%pre%%pre%%pre%%pre%%pre%08%pre%%pre%%pre%%pre%7R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36 = ?
# strace -e "send,sendmsg,recvmsg" ip link set mtu 1420 dev eth4
send(3, " %pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 32, 0) = 32
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"4%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%5777 %pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 8192}], msg_controllen=0, msg_flags=0}, 0) = 52
send(3, "%pre%%pre%%pre%%pre%;R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0%pre%%pre%%pre%%pre%;R0%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"%pre%%pre%%pre%%pre%%pre%;R0%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%I%pre%%pre%%pre%%pre%%pre%%pre%"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"(%pre%%pre%%pre%%pre%%pre%<R%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%"..., 40}], msg_controllen=0, msg_flags=0}, 0) = 40
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$%pre%%pre%%pre%%pre%%pre%%pre%<R0%pre%%pre%%pre%%pre%%pre%%pre%(%pre%%pre%%pre%%pre%%pre%<R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36
# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1420 qdisc pfifo_fast state UP qlen 1000
inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
inet 1.1.1.1/32 scope global eth4:new
É claro que existem mais razões pelas quais um endereço IP e a configuração do mtu para uma entrada de dispositivo são duas coisas diferentes. Digamos apenas que os endereços IP não pertencem realmente às interfaces, como sugerido por ifconfig
. O nome é meramente um rótulo usado como um nome de interface que a base de informações de encaminhamento (FIB) usa para pesquisar / filtrar e rotear pacotes para. O kernel de um ponto de vista de manipulação de pacotes poderia muito bem viver sem o nome do dispositivo.