Für fli4l setzen wir den im Link angegebenen Ausdruck ein:
'outbound and not icmp[0] != 8 and not tcp[13] & 4 != 0'und erreichen damit, daß grundsätzlich nur vom lokalen Netz ins Internet gesendete Packete die Verbindung offen halten, mit ein paar Ausnahmen:
Dieser Ausdruck wird normalerweise vom PPPD in einen vom Kernel verwendbaren Paket-Filter umgesetzt. Dieser würde in diesem Beispiel wir folgt aussehen:
# # Expression: outbound and not icmp[0] != 8 and not tcp[13] & 4 != 0 # (000) ldb [0] (001) jeq #0x0 jt 17 jf 2 (002) ldh [2] (003) jeq #0x21 jt 4 jf 18 (004) ldb [13] (005) jeq #0x1 jt 6 jf 11 (006) ldh [10] (007) jset #0x1fff jt 18 jf 8 (008) ldxb 4*([4]&0xf) (009) ldb [x + 4] (010) jeq #0x8 jt 18 jf 17 (011) jeq #0x6 jt 12 jf 18 (012) ldh [10] (013) jset #0x1fff jt 18 jf 14 (014) ldxb 4*([4]&0xf) (015) ldb [x + 17] (016) jset #0x4 jt 17 jf 18 (017) ret #0 (018) ret #4
Dieser Code muß generiert werden und dazu enthält der pppd normalerweise einen kleinen Compiler, der Ausdrücke in den entsprechenden Code für den Paketfilter des Kerns umwandelt. Dieser Code würde denn ppp-Daemon jedoch um 100Kbyte vergrößern und damit sinnlos Platz auf der Floppy verschwenden. Deshalb wurde beschlossen, den Compiler aus dem pppd rauszunehmen und separat zur Verfügung zu stellen (pfc). Der pppd liest dann lediglich den offline compilierten Code und übergibt ihn an den Kern. Der vorcompilierte Filterausdruck liegt unter opt/etc/ppp/filter.
Will man den von fli4l verwendeten Ausdruck verändern, muß man den Paketfiltercode neu generieren. Dazu benötigt man den packet filter compiler. Zum Compilieren setzt man entweder OPT_PFC auf yes und compiliert den Ausdruck auf dem Router oder man übersetzt das unter src/base liegende pfc.c auf einem Unix-System (dazu benötigt man libpcap) und übersetzt den Ausdruck dann auf diesem System. Das Ergebnis (eine Menge Zeilen mit jeweils 4 Zahlen) kopiert man dann nach opt/etc/ppp/filter und baut eine neue floppy.
Das Fli4l-Team