Я запускаю пример b cc / 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 не удаляется.
В моем понимании эти не-TCP-пакеты должны быть отброшены (я ожидаю, что ping или dig потерпят неудачу), но это не так.
Так в чем причина?
И есть ли еще способ отбросить skb_buff, используя ebpf / b cc?