Я делаю простой ping 192.168.205.206
и могу видеть в strace:
...
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(1025), sin_addr=inet_addr("192.168.205.206")}, 16) = -1 EINVAL (Invalid argument)
...
однако, когда я делаю ping 192.168.205.127
, strace:
...
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(1025), sin_addr=inet_addr("192.168.205.127")}, 16) = 0
...
Кажется внутри Системный вызов connect () что-то странное произошло.
На этом хосте очень сложная таблица маршрутизации и настройка сети.
Когда я делаю ip r get 192.168.205.206
, strace:
...
socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
setsockopt(3, SOL_NETLINK, 11, [1], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=26471, groups=00000000}, [12]) = 0
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\0\0\0\32\0\1\0\311m*^\0\0\0\0\2 \0\0\0\0\0\0\0\20\0\0\10\0\1\0"..., 36}], msg_controllen=0, msg_flags=0}, 0) = 36
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\2\0\0\0\311m*^gg\0\0\352\377\377\377$\0\0\0\32\0\1\0\311m*^"..., 32768}], msg_controllen=0, msg_flags=0}, 0) = 56
write(2, "RTNETLINK answers: Invalid argum"..., 36RTNETLINK answers: Invalid argument
...
но strace of ip r get 192.168.205.127
:
...
socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
setsockopt(3, SOL_NETLINK, 11, [1], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=3070, groups=00000000}, [12]) = 0
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\0\0\0\32\0\1\0\ro*^\0\0\0\0\2 \0\0\0\0\0\0\0\20\0\0\10\0\1\0"..., 36}], msg_controllen=0, msg_flags=0}, 0) = 36
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"p\0\0\0\30\0\0\0\ro*^\376\v\0\0\2 \0\0\376\0\0\1\0\2\0\0\10\0\17\0"..., 32768}], msg_controllen=0, msg_flags=0}, 0) = 112
...
write(1, "192.168.205.127 via 169.254.0.1 "..., 71192.168.205.127 via 169.254.0.1 dev bond0.33 src 100.10.1.2 uid 0
) = 71
...
В чем причина Invalid argument
и как понять это из вывода или путем выполнения других шагов (возможно, чтение исходного кода ядра)?