// // File: if/locator.idl // // Description: Interface for name resolution // /* our datatypes & exceptions */ #include <types.idl> const interfaceid_t ANY_INTERFACE = 0xffffffff; const interfaceid_t NO_INTERFACE = 0; const objectid_t INVALID_OBJECT = 0xffffffff; const objectid_t ROOT_DIRECTORY_HANDLE = 0; const uint16_t NAME_LENGTH = 64; /** * Querying interface, that allows picking named entries from directories. * Implemented by locator, fileserver and others. */ [uuid(IF_DIRECTORY_ID)] interface IF_DIRECTORY { /** * Query the directory specified with @p directory_handle for an entry with * name @p name, that supports interface @p interface. If you wanna query * the toplevel directory then you can use ROOT_DIRECTORY_HANDLE. It * returns a server that speaks this interface and an object handle for * this server */ void GetEntry(in objectid_t directory_handle, in string name, in interfaceid_t interfaceid, out L4_ThreadId_t server, out objectid_t object_handle) raises(not_supported, not_found, invalid_objectid); }; /** * Interface implemented by the locator, so that other operating system servers * can announce their services. */ [uuid(IF_NAMING_ID)] interface IF_NAMING { /** * Register the current server at the locator. * The server gets registered with name @p name and interface * @p interfaceid. You can register a server multiple times with different * interfaces or names. */ void Register(in string name, in interfaceid_t interfaceid, in objectid_t root_directory) raises(already_registered); /** * Unregisters an existing @p name, @p interface entry. If no such entry * exists nothing happens. */ void Unregister(in string name, in interfaceid_t interfaceid); }; /** * Interface for querying a list of entries in a directory. May be implemented * by servers that implemented IF_DIRECTORY. */ [uuid(IF_ENUMERABLE_ID)] interface IF_ENUMERABLE { /** * Returns the nth entry of a directory. You can only query for entries * with a specific interface or any interface by using the ANY_INTERFACE * constant. * The returned server is L4_nilthread if the entry doesn't exist. */ void EnumerateEntry(in objectid_t directory_handle, in interfaceid_t interfaceid, in L4_Word_t entry, out L4_ThreadId_t server, out objectid_t object_handle, out string name) raises(invalid_objectid); };