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>
15 static void nlmsg(struct pkt_buff
*pkt
)
17 struct nlmsghdr
*hdr
= (struct nlmsghdr
*) pkt_pull(pkt
, sizeof(*hdr
));
25 /* Look up the process name if message is not coming from the kernel.
27 * Note that the port id is not necessarily equal to the PID of the
28 * receiving process (e.g. if the application is multithreaded or using
29 * multiple sockets). In these cases we're not able to find a matching
30 * PID and the information will not be printed.
32 if (hdr
->nlmsg_pid
!= 0) {
36 snprintf(path
, sizeof(path
), "/proc/%u/exe", hdr
->nlmsg_pid
);
37 ret
= readlink(path
, procname
, sizeof(procname
) - 1);
41 snprintf(procname
, sizeof(procname
), "kernel");
44 tprintf("Len %u, ", hdr
->nlmsg_len
);
45 tprintf("Type 0x%.4x (%s%s%s), ", hdr
->nlmsg_type
,
47 nl_nlmsgtype2str(hdr
->nlmsg_type
, type
, sizeof(type
)),
49 tprintf("Flags 0x%.4x (%s%s%s), ", hdr
->nlmsg_flags
,
51 nl_nlmsg_flags2str(hdr
->nlmsg_flags
, flags
, sizeof(flags
)),
53 tprintf("Seq-Nr %u, ", hdr
->nlmsg_seq
);
54 tprintf("PID %u", hdr
->nlmsg_pid
);
56 tprintf(" (%s%s%s)", colorize_start(bold
), basename(procname
),
61 static void nlmsg_less(struct pkt_buff
*pkt
)
63 struct nlmsghdr
*hdr
= (struct nlmsghdr
*) pkt_pull(pkt
, sizeof(*hdr
));
69 tprintf(" NLMSG %u (%s%s%s)", hdr
->nlmsg_type
, colorize_start(bold
),
70 nl_nlmsgtype2str(hdr
->nlmsg_type
, type
, sizeof(type
)),
74 struct protocol nlmsg_ops
= {
76 .print_less
= nlmsg_less
,