Aufgabe 4:
Lernziel
- Verständnis für die Socket-Programmierung mit UDP/IP
- Verständnis von SUN-RPC
Aufgabenbeschreibung
Der bisher implementierte Client soll im Rahmen der vierten Aufgabe verteilt werden. Zu diesem Zweck soll das bisher verwendete ext2-Dateisystem (siehe Aufgabe 2) auf ein SNFS umgestellt werden. Für diese Umstellung soll die Kommunikationsschnittstelle sowie der SNFS-Server implementiert werden.
Wie NFS besteht auch SNFS aus zwei Hauptteilen: einem Server und einem oder mehreren Clienten. Der Client greift über ein Netzwerk auf Daten (Dateien, Verzeichnisse) zu, die auf dem Server gespeichert sind. Der Zugriff auf den Server erfolgt über SUN-RPCs (siehe Aufgabe 3), die mit Hilfe des UDP-Protokolls verschickt werden. Das SNFS-Protokoll ist zustandsfrei, d.h. es werden keinerlei Zustandsinformationen der Clienten gepeichert und es besteht auch keine ständige direkte Verbindung zwischen Client und Server. Ein Client wiederholt eine Anfrage an den Server so lange, bis der Server antwortet. SNFS unterstützt dabei die folgenden Operationen:
- Procedure 0: NULL - Do nothing
- Procedure 1: GETATTR - Get file attributes
- Procedure 2: SETATTR - Set file attributes
- Procedure 3: LOOKUP - Lookup filename
- Procedure 4: ACCESS - Check access permission
- Procedure 5: READ - Read from file
- Procedure 6: WRITE - Write to file
- Procedure 7: CREATE - Create a file
- Procedure 8: REMOVE - Remove a file
- Procedure 9: RENAME - Rename a file or directory
- Procedure 10: LINK - Create Link to an object
- Procedure 11: MKDIR - Create a directory
- Procedure 12: RMDIR - Remove a directory
- Procedure 13: READDIR - Read from directory
- Procedure 14: ROOT - Lookup root directory
- Procedure 15: FSSTAT - Get file system information
Im Gegensatz zu NFS stellt ein SNFS-Server nur die Daten eines Dateisystem-Images zur Verfügung. Die Auswahl des Servers beschränkt damit auf ein definiertes Dateisystem. Es werden auch keine weiteren Daemons (zum Mounten, usw.) benötigt, so dass die vom Server zur Verfügung gestellten Daten direkt abgerufen werden können.
Implementierungshinweise
Die Umsetzung der Aufgabe gliedert sich in zwei Teile: die Kommunikationsschnittstelle und der Server.- Teil A
-
Der erste Teil der Aufgabe besteht aus der Umsetzung der Kommunikationsschnittstelle.
Die Vorgabe enthält dazu eine XDR-Beschreibung mit deren Hilfe ihr die
Kommunikationsschnittstelle generieren könnt. Die so generierten Datentypen
und Methoden müssen dann nur noch an entsprechender Stelle in den Client
integriert werden. Zum Testen der Kommunikationsschnittstelle kann der Server
vorerst so implementiert werden, dass er für jeden Aufruf Standardwerte
zurückliefert.
Hinweis: Eine Beispielbeschreibung wie ein SUN-RPC basiertes Client/Servers implementiert werden kann, könnt ihr der folgenden Beschreibung entnehmen.
Weitere Infos:rpcgen(1)
- Teil B
- Nachdem ihr die Kommunikationsschnittstelle für den SNFS in den Clienten integriert habt, solltet ihr das von euch in Aufgabe 2 umgesetzte Dateisystem in den Server integrieren.
Vorgabe
Die Vorgabe zu Aufgabe 4 enthält zusätzlich zu den Schnittstellen des SNFSs zum Client auch die XDR-Beschreibung der Kommunikationsschnittstelle.
Hilfestellung
- RPC Definition (Wikipedia.org)
- RPC Protokoll Spezifikation (RFC 1057)
- NFS Definition (Wikipedia.org)
- Das FreeBSD-Handbuch (NFS - Network File System)
- Internet Encyclopedia (NFS Protocol Overview)
- NFS Protokoll Spezifikation (RFC 1094)