ftpfs) und einem
Userleveldaemon (ftpd). Weiterhin wurde ein spezielles mount-Kommando implementiert.
Die Kommunikation mit dem FTP-Server erfolgt vom Daemon aus, der wiederum per RPC mit dem Kernelmodul kommuniziert.
accept auf den Socket gemacht
werden muss, wodurch der Prozess blockiert wird, aber er muss anschliessend auf dem Kontrollkanal dem Server die Socketnummer mitteilen.
Zur Lösung dieses Problems bieten sich zwei Ansätze: der eine über den select Systemaufruf, die gewählte Lösung verwendet einen extra Thread hierfür.
Der Daemon bietet die folgenden Operationen an: (in Klammern sind die RPC-Calls angegeben)
connect_server: (connect_1)Diese Funktion baut eine Verbindung zum als Argument mitgegeben Server auf. Sie wird vom Filesysemmodul beim Mount aufgerufen.
dir_cmd (list_1)Diese Funktion wird zum Auslesen eines Verzeichnisses verwendet. Als Aufrufparameter erhä sie den Pfad und liefert pro Aufruf den nächsten Verzeichniseintrag zurück. Das zu lösende Problem war, dass die Anzahl der Einträge im Verzeichnis nicht im Voraus bekannt ist. Deshalb liest der Daemon das Verzeichnis nur einmal ein und speichert die Einträge in einer Liste.
get_file (read_1)Dieses Kommando soll das Lesen aus einer Datei ermöglichen. Es erhält als Parameter den Pfadnamen. Die Datei wird vom FTP-Server in ein lokales Verzeichnis geladen und sollte von da aus an das Modul weitergegeben werden. Das Herunterladen der Datei ist implementiert, die Integration aber nicht durchgeführt. Das Lesen aus der Datei lässt sich aber wie das Lesen eines Verzeichnisses realisieren.
get_attr_cmd (get_attr_1)Diese Funktion liefert die Dateiattribute zu einem als Argument übergebenen Pfad. Die Dateiattribute müsen aus der Ausgabe des FTP LIST-Kommandos zusammengebaut weden und sind deshalb nat. im Grunde Servertyp spezifisch. Die Prozedur kann im Moment Datei-Attribute und Grösse auswerten, für die anderen Merkmale werden Dummywerte gesetzt.
cwd_cmd (cwd_1)Die Prozedur führt einen Wechsel in das gegebene Verzeichnis durch.
closedown (close_1)Mit dieser Prozedur wird beim Unmount die FTP-Sitzung beendet.
ftp_getattr ftp_lookup
Diese beiden Funktion verwenden den get_attr-RPC-Call.
ftp_readdir list_1.
In den Vnode-spezifischen Daten wird der Pfad auf dem FTP-Server gespeichert.
cd .. macht mitunter Probleme. Parallele Suchen in Verzeichnissen funktionieren nicht. Im Moment ist es noch nicht möglich, mehrere FTP-Server zu mounten, dazu müssten die Datenstrukturen im Daemon erweitert werden. Ein weiteres nicht gelöstes Problem ist der Timeout des FTP-Servers. Dies könnte man durch ein reconnect lösen oder indem die "sync" Operation des Filesystems ausnutzt, um zyklisch eine Operation am Server aufzurufen. Es fehlt noch die Vnode-Verwaltung.