Transparent Interconnection of Lots of Links (TRILL): Edge Directory Assistance Mechanisms
Extracted elements (30)
The Active Uncompleting (S7) and Going Stand-By Was Complete (S6) transition states exist to ensure that the information indicating a directory will no longer be complete has enough time (the Time Condition) to propagate to all edge TRILL switches before the server stops advertising updates. Without these states, a rapid sequence of 'incomplete' configuration followed by Stand-By Condition could leave switches with stale completeness assumptions.
Pull Directory version negotiation uses the Ver field in paired messages. If a responder does not understand the version in a request, it MUST send a 'Version not understood' error correctly formatted for that version. Consequently, all implementations supporting any version X MUST be able to send a Version not understood error formatted for all lower versions down to version 0.
A TRILL switch using Pull Directory services MUST be able to detect that a Pull Directory from which it has cached data is no longer data reachable, so it can discard such cached data.
All RESPONSE Records answering any particular QUERY Record MUST occur in the same Response Message. If a Pull Directory holds more mappings than fit in one Response Message, it selects which to include and sets the OV (overflow) flag in all RESPONSE Records for that query.
Each Push Directory server MUST participate in ESADI for the Data Labels for which it will push mappings and MUST set the PDSS field in its ESADI-Parameter APPsub-TLV for that Data Label to a non-zero value to advertise its availability.
If a Data Label is being served by complete Push Directory servers, advertising locally learned MAC attachment via MAC-Reachability TLV generally SHOULD NOT be done, as it wastes bandwidth and ESADI link-state space.
If a TRILL switch is not capable of handling partial responses to queries with multiple QUERY Records, it MUST NOT send a Query Message with more than one QUERY Record in it.
Secondary directory servers re-originating data from a primary server SHOULD assign a confidence level at least one less than that received from the primary server, to reflect that secondary data is necessarily less fresh.
Unless it sends all responses with a Lifetime of 0, a Pull Directory MUST take action by sending Update Messages to minimize the time a TRILL switch will continue to use stale information. If Method 3 tracking is used, the server MUST NOT clear the need-to-update indication until it receives an Acknowledge Message or has sent a configurable number of updates (default: 3 updates 100 ms apart).
When a Push Directory server is no longer data reachable (as indicated by the IS-IS link-state database), other TRILL switches MUST ignore any Push Directory data from that server, because it is no longer being updated and may be stale.
Directory information reveals the mapping of MAC and IP addresses to edge RBridges (and optionally specific ports), constituting sensitive topology and end-station location data. The document notes directory confidentiality and privacy must be considered, and recommends securing directory messages to prevent unauthorized access or disclosure.
A Pull Directory server MUST maintain one of three cache-tracking methods of increasing specificity: Method 1 (per-Data-Label overall expiry, least record-keeping), Method 2 (per-address-set expiry, medium specificity), or Method 3 (per-TRILL-switch per-address-set expiry, most specific). Servers MUST support at least Method 1 and SHOULD support Methods 2 and 3.
For frame-based query types (QTYPE 2 and 5), the Pull Directory server can forward or reply on behalf of the querying RBridge: for ARP it synthesizes an ARP reply; for ND Neighbor Solicitation it returns an ND Neighbor Advertisement (or for SEND, forwards to the address holder or multicasts); for RARP it synthesizes a RARP reply; for unknown-unicast-MAC it forwards the frame unicast to the resolved switch.
QUERY Record types (QTYPE) include: 1 = Address query (explicit address, returns all addresses for the same interface), 2 = Frame query (ARP, ND, RARP, or SEND frame), and 5 = Unknown unicast MAC Query Frame (frame with unknown destination MAC). Values 0 and 15 are reserved; 3–4 and 6–14 are unassigned.
The 'No Data' (NOD) flag bit in the Interested VLANs or Interested Labels sub-TLV allows a Push Directory server to announce interest in a Data Label (to participate in ESADI) without requesting multi-destination TRILL Data packets for that label, avoiding unwanted data-plane traffic.
The Push Directory Server Status (PDSS) field in the ESADI-Parameter APPsub-TLV encodes server state: 0 = not a server, 1 = Stand-By, 2 = Active but not complete, 3 = Active and has pushed complete data. Each Push Directory server has a configurable 8-bit priority (PushDirPriority, default 0x3F) and a configurable N (1–8, default 2) indicating how many copies should be pushed per Data Label.
TRILL directory service supports two distribution models: Push Mode, in which a directory server pushes address mapping information to subscribing TRILL switches via ESADI, and Pull Mode, in which a TRILL switch queries a server for needed information via RBridge Channel messages. Hybrid operation combining both modes is also supported.
Section 7.1 defines an IANA registry for ESADI-Parameter APPsub-TLV data extensions, including the Push Directory Server Status (PDSS) field (bits 0–1) and PushDirPriority field (bits 2–9), to communicate Push Directory server state and priority via ESADI.
Section 7.2 registers a new RBridge Channel Protocol number for the Pull Directory protocol, used for both Query/Response messages between TRILL switches and native Pull Directory messages to/from end stations.
Section 7.3 defines two new flag bits in the Interested VLANs and Interested Labels sub-TLVs: PUL (Pull Directory flag, set to 1 to advertise Pull Directory service) and NOD (No Data flag, set to 1 to suppress receipt of multi-destination TRILL Data packets in the Data Label).
Section 7.4 establishes the TRILL Pull Directory QTYPEs registry, with initial values: 0 (Reserved), 1 (Address query), 2 (Frame query), 5 (Unknown unicast MAC Query Frame), 15 (Reserved); values 3–4 and 6–14 are unassigned.
Section 7.5 creates Pull Directory Error Code registries covering message-level error codes (Err field) and sub-error codes (SubErr field) for Err values 1, 3, 128, and 131, enabling extensible error reporting in Pull Directory Response and Acknowledge Messages.
A TRILL edge switch with complete directory information can detect forged source MAC or IP addresses in native frames: if the source address does not match the directory's mapping for the ingress port and Data Label, the frame can be discarded. Directory completeness is therefore a prerequisite for reliable source-address validation.
Pull Directory messages carried over RBridge Channel are subject to authentication and integrity protection mechanisms available at the RBridge Channel layer. Directory servers should authenticate clients, and clients should authenticate servers, to prevent injection of false directory data that could redirect traffic or enable address spoofing.
A Push Directory server operates in one of seven states per Data Label: Down (S1), Stand-By (S2), Active (S3), Active Completing (S4), Active Complete (S5), Going Stand-By Was Complete (S6), and Active Uncompleting (S7). Transitions are triggered by events including server startup/shutdown, Activate Condition, Stand-By Condition, configuration changes, and a configurable Time Condition (default 2× CSNP time).
All Pull Directory messages share a common 8-byte header: 4-bit Ver, 4-bit Type, 4-bit Flags, 4-bit Count, 8-bit Err, 8-bit SubErr, and 32-bit Sequence Number, followed by a variable-length Type Specific Payload. Version 0 is defined by this document.
Each QUERY Record in a Pull Directory Query Message begins with a 16-bit word containing: SIZE (8-bit unsigned byte count excluding SIZE and following byte), FR flag (Flood Record, 1 bit), RESV (3 bits, MUST be zero), and QTYPE (4 bits). For QTYPE=1 (address query), a 16-bit AFN and variable-length Query Address follow; for QTYPE=2 or 5 (frame query), a variable-length Query Frame follows.
Each RESPONSE Record contains: SIZE (8-bit unsigned, excluding SIZE byte and preceding byte), OV overflow flag (1 bit), RESV (3 bits, MUST be zero), Index (4 bits, identifying which QUERY Record this responds to), Lifetime (16-bit, units of 100 ms; 0 = do not cache; 0xFFFF = keep until server unreachable), and variable-length Response Data formatted as the value part of an Interface Addresses APPsub-TLV.
Native Pull Directory messages used between edge RBridges and end stations use the same RBridge Channel Protocol number but expand the common 8-byte header to 12 or 16 bytes to add TRILL Header and inner Data Label information absent in native (non-TRILL-encapsulated) frames.
Update Message Flags (4-bit field): F (Flood, 1 = multicast to All-Egress-RBridges), P (Positive, 1 = positive cache update), N (Negative, 1 = negative cache update), R (Reserved, MUST be zero). For Methods 2 and 3, an Update Message MUST have exactly one of P or N set; if both are set, the message MUST be ignored (valid only for Method 1 all-addresses flush).