EINVAL на connect () в выводе strace во время пинга - PullRequest
0 голосов
/ 24 января 2020

Я делаю простой 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 и как понять это из вывода или путем выполнения других шагов (возможно, чтение исходного кода ядра)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...