Я запускаю пример скрытой копии https://github.com/iovisor/bcc/blob/master/examples/networking/http_filter/http-parse-simple.c, в котором комментарий поясняет:
/*
eBPF program.
Filter IP and TCP packets, having payload not empty
and containing "HTTP", "GET", "POST" ... as first bytes of payload
if the program is loaded as PROG_TYPE_SOCKET_FILTER
and attached to a socket
return 0 -> DROP the packet
return -1 -> KEEP the packet and return it to user space (userspace
can read it from the socket_fd )
*/
И когда я запустил этот пример, я увидел, что когда я запускаю пакет UDP (например, dig) или пакет icmp (ping), пользователь-программист действительно не получает пакет.
Но программа ping или dig не падает.
В моем понимании, эти Non-TCP пакеты должны быть отброшены (ожидаю, что ping или dig не пройдут), но это не так.
Так в чем причина?
И можно ли как-то еще сбросить skb_buff, используя ebpf/bcc?