I 컴파일 BPF의 예와 함께 작동하지 않습니다간단한 eBPF은 매우 간단 변화위원회 (리눅스 커널 트리에서) <code>samples/bpf/pare_simple.c</code>에서
SEC("simple")
int handle_ingress(struct __sk_buff *skb)
{
return TC_ACT_SHOT;
}
그래서 나는 어떤 패킷이 삭제되고 싶어요. 다음과 같이 설치합니다 :
우분투 16.04.3 LTS에서 커널 4.4.0-98, llvm 및 패키지에서 3.8 버전의 clang이 설치되면 iproute2가 github의 최신 버전입니다.
$ tc qdisc add dev eth0 clsact
$ tc filter add dev eth0 ingress bpf \
object-file ./net-next.git/samples/bpf/parse_simple.o \
section simple verbose
Prog section 'simple' loaded (5)!
- Type: 3
- Instructions: 2 (0 over limit)
- License: GPL
Verifier analysis:
0: (b7) r0 = 2
1: (95) exit
processed 2 insns, stack depth 0
는 그래서 내가 eth0
인터페이스, 예를 들어,에 유입 트래픽을 생성, 그것은 그러나이 필터/ebpf가 패킷을 드롭하지 않습니다 성공적으로 설치 보인다 ICMP, 그리고 그것을 전달합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
커맨드 라인에서'direct-action' tc 플래그로 시도해주십시오 ('verbose' 이전에) ([see here] (https://git.kernel.org/pub/scm/linux/kernel) /git/torvalds/linux.git/commit/?id=045efa82ff563cd4e656ca1c2e354fa5bf6bbda4)) – Qeole
@Qeole, 정말로 도움이되었습니다. 감사합니다! 이 플래그는 무엇을 나타 냅니까? – Mark
좋은 질문, 나는 그것에 대답하기 위해 블로그 게시물을 만들려고했지만 시간을 찾지 못했습니다 :) 여기에 적절한 대답의 몇 가지 설명이 있습니다 – Qeole