Der FTP-Daemon

1. Aufgabe
Der FTP-Daemon soll Requests vom Kernel entgegennehmen und behandeln. Die Ergebnisse schickt er dann wieder in den Kernel zurück. Er "bedient" also sozusagen unser Filesystem-Modul von aussen.
Sein Aufgabebereich umfasst die folgenden Punkte"
Inodenummerverwaltung:
Der Userdaemon verwaltet die Inodenummern für alle Dateien im gemounteten Filesystem. Requests aus dem Kernel kommen meist mit der Inodenummer der betreffenden Datei.
Attributanfragen:
Wenn der Kernel die Attribute einer bestimmten Datei wissen will, dann bestimmt der Userdaemon aus der übergebenen Inodenummer den Dateinamen und besorgt sich die Attribute.
Datentransfer:
Falls das Kernelmodul eine Leseanforderung übermittelt, besorgt der Daemon die Daten und liefert sie zurueck in dem Kern. Das Schreiben funktioniert analog.

2. Der Start
Der Daemon wird bei jedem Mount gestartet, da immer eine Daemon einen Mountpunkt bedient. Dann übermittelt er dem Kernel den Namen des Root Vnodes (z.B. ftp.uni-erlangen.ftp) sowie die Inode-Nummer für diesen Vnode.

3. Auszüge aus der Funktionsweise
Im Folgenden werden wir einige wichtige Requests des Kernels und die Reaktionen des Daemons darstellen:
Attributanfragen:
Will der Kern z.B. wissen, ob es sich bei einer Datei um ein Verzeichniss oder eine reguläre Datei handelt, so muss zunaechst der Dateiname bestimmt werden. Mit Hilfe seiner lokalen Lookup-Tabelle bestimmt der Daemon den Namen aus der vom Kern übergebenen Inodenummer. Sodann kann er mittels ftp-Komandos die gewünschte Informtaion besorgen.
Auslesen von Verzeichnissen:
Auch hier wird analog zu den Attributanfragen ein entsprechendes ftp-Kommando abgeschickt und die Antwort an den Kern weitergeleitet.
Öffnen einer Datei:
Wird eine Datei geöffnet, so kopiert der Daemon sie in ein lokales Verzeichniss (Es ist auch denkbar, die Datei im Speicher zu halte, was aber bei grossen Dateien zu Problemen führen könnte). Als Namen für die lokale Kopie der Datei benutzt er die Inodenummer und hängt noch seine Prozess-Id dran. Da die Inodenummern pro gemountetem Filesystem eindeutig sind, kommt es so zu keinen Überschneidungen.
Lesen einer Datei:
Vor dem Lesen wurde die Datei bereits geöffnet. D.h. es existiert bereits eine lokale Kopie. Die Leseaufrufe können nun also einfach in lokale Leseaufrufe umgesetzt werden. Die angeforderten Daten werden dann in den Kern zurückgeschickt.

4. Strukturen im Daemon
Der Daemon hat lokal eine Lookup-Tabelle. Hier sind die Inode-Nummern und die Dateinummern eingetragen.
Bei jedem Auslesen eines Verzeichnisses wird üeberpüft, ob bereits ein Eintrag für die entsprechende Datei angelegt worden ist. Wenn nicht, so wird sie mit einer neuen, eindeutigen Inodenummer eingetragen.