Der "Berkeley Packet Filter" (BPF) ist eine im Linux-Kernel eingebaute Engine für die Ausführung spezieller Nutzerprogramme, die zunächst für FreeBSD entwickelt worden sind. Die ursprüngliche Fassung des BPF für Linux ist bereits Anfang der 1990er-Jahre in den Kernel 2.5 aufgenommen worden und diente hauptsächlich dazu, Netzwerktools wie tcpdump zu unterstützen. Dieser klassische BPF (classical BPF oder cBPF) kennt nur einen sehr eingeschränkten Befehlssatz speziell für die Auswertung beziehungsweise das Filtern von Netzwerkpaketen. Werkzeuge im Userspace können dafür jederzeit passenden Assembler-Code generieren und einfach in die BPF-Engine im laufenden Kernel zur Ausführung schieben. Das injizierte Programm wird dann dort immer wieder über jedes eintreffende Paket ausgeführt.
Ein so im Kernel angesetzter Paketfilter kann somit direkt im Inneren des Systems arbeiten und Pakete aussortieren, ohne dass diese zunächst aufwendig in den Userspace gebracht werden, dort selektiert und dann auch wieder zurückgeführt werden müssen. Das bringt für den Bearbeitungs- beziehungsweise Filterdurchsatz einen deutlichen Geschwindigkeitsvorsprung mit sich. Seit 2014 (Kernel 3.15) ist der BPF im Linux-Kernel schrittweise weiter ausgebaut worden, und die moderne Fassung wird gegenüber der originalen Spezifikation mittlerweile als "extended" BPF (eBPF) bezeichnet oder gegenüber dem cBPF auch einfach nur "BPF" genannt. Klassischer BPF-Code, wie
...Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.