2 * netsniff-ng - the packet sniffing beast
3 * Copyright 2014 Tobias Klauser.
4 * Subject to the GPL, version 2.
9 #include <libnl3/netlink/msg.h>
16 static void nlmsg(struct pkt_buff
*pkt
)
18 struct nlmsghdr
*hdr
= (struct nlmsghdr
*) pkt_pull(pkt
, sizeof(*hdr
));
26 /* Look up the process name if message is not coming from the kernel.
28 * Note that the port id is not necessarily equal to the PID of the
29 * receiving process (e.g. if the application is multithreaded or using
30 * multiple sockets). In these cases we're not able to find a matching
31 * PID and the information will not be printed.
33 if (hdr
->nlmsg_pid
!= 0) {
37 snprintf(path
, sizeof(path
), "/proc/%u/exe", hdr
->nlmsg_pid
);
38 ret
= readlink(path
, procname
, sizeof(procname
) - 1);
42 snprintf(procname
, sizeof(procname
), "kernel");
45 tprintf("Len %u, ", hdr
->nlmsg_len
);
46 tprintf("Type 0x%.4x (%s%s%s), ", hdr
->nlmsg_type
,
48 nl_nlmsgtype2str(hdr
->nlmsg_type
, type
, sizeof(type
)),
50 tprintf("Flags 0x%.4x (%s%s%s), ", hdr
->nlmsg_flags
,
52 nl_nlmsg_flags2str(hdr
->nlmsg_flags
, flags
, sizeof(flags
)),
54 tprintf("Seq-Nr %u, ", hdr
->nlmsg_seq
);
55 tprintf("PID %u", hdr
->nlmsg_pid
);
57 tprintf(" (%s%s%s)", colorize_start(bold
), basename(procname
),
62 static void nlmsg_less(struct pkt_buff
*pkt
)
64 struct nlmsghdr
*hdr
= (struct nlmsghdr
*) pkt_pull(pkt
, sizeof(*hdr
));
70 tprintf(" NLMSG %u (%s%s%s)", hdr
->nlmsg_type
, colorize_start(bold
),
71 nl_nlmsgtype2str(hdr
->nlmsg_type
, type
, sizeof(type
)),
75 struct protocol nlmsg_ops
= {
77 .print_less
= nlmsg_less
,