Как заставить strace «декодировать» связь AF_NETLINK, как с помощью ioctl?

Как заставить strace «декодировать» связь AF_NETLINK, как с помощью ioctl?

straceобычно «расшифровывает» ioctlвызовы, показывая, что они означают, даже разрешая имена сетевых интерфейсов и т. д.

Но та же операция, выполненная с использованием AF_NETLINK, остается непрозрачной в strace. Как научить straceзаглядывать в AF_NETLINKвещи? Есть ли патчи или форки с этой функцией?

sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\32\0\1\0\323K\255S\0\0\0\0\n\200\0\0\0\0\0\0\0\0\0\0\24\0\1\0"..., 48}], msg_controllen=0, msg_flags=0}, 0) = 48
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\224\0\0\0\30\0\0\0\323K\255S\3674\0\0\n\200\200\0\0\2\0\7\0\0\0\0\10\0\17\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 148

Пример «приготовленного» вывода strace сioctl

ioctl(4, SIOCGIFFLAGS, {ifr_name="veth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_ALLMULTI}) = 0

Фон AF_NETLINK

выдержка изВикипедия

Семейство AF_NETLINKпредлагает несколько подмножеств протоколов. Каждый из них взаимодействует с другим компонентом ядра и имеет другое подмножество сообщений. Следующий протокол упоминается в поле ниже:

  int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)

Не имеют стандарта SOCK_DGRAMи SOCK_RAWне гарантируют, что будут реализованы в данном выпуске Linux (или другой ОС). Некоторые источники утверждают, что оба варианта являются законными, и ссылка ниже от Red Hat утверждает, что это SOCK_RAWвсегда параметр, однако iproute2 использует оба взаимозаменяемо.

Связанный контент