- Berkeley Filter
-
Das Berkeley Filter, auch Berkeley Paket Filter (BPF), bietet auf unixähnlichen Computersystemen 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.
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.
Weblinks
- 1993 USENIX-Artikel zu BPF (PDF, englisch)
- FreeBSD-Entwicklergipfel-Präsentation zu Zero-copy buffer extensions für BPF (PDF, englisch)
- BPF-Hilfeseiten (englisch)
- Filterdefinitionssyntax (PDF, englisch)
- bpfc, BPF compiler für Linux (Teil des netsniff-ng toolkit)
Wikimedia Foundation.