RFC 7922
Interface to the Routing System (I2RS) Traceability: Framework and Information Model
RFC 7922: Interface to the Routing System (I2RS) Traceability: Framework and Information Model ๐ฆ
Category: Informational ๐ Authors: J. Clarke, G. Salgueiro, and C. Pignataro, all from Cisco ๐ Date: June 2016 ๐ธ ISSN: 2070-1721 โจ Obsoletes and updates: the title block doesn't list anything this RFC obsoletes or updates ๐
Abstract ๐
okay bestie, this doc is a framework for traceability in I2RS (the Interface to the Routing System) plus an information model for it ๐ง It covers the motivation, requirements, and use cases, and it defines an information model for recording interactions between the elements that implement the I2RS protocol. The framework gives every component in the I2RS architecture one consistent tracing interface, so they can record what was done, which component did it, and when ๐ The goal is better management of I2RS implementations, and it's useful for troubleshooting, auditing, forensics, and accounting. Iconic, honestly ๐ฅ
Status of This Memo โญ
This doc is not an Internet Standards Track spec. It's published just for information ๐
This doc is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG). Not every doc the IESG approves is a candidate for any level of Internet Standard, so see Section 2 of RFC 7841 for that ๐ซถ
Info about the current status of this doc, any errata, and how to give feedback is at http://www.rfc-editor.org/info/rfc7922 ๐
Copyright Notice ๐
Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved. ๐ธ
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the date of publication. Please read these carefully, because they describe your rights and restrictions for this doc ๐ Code Components pulled out of this doc must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License ๐
Table of Contents ๐ง
1. Introduction ....................................................3
2. Terminology and Conventions .....................................3
3. Motivation ......................................................4
4. Use Cases .......................................................4
5. Information Model ...............................................5
5.1. I2RS Traceability Framework ................................5
5.2. I2RS Trace Log Fields ......................................7
5.3. End of Message Marker .....................................11
6. Examples .......................................................11
7. Operational Guidance ...........................................11
7.1. Trace Log Creation ........................................12
7.2. Trace Log Temporary Storage ...............................12
7.3. Trace Log Rotation ........................................13
7.4. Trace Log Retrieval .......................................13
7.4.1. Retrieval via Syslog ...............................14
7.4.2. Retrieval via I2RS Information Collection ..........14
7.4.3. Retrieval via I2RS Pub/Sub .........................14
8. Security Considerations ........................................15
9. References .....................................................16
9.1. Normative References ......................................16
9.2. Informative References ....................................16
Acknowledgments ...................................................17
Authors' Addresses ................................................17
1. Introduction โจ
okay so the I2RS architecture [RFC7921] says that I2RS clients who want to read or change the routing state on a routing element MUST authenticate to an I2RS agent ๐ The I2RS client gets a unique identity that it uses for authentication, and it should provide another opaque identity for the applications talking through it ๐ Programming routing state gives back a return code with the result of the operation, plus the reason(s) for that result. All of this is critical info for understanding the history of I2RS interactions, so it's giving main character energy ๐
This doc defines the framework you need to trace those interactions between the I2RS client and the I2RS agent ๐ฆ It then goes through use cases for traceability in I2RS. Based on those use cases, it proposes an information model and reporting requirements so that I2RS interactions get recorded properly ๐ Here, effective troubleshooting means being able to figure out which operation a specific I2RS client ran through the I2RS agent, what the result of that operation was, and when it happened. That's the whole vibe ๐
2. Terminology and Conventions ๐ธ
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this doc are to be read as described in [RFC2119] ๐
The I2RS architecture spec [RFC7921] defines extra terms that are specific to the I2RS domain, like "I2RS agent", "I2RS client", and so on ๐ง You're expected to already know the terminology and concepts from [RFC7921], so go read that first if you haven't, bestie ๐
3. Motivation ๐
As networks scale up and policy becomes a bigger part of the control plane (the part that creates and maintains the forwarding state), the operational complexity goes up too ๐ญ I2RS gives more granular, coherent control over policy and control-plane state, but it also removes or reduces the locality of the policy applied to the control plane on any single forwarding device ๐ Being able to automate and abstract even complicated policy-based controls makes it obvious that you need a traceability function that scales just as well. It has to record, at event-level granularity, how the routing system evolves, and it has to stay compliant with the I2RS requirements (Section 5 of [RFC7920]) โจ
4. Use Cases ๐
The big obvious reason for I2RS traceability is troubleshooting, so you can find the root causes of problems in these increasingly complex routing systems ๐ Like, I2RS is a high-throughput, multi-channel, full duplex, highly responsive interface, so I2RS clients might be running a huge number of operations on I2RS agents at the same time, or at nearly the same time, and maybe in super rapid succession ๐โโ๏ธ As all those changes happen, the network reacts. Those changes could lead to a race condition, performance issues, data loss, or a service disruption ๐ฑ To isolate the root cause, a network operator or administrator really needs visibility into what changes were made via I2RS at a specific time ๐
Some network environments have strong auditing requirements for configuration and runtime changes. Others have policies that require saving logging info for operational or regulatory compliance ๐ So I2RS has to provide an account of the changes made to network element routing systems. No pressure, lol ๐ซถ
As I2RS gets more and more pervasive in routing environments, a traceability model that supports controllable trace log retention, using a standardized structured data format, is a massive win ๐ It makes it possible to build common tools for automated testing, and it enables these use cases:
- real-time monitoring and troubleshooting of router events ๐
- automated event correlation, trend analysis, and anomaly detection ๐
- offline (manual or tools-based) analysis of router state evolution from the retained trace logs ๐
- enhanced network audit, management, and forensic analysis capabilities ๐ต๏ธโโ๏ธ
- improved accounting of routing system operations ๐งพ
- a standardized format for incident reporting and test logging ๐
5. Information Model ๐งโโ๏ธ
These sections describe the I2RS traceability information model and the details of each field that gets logged โจ
5.1. I2RS Traceability Framework ๐
This section describes a framework for I2RS traceability, based on the I2RS Architecture ๐ฆ
The interaction between the optional network application that drives client activity, the I2RS client, the I2RS agent, the Routing System, and the data captured in the I2RS trace log is shown in Figure 1. Picture it, bestie ๐
+---------------+
+----------------+ |
|Application | |
|.............. | | 0 or more Applications
| Application ID | +
+----------------+
^
|
|
v
+-------------+
+-------------+ |
|I2RS Client | |
|.............| | 1 or more Clients
| Client ID | +
+-------------+
^
|
|
v
+-------------+ +-----------------------------+
|I2RS Agent |---------------->|Trace Log |
| | |.............................|
+-------------+ |Log Entry [1 .. N] |
| ^ |.............................|
| | |Event ID |
| | |Starting Timestamp |
| | |Request State |
| | |Client ID |
| | |Client Priority |
| | |Secondary ID |
Operation + | | Result Code |Client Address |
Op Data | | |Requested Operation |
| | |Applied Operation |
| | |Operation Data Present |
| | |Requested Operation Data |
| | |Applied Operation Data |
| | |Transaction ID |
| | |Result Code |
| | |Ending Timestamp |
| | |Timeout Occurred |
v | |End Of Message |
+-------------+ +-----------------------------+
|Routing |
|System |
+-------------+
Figure 1: I2RS Interaction Trace Log Capture
Part 2 is coming next, bestie, with the rest of Section 5 and everything after it ๐๐ซถ
5.2. I2RS Trace Log Fields ๐โจ
Okay bestie, this is the fun part ๐ These fields are the whole reason an I2RS trace log is useful. Every I2RS interaction has to be traceable back to the client that made the request, at a specific moment in time ๐ฐ๏ธ๐ฆ
The list below covers the fields in the I2RS trace log. It's the shared set that MUST appear in all I2RS trace logs ๐ซถ On top of those, I2RS agent implementations MAY choose to log extra stuff too, like the I2RS client vendor or agent stats such as free memory and performance metrics ๐โจ
Event ID: This is a unique ID for each event in the trace log ๐ An event can be a client authenticating with the agent, a client doing an operation on the agent, or a client disconnecting from the agent. Operation events can be logged all at once when they finish (so they get both a Starting and an Ending Timestamp), or they can be logged at the start of each Request State transition. Operations from the same client can happen at the same time, so you need an ID that points to exactly one entry, no mix-ups ๐ โโ๏ธ If every state transition gets logged for an operation, the same ID MUST be used for each of the Request State log entries ๐งต That way you can follow the whole life of a request through the log like a storyline ๐ Beyond that, the Event ID MUST be unique for each event, and the exact type and value is up to the implementation ๐ธ
Starting Timestamp: This is the exact time the I2RS operation enters the specified Request State inside the agent โฑ๏ธ If the log entry covers the whole duration of the request, this is the time the agent first received it ๐ฅ This field MUST be present in every entry that marks the start of a state transition, and in every entry that logs the whole duration of the request ๐ The time is written in the full timestamp format from [RFC3339], with the date and the offset from Coordinated Universal Time (UTC) ๐ Since lots of I2RS operations can happen back to back, the fractional seconds part of the timestamp MUST be used so you get enough granularity ๐ Fractional seconds SHOULD be expressed with at least three significant digits in second.microsecond format โจ
Request State: This is where the operation is in the I2RS agent state machine at the given Starting or Ending Timestamps ๐ข The I2RS agent SHOULD generate a log entry at the exact moment a request enters or exits a state ๐ช When a request enters a new state, the entry has a Starting Timestamp set to the time of entry and no Ending Timestamp. When it exits a state, the entry has an Ending Timestamp set to the time of exit and no Starting Timestamp ๐ You can link the request's journey through all its states using the Event ID ๐ The states can be one of these values:
PENDING: The request came in and got queued up for processing ๐ฌIN PROCESS: The agent is actively handling the request right now ๐ ๏ธCOMPLETED: The request has hit a terminal point ๐
Every state transition SHOULD be logged, unless logging it would put an undue performance burden on the I2RS agent ๐๏ธ BUT an entry with the Request State set to COMPLETED MUST be logged for all operations, no exceptions ๐ โโ๏ธ If COMPLETED is the only entry for a request, then it MUST have both a Starting and an Ending Timestamp that cover the entire duration of the request, from the moment it came into the agent until it completed ๐ฌ
Client Identity: This is the I2RS client identity that was used to authenticate the client to the I2RS agent ๐ชช
Client Priority: This is the I2RS client priority that the access control model assigns when it authenticates the client ๐ For example, this can be set by the Network Configuration Protocol (NETCONF) Access Control Model (NACM), as described in [RFC6536] ๐ก๏ธ
Secondary Identity: This is an opaque identity that the client might know from some controlling network application ๐ต๏ธโโ๏ธ It's how you trace which network application is actually driving the client's actions ๐ญ The client may not give this identity to the agent if there's no external network application driving it ๐คทโโ๏ธ BUT this field MUST be logged even if the client doesn't provide a Secondary Identity. In that case, it gets logged with an empty value ๐ซ
Client Address: This is the network address of the client that connected to the agent ๐ For example, it could be an IPv4 or an IPv6 address ๐
Requested Operation: This is the I2RS operation that was asked for ๐โโ๏ธ For example, it could be an add route operation when a route is being inserted into a routing table ๐ฃ๏ธ This may not be the operation that was actually applied to the agent ๐
When a client authenticates to the agent, the Requested Operation MUST be "CLIENT AUTHENTICATE" ๐ When a client disconnects from the agent, the Requested Operation MUST be "CLIENT DISCONNECT" ๐
Applied Operation: This is the I2RS operation that was actually performed ๐ฏ It can be different from the Requested Operation when the agent can't satisfy the request ๐ This field may not be logged unless the Request State is COMPLETED ๐
Operation Data Present: This is a Boolean field that says whether or not extra per-Operation Data is there ๐งพ
Requested Operation Data: This field holds the data passed to the agent so it can complete the operation you wanted ๐ฆ For example, if the operation is a route add, the Operation Data would include the route prefix, the prefix length, and the next-hop info to insert, plus the specific routing table the route gets added to ๐บ๏ธ If Operation Data is provided, then the Operation Data Present field MUST be set to TRUE โ
Some operations don't come with operation data at all. For those, the Operation Data Present field MUST be set to FALSE, and this field MUST be empty ๐ซฅ This might not match the data that was actually used for the operation applied on the agent ๐ค
When a client authenticates to the agent, the Requested Operation Data MUST contain the client priority ๐ Other attributes, like the credentials used for authentication, MAY be logged ๐
Applied Operation Data: This field holds the data that was actually applied as part of the Applied Operation ๐จ If the agent can't satisfy the Requested Operation with the Requested Operation Data, this field can be different from the Requested Operation Data ๐ This field will be empty unless Requested Operation Data was specified ๐ญ It may not be logged unless the Request State is COMPLETED ๐
Transaction ID: This tells you the operation is part of a long-running I2RS transaction, which can include several related I2RS operations ๐งถ Using this value, you can tie multiple log entries together as parts of one big overall I2RS operation ๐งฉ This is an optional field, and it may not be logged unless the event is part of a long-running transaction ๐ซง
Result Code: This field holds the result of the operation once the Request State is COMPLETED ๐ For Routing Information Base (RIB) operations, this MUST be the return code specified in Section 4 of [RIBINFO] ๐งฎ The operation may not finish with a result code if it times out โฐ BUT if the operation fails to complete, it MUST still log the attempted operation with an appropriate result code ๐
Timeout Occurred: This is a Boolean field that says whether or not a timeout happened during the operation โณ When this is true, the Ending Timestamp MUST be set to the time the agent recorded for the timeout ๐ This field may not be logged unless the Request State is COMPLETED ๐
Ending Timestamp: This is the exact time the I2RS operation exits the specified Request State inside the I2RS agent ๐ฌ If the log entry covers the whole duration of the request, this is the time the request reached a terminal point inside the agent ๐ This field MUST be present in every entry that marks the end of a state transition, and in every entry that logs the whole duration of the request ๐ The time uses the full timestamp format from [RFC3339], with the date and the offset from Coordinated Universal Time (UTC) ๐ Check the Starting Timestamp description above for the proper format of the Ending Timestamp too ๐
End Of Message: Each log entry SHOULD have an appropriate End Of Message (EOM) indicator ๐ See Section 5.3 below for more details ๐
5.3. End of Message Marker ๐ชง
Because the I2RS trace log fields can vary quite a bit, implementors MUST use a format-appropriate End Of Message (EOM) indicator to mark the end of each record ๐งฑ No matter the format, the I2RS trace log MUST provide a distinct way to tell where one record ends and the next one begins ๐ซถ For example, in a linear-formatted log (kinda like a syslog), the EOM marker might be a newline character ๐ In an XML-formatted log, the schema would give you element tags that mark the start and end of records ๐ท๏ธ In a JSON-formatted log, the syntax would handle record separation, probably with comma-separated array elements ๐ง
6. Examples ๐
This section shows a sample of what the fields and values could look like ๐
Event ID: 1
Starting Timestamp: 2013-09-03T12:00:01.21+00:00
Request State: COMPLETED
Client ID: 5CEF1870-0326-11E2-A21F-0800200C9A66
Client Priority: 100
Secondary ID: com.example.RoutingApp
Client Address: 2001:db8:c0c0::2
Requested Operation: ROUTE_ADD
Applied Operation: ROUTE_ADD
Operation Data Present: TRUE
Requested Operation Data: PREFIX 2001:db8:feed:: PREFIX-LEN 64
NEXT-HOP 2001:db8:cafe::1
Applied Operation Data: PREFIX 2001:db8:feed:: PREFIX-LEN 64
NEXT-HOP 2001:db8:cafe::1
Transaction ID: 2763461
Result Code: SUCCESS(0)
Timeout Occurred: FALSE
Ending Timestamp: 2013-09-03T12:00:01.23+00:00
7. Operational Guidance ๐งญ
Specific operational procedures for temporary log storage, rollover, retrieval, and access of I2RS trace logs are out of scope for this document ๐ โโ๏ธ Organizations that use I2RS trace logging are responsible for setting up their own operational procedures, suited to their specific requirements and operating environment ๐ข In this section, we only give fundamental, generalized operational guidelines that don't depend on any particular implementation ๐ซถ
7.1. Trace Log Creation โจ
Okay so the I2RS agent is the one chatting with the Routing and Signaling functions of the Routing Element ๐ . Since the agent is the one actually making the routing changes on the device, it creates and keeps a log of operations ๐ that you can pull up later to troubleshoot any I2RS-related impact on the network. Changes to the element's local config made outside of I2RS that preempt I2RS state will only be logged if the network element notifies the I2RS agent ๐. So if something sneaky happens without the element telling anyone, that's on the element, bestie ๐ญ
7.2. Trace Log Temporary Storage ๐ง
The trace info can be stored temporarily, either in an in-memory buffer or as a file local to the agent. You should totally think about how many I2RS operations the agent expects, so the right storage medium gets picked and the log stays super useful without messing with the agent's performance and health ๐.
Also, client requests may not always be processed synchronously or within a bounded time period ๐ฌ. So to make sure fields like "Operation" and "Result Code" end up in the same trace log record, buffering the trace log entries may be required ๐ซถ. Just know that buffering can add resource load on the agent and the network element, so plan for it ๐ฅ.
Section 7.3 covers rotating the trace log so you keep the operation history without draining agent or network device resources ๐. So it's perfectly acceptable to use an in-memory buffer for recent operations while rotating or archiving the older ones to a local file. Iconic multitasking ๐
It's outside the scope of this document to spell out the implementation details (i.e., size, throughput, data protection, etc.) for the physical storage of the I2RS log file. Still, data retention is a big deal ๐. Pay attention to how long the I2RS trace log data is kept when it contains security- or privacy-sensitive attributes. The longer it's retained, the higher the impact if it ever leaks ๐. Legislation may also impose extra requirements on the minimum and/or maximum durations for which some kinds of data may be retained, so keep an eye on that too ๐ธ.
7.3. Trace Log Rotation ๐
To prevent the exhaustion of resources on the I2RS agent or its associated network device, it is RECOMMENDED that the I2RS agent implements trace log rotation ๐. How that gets achieved is left up to the implementation and is outside the scope of this document. Still, it should be possible to do a file rotation based on either the time or the size of the current trace log โฐ๐. If file rollover is supported, multiple archived log files should be supported too, so you get the maximum troubleshooting and accounting benefits ๐ฆ.
7.4. Trace Log Retrieval ๐
Implementors are free to provide their own proprietary interfaces and build custom tools to retrieve and display the I2RS trace log ๐ ๏ธ. That can include showing the trace log as command-line interface (CLI) output. But the whole point of this information model is a vendor-agnostic and consistent interface for collecting I2RS trace data, so retrieving the data should be vendor-agnostic too ๐ซถ.
Exporting this info is an invaluable diagnostic tool for off-box analysis, but exporting MUST NOT interfere with the agent's ability to process new incoming operations ๐ซ. The agent has to keep its focus on the new stuff!
The following three sections describe potential ways the trace log can be accessed. Using I2RS pub/sub to access trace log data is mandatory-to-implement, while the others are optional ๐ .
7.4.1. Retrieval via Syslog ๐จ
The syslog protocol [RFC5424] is a standard way of sending event notification messages from a host to a collector. However, the protocol doesn't define any standard format for storing those messages, so implementors of I2RS tracing would be left to define their own format ๐คทโโ๏ธ. That means the data in a syslog message would adhere to this information model and might be readable by a human operator, but it wouldn't be easily parseable by a machine ๐ฉ.
If syslog is used for trace log retrieval, then you should lean on the existing logging infrastructure and the capabilities of syslog [RFC5424] without needing to define or extend any existing formats ๐ง . The various fields described in Section 5.2 MAY be... sorry, the various fields described in Section 5.2 SHOULD be modeled and encoded as Structured Data Elements (referred to as "SD-ELEMENT"), as described in Section 6.3.1 of [RFC5424] ๐.
7.4.2. Retrieval via I2RS Information Collection ๐ฆ
Section 7.7 of the I2RS architecture [RFC7921] defines a mechanism for information collection. That can mean grabbing a snapshot of a large amount of data from the network element ๐ธ. It's the intent of I2RS to make this data available in an implementor-agnostic fashion, so the I2RS trace log SHOULD be made available via the I2RS information collection mechanism, either as a single snapshot or via a subscription stream ๐.
7.4.3. Retrieval via I2RS Pub/Sub ๐ก
Section 7.6 of the I2RS architecture [RFC7921] goes on to describe notification mechanisms for a feed of changes happening within the I2RS layer. The requirements for a publish-subscribe system for I2RS are defined in [RFC7923]. And here's the big one: I2RS agents MUST support publishing I2RS trace log information to that feed as described in [RFC7923] ๐.
Once that's in place, subscribers get a live stream of I2RS interactions in trace log format and can flexibly choose what to do with the messages ๐ฆ. For example, they could log the messages to a datastore, or aggregate and summarize interactions from a single client, etc. The full range of potential activities is virtually limitless, though the details of how they're performed are outside the scope of this document ๐.
8. Security Considerations ๐
Okay, this section is serious, so listen up ๐จ. The I2RS trace log, like any log file, reveals the state of the entity producing it, plus the identifying information elements and detailed interactions of the system containing it ๐. The information model described in this document doesn't itself introduce any security issues. But it does define the set of attributes that make up an I2RS log file, and those attributes may contain sensitive information. So they should adhere to the security, privacy, and permission policies of the organization using the I2RS log file ๐ซก.
Warning, bestie: the stored log file is not protected by this document. It's outside the scope of this document to specify how to protect it, but adequate precautions and security best practices are expected. Think disk encryption, appropriately restrictive file/directory permissions, suitable hardening and physical security of logging entities, mutual authentication, transport encryption, channel confidentiality, and channel integrity if log files are being transferred ๐๐ .
Also, the potentially sensitive information in a log file SHOULD be adequately anonymized or obfuscated by operators to ensure its privacy ๐๐ซถ. Protect that data like it's your diary, periodt ๐โจ.
9. References ๐
9.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet:
Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
<http://www.rfc-editor.org/info/rfc3339>.
[RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424,
DOI 10.17487/RFC5424, March 2009,
<http://www.rfc-editor.org/info/rfc5424>.
[RFC7921] Atlas, A., Halpern, J., Hares, S., Ward, D., and T.
Nadeau, "An Architecture for the Interface to the Routing
System", RFC 7921, DOI 10.17487/RFC7921, June 2016,
<http://www.rfc-editor.org/info/rfc7921>.
[RFC7923] Voit, E., Clemm, A., and A. Gonzalez Prieto, "Requirements
for Subscription to YANG Datastores", RFC 7923,
DOI 10.17487/RFC7923, June 2016.
9.2. Informative References
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>.
[RFC7920] Atlas, A., Ed., Nadeau, T., Ed., and D. Ward, "Problem
Statement for the Interface to the Routing System",
RFC 7923, DOI 10.17487/RFC7923, June 2016,
<http://www.rfc-editor.org/info/rfc7920>.
[RIBINFO] Bahadur, N., Ed., Kini, S., Ed., and J. Medved, "Routing
Information Base Info Model", Work in Progress,
draft-ietf-i2rs-rib-info-model-08, October 2015.
Acknowledgments ๐ซถ
The authors would like to thank Alia Atlas for her initial feedback and overall support for this work ๐. They also acknowledge Alvaro Retana, Russ White, Matt Birkner, Jeff Haas, Joel Halpern, Dean Bogdanovich, Ignas Bagdonas, Nobo Akiya, Kwang-koog Lee, Sue Hares, Mach Chen, Alex Clemm, Stephen Farrell, Benoit Claise, Les Ginsberg, Suresh Krishnan, and Elwyn Davies for their reviews, contributed text, and suggested improvements to this document ๐๐ธ. Iconic squad, honestly โจ.
Authors' Addresses ๐ฎ
Joe Clarke
Cisco Systems, Inc.
7200-12 Kit Creek Road
Research Triangle Park, NC 27709
United States
Phone: +1-919-392-2867
Email: jclarke@cisco.com
Gonzalo Salgueiro
Cisco Systems, Inc.
7200-12 Kit Creek Road
Research Triangle Park, NC 27709
United States
Email: gsalguei@cisco.com
Carlos Pignataro
Cisco Systems, Inc.
7200-11 Kit Creek Road
Research Triangle Park, NC 27709
United States
Email: cpignata@cisco.com
๐ฆ where this page comes from
- ietf: rfc7922 2016-06
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms