Berkeley Packet Filter
# Berkeley Packet Filter

Das Berkeley Packet Filter (BPF), auch Berkeley-Filter, bietet auf unixähnlichen Betriebssystemen eine Schnittstelle zur Sicherungsschicht an, die es erlaubt, Datenpakete der Sicherungsschicht zu senden und zu empfangen. Falls der Treiber der Netzwerkschnittstelle den Promiscuous Mode unterstützt, kann die Schnittstelle in diesen Modus geschaltet werden, damit alle Pakete des Netzwerkes, auch jene, die für andere Netzwerkadapter bestimmt sind, empfangen werden können.

Das BPF unterstützt außerdem das Filtern von Datenpaketen, damit nur interessante Pakete verarbeitet werden und somit Rechenleistung gespart wird.

Die Berkeley-Filter-Funktionalität ist als Interpreter in Maschinensprache für die BPF-VM implementiert. Computerprogramme können somit Daten aus dem Paket lesen, arithmetische Operationen darauf ausführen, das Resultat gegen die Filterdefinition vergleichen und anschließend das Paket akzeptieren oder verwerfen. Auf manchen Systemen, einschließlich FreeBSD und WinPcap, wird Just-in-time-Kompilierung (Konvertierung von Instruktionen der virtuellen Maschine in Maschinensprache) unterstützt, um die Leistung des Systems zu verbessern. Seitdem auch unter Linux die Just-in-time-Kompilierung unterstützt wird, entwickelt sich der BPF dort zu einer universalen virtuellen Maschine im Kernel. BPF ist ein offizielles Back-End für LLVM (ab Version 3.7).

Der Interpreter kann im Kernel-Modus oder Benutzer-Modus laufen. Kernel-Modus-Interpreter werden z. B. für Socket-Filter unter Linux oder WinPcap-Mechanismen benutzt. Einen Benutzer-Modus-Interpreter bietet die libpcap-/WinPcap-Implementierung des Pcap-API. Auf Systemen ohne Kernel-Modus-Unterstützung für den Filtermechanismus können damit Pakete im Benutzermodus gefiltert werden.

2007 wurden von Robert Watson und Christian Peron die Zero-copy buffer extensions zur BPF-Implementierung hinzugefügt. Damit können vom Gerätetreiber erfasste Pakete direkt in den Speicher von Programmen im Benutzermodus geschrieben werden und es entfällt ein zusätzliches Kopieren der Daten.

