IMMD Hauptseite Zurück Nach oben Weiter Hilfe BS - 12. März 1999

AKBP-II 1999: Gruppe 5


Projekt: FTPFS

Bearbeiter: Clemens Brogi & Rüdiger Kapitza

Projektziel:

Ziel des Projektes sollte es sein, transparent Verzeichnisse eines Ftpserver über einen Userlevel-Daemon in den Verzeichnisbaum zu mounten.

Grundstruktur

Das Softwarepaket besteht aus zwei Komponenten: einem ladbaren Kernelmodul (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.

Beschreibung der einzelnen Komponenten

Der Userlevel-Daemon

Er kommuniziert mit dem beim Mounten übergebenen FTP-Server. Die Verbindung wird sofort beim Mounten aufgebaut; dabei loggt der daemon sich als anonymer Benutzer ein. Der FTP-Kontrollkanal wird ständig offengehalten und für Datentransfers werden extra Socketverbindungen aufgebaut. Hierbei trat das Problem auf, dass nach dem Öffnen der Datenverbindung ein 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.

    Das Kernelmodul

    Das Kernelmodul besteht aus zwei Teilen: den VFS-Operationen und den Vnode-Operationen. Die VFS-Operationen realisieren die filesystemspezifischen Operation. Diese werden auf die geeigneten RPC-Calls abgebildet. Das Modul enthält als spezifische Datenstruktur eine Komponente, in der u.a. der name des Fileservers gespeichert wird. Von den Vnode-operationen wurden die folgenden implementier:
  • ftp_getattr
  • ftp_lookup
  • Diese beiden Funktion verwenden den get_attr-RPC-Call.

  • ftp_readdir
  • Liest ein Directory durch wiederholtes Aufrufen von list_1.

    In den Vnode-spezifischen Daten wird der Pfad auf dem FTP-Server gespeichert.

    Funktionalität, Einschränkungen und Erweiterungsmölichkeiten

    Nach dem Mounten kann in das Verzeichnis gewechselt werden und ein ls-Kommando durchgeführt werden. Probleme macht das cd über einen symboloschen Link, hierzu müsste die readlink Vnode-Operation implementiert werden. Das 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.


    Unser Server | Brief an Webmaster | Navigationshinweise | Suche