TC-Filter mit BPF und NFTables-Paketmarkierung

TC-Filter mit BPF und NFTables-Paketmarkierung

Ich habe ein TC BPF-Ingress-Programm erstellt und möchte, dass es nur bestimmte Pakete verarbeitet, die durch NFTables markiert sind. Hier ist meine NFTables-Tabelle, die die bestimmten Pakete markiert:

table ip compressor_tc {
        chain prerouting {
                type nat hook prerouting priority -99; policy accept;
                ip daddr 10.50.0.3 tcp dport != ssh mark set 0x00000007
                ip saddr 10.50.0.4 udp dport 1337 mark set 0x00000008
        }
}

Ich habe das qdiscVia erstellt:

tc qdisc add dev ens18 root handle 1: prio 

Jetzt versuche ich, das TC BPF-Programm anzuhängen und es nur auf markierte Pakete anzuwenden (in diesem Fall markiert als 7):

tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1 bpf obj testBPF_Prog.o section test

Ich erhalte jedoch Folgendes:

root@test02:/home/dev/CompressorV2_TC/src# tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1 bpf obj testBPF_Prog.o section test
What is "bpf"?
Usage: ... fw [ classid CLASSID ] [ indev DEV ] [ action ACTION_SPEC ]
       CLASSID := Push matching packets to the class identified by CLASSID with format X:Y
                  CLASSID is parsed as hexadecimal input.
       DEV := specify device for incoming device classification.
       ACTION_SPEC := Apply an action on matching packets.
       NOTE: handle is represented as HANDLE[/FWMASK].
             FWMASK is 0xffffffff by default.

Wenn ich mache:

tc filter add dev ens18 parent 1:0 bpf obj testBPF_Prog.o section test

Das TC BPF-Programm verbindet sich einwandfrei, scannt aber alle Pakete. Wenn ich das tue:

tc filter add dev ens18 parent 1:0 prio 1 handle 7 fw flowid 1:1

Dies gibt keine Fehler aus, aber das BPF-Programm ist nicht angehängt.

Mir scheint, dass das TC-Programm nicht weiß, wann der fwParameter endet. Daher denkt es, der bpfParameter sei ein Teil des fwParameters.

Ich frage mich, ob es möglich ist, diese Anweisungen zu trennen, und wenn ja, ob ich damit mein Ziel erreichen kann. Ich habe mir die Online-Dokumentation angesehen, aber keine Möglichkeit gefunden, dies zu tun.

Ich mache dies auf einer Ubuntu 18.04 LTS VM mit Kernel 5.6.1-050601-generic.

Ich bin ziemlich neu im Bereich TC-Filter. Daher entschuldige ich mich, wenn ich etwas Offensichtliches übersehe.

Wir sind für jede Hilfe sehr dankbar und danken Ihnen für Ihre Zeit!

verwandte Informationen