strace で ioctl と同じように AF_NETLINK 通信を「デコード」するにはどうすればよいですか?

strace で ioctl と同じように AF_NETLINK 通信を「デコード」するにはどうすればよいですか?

strace通常は、呼び出しを「解読」してioctlその意味を表示し、ネットワーク インターフェイス名などを解決します。

しかし、AF_NETLINK を使用して実行された同じ操作は、 では不透明なままです。 物事を調べる方法をstraceどのように教えればよいでしょうか? この機能のパッチまたはフォークはありますか?straceAF_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 (または他の OS) リリースで実装されることは保証されません。一部のソースでは、両方のオプションが正当であると述べられており、Red Hat からの以下の参照では、SOCK_RAW常にパラメーターであると述べられていますが、iproute2 では両方を互換的に使用します。

関連情報