
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(또는 기타 OS) 릴리스에서 구현이 보장되지 않습니다. 일부 소스에서는 두 옵션이 모두 적법하다고 명시하고 있으며 아래 Red Hat 참조에서는 이것이SOCK_RAW
항상 매개변수라고 명시하고 있지만 iproute2는 두 옵션을 모두 교대로 사용합니다.