// IfsNameServ.decl -- internal definitions // Copyright Xerox Corporation 1979, 1981, 1984 // Last modified February 14, 1984 6:47 AM by Boggs // Requires previous get of Ifs.decl, Pup0.decl, and Pup1.decl get "IfsMisc.decl" get "IfsName.decl" manifest nameStatsVersion = 1 //---------------------------------------------------------------------------- structure Stats: //---------------------------------------------------------------------------- [ version word // = nameStatsVersion nameReqs word 2 // number of requests for name lookup dirReqs word 2 // number of requests to send directory cacheHits word 2 // number of name cache hits cacheMisses word 2 // number of name cache misses ] //---------------------------------------------------------------------------- structure NS: // 'global frame' for Name Server //---------------------------------------------------------------------------- [ stats @Stats globalLocks word = externalLock word // set by ptNameLockRequest bcstTimer word // counts 5-minute intervals bcstInterval word // dir bcst interval in units of 5 minutes ctx word // -> NameCtx for SendNetDir or ReceiveNetDir version word // current network directory version tree word // -> network directory B-tree (0 => none) treeLock @Lock // controls access to the B-tree ] manifest lenNS = size NS/16 //---------------------------------------------------------------------------- structure Hdr: // Network directory header //---------------------------------------------------------------------------- [ numNames word firstName word numAddrs word firstAddr word sizeEntrySpace word firstEntry word version word // version number ] manifest lenHdr = size Hdr/16 //---------------------------------------------------------------------------- structure Attr: // Network directory attribute block //---------------------------------------------------------------------------- [ name word // -> string value word // -> string ] //---------------------------------------------------------------------------- structure Entry: // Network directory entry block //---------------------------------------------------------------------------- [ nameListHdr word addrListHdr word numAttrs word attr↑1,1 @Attr ] //---------------------------------------------------------------------------- structure Addr: // Network directory address block //---------------------------------------------------------------------------- [ link word entry word port @Port numAttrs word attr↑1,1 @Attr ] //---------------------------------------------------------------------------- structure Name: // Network directory name block //---------------------------------------------------------------------------- [ link word entry word string @String ] // The directory tree is divided into two parts. In the first part, // the tree is organized by name, and in the second part by address. // All names are "less than" all addresses. //---------------------------------------------------------------------------- structure NDTE: // Network Directory Tree Entry //---------------------------------------------------------------------------- [ type byte // dteTypeName or dteTypeAddress length byte // in words name: // ndteTypeName variant [ string @String // name key ports↑1,1 @Port // corresponding addresses -- starts after string ] = address: // ndteTypeAddress variant [ port @Port // address key string @String // corresponding name ] ] manifest [ ndteTypeName = 1 ndteTypeAddress = 2 nameTreePages = 200 // max number of pages in network directory maxNPorts = 20 // max number of addresses per name ]