| rfc9899.original | rfc9899.txt | |||
|---|---|---|---|---|
| netmod O. G. D. Dios | Internet Engineering Task Force (IETF) O. Gonzalez de Dios | |||
| Internet-Draft Telefonica | Request for Comments: 9899 Telefonica | |||
| Intended status: Standards Track S. Barguil | Category: Standards Track S. Barguil | |||
| Expires: 6 October 2025 Nokia | ISSN: 2070-1721 Nokia | |||
| M. Boucadair | M. Boucadair | |||
| Orange | Orange | |||
| Q. Wu | Q. Wu | |||
| Huawei | Huawei | |||
| 4 April 2025 | November 2025 | |||
| Extensions to the Access Control Lists (ACLs) YANG Model | Extensions to the Access Control Lists (ACLs) YANG Model | |||
| draft-ietf-netmod-acl-extensions-17 | ||||
| Abstract | Abstract | |||
| RFC 8519 defines a YANG data model for Access Control Lists (ACLs). | RFC 8519 defines a YANG data model for Access Control Lists (ACLs). | |||
| This document specifies a set of extensions that fix many of the | This document specifies a set of extensions that fix many of the | |||
| limitations of the ACL model as initially defined in RFC 8519. | limitations of the ACL model as initially defined in RFC 8519. | |||
| Specifically, it introduces augmentations to the ACL base model to | Specifically, it introduces augmentations to the ACL base model to | |||
| enhance its functionality and applicability. | enhance its functionality and applicability. | |||
| The document also defines IANA-maintained modules for ICMP types and | The document also defines IANA-maintained modules for ICMP types and | |||
| IPv6 extension headers. | IPv6 extension headers. | |||
| Discussion Venues | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this document takes place on the Network Modeling | ||||
| Working Group mailing list (netmod@ietf.org), which is archived at | ||||
| https://mailarchive.ietf.org/arch/browse/netmod/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/boucadair/enhanced-acl-netmod. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 6 October 2025. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9899. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Editorial Note (To be removed by RFC Editor) . . . . . . 4 | 2. Terminology | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Overall Structure of the Enhanced ACL Module | |||
| 3. Overall Structure of the Enhanced ACL Module . . . . . . . . 5 | 3.1. Tree Structure | |||
| 3.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Defined Sets | |||
| 3.2. Defined Sets . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. IPv6 Extension Headers | |||
| 3.3. IPv6 Extension Headers . . . . . . . . . . . . . . . . . 10 | 3.4. TCP Flags Handling | |||
| 3.4. TCP Flags Handling . . . . . . . . . . . . . . . . . . . 11 | 3.5. Fragments Handling | |||
| 3.5. Fragments Handling . . . . . . . . . . . . . . . . . . . 11 | 3.6. Payload-Based Filtering | |||
| 3.6. Payload-based Filtering . . . . . . . . . . . . . . . . . 11 | 3.7. Match on MPLS Headers | |||
| 3.7. Match on MPLS Headers . . . . . . . . . . . . . . . . . . 11 | 3.8. VLAN Filtering | |||
| 3.8. VLAN Filtering . . . . . . . . . . . . . . . . . . . . . 12 | 3.9. Instance Service Identifier (I-SID) Filtering | |||
| 3.9. Instance Service Identifier (I-SID) Filtering . . . . . . 12 | 3.10. Additional Actions | |||
| 3.10. Additional Actions . . . . . . . . . . . . . . . . . . . 12 | 4. Enhanced ACL YANG Module | |||
| 4. Enhanced ACL YANG Module . . . . . . . . . . . . . . . . . . 13 | 5. Security Considerations | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 39 | 6. IANA Considerations | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | 6.1. URI Registrations | |||
| 6.1. URI Registrations . . . . . . . . . . . . . . . . . . . . 40 | 6.2. YANG Module Name Registrations | |||
| 6.2. YANG Module Name Registrations . . . . . . . . . . . . . 41 | 6.3. Considerations for IANA-Maintained Modules | |||
| 6.3. Considerations for IANA-Maintained Modules . . . . . . . 41 | 6.3.1. ICMPv4 Types IANA Module | |||
| 6.3.1. ICMPv4 Types IANA Module . . . . . . . . . . . . . . 41 | 6.3.2. ICMPv6 Types IANA Module | |||
| 6.3.2. ICMPv6 Types IANA Module . . . . . . . . . . . . . . 42 | 6.3.3. IPv6 Extension Header Types IANA Module | |||
| 6.3.3. IPv6 Extension Header Types IANA Module . . . . . . . 44 | 7. References | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | 7.1. Normative References | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 45 | 7.2. Informative References | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 47 | Appendix A. Problem Statement and Gap Analysis | |||
| Appendix A. Initial Version of the ICMPv4 Types IANA-Maintained | A.1. Suboptimal Configuration: Lack of Support for Lists of | |||
| Module . . . . . . . . . . . . . . . . . . . . . . . . . 49 | Prefixes | |||
| Appendix B. Initial Version of the ICMPv6 Types IANA-Maintained | A.2. Manageability: Impossibility of Using Aliases or Defined | |||
| Module . . . . . . . . . . . . . . . . . . . . . . . . . 56 | Sets | |||
| Appendix C. Initial Version of the IPv6 Extension Header Types | A.3. Bind ACLs to Devices, Not Only Interfaces | |||
| IANA-Maintained Module . . . . . . . . . . . . . . . . . 63 | A.4. Partial or Lack of IPv4/IPv6 Fragment Handling | |||
| Appendix D. Problem Statement and Gap Analysis . . . . . . . . . 66 | A.5. Suboptimal TCP Flags Handling | |||
| D.1. Suboptimal Configuration: Lack of Support for Lists of | A.6. Rate-Limit Action | |||
| Prefixes . . . . . . . . . . . . . . . . . . . . . . . . 66 | A.7. Payload-Based Filtering | |||
| D.2. Manageability: Impossibility to Use Aliases or Defined | A.8. Reuse the Content of ACLs Across Several Devices | |||
| Sets . . . . . . . . . . . . . . . . . . . . . . . . . . 68 | A.9. Match MPLS Headers | |||
| D.3. Bind ACLs to Devices, Not Only Interfaces . . . . . . . . 69 | Appendix B. Examples | |||
| D.4. Partial or Lack of IPv4/IPv6 Fragment Handling . . . . . 69 | B.1. TCP Flags Handling | |||
| D.5. Suboptimal TCP Flags Handling . . . . . . . . . . . . . . 69 | B.2. Fragments Handling | |||
| D.6. Rate-Limit Action . . . . . . . . . . . . . . . . . . . . 70 | B.3. Pattern-Based Filtering | |||
| D.7. Payload-based Filtering . . . . . . . . . . . . . . . . . 70 | B.4. VLAN Filtering | |||
| D.8. Reuse the ACLs Content Across Several Devices . . . . . . 70 | B.5. ISID Filtering | |||
| D.9. Match MPLS Headers . . . . . . . . . . . . . . . . . . . 71 | B.6. Rate-Limit | |||
| Appendix E. Examples . . . . . . . . . . . . . . . . . . . . . . 71 | Acknowledgments | |||
| E.1. TCP Flags Handling . . . . . . . . . . . . . . . . . . . 71 | Authors' Addresses | |||
| E.2. Fragments Handling . . . . . . . . . . . . . . . . . . . 72 | ||||
| E.3. Pattern-based Filtering . . . . . . . . . . . . . . . . . 76 | ||||
| E.4. VLAN Filtering . . . . . . . . . . . . . . . . . . . . . 77 | ||||
| E.5. ISID Filtering . . . . . . . . . . . . . . . . . . . . . 77 | ||||
| E.6. Rate-Limit . . . . . . . . . . . . . . . . . . . . . . . 78 | ||||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 79 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 80 | ||||
| 1. Introduction | 1. Introduction | |||
| [RFC8519] defines Access Control Lists (ACLs) as a user-ordered set | [RFC8519] defines Access Control Lists (ACLs) as a user-ordered set | |||
| of filtering rules. The model targets the configuration of the | of filtering rules. The model targets the configuration of the | |||
| filtering behavior of a device. However, the model structure, as | filtering behavior of a device. However, the model structure, as | |||
| defined in [RFC8519], suffers from a set of limitations. This | defined in [RFC8519], suffers from a set of limitations. This | |||
| document identifies these limitations and specifies an enhanced ACL | document identifies these limitations and specifies an enhanced ACL | |||
| structure, introducing augmentations to the ACL base model | structure, introducing augmentations to the ACL base model | |||
| (Section 4). The motivation of such enhanced ACL structure is | (Section 4). The motivation of such an enhanced ACL structure is | |||
| discussed in detail in Appendix D. | discussed in detail in Appendix A. | |||
| When managing ACLs, it is common for network operators to group match | When managing ACLs, it is common for network operators to group match | |||
| elements in pre-defined sets. The consolidation into group matches | elements in predefined sets. The consolidation into group matches | |||
| allows for reducing the number of rules, especially in large scale | allows for reducing the number of rules, especially in large-scale | |||
| networks. If, for example, it is needed to find a match against 100 | networks. For example, if finding a match against 100 IP addresses | |||
| IP addresses (or prefixes), a single rule will suffice rather than | (or prefixes) is needed, a single rule will suffice rather than | |||
| creating individual Access Control Entries (ACEs) for each IP address | creating individual Access Control Entries (ACEs) for each IP address | |||
| (or prefix). In doing so, implementations would optimize the | (or prefix). In doing so, implementations would optimize the | |||
| performance of matching lists vs multiple rules matching. | performance of matching lists versus multiple rules matching. | |||
| The enhanced ACL structure ("ietf-acl-enh", Section 4) is also meant | The enhanced ACL structure (see "ietf-acl-enh" in Section 4) is also | |||
| to facilitate the management of network operators. Instead of | meant to facilitate the management of network operators. Instead of | |||
| entering the IP address or port number literals, using user-named | entering the IP address or port number literals, using user-named | |||
| lists decouples the creation of the rule from the management of the | lists decouples the creation of the rule from the management of the | |||
| sets. Hence, it is possible to remove/add entries to the list | sets. Hence, it is possible to remove/add entries to the list | |||
| without redefining the (parent) ACL rule. | without redefining the (parent) ACL rule. | |||
| In addition, the notion of ACL and defined sets is generalized so | In addition, the notion of ACL and defined sets is generalized so | |||
| that it is not device-specific as per [RFC8519]. ACLs and defined | that it is not device specific as per [RFC8519]. ACLs and defined | |||
| sets may be defined at network/administrative domain level and | sets may be defined at the network/administrative domain level and | |||
| associated to devices. This approach facilitates the reusability | associated to devices. This approach facilitates the reusability | |||
| across multiple network elements. For example, managing the IP | across multiple network elements. For example, managing the IP | |||
| prefix sets from a network level makes it easier to maintain by the | prefix sets from a network level makes it easier to maintain by the | |||
| security groups. | security groups. | |||
| Network operators maintain sets of IP prefixes that are related to | Network operators maintain sets of IP prefixes that are related to | |||
| each other, e.g., deny-lists or accept-lists that are associated with | each other, e.g., deny-lists or accept-lists that are associated with | |||
| those provided by a VPN customer. These lists are maintained and | those provided by a VPN customer. These lists are maintained and | |||
| manipulated by security expert teams of the network operators. | manipulated by security expert teams of the network operators. | |||
| Note that ACLs are used locally in devices but are triggered by other | Note that ACLs are used locally in devices but are triggered by other | |||
| tools such as DDoS mitigation [RFC9132] or BGP Flow Spec [RFC8955] | tools such as DDoS mitigation [RFC9132] or BGP Flow Spec [RFC8955] | |||
| [RFC8956]. Therefore, it is valuable from a network operation | [RFC8956]. Therefore, it is valuable from a network operation | |||
| standpoint to support means to easily map to the filtering rules | standpoint to support the means to easily map to the filtering rules | |||
| conveyed in messages triggered by these tools. | conveyed in messages triggered by these tools. | |||
| The enhanced ACL module (Section 4) conforms to the Network | The enhanced ACL module (Section 4) conforms to the Network | |||
| Management Datastore Architecture (NMDA) defined in [RFC8342]. | Management Datastore Architecture (NMDA) defined in [RFC8342]. | |||
| A set of examples to illustrate the use of the enhanced ACL module | A set of examples to illustrate the use of the enhanced ACL module is | |||
| are provided in Appendix E. | provided in Appendix B. | |||
| The document also defines IANA-maintained modules for ICMP types and | This document also defines IANA-maintained modules for ICMP types and | |||
| IPv6 extension headers. The design of the modules adheres to the | IPv6 extension headers. The design of the modules adheres to the | |||
| recommendations in Section 4.30.2 of [I-D.ietf-netmod-rfc8407bis]. | recommendations in Section 4.30.2 of [YANG-GUIDELINES]. The latest | |||
| Readers should refer to the IANA websites [IANA_ICMPv4_YANG_URL], | version of these IANA-maintained modules can be retrieved from the | |||
| [IANA_ICMPv6_YANG_URL], and [IANA_IPV6_YANG_URL] to retrieve the | "YANG Parameters" registry group [IANA-YANG-PARAMETERS]. | |||
| latest version of these IANA-maintained modules. | ||||
| 1.1. Editorial Note (To be removed by RFC Editor) | ||||
| Note to the RFC Editor: This section is to be removed prior to | ||||
| publication. | ||||
| This document contains placeholder values that need to be replaced | ||||
| with finalized values at the time of publication. This note | ||||
| summarizes all of the substitutions that are needed. | ||||
| (1) Please apply the following replacements: | ||||
| * XXXX --> the assigned RFC number for this I-D | ||||
| * 2024-05-16 --> the actual date of the publication of this document | ||||
| (2) The modules are provided in Appendix A, Appendix B, and | ||||
| Appendix C for the users convenience before publication as RFC. | ||||
| Please remove these appendices from the final RFC. | ||||
| (3) Please update the following references: | ||||
| * IANA_ICMPv4_YANG_URL --> The URL to retrieve the latest version of | ||||
| the IANA-maintained ICMPv4 module. | ||||
| * IANA_ICMPv6_YANG_URL --> The URL to retrieve the latest version of | ||||
| the IANA-maintained ICMPv6 module. | ||||
| * IANA_IPV6_YANG_URL --> The URL to retrieve the latest version of | ||||
| the IPv6 Extension Header Types IANA module. | ||||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The terminology for describing YANG modules is defined in [RFC7950]. | The terminology for describing YANG modules is defined in [RFC7950]. | |||
| skipping to change at page 9, line 41 ¶ | skipping to change at line 366 ¶ | |||
| +-- aliases | +-- aliases | |||
| +---u aliases | +---u aliases | |||
| Figure 2: Enhanced ACL Groupings | Figure 2: Enhanced ACL Groupings | |||
| 3.2. Defined Sets | 3.2. Defined Sets | |||
| The augmented ACL structure includes several containers to manage | The augmented ACL structure includes several containers to manage | |||
| reusable sets of elements that can be matched in an ACL entry. Each | reusable sets of elements that can be matched in an ACL entry. Each | |||
| set is uniquely identified by a name and can be called from the | set is uniquely identified by a name and can be called from the | |||
| relevant entry. The following sets are defined (Figure 1): | relevant entry. The following sets (seen in Figure 1) are defined: | |||
| IPv4 prefix sets: An IPv4 prefix set contains a list of IPv4 | IPv4 prefix sets: An IPv4 prefix set contains a list of IPv4 | |||
| prefixes. A match will be considered if the IP address (source or | prefixes. A match will be considered if the IP address (source or | |||
| destination, depending on the ACL entry) is contained in any of | destination, depending on the ACL entry) is contained in any of | |||
| the prefixes in the set. | the prefixes in the set. | |||
| IPv6 prefix sets: An IPv6 prefix contains a list of IPv6 prefixes. | IPv6 prefix sets: An IPv6 prefix contains a list of IPv6 prefixes. | |||
| A match will be considered if the IP address (source or | A match will be considered if the IP address (source or | |||
| destination, depending on the ACL entry) is contained in any of | destination, depending on the ACL entry) is contained in any of | |||
| the prefixes in the set. | the prefixes in the set. | |||
| Port sets: A port set contains a list of port numbers to be used in | Port sets: A port set contains a list of port numbers to be used in | |||
| transport protocol entries (e.g., TCP and UDP). | transport protocol entries (e.g., TCP and UDP). | |||
| A port number can be a port range or a single port number along | A port number can be a port range or a single port number along | |||
| with an operator (equal to, greater than or equal to, etc.). | with an operator (equal to, greater than or equal to, etc.). | |||
| Protocol sets: A protocol set contains a list of protocol values. A | Protocol sets: A protocol set contains a list of protocol values. A | |||
| protocol can be identified either by a number (e.g., 17) or a name | protocol can be identified by either a number (e.g., 17) or a name | |||
| (e.g., UDP). | (e.g., UDP). | |||
| ICMP sets: An ICMP set contains a list of ICMPv4 [RFC0792] or ICMPv6 | ICMP sets: An ICMP set contains a list of ICMPv4 [RFC0792] or ICMPv6 | |||
| [RFC4443] types, each of them identified by a type value, | [RFC4443] types, each of them identified by a type value, | |||
| optionally the code and the rest of the header. | optionally the code and the rest of the header. | |||
| IANA-maintained modules for ICMP types are defined in this | IANA-maintained modules for ICMP types are defined in this | |||
| document. | document. | |||
| Aliases: An alias is defined by a combination of various parameters | Aliases: An alias is defined by a combination of various parameters | |||
| skipping to change at page 10, line 37 ¶ | skipping to change at line 410 ¶ | |||
| For example, an alias can be defined to apply ACL policies bound | For example, an alias can be defined to apply ACL policies bound | |||
| to a set of HTTPS servers. Such an alias will typically include | to a set of HTTPS servers. Such an alias will typically include | |||
| these HTTPS server addresses (e.g., "prefix": | these HTTPS server addresses (e.g., "prefix": | |||
| ["2001:db8:6401::1/128","2001:db8:6401::2/128"]) and the TCP port | ["2001:db8:6401::1/128","2001:db8:6401::2/128"]) and the TCP port | |||
| number 443 (i.e., "protocol": [6] and "lower-port": 443). | number 443 (i.e., "protocol": [6] and "lower-port": 443). | |||
| Sets of aliases can be defined and referred to in ACL match | Sets of aliases can be defined and referred to in ACL match | |||
| criteria. | criteria. | |||
| Payload-based filtering: Network traffic filtering technique that | Payload-based filtering: A network traffic filtering technique that | |||
| examines the data payload of packets, beyond just the header | examines the data payload of packets, beyond just the header | |||
| information, to identify, allow, or block traffic based on | information, to identify, allow, or block traffic based on | |||
| specific content or patterns within the payload. An offset type | specific content or patterns within the payload. An offset type | |||
| (e.g., layer 2 or layer 3) is used to indicates the position of | (e.g., Layer 2 or Layer 3) is used to indicate the position of the | |||
| the data in packet to use for the match. | data in the packet to use for the match. | |||
| 3.3. IPv6 Extension Headers | 3.3. IPv6 Extension Headers | |||
| The enhanced ACL module can be used to manage ACLs that require | The enhanced ACL module can be used to manage ACLs that require | |||
| matching against IPv6 extension headers [RFC8200]. To that aim, a | matching against IPv6 extension headers [RFC8200]. To that aim, a | |||
| new IANA-maintained module for IPv6 extension header types "iana- | new IANA-maintained module for IPv6 extension header types, "iana- | |||
| ipv6-ext-types" is defined in this document. | ipv6-ext-types", is defined in this document. | |||
| 3.4. TCP Flags Handling | 3.4. TCP Flags Handling | |||
| The augmented ACL module includes a new container 'flags-bitmask' to | The augmented ACL module includes a new container 'flags-bitmask' to | |||
| better handle TCP flags (Section 3.1 of [RFC9293]). Assigned TCP | better handle TCP flags (Section 3.1 of [RFC9293]). Assigned TCP | |||
| flags are maintained in the "TCP Header Flags" registry under the | flags are maintained in the "TCP Header Flags" registry under the | |||
| "Transmission Control Protocol (TCP) Parameters" registry group | "Transmission Control Protocol (TCP) Parameters" registry group | |||
| [IANA-TCP-FLAGS]. | [IANA-TCP-FLAGS]. | |||
| Clients that support both 'flags-bitmask' and 'flags' [RFC8519] | Clients that support both 'flags-bitmask' and 'flags' [RFC8519] | |||
| matching fields MUST NOT set these fields in the same request. | matching fields MUST NOT set these fields in the same request. | |||
| 3.5. Fragments Handling | 3.5. Fragments Handling | |||
| The augmented ACL module includes new leafs 'ipv4-fragment' and | The augmented ACL module includes new leafs 'ipv4-fragment' and | |||
| 'ipv6-fragment' to better handle fragments. | 'ipv6-fragment' to better handle fragments. | |||
| Clients that support both 'ipv4-fragment' and 'flags' [RFC8519] | Clients that support both 'ipv4-fragment' and 'flags' [RFC8519] | |||
| matching fields MUST NOT set these fields in the same request. | matching fields MUST NOT set these fields in the same request. | |||
| 3.6. Payload-based Filtering | 3.6. Payload-Based Filtering | |||
| Some transport protocols use existing protocols (e.g., TCP or UDP) as | Some transport protocols use existing protocols (e.g., TCP or UDP) as | |||
| substrate. The match criteria for such protocols may rely upon the | substrate. The match criteria for such protocols may rely upon the | |||
| 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP | 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP | |||
| payload, or a combination thereof. | payload, or a combination thereof. | |||
| A new feature, called 'match-on-payload', is defined in the document. | A new feature, called 'match-on-payload', is defined in the document. | |||
| This can be used, for example, for QUIC [RFC9000] or for tunneling | This can be used, for example, for QUIC [RFC9000] or for tunneling | |||
| protocols. This feature requires configuring a data offset, a | protocols. This feature requires configuring a data offset, a | |||
| length, and a binary pattern to match data against using a specified | length, and a binary pattern to match data against using a specified | |||
| operator. The data offset indicates the position to look at in a | operator. The data offset indicates the position to look at in a | |||
| packet (e.g., starts at the beginning of the IP header or transport | packet (e.g., it starts at the beginning of the IP header or | |||
| header). | transport header). | |||
| 3.7. Match on MPLS Headers | 3.7. Match on MPLS Headers | |||
| The enhanced ACL module (Section 4) can be used to create rules to | The enhanced ACL module (Section 4) can be used to create rules to | |||
| match against MPLS fields of a packet. The MPLS header defined in | match against the MPLS fields of a packet. The MPLS header defined | |||
| [RFC3032] and [RFC5462] contains the following fields: | in [RFC3032] and [RFC5462] contains the following fields: | |||
| * Traffic Class: The 3-bit "Exp" field [RFC3032] which is renamed to | * Traffic Class: The 3-bit "Exp" field [RFC3032], which is renamed | |||
| "Traffic Class field" ("TC field") [RFC5462]. | to "Traffic Class field" ("TC field") [RFC5462]. | |||
| * Label Value: A 20-bit field that carries the actual value of the | * Label Value: A 20-bit field that carries the actual value of the | |||
| MPLS label. | MPLS label. | |||
| * TTL: A 8-bit field used to encode Time to Live (TTL) value. | * TTL: An 8-bit field used to encode the Time-to-Live (TTL) value. | |||
| The augmented ACL module can be used by an operator to configure ACLs | The augmented ACL module can be used by an operator to configure ACLs | |||
| that match based upon the following data nodes: | that match based upon the following data nodes: | |||
| * 'traffic-class' | * 'traffic-class' | |||
| * 'label-position' (e.g., top or bottom) | * 'label-position' (e.g., top or bottom) | |||
| * 'upper-label-range' | * 'upper-label-range' | |||
| skipping to change at page 12, line 32 ¶ | skipping to change at line 499 ¶ | |||
| Being able to filter all packets that are bridged within a VLAN or | Being able to filter all packets that are bridged within a VLAN or | |||
| that are routed into or out of a bridge domain is part of the VPN | that are routed into or out of a bridge domain is part of the VPN | |||
| control requirements for Ethernet VPN (EVPN) [RFC7209]. | control requirements for Ethernet VPN (EVPN) [RFC7209]. | |||
| All packets that are bridged within a VLAN or that are routed into or | All packets that are bridged within a VLAN or that are routed into or | |||
| out of a VLAN can be captured, forwarded, translated, or discarded | out of a VLAN can be captured, forwarded, translated, or discarded | |||
| based on the network policy. | based on the network policy. | |||
| 3.9. Instance Service Identifier (I-SID) Filtering | 3.9. Instance Service Identifier (I-SID) Filtering | |||
| Provider backbone bridging (PBB) was originally defined as Virtual | Provider Backbone Bridging (PBB) was originally defined as a Virtual | |||
| Bridged Local Area Networks [IEEE-802-1ah] standard. However, | Bridged Local Area Networks standard [IEEE-802-1ah]. However, | |||
| instead of multiplexing VLANs, PBB duplicates the MAC layer of the | instead of multiplexing VLANs, PBB duplicates the Media Access | |||
| customer frame and separates it from the provider domain, by | Control (MAC) layer of the customer frame and separates it from the | |||
| encapsulating it in a 24-bit instance service identifier (I-SID). | provider domain, by encapsulating it in a 24-bit Instance Service | |||
| This provides more transparency between the customer network and the | Identifier (I-SID). This provides more transparency between the | |||
| provider network. | customer network and the provider network. | |||
| The I-component forms the customer or access facing interface or | The I-component forms the customer- or access-facing interface or | |||
| routing instance. The I-component is responsible for mapping | routing instance. The I-component is responsible for mapping | |||
| customer Ethernet traffic to the appropriate I-SID. It is mandatory | customer Ethernet traffic to the appropriate I-SID. It is mandatory | |||
| to configure the default service identifier in the network. | to configure the default service identifier in the network. | |||
| Being able to filter by I-component Service identifier is a feature | Being able to filter by I-component service identifier is a feature | |||
| of the EVNP-PBB configuration. | of the EVPN-PBB configuration. | |||
| 3.10. Additional Actions | 3.10. Additional Actions | |||
| In order to support rate-limiting (see Appendix D.6), a new action | In order to support rate-limiting (see Appendix A.6), a new action | |||
| called 'rate-limit' is defined in this document. | called 'rate-limit' is defined in this document. | |||
| Also, the "ietf-acl-enh" module supports new actions to complement | Also, the "ietf-acl-enh" module supports new actions to complement | |||
| existing ones: Log ('log-action') and write a counter ('counter- | existing ones: log ('log-action') and write a counter ('counter- | |||
| action'). The version of the module defined in this document | action'). The version of the module defined in this document | |||
| supports only local actions. | supports only local actions. | |||
| 4. Enhanced ACL YANG Module | 4. Enhanced ACL YANG Module | |||
| This model imports types from [RFC6991], [RFC8519], and [RFC8294]. | This Yang module imports types from [RFC6991], [RFC8519], and | |||
| [RFC8294]. | ||||
| <CODE BEGINS> file "ietf-acl-enh@2024-05-16.yang" | <CODE BEGINS> file "ietf-acl-enh@2025-11-07.yang" | |||
| module ietf-acl-enh { | module ietf-acl-enh { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh"; | namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh"; | |||
| prefix acl-enh; | prefix acl-enh; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix inet; | prefix inet; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| skipping to change at page 13, line 50 ¶ | skipping to change at line 566 ¶ | |||
| Control Lists (ACLs), Section 4.2"; | Control Lists (ACLs), Section 4.2"; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix rt-types; | prefix rt-types; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import iana-icmpv4-types { | import iana-icmpv4-types { | |||
| prefix iana-icmpv4-types; | prefix iana-icmpv4-types; | |||
| reference | reference | |||
| "RFC XXXX: Extensions to the Access Control Lists (ACLs) | "RFC 9899: Extensions to the Access Control Lists (ACLs) | |||
| YANG Model"; | YANG Model"; | |||
| } | } | |||
| import iana-icmpv6-types { | import iana-icmpv6-types { | |||
| prefix iana-icmpv6-types; | prefix iana-icmpv6-types; | |||
| reference | reference | |||
| "RFC XXXX: Extensions to the Access Control Lists (ACLs) | "RFC 9899: Extensions to the Access Control Lists (ACLs) | |||
| YANG Model"; | YANG Model"; | |||
| } | } | |||
| import iana-ipv6-ext-types { | import iana-ipv6-ext-types { | |||
| prefix iana-ipv6-ext-types; | prefix iana-ipv6-ext-types; | |||
| reference | reference | |||
| "RFC XXXX: Extensions to the Access Control Lists (ACLs) | "RFC 9899: Extensions to the Access Control Lists (ACLs) | |||
| YANG Model"; | YANG Model"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD Working Group"; | "IETF NETMOD Working Group"; | |||
| contact | contact | |||
| "WG Web: https://datatracker.ietf.org/wg/netmod/ | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
| WG List: mailto:netmod@ietf.org | WG List: <mailto:netmod@ietf.org> | |||
| Author: Mohamed Boucadair | Author: Mohamed Boucadair | |||
| mailto:mohamed.boucadair@orange.com | <mailto:mohamed.boucadair@orange.com> | |||
| Author: Samier Barguil | Author: Samier Barguil | |||
| mailto:samier.barguil_giraldo@nokia.com | <mailto:samier.barguil_giraldo@nokia.com> | |||
| Author: Oscar Gonzalez de Dios | Author: Oscar Gonzalez de Dios | |||
| mailto:oscar.gonzalezdedios@telefonica.com"; | <mailto:oscar.gonzalezdedios@telefonica.com>"; | |||
| description | description | |||
| "This module contains YANG definitions for enhanced ACLs. | "This module contains YANG definitions for enhanced ACLs. | |||
| Copyright (c) 2025 IETF Trust and the persons identified as | Copyright (c) 2025 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject to | |||
| to the license terms contained in, the Revised BSD License | the license terms contained in, the Revised BSD License set | |||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC 9899; see the | |||
| the RFC itself for full legal notices."; | RFC itself for full legal notices."; | |||
| revision 2024-05-16 { | revision 2025-11-07 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: Extensions to the Access Control Lists (ACLs) | "RFC 9899: Extensions to the Access Control Lists (ACLs) | |||
| YANG Model"; | YANG Model"; | |||
| } | } | |||
| feature match-on-payload { | feature match-on-payload { | |||
| description | description | |||
| "Match based on a pattern is supported."; | "Match based on a pattern is supported."; | |||
| } | } | |||
| feature match-on-vlan-filter { | feature match-on-vlan-filter { | |||
| description | description | |||
| "Match based on a VLAN range of vlan list is supported."; | "Match based on a VLAN range of a VLAN list is supported."; | |||
| } | } | |||
| feature match-on-isid-filter { | feature match-on-isid-filter { | |||
| description | description | |||
| "Match based on an I-SID range of VLAN list is supported."; | "Match based on an I-SID range of a VLAN list is supported."; | |||
| } | } | |||
| feature match-on-alias { | feature match-on-alias { | |||
| description | description | |||
| "Match based on aliases."; | "Match based on aliases."; | |||
| } | } | |||
| feature match-on-mpls { | feature match-on-mpls { | |||
| description | description | |||
| "Match based on MPLS headers."; | "Match based on MPLS headers."; | |||
| } | } | |||
| identity offset-type { | identity offset-type { | |||
| description | description | |||
| "Base identity for payload offset type."; | "Base identity for payload offset type."; | |||
| } | } | |||
| identity layer2 { | identity layer2 { | |||
| base offset-type; | base offset-type; | |||
| description | description | |||
| "The offset starts at the beginning of the Data Link layer | "The offset starts at the beginning of the Data Link Layer | |||
| header."; | header."; | |||
| } | } | |||
| identity layer3 { | identity layer3 { | |||
| base offset-type; | base offset-type; | |||
| description | description | |||
| "The offset starts at the beginning of the IP header."; | "The offset starts at the beginning of the IP header."; | |||
| } | } | |||
| identity layer4 { | identity layer4 { | |||
| base offset-type; | base offset-type; | |||
| description | description | |||
| "The offset starts right after the IP header (including | "The offset starts right after the IP header (including | |||
| any options or headers pertaining to that IP layer, e.g., | any options or headers pertaining to that IP layer, e.g., | |||
| IPv6 Extension Headers and the Authentication Header (AH)). | IPv6 Extension Headers and the Authentication Header (AH)). | |||
| This can be typically the beginning of transport header | This can be typically the beginning of transport header | |||
| (e.g., UDP, TCP, SCTP, and DCCP) or any encapsulation | (e.g., UDP, TCP, the Stream Control Transmission Protocol | |||
| scheme over IP such as IP-in-IP."; | (SCTP), and the Datagram Congestion Control Protocol (DCCP)) | |||
| or any encapsulation scheme over IP such as IP-in-IP."; | ||||
| } | } | |||
| identity payload { | identity payload { | |||
| base offset-type; | base offset-type; | |||
| description | description | |||
| "The offset starts right after the end of the transport | "The offset starts right after the end of the transport | |||
| header. For example, this represents the beginning of the | header. For example, this represents the beginning of the | |||
| TCP data right after any TCP options or the beginning of | TCP data right after any TCP options or the beginning of | |||
| the UDP payload right after the UDP header. | the UDP payload right after the UDP header. | |||
| This type may be used for matches against any data in | This type may be used for matches against any data in | |||
| the transport payload and/or any surplus area (if any, | the transport payload and/or any surplus area (if any, | |||
| such as in UDP)."; | such as in UDP)."; | |||
| } | } | |||
| identity tcp-flag { | identity tcp-flag { | |||
| description | description | |||
| "Base Identity for the TCP Flags."; | "Base identity for the TCP Flags."; | |||
| reference | reference | |||
| "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | |||
| } | } | |||
| identity ack { | identity ack { | |||
| base tcp-flag; | base tcp-flag; | |||
| description | description | |||
| "Acknowledgment TCP flag bit."; | "Acknowledgment TCP flag bit."; | |||
| reference | reference | |||
| "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | |||
| skipping to change at page 18, line 4 ¶ | skipping to change at line 764 ¶ | |||
| base tcp-flag; | base tcp-flag; | |||
| description | description | |||
| "Congestion Window Reduced flag bit."; | "Congestion Window Reduced flag bit."; | |||
| reference | reference | |||
| "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | "RFC 9293: Transmission Control Protocol (TCP), Section 3.1"; | |||
| } | } | |||
| identity ae { | identity ae { | |||
| base tcp-flag; | base tcp-flag; | |||
| description | description | |||
| "Accurate ECN. | "Accurate Explicit Congestion Notification (ECN). | |||
| Previously used as NS (Nonce Sum), which is now | Previously used as Nonce Sum (NS), which is now | |||
| historic."; | historic."; | |||
| } | } | |||
| identity mpls-acl-type { | identity mpls-acl-type { | |||
| base acl:acl-base; | base acl:acl-base; | |||
| description | description | |||
| "An ACL that matches on fields from the MPLS header."; | "An ACL that matches on fields from the MPLS header."; | |||
| } | } | |||
| identity label-position { | identity label-position { | |||
| skipping to change at page 18, line 35 ¶ | skipping to change at line 795 ¶ | |||
| } | } | |||
| identity bottom { | identity bottom { | |||
| base label-position; | base label-position; | |||
| description | description | |||
| "Bottom of the label stack."; | "Bottom of the label stack."; | |||
| } | } | |||
| identity log-types { | identity log-types { | |||
| description | description | |||
| "Base identity for deriving the Log actions."; | "Base identity for deriving the log actions."; | |||
| } | } | |||
| identity local-log { | identity local-log { | |||
| base log-types; | base log-types; | |||
| description | description | |||
| "A local log is used to record the ACL results."; | "A local log is used to record the ACL results."; | |||
| } | } | |||
| identity counter-type { | identity counter-type { | |||
| description | description | |||
| skipping to change at page 19, line 13 ¶ | skipping to change at line 821 ¶ | |||
| description | description | |||
| "Identity for counter name to be updated based on | "Identity for counter name to be updated based on | |||
| the ACL match actions."; | the ACL match actions."; | |||
| } | } | |||
| typedef operator { | typedef operator { | |||
| type bits { | type bits { | |||
| bit not { | bit not { | |||
| position 0; | position 0; | |||
| description | description | |||
| "If set, logical negation of operation."; | "If set, the logical negation of operation."; | |||
| } | } | |||
| bit match { | bit match { | |||
| position 1; | position 1; | |||
| description | description | |||
| "Match bit. This is a bitwise match operation defined as | "Match bit. This is a bitwise match operation defined as | |||
| '(data & value) == value'."; | '(data & value) == value'."; | |||
| } | } | |||
| bit any { | bit any { | |||
| position 2; | position 2; | |||
| description | description | |||
| "Any bit. This is a match on any of the bits in bitmask. | "Any bit. This is a match on any of the bits in bitmask. | |||
| It evaluates to 'true' if any of the bits in the | It evaluates to 'true' if any of the bits in the | |||
| value mask are set in the data, i.e., | value mask are set in the data, i.e., | |||
| '(data & value) != 0'."; | '(data & value) != 0'."; | |||
| } | } | |||
| } | } | |||
| description | description | |||
| "Specifies how to apply the defined bitmask. | "Specifies how to apply the defined bitmask. The | |||
| 'any' and 'match' bits must not be set simultaneously."; | 'any' and 'match' bits must not be set simultaneously."; | |||
| } | } | |||
| typedef fragment-type { | typedef fragment-type { | |||
| type bits { | type bits { | |||
| bit df { | bit df { | |||
| position 0; | position 0; | |||
| description | description | |||
| "Don't fragment bit for IPv4. | "Don't fragment bit for IPv4. Must be set to 0 when it | |||
| Must be set to 0 when it appears in an IPv6 filter."; | appears in an IPv6 filter."; | |||
| } | } | |||
| bit isf { | bit isf { | |||
| position 1; | position 1; | |||
| description | description | |||
| "Is a fragment."; | "Is a fragment."; | |||
| } | } | |||
| bit ff { | bit ff { | |||
| position 2; | position 2; | |||
| description | description | |||
| "First fragment."; | "First fragment."; | |||
| skipping to change at page 22, line 11 ¶ | skipping to change at line 963 ¶ | |||
| } | } | |||
| } | } | |||
| case builtin { | case builtin { | |||
| leaf bitmask { | leaf bitmask { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "The bitmask matches the last 4 bits of byte 13 | "The bitmask matches the last 4 bits of byte 13 | |||
| and byte 14 of the TCP header. | and byte 14 of the TCP header. | |||
| For clarity, the 4 bits of byte 12 | For clarity, the 4 bits of byte 12 | |||
| corresponding to the TCP data offset field are not | corresponding to the TCP data offset field are not | |||
| included in any matching. | included in any matching. Assigned TCP flags | |||
| Assigned TCP flags and their position are maintained | and their position are maintained in the IANA | |||
| in the IANA'Transmission Control Protocol (TCP) | 'Transmission Control Protocol (TCP) Parameters' | |||
| Parameters' registry group."; | registry group."; | |||
| reference | reference | |||
| "RFC 9293: Transmission Control Protocol (TCP), | "RFC 9293: Transmission Control Protocol (TCP), | |||
| Section 3.1 | Section 3.1 | |||
| https://www.iana.org/assignments/tcp-parameters"; | <https://www.iana.org/assignments/tcp-parameters>"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping fragment-fields { | grouping fragment-fields { | |||
| description | description | |||
| "Operations on fragment types."; | "Operations on fragment types."; | |||
| leaf operator { | leaf operator { | |||
| type operator; | type operator; | |||
| skipping to change at page 22, line 48 ¶ | skipping to change at line 1000 ¶ | |||
| } | } | |||
| grouping mpls-match-parameters-config { | grouping mpls-match-parameters-config { | |||
| description | description | |||
| "Parameters for the configuration of MPLS match rules."; | "Parameters for the configuration of MPLS match rules."; | |||
| leaf traffic-class { | leaf traffic-class { | |||
| type uint8 { | type uint8 { | |||
| range "0..7"; | range "0..7"; | |||
| } | } | |||
| description | description | |||
| "The value of the MPLS traffic class (TC) bits, | "The value of the MPLS Traffic Class (TC) bits, | |||
| formerly known as the EXP bits."; | formerly known as the EXP bits."; | |||
| } | } | |||
| leaf label-position { | leaf label-position { | |||
| type identityref { | type identityref { | |||
| base acl-enh:label-position; | base acl-enh:label-position; | |||
| } | } | |||
| description | description | |||
| "Position of the label."; | "Position of the label."; | |||
| } | } | |||
| leaf upper-label-range { | leaf upper-label-range { | |||
| type rt-types:mpls-label; | type rt-types:mpls-label; | |||
| description | description | |||
| "Match MPLS label value on the MPLS header. | "Match MPLS label value on the MPLS header. | |||
| The usage of this field indicated the upper range | The usage of this field indicates the upper | |||
| value in the top of the stack. | range value in the top of the stack. This | |||
| This label value does not include the encodings | label value does not include the encodings | |||
| of Traffic Class and TTL."; | of Traffic Class and TTL."; | |||
| reference | reference | |||
| "RFC 3032: MPLS Label Stack Encoding"; | "RFC 3032: MPLS Label Stack Encoding"; | |||
| } | } | |||
| leaf lower-label-range { | leaf lower-label-range { | |||
| type rt-types:mpls-label; | type rt-types:mpls-label; | |||
| description | description | |||
| "Match MPLS label value on the MPLS header. | "Match MPLS label value on the MPLS header. | |||
| The usage of this field indicated the lower | The usage of this field indicates the lower | |||
| range value in the top of the stack. | range value in the top of the stack. | |||
| This label value does not include the | This label value does not include the | |||
| encodings of Traffic Class and TTL."; | encodings of Traffic Class and TTL."; | |||
| reference | reference | |||
| "RFC 3032: MPLS Label Stack Encoding"; | "RFC 3032: MPLS Label Stack Encoding"; | |||
| } | } | |||
| leaf label-block-name { | leaf label-block-name { | |||
| type string; | type string; | |||
| description | description | |||
| "Reference to a label block predefiend in the | "Reference to a label block predefined in the | |||
| implementation."; | implementation."; | |||
| } | } | |||
| leaf ttl-value { | leaf ttl-value { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Time-to-live MPLS packet value match."; | "Time-to-live MPLS packet value match."; | |||
| reference | reference | |||
| "RFC 3032: MPLS Label Stack Encoding"; | "RFC 3032: MPLS Label Stack Encoding"; | |||
| } | } | |||
| } | } | |||
| grouping payload-match { | grouping payload-match { | |||
| description | description | |||
| "Operations on payload match."; | "Operations on payload match."; | |||
| leaf offset { | leaf offset { | |||
| type identityref { | type identityref { | |||
| base acl-enh:offset-type; | base acl-enh:offset-type; | |||
| } | } | |||
| description | description | |||
| "Indicates the payload offset. This will indicate | "Indicates the payload offset. This will indicate | |||
| the position of the data in packet to use for | the position of the data in the packet to use for | |||
| the match."; | the match."; | |||
| } | } | |||
| leaf length { | leaf length { | |||
| type uint16; | type uint16; | |||
| units "bytes"; | units "bytes"; | |||
| description | description | |||
| "Indicates the number of bytes to ignore, starting from | "Indicates the number of bytes to ignore, starting from | |||
| the offset, to perform the pattern match."; | the offset, to perform the pattern match."; | |||
| } | } | |||
| leaf operator { | leaf operator { | |||
| skipping to change at page 25, line 31 ¶ | skipping to change at line 1127 ¶ | |||
| } | } | |||
| leaf-list protocol { | leaf-list protocol { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "Identifies the target protocol number. | "Identifies the target protocol number. | |||
| For example, 6 for TCP or 17 for UDP."; | For example, 6 for TCP or 17 for UDP."; | |||
| } | } | |||
| leaf-list fqdn { | leaf-list fqdn { | |||
| type inet:domain-name; | type inet:domain-name; | |||
| description | description | |||
| "FQDN identifying the target."; | "Fully Qualified Domain Name (FQDN) identifying the target."; | |||
| } | } | |||
| leaf-list uri { | leaf-list uri { | |||
| type inet:uri; | type inet:uri; | |||
| description | description | |||
| "URI identifying the target."; | "URI identifying the target."; | |||
| } | } | |||
| } | } | |||
| grouping icmpv4-header-fields { | grouping icmpv4-header-fields { | |||
| description | description | |||
| skipping to change at page 26, line 46 ¶ | skipping to change at line 1190 ¶ | |||
| "ICMP code."; | "ICMP code."; | |||
| reference | reference | |||
| "RFC 4443: Internet Control Message Protocol (ICMPv6) | "RFC 4443: Internet Control Message Protocol (ICMPv6) | |||
| for Internet Protocol Version 6 (IPv6) | for Internet Protocol Version 6 (IPv6) | |||
| Specification."; | Specification."; | |||
| } | } | |||
| leaf rest-of-header { | leaf rest-of-header { | |||
| type binary; | type binary; | |||
| description | description | |||
| "Unbounded in length, the contents vary based on the | "Unbounded in length, the contents vary based on the | |||
| ICMP type and code. Also referred to as 'Message Body' | ICMP type and code. Also referred to as 'Message Body' | |||
| in ICMPv6."; | in ICMPv6."; | |||
| reference | reference | |||
| "RFC 4443: Internet Control Message Protocol (ICMPv6) | "RFC 4443: Internet Control Message Protocol (ICMPv6) | |||
| for Internet Protocol Version 6 (IPv6) | for Internet Protocol Version 6 (IPv6) | |||
| Specification."; | Specification."; | |||
| } | } | |||
| } | } | |||
| grouping acl-complementary-actions { | grouping acl-complementary-actions { | |||
| description | description | |||
| "Collection of complementary ACL actions."; | "Collection of complementary ACL actions."; | |||
| container log-action { | container log-action { | |||
| description | description | |||
| "Container for defining log actions."; | "Container for defining log actions."; | |||
| leaf log-type { | leaf log-type { | |||
| skipping to change at page 27, line 52 ¶ | skipping to change at line 1243 ¶ | |||
| leaf-list counter-name { | leaf-list counter-name { | |||
| when "derived-from-or-self(../counter-type, " | when "derived-from-or-self(../counter-type, " | |||
| + "'acl-enh:counter-name')" { | + "'acl-enh:counter-name')" { | |||
| description | description | |||
| "Name for the counter or variable to update when | "Name for the counter or variable to update when | |||
| 'counter-type' is 'counter-name'."; | 'counter-type' is 'counter-name'."; | |||
| } | } | |||
| type string; | type string; | |||
| description | description | |||
| "List of possible variables or counter names to | "List of possible variables or counter names to | |||
| update based on match critieria."; | update based on match criteria."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping ipv4-prefix-sets { | grouping ipv4-prefix-sets { | |||
| description | description | |||
| "Data definitions for a list of IPv4 prefixes | "Data definitions for a list of IPv4 prefixes, | |||
| prefixes which are matched as part of a policy."; | which are matched as part of a policy."; | |||
| list prefix-set { | list prefix-set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of the defined prefix sets."; | "List of the defined prefix sets."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the prefix set -- this is used as a label to | "Name of the prefix set -- this is used as a label to | |||
| reference the set in match conditions."; | reference the set in match conditions."; | |||
| } | } | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Defined Set description."; | "Defined set description."; | |||
| } | } | |||
| leaf-list prefix { | leaf-list prefix { | |||
| type inet:ipv4-prefix; | type inet:ipv4-prefix; | |||
| description | description | |||
| "List of IPv4 prefixes to be used in match | "List of IPv4 prefixes to be used in match | |||
| conditions."; | conditions."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping ipv6-prefix-sets { | grouping ipv6-prefix-sets { | |||
| description | description | |||
| "Data definitions for a list of IPv6 prefixes which are | "Data definitions for a list of IPv6 prefixes, which are | |||
| matched as part of a policy."; | matched as part of a policy."; | |||
| list prefix-set { | list prefix-set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of the defined prefix sets."; | "List of the defined prefix sets."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the prefix set -- this is used as a label to | "Name of the prefix set -- this is used as a label to | |||
| reference the set in match conditions."; | reference the set in match conditions."; | |||
| skipping to change at page 29, line 17 ¶ | skipping to change at line 1305 ¶ | |||
| leaf-list prefix { | leaf-list prefix { | |||
| type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
| description | description | |||
| "List of IPv6 prefixes to be used in match conditions."; | "List of IPv6 prefixes to be used in match conditions."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping port-sets { | grouping port-sets { | |||
| description | description | |||
| "Data definitions for a list of ports which can | "Data definitions for a list of ports, which can | |||
| be matched in policies."; | be matched in policies."; | |||
| list port-set { | list port-set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of port set definitions."; | "List of port set definitions."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the port set -- this is used as a label to | "Name of the port set -- this is used as a label to | |||
| reference the set in match conditions."; | reference the set in match conditions."; | |||
| skipping to change at page 30, line 4 ¶ | skipping to change at line 1340 ¶ | |||
| group of port numbers."; | group of port numbers."; | |||
| container port-range-or-operator { | container port-range-or-operator { | |||
| description | description | |||
| "Indicates a set of ports."; | "Indicates a set of ports."; | |||
| uses packet-fields:port-range-or-operator; | uses packet-fields:port-range-or-operator; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping protocol-sets { | grouping protocol-sets { | |||
| description | description | |||
| "Data definitions for a list of protocols which can be | "Data definitions for a list of protocols, which can be | |||
| matched in policies."; | matched in policies."; | |||
| list protocol-set { | list protocol-set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of protocol set definitions."; | "List of protocol set definitions."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the protocols set -- this is used as a | "Name of the protocols set -- this is used as a | |||
| label to reference the set in match conditions."; | label to reference the set in match conditions."; | |||
| skipping to change at page 30, line 31 ¶ | skipping to change at line 1368 ¶ | |||
| type string; | type string; | |||
| } | } | |||
| description | description | |||
| "Value of the protocol set."; | "Value of the protocol set."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping icmpv4-type-sets { | grouping icmpv4-type-sets { | |||
| description | description | |||
| "Data definitions for a list of ICMPv4 types which can be | "Data definitions for a list of ICMPv4 types, which can be | |||
| matched in policies."; | matched in policies."; | |||
| list set { | list set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of ICMPv4 type set definitions."; | "List of ICMPv4 type set definitions."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the ICMPv4 type set -- this is used as a label | "Name of the ICMPv4 type set -- this is used as a label | |||
| to reference the set in match conditions."; | to reference the set in match conditions."; | |||
| skipping to change at page 31, line 4 ¶ | skipping to change at line 1388 ¶ | |||
| to reference the set in match conditions."; | to reference the set in match conditions."; | |||
| } | } | |||
| list icmpv4-type { | list icmpv4-type { | |||
| key "type"; | key "type"; | |||
| description | description | |||
| "Includes a list of ICMPv4 types."; | "Includes a list of ICMPv4 types."; | |||
| uses icmpv4-header-fields; | uses icmpv4-header-fields; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping icmpv6-type-sets { | grouping icmpv6-type-sets { | |||
| description | description | |||
| "Data definitions for a list of ICMPv6 types which can be | "Data definitions for a list of ICMPv6 types, which can be | |||
| matched in policies."; | matched in policies."; | |||
| list set { | list set { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of ICMP type set definitions."; | "List of ICMP type set definitions."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Name of the ICMPv6 type set -- this is used as a label | "Name of the ICMPv6 type set -- this is used as a label | |||
| to reference the set in match conditions."; | to reference the set in match conditions."; | |||
| skipping to change at page 31, line 29 ¶ | skipping to change at line 1414 ¶ | |||
| key "type"; | key "type"; | |||
| description | description | |||
| "Includes a list of ICMPv6 types."; | "Includes a list of ICMPv6 types."; | |||
| uses icmpv6-header-fields; | uses icmpv6-header-fields; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping aliases { | grouping aliases { | |||
| description | description | |||
| "Grpuing for a set of aliases."; | "Grouping for a set of aliases."; | |||
| list alias { | list alias { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "List of aliases."; | "List of aliases."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the alias."; | "The name of the alias."; | |||
| } | } | |||
| uses alias; | uses alias; | |||
| } | } | |||
| } | } | |||
| grouping defined-sets { | grouping defined-sets { | |||
| description | description | |||
| "Predefined sets of attributes used in policy match | "Predefined sets of attributes used in policy match | |||
| statements."; | statements."; | |||
| container ipv4-prefix-sets { | container ipv4-prefix-sets { | |||
| description | description | |||
| "Data definitions for a list of IPv4 or IPv6 | "Data definitions for a list of IPv4 or IPv6 | |||
| prefixes which are matched as part of a policy."; | prefixes, which are matched as part of a policy."; | |||
| uses ipv4-prefix-sets; | uses ipv4-prefix-sets; | |||
| } | } | |||
| container ipv6-prefix-sets { | container ipv6-prefix-sets { | |||
| description | description | |||
| "Data definitions for a list of IPv6 prefixes which are | "Data definitions for a list of IPv6 prefixes, which are | |||
| matched as part of a policy."; | matched as part of a policy."; | |||
| uses ipv6-prefix-sets; | uses ipv6-prefix-sets; | |||
| } | } | |||
| container port-sets { | container port-sets { | |||
| description | description | |||
| "Data definitions for a list of ports which can | "Data definitions for a list of ports, which can | |||
| be matched in policies."; | be matched in policies."; | |||
| uses port-sets; | uses port-sets; | |||
| } | } | |||
| container protocol-sets { | container protocol-sets { | |||
| description | description | |||
| "Data definitions for a list of protocols which can be | "Data definitions for a list of protocols, which can be | |||
| matched in policies."; | matched in policies."; | |||
| uses protocol-sets; | uses protocol-sets; | |||
| } | } | |||
| container icmpv4-type-sets { | container icmpv4-type-sets { | |||
| description | description | |||
| "Data definitions for a list of ICMPv4 types which can be | "Data definitions for a list of ICMPv4 types, which can be | |||
| matched in policies."; | matched in policies."; | |||
| uses icmpv4-type-sets; | uses icmpv4-type-sets; | |||
| } | } | |||
| container icmpv6-type-sets { | container icmpv6-type-sets { | |||
| description | description | |||
| "Data definitions for a list of ICMPv6 types which can be | "Data definitions for a list of ICMPv6 types, which can be | |||
| matched in policies."; | matched in policies."; | |||
| uses icmpv6-type-sets; | uses icmpv6-type-sets; | |||
| } | } | |||
| container aliases { | container aliases { | |||
| description | description | |||
| "Top-level container for aliases."; | "Top-level container for aliases."; | |||
| uses aliases; | uses aliases; | |||
| } | } | |||
| } | } | |||
| skipping to change at page 33, line 33 ¶ | skipping to change at line 1513 ¶ | |||
| "Matches based upon aliases."; | "Matches based upon aliases."; | |||
| leaf-list alias-name { | leaf-list alias-name { | |||
| type alias-ref; | type alias-ref; | |||
| description | description | |||
| "Indicates one or more aliases."; | "Indicates one or more aliases."; | |||
| } | } | |||
| } | } | |||
| choice mpls { | choice mpls { | |||
| description | description | |||
| "Matches against MPLS headers, for example, label | "Matches against MPLS headers, for example, label | |||
| values"; | values."; | |||
| container mpls-values { | container mpls-values { | |||
| if-feature "match-on-mpls"; | if-feature "match-on-mpls"; | |||
| description | description | |||
| "Provides the rule set that matches MPLS headers."; | "Provides the rule set that matches MPLS headers."; | |||
| uses mpls-match-parameters-config; | uses mpls-match-parameters-config; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/acl:acls/acl:acl/acl:aces" | augment "/acl:acls/acl:acl/acl:aces" | |||
| skipping to change at page 34, line 6 ¶ | skipping to change at line 1535 ¶ | |||
| description | description | |||
| "Adds a match type based on MAC VLAN and I-SID filters."; | "Adds a match type based on MAC VLAN and I-SID filters."; | |||
| container vlan-filter { | container vlan-filter { | |||
| if-feature "match-on-vlan-filter"; | if-feature "match-on-vlan-filter"; | |||
| description | description | |||
| "Indicates how to handle MAC VLANs."; | "Indicates how to handle MAC VLANs."; | |||
| leaf frame-type { | leaf frame-type { | |||
| type string; | type string; | |||
| description | description | |||
| "Entering the frame type allows the | "Entering the frame type allows the | |||
| filter to match a specific type of frame format"; | filter to match a specific type of frame format."; | |||
| } | } | |||
| choice vlan-type { | choice vlan-type { | |||
| description | description | |||
| "VLAN definition from range or operator."; | "VLAN definition from range or operator."; | |||
| case range { | case range { | |||
| leaf lower-vlan { | leaf lower-vlan { | |||
| type uint16; | type uint16; | |||
| must '. <= ../upper-vlan' { | must '. <= ../upper-vlan' { | |||
| error-message | error-message | |||
| "The lower-vlan must be less than or equal to | "The lower-vlan must be less than or equal to | |||
| skipping to change at page 34, line 51 ¶ | skipping to change at line 1580 ¶ | |||
| match."; | match."; | |||
| reference | reference | |||
| "IEEE Std 802.1Q: Bridges and Bridged Networks"; | "IEEE Std 802.1Q: Bridges and Bridged Networks"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container isid-filter { | container isid-filter { | |||
| if-feature "match-on-isid-filter"; | if-feature "match-on-isid-filter"; | |||
| description | description | |||
| "Indicates how to handle I-SID filters. | "Indicates how to handle I-SID filters. The | |||
| I-component is responsible for mapping customer | ||||
| The I-component is responsible for mapping customer | ||||
| Ethernet traffic to the appropriate I-SID."; | Ethernet traffic to the appropriate I-SID."; | |||
| choice isid-type { | choice isid-type { | |||
| description | description | |||
| "I-SID definition from range or operator."; | "I-SID definition from range or operator."; | |||
| case range { | case range { | |||
| leaf lower-isid { | leaf lower-isid { | |||
| type uint16; | type uint16; | |||
| must '. <= ../upper-isid' { | must '. <= ../upper-isid' { | |||
| error-message | error-message | |||
| "The lower-isid must be less than or equal to | "The lower-isid must be less than or equal to | |||
| skipping to change at page 38, line 34 ¶ | skipping to change at line 1755 ¶ | |||
| type icmpv6-type-set-ref; | type icmpv6-type-set-ref; | |||
| description | description | |||
| "A reference to an ICMPv6 type set to match the ICMPv6 type | "A reference to an ICMPv6 type set to match the ICMPv6 type | |||
| field."; | field."; | |||
| } | } | |||
| } | } | |||
| augment "/acl:acls/acl:acl/acl:aces" | augment "/acl:acls/acl:acl/acl:aces" | |||
| + "/acl:ace/acl:actions" { | + "/acl:ace/acl:actions" { | |||
| description | description | |||
| "Complementary actions including Rate-limit action."; | "Complementary actions including rate-limit action."; | |||
| uses acl-complementary-actions; | uses acl-complementary-actions; | |||
| leaf rate-limit { | leaf rate-limit { | |||
| when "../acl:forwarding = 'acl:accept'" { | when "../acl:forwarding = 'acl:accept'" { | |||
| description | description | |||
| "Rate-limit valid only when accept action is used."; | "Rate-limit valid only when the accept action is used."; | |||
| } | } | |||
| type decimal64 { | type decimal64 { | |||
| fraction-digits 2; | fraction-digits 2; | |||
| } | } | |||
| units "bytes per second"; | units "bytes per second"; | |||
| description | description | |||
| "Indicates a rate-limit for the matched traffic."; | "Indicates a rate-limit for the matched traffic."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 5. Security Considerations | 5. Security Considerations | |||
| This section is modeled after the template described in Section 3.7 | This section is modeled after the template described in Section 3.7.1 | |||
| of [I-D.ietf-netmod-rfc8407bis]. | of [YANG-GUIDELINES]. | |||
| The "ietf-acl-enh" YANG module defines a data model that is designed | The "ietf-acl-enh" YANG module defines a data model that is designed | |||
| to be accessed via YANG-based management protocols, such as NETCONF | to be accessed via YANG-based management protocols, such as NETCONF | |||
| [RFC6241] and RESTCONF [RFC8040]. These YANG-based management | [RFC6241] and RESTCONF [RFC8040]. These protocols have to use a | |||
| protocols (1) have to use a secure transport layer (e.g., SSH | secure transport layer (e.g., SSH [RFC4252], TLS [RFC8446], and QUIC | |||
| [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and (2) have to use | [RFC9000]) and have to use mutual authentication. | |||
| mutual authentication. | ||||
| The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
| provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
| RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
| RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
| There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in this YANG module that are | |||
| writable/creatable/deletable (i.e., "config true", which is the | writable/creatable/deletable (i.e., "config true", which is the | |||
| default). All writable data nodes are likely to be reasonably | default). All writable data nodes are likely to be reasonably | |||
| sensitive or vulnerable in some network environments. Write | sensitive or vulnerable in some network environments. Write | |||
| operations (e.g., edit-config) and delete operations to these data | operations (e.g., edit-config) and delete operations to these data | |||
| nodes without proper protection or authentication can have a negative | nodes without proper protection or authentication can have a negative | |||
| effect on network operations. The following subtrees and data nodes | effect on network operations. The following subtrees and data nodes | |||
| have particular sensitivities/vulnerabilities: | have particular sensitivities/vulnerabilities: | |||
| 'defined-sets': These lists specify a set of IP addresses, port | 'defined-sets': These lists specify a set of IP addresses, port | |||
| numbers, protocols, ICMP types, and aliases. Similar to | numbers, protocols, ICMP types, and aliases. Similar to | |||
| [RFC8519], unauthorized write access to these lists can allow | [RFC8519], unauthorized write access to these lists can allow | |||
| intruders to modify the entries so as to permit traffic that | intruders to modify the entries to permit traffic that should not | |||
| should not be permitted, or deny traffic that should be permitted. | be permitted or deny traffic that should be permitted. The former | |||
| The former may result in a DoS attack, or compromise a device. | may result in a DoS attack or compromise a device. The latter may | |||
| The latter may result in a DoS attack. | result in a DoS attack. | |||
| These sets are defined with "nacm:default-deny-write" tagging. | These sets are defined with "nacm:default-deny-write" tagging. | |||
| Some of the readable data nodes in this YANG module may be considered | Some of the readable data nodes in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control read access (e.g., via get, get-config, or | important to control read access (e.g., via get, get-config, or | |||
| notification) to these data nodes. Specifically, the following | notification) to these data nodes. Specifically, the following | |||
| subtrees and data nodes have particular sensitivities/ | subtrees and data nodes have particular sensitivities/ | |||
| vulnerabilities: | vulnerabilities: | |||
| 'defined-sets': Unauthorized read access of these lists will allow | 'defined-sets': Unauthorized read access of these lists will allow | |||
| an attacker to identify the actual resources that are bound to | an attacker to identify the actual resources that are bound to | |||
| ACLs. Likewise, access to this information will help an attacker | ACLs. Likewise, access to this information will help an attacker | |||
| to better scope its attacks to target resources that are specific | to better scope its attacks to target resources that are specific | |||
| to a given network instead of performing random scans. Also, | to a given network instead of performing random scans. Also, | |||
| disclosing some of this information (e.g., IP addresses of core | disclosing some of this information (e.g., IP addresses of core | |||
| routers) may nullify the effect of topology hiding strategies in | routers) may nullify the effect of topology-hiding strategies in | |||
| some networks. | some networks. | |||
| The document defines a match policy based on a pattern that can be | The document defines a match policy based on a pattern that can be | |||
| observed in a packet. For example, such a policy can be combined | observed in a packet. For example, such a policy can be combined | |||
| with header-based matches in the context of DDoS mitigation. | with header-based matches in the context of DDoS mitigation. | |||
| Filtering based on a pattern match is deterministic for packets with | Filtering based on a pattern match is deterministic for packets with | |||
| unencrypted data. However, the efficiency for encrypted packets | unencrypted data. However, the efficiency for encrypted packets | |||
| depend on the presence of an unvarying pattern. Readers may also | depends on the presence of an unvarying pattern. Readers may also | |||
| refer to Section 11 of [RFC8329] for security considerations related | refer to Section 11 of [RFC8329] for security considerations related | |||
| to Network Security Functions (NSFs) that apply packet content | to Network Security Functions (NSFs) that apply packet content | |||
| matching. | matching. | |||
| The YANG modules "iana-icmpv4-types", "iana-icmpv6-types", and "iana- | The YANG modules "iana-icmpv4-types", "iana-icmpv6-types", and "iana- | |||
| ipv6-ext-types" define a set of types. These nodes are intended to | ipv6-ext-types" define a set of identities, types, and groupings. | |||
| be reused by other YANG modules. Each of these modules by itself | These nodes are intended to be reused by other YANG modules. Each | |||
| does not expose any data nodes that are writable, data nodes that | module by itself does not expose any data nodes that are writable, | |||
| contain read-only state, or RPCs. As such, there are no additional | data nodes that contain read-only state, or RPCs. As such, there are | |||
| security issues related to these YANG modules that need to be | no additional security issues related to these YANG modules that need | |||
| considered. | to be considered. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| 6.1. URI Registrations | 6.1. URI Registrations | |||
| This document requests IANA to register the following URIs in the | IANA has registered the following URIs in the "ns" registry within | |||
| "ns" subregistry within the "IETF XML Registry" [RFC3688]: | the "IETF XML Registry" [RFC3688]: | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-acl-enh | URI: urn:ietf:params:xml:ns:yang:ietf-acl-enh | |||
| Registrant Contact: The IESG. | Registrant Contact: The IESG | |||
| XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| URI: urn:ietf:params:xml:ns:yang:iana-icmpv4-types | URI: urn:ietf:params:xml:ns:yang:iana-icmpv4-types | |||
| Registrant Contact: The IESG. | Registrant Contact: The IESG | |||
| XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| URI: urn:ietf:params:xml:ns:yang:iana-icmpv6-types | URI: urn:ietf:params:xml:ns:yang:iana-icmpv6-types | |||
| Registrant Contact: The IESG. | Registrant Contact: The IESG | |||
| XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| URI: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types | URI: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types | |||
| Registrant Contact: The IESG. | Registrant Contact: The IESG | |||
| XML: N/A; the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| 6.2. YANG Module Name Registrations | 6.2. YANG Module Name Registrations | |||
| This document requests IANA to register the following YANG modules in | IANA has registered the following YANG modules in the "YANG Module | |||
| the "YANG Module Names" subregistry [RFC6020] within the "YANG | Names" registry [RFC6020] within the "YANG Parameters" registry | |||
| Parameters" registry. | group. | |||
| name: ietf-acl-enh | Name: ietf-acl-enh | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-acl-enh | Maintained by IANA: N | |||
| maintained by IANA: N | Namespace: urn:ietf:params:xml:ns:yang:ietf-acl-enh | |||
| prefix: acl-enh | Prefix: acl-enh | |||
| reference: RFC XXXX | Reference: RFC 9899 | |||
| name: iana-icmpv4-types | Name: iana-icmpv4-types | |||
| namespace: urn:ietf:params:xml:ns:yang:iana-icmpv4-types | Maintained by IANA: Y | |||
| maintained by IANA: Y | Namespace: urn:ietf:params:xml:ns:yang:iana-icmpv4-types | |||
| prefix: iana-icmpv4-types | Prefix: iana-icmpv4-types | |||
| reference: RFC XXXX | Reference: RFC 9899 | |||
| name: iana-icmpv6-types | Name: iana-icmpv6-types | |||
| namespace: urn:ietf:params:xml:ns:yang:iana-icmpv6-types | Maintained by IANA: Y | |||
| maintained by IANA: Y | Namespace: urn:ietf:params:xml:ns:yang:iana-icmpv6-types | |||
| prefix: iana-icmpv6-types | Prefix: iana-icmpv6-types | |||
| reference: RFC XXXX | Reference: RFC 9899 | |||
| name: iana-ipv6-ext-types | Name: iana-ipv6-ext-types | |||
| namespace: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types | Maintained by IANA: Y | |||
| maintained by IANA: Y | Namespace: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types | |||
| prefix: iana-ipv6-ext-types | Prefix: iana-ipv6-ext-types | |||
| reference: RFC XXXX | Reference: RFC 9899 | |||
| 6.3. Considerations for IANA-Maintained Modules | 6.3. Considerations for IANA-Maintained Modules | |||
| 6.3.1. ICMPv4 Types IANA Module | 6.3.1. ICMPv4 Types IANA Module | |||
| This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
| "iana-icmpv4-types" YANG module. The most recent version of the YANG | "iana-icmpv4-types" YANG module. The most recent version of the YANG | |||
| module is available from the "YANG Parameters" registry | module is available in the "YANG Parameters" registry group | |||
| [IANA-YANG-PARAMETERS]. | [IANA-YANG-PARAMETERS]. | |||
| IANA is requested to add this note to the registry | IANA has added this note to the registry: | |||
| [IANA-YANG-PARAMETERS]: | ||||
| New values must not be directly added to the "iana-icmpv4-types" | | New values must not be directly added to the "iana-icmpv4-types" | |||
| YANG module. They must instead be added to the "ICMP Type | | YANG module. They must instead be added to the "ICMP Type | |||
| Numbers" registry [IANA-ICMPv4]. | | Numbers" registry [IANA-ICMPv4]. | |||
| When a value is added to the "ICMP Type Numbers" registry, a new | When a value is added to the "ICMP Type Numbers" registry, a new | |||
| "enum" statement must be added to the "iana-icmpv4-types" YANG | "enum" statement must be added to the "iana-icmpv4-types" YANG | |||
| module. The "enum" statement, and sub-statements thereof, should be | module. The "enum" statement, and substatements thereof, should be | |||
| defined: | defined as follows: | |||
| "enum": Replicates the name from the registry with all illegal | "enum": Replicates the name from the registry with all illegal | |||
| characters (e.g., spaces) are striped. | characters (e.g., spaces) are striped. | |||
| "value": Contains the decimal value of the IANA-assigned value. | "value": Contains the decimal value of the IANA-assigned value. | |||
| "status": Is included only if a registration has been deprecated or | "status": Included only if a registration has been deprecated or | |||
| obsoleted. IANA "deprecated" maps to YANG status "deprecated", | obsoleted. IANA "deprecated" maps to YANG status "deprecated", | |||
| and IANA "obsolete" maps to YANG status "obsolete". | and IANA "obsolete" maps to YANG status "obsolete". | |||
| "description": Replicates the name from the registry. | "description": Replicates the name from the registry. | |||
| "reference": Replicates the reference(s) from the registry with the | "reference": Replicates the reference(s) from the registry with the | |||
| title of the document(s) added. | title of the document(s) added. | |||
| Unassigned, reserved, or [RFC3692]-style values are not present in | Unassigned, reserved, or values styled like those in [RFC3692] are | |||
| the module. | not present in the module. | |||
| When the "iana-icmpv4-types" YANG module is updated, a new "revision" | When the "iana-icmpv4-types" YANG module is updated, a new "revision" | |||
| statement with a unique revision date must be added in front of the | statement with a unique revision date must be added in front of the | |||
| existing revision statements. | existing revision statements. | |||
| IANA is requested to add this note to "ICMP Type Numbers" | IANA has added this note to "ICMP Type Numbers" registry | |||
| [IANA-ICMPv4]: | [IANA-ICMPv4] and listed this document as an additional reference for | |||
| the registry: | ||||
| When this registry is modified, the YANG module "iana-icmpv4-types" | ||||
| [IANA_ICMPv4_YANG_URL] must be updated as defined in RFC XXXX. | ||||
| IANA is requested to update the "Reference" in the "ICMP Type | ||||
| Numbers" registry as follows: | ||||
| OLD: [RFC2780] | ||||
| NEW: [RFC2780][RFCXXXX] | | When this registry is modified, the YANG module "iana- | |||
| | icmpv4-types" [IANA-YANG-PARAMETERS] must be updated as defined in | ||||
| | RFC 9899. | ||||
| 6.3.2. ICMPv6 Types IANA Module | 6.3.2. ICMPv6 Types IANA Module | |||
| This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
| "iana-icmpv6-types" YANG module. The most recent version of the YANG | "iana-icmpv6-types" YANG module. The most recent version of the YANG | |||
| module is available from the "YANG Parameters" registry | module is available in the "YANG Parameters" registry group | |||
| [IANA-YANG-PARAMETERS]. | [IANA-YANG-PARAMETERS]. | |||
| IANA is requested to add this note to the registry | IANA has added this note to the registry: | |||
| [IANA-YANG-PARAMETERS]: | ||||
| New values must not be directly added to the "iana-icmpv6-types" | | New values must not be directly added to the "iana-icmpv6-types" | |||
| YANG module. They must instead be added to the "ICMPv6 "type" | | YANG module. They must instead be added to the "ICMPv6 "type" | |||
| Numbers" registry [IANA-ICMPv6]. | | Numbers" registry [IANA-ICMPv6]. | |||
| When a value is added to the "ICMPv6 "type" Numbers" registry, a new | When a value is added to the "ICMPv6 "type" Numbers" registry, a new | |||
| "enum" statement must be added to the "iana-icmpv6-types" YANG | "enum" statement must be added to the "iana-icmpv6-types" YANG | |||
| module. The "enum" statement, and sub-statements thereof, should be | module. The "enum" statement, and substatements thereof, should be | |||
| defined: | defined as follows: | |||
| "enum": Replicates the name from the registry with all illegal | "enum": Replicates the name from the registry with all illegal | |||
| characters (e.g., spaces) striped. | characters (e.g., spaces) striped. | |||
| "value": Contains the decimal value of the IANA-assigned value. | "value": Contains the decimal value of the IANA-assigned value. | |||
| "status": Is included only if a registration has been deprecated or | "status": Included only if a registration has been deprecated or | |||
| obsoleted. IANA "deprecated" maps to YANG status "deprecated", | obsoleted. IANA "deprecated" maps to YANG status "deprecated", | |||
| and IANA "obsolete" maps to YANG status "obsolete". | and IANA "obsolete" maps to YANG status "obsolete". | |||
| "description": Replicates the name from the registry. | "description": Replicates the name from the registry. | |||
| "reference": Replicates the reference(s) from the registry with the | "reference": Replicates the reference(s) from the registry with the | |||
| title of the document(s) added. | title of the document(s) added. | |||
| Unassigned, reserved, or private experimentation values are not | Unassigned, reserved, or private experimentation values are not | |||
| present in the module. | present in the module. | |||
| When the "iana-icmpv6-types" YANG module is updated, a new "revision" | When the "iana-icmpv6-types" YANG module is updated, a new "revision" | |||
| statement with a unique revision date must be added in front of the | statement with a unique revision date must be added in front of the | |||
| existing revision statements. | existing revision statements. | |||
| IANA is requested to add this note to "ICMPv6 "type" Numbers" | IANA has added this note to the "ICMPv6 "type" Numbers" registry | |||
| [IANA-ICMPv6]: | [IANA-ICMPv6] and listed this document as an additional reference for | |||
| the registry: | ||||
| When this registry is modified, the YANG module "iana-icmpv6-types" | ||||
| [IANA_ICMPv6_YANG_URL] must be updated as defined in RFC XXXX. | ||||
| IANA is requested to update the "Reference" in the "ICMPv6 "type" | ||||
| Numbers" registry as follows: | ||||
| OLD: [RFC4443] | ||||
| NEW: [RFC4443][RFCXXXX] | | When this registry is modified, the YANG module "iana- | |||
| | icmpv6-types" [IANA-YANG-PARAMETERS] must be updated as defined in | ||||
| | RFC 9899. | ||||
| 6.3.3. IPv6 Extension Header Types IANA Module | 6.3.3. IPv6 Extension Header Types IANA Module | |||
| This document defines the initial version of the IANA-maintained | This document defines the initial version of the IANA-maintained | |||
| "iana-ipv6-ext-types" YANG module. The most recent version of the | "iana-ipv6-ext-types" YANG module. The most recent version of the | |||
| YANG module is available from the "YANG Parameters" registry | YANG module is available in the "YANG Parameters" registry group | |||
| [IANA-YANG-PARAMETERS]. | [IANA-YANG-PARAMETERS]. | |||
| IANA is requested to add this note to the registry | IANA has added this note to the registry: | |||
| [IANA-YANG-PARAMETERS]: | ||||
| New values must not be directly added to the "iana-ipv6-ext-types" | | New values must not be directly added to the "iana-ipv6-ext-types" | |||
| YANG module. They must instead be added to the "IPv6 Extension | | YANG module. They must instead be added to the "IPv6 Extension | |||
| Header Types" registry [IANA-IPv6]. | | Header Types" registry [IANA-IPv6]. | |||
| When a value is added to the "IPv6 Extension Header Types" registry, | When a value is added to the "IPv6 Extension Header Types" registry, | |||
| a new "enum" statement must be added to the "iana-ipv6-ext-types" | a new "enum" statement must be added to the "iana-ipv6-ext-types" | |||
| YANG module. The "enum" statement, and sub-statements thereof, | YANG module. The "enum" statement, and substatements thereof, should | |||
| should be defined: | be defined as follows | |||
| "enum": Replicates the description from the registry with all spaces | "enum": Replicates the description from the registry with all spaces | |||
| striped. | striped. | |||
| "value": Contains the decimal value of the IANA-assigned value. | "value": Contains the decimal value of the IANA-assigned value. | |||
| "status": Is included only if a registration has been deprecated or | "status": Included only if a registration has been deprecated or | |||
| obsoleted. IANA "deprecated" maps to YANG status "deprecated", | obsoleted. IANA "deprecated" maps to YANG status "deprecated", | |||
| and IANA "obsolete" maps to YANG status "obsolete". | and IANA "obsolete" maps to YANG status "obsolete". | |||
| "description": Replicates the description from the registry. | "description": Replicates the description from the registry. | |||
| "reference": Replicates the reference(s) from the registry with the | "reference": Replicates the reference(s) from the registry with the | |||
| title of the document(s) added. | title of the document(s) added. | |||
| Unassigned or reserved values are not present in the module. | Unassigned or reserved values are not present in the module. | |||
| When the "iana-ipv6-ext-types" YANG module is updated, a new | When the "iana-ipv6-ext-types" YANG module is updated, a new | |||
| "revision" statement with a unique revision date must be added in | "revision" statement with a unique revision date must be added in | |||
| front of the existing revision statements. | front of the existing revision statements. | |||
| IANA is requested to add this note to the "IPv6 Extension Header | IANA has added this note to the "IPv6 Extension Header Types" | |||
| Types" registry [IANA-IPv6]: | registry [IANA-IPv6] and listed this document as an additional | |||
| reference for the registry: | ||||
| When this registry is modified, the YANG module "iana-ipv6-ext-types" | ||||
| [IANA_IPV6_YANG_URL] must be updated as defined in RFC XXXX. | ||||
| IANA is requested to update the "Reference" in the "IPv6 Extension | ||||
| Header Types" registry as follows: | ||||
| OLD: [RFC2780][RFC5237][RFC7045] | ||||
| NEW: [RFC2780][RFC5237][RFC7045][RFCXXXX] | | When this registry is modified, the YANG module "iana-ipv6-ext- | |||
| | types" [IANA-YANG-PARAMETERS] must be updated as defined in RFC | ||||
| | 9899. | ||||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.1. Normative References | |||
| [IANA-ICMPv4] | [IANA-ICMPv4] | |||
| "ICMP Type Numbers", n.d., | IANA, "ICMP Type Numbers", | |||
| <https://www.iana.org/assignments/icmp-parameters/icmp- | <https://www.iana.org/assignments/icmp-parameters>. | |||
| parameters.xhtml>. | ||||
| [IANA-ICMPv6] | [IANA-ICMPv6] | |||
| "ICMPv6 type Numbers", n.d., | IANA, "ICMPv6 "type" Numbers", | |||
| <https://www.iana.org/assignments/icmpv6-parameters/ | <https://www.iana.org/assignments/icmpv6-parameters>. | |||
| icmpv6-parameters.xhtml>. | ||||
| [IANA-IPv6] | [IANA-IPv6] | |||
| "IPv6 Extension Header Types", n.d., | IANA, "IPv6 Extension Header Types", | |||
| <https://www.iana.org/assignments/ipv6-parameters/ | <https://www.iana.org/assignments/ipv6-parameters>. | |||
| ipv6-parameters.xhtml>. | ||||
| [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | |||
| RFC 792, DOI 10.17487/RFC0792, September 1981, | RFC 792, DOI 10.17487/RFC0792, September 1981, | |||
| <https://www.rfc-editor.org/rfc/rfc792>. | <https://www.rfc-editor.org/info/rfc792>. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., | [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., | |||
| Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack | Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack | |||
| Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, | Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, | |||
| <https://www.rfc-editor.org/rfc/rfc3032>. | <https://www.rfc-editor.org/info/rfc3032>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/rfc/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet | |||
| Control Message Protocol (ICMPv6) for the Internet | Control Message Protocol (ICMPv6) for the Internet | |||
| Protocol Version 6 (IPv6) Specification", STD 89, | Protocol Version 6 (IPv6) Specification", STD 89, | |||
| RFC 4443, DOI 10.17487/RFC4443, March 2006, | RFC 4443, DOI 10.17487/RFC4443, March 2006, | |||
| <https://www.rfc-editor.org/rfc/rfc4443>. | <https://www.rfc-editor.org/info/rfc4443>. | |||
| [RFC5462] Andersson, L. and R. Asati, "Multiprotocol Label Switching | [RFC5462] Andersson, L. and R. Asati, "Multiprotocol Label Switching | |||
| (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic | (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic | |||
| Class" Field", RFC 5462, DOI 10.17487/RFC5462, February | Class" Field", RFC 5462, DOI 10.17487/RFC5462, February | |||
| 2009, <https://www.rfc-editor.org/rfc/rfc5462>. | 2009, <https://www.rfc-editor.org/info/rfc5462>. | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <https://www.rfc-editor.org/rfc/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/rfc/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/rfc/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
| (IPv6) Specification", STD 86, RFC 8200, | (IPv6) Specification", STD 86, RFC 8200, | |||
| DOI 10.17487/RFC8200, July 2017, | DOI 10.17487/RFC8200, July 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
| [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, | [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, | |||
| "Common YANG Data Types for the Routing Area", RFC 8294, | "Common YANG Data Types for the Routing Area", RFC 8294, | |||
| DOI 10.17487/RFC8294, December 2017, | DOI 10.17487/RFC8294, December 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8294>. | <https://www.rfc-editor.org/info/rfc8294>. | |||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Access Control Model", STD 91, RFC 8341, | Access Control Model", STD 91, RFC 8341, | |||
| DOI 10.17487/RFC8341, March 2018, | DOI 10.17487/RFC8341, March 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
| [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
| and R. Wilton, "Network Management Datastore Architecture | and R. Wilton, "Network Management Datastore Architecture | |||
| (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8342>. | <https://www.rfc-editor.org/info/rfc8342>. | |||
| [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, | [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, | |||
| "YANG Data Model for Network Access Control Lists (ACLs)", | "YANG Data Model for Network Access Control Lists (ACLs)", | |||
| RFC 8519, DOI 10.17487/RFC8519, March 2019, | RFC 8519, DOI 10.17487/RFC8519, March 2019, | |||
| <https://www.rfc-editor.org/rfc/rfc8519>. | <https://www.rfc-editor.org/info/rfc8519>. | |||
| [RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | [RFC9293] Eddy, W., Ed., "Transmission Control Protocol (TCP)", | |||
| STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9293>. | <https://www.rfc-editor.org/info/rfc9293>. | |||
| 7.2. Informative References | 7.2. Informative References | |||
| [I-D.ietf-netmod-rfc8407bis] | ||||
| Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for | ||||
| Authors and Reviewers of Documents Containing YANG Data | ||||
| Models", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netmod-rfc8407bis-22, 14 January 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | ||||
| rfc8407bis-22>. | ||||
| [IANA-TCP-FLAGS] | [IANA-TCP-FLAGS] | |||
| "Transmission Control Protocol (TCP) Parameters", n.d., | IANA, "Transmission Control Protocol (TCP) Parameters", | |||
| <https://www.iana.org/assignments/tcp-parameters/>. | <https://www.iana.org/assignments/tcp-parameters>. | |||
| [IANA-YANG-PARAMETERS] | [IANA-YANG-PARAMETERS] | |||
| "YANG Parameters", n.d., | IANA, "YANG Parameters", | |||
| <https://www.iana.org/assignments/yang-parameters>. | <https://www.iana.org/assignments/yang-parameters>. | |||
| [IANA_ICMPv4_YANG_URL] | ||||
| "iana-icmpv6-types YANG Module", n.d., | ||||
| <https://www.iana.org/assignments/icmpv6-parameters/iana- | ||||
| icmpv6-types.xhtml>. | ||||
| [IANA_ICMPv6_YANG_URL] | ||||
| "iana-icmpv4-types YANG Module", n.d., | ||||
| <https://www.iana.org/assignments/icmp-parameters/iana- | ||||
| ipv6-ext-types.xhtml>. | ||||
| [IANA_IPV6_YANG_URL] | ||||
| "iana-ipv6-ext-types YANG Module", n.d., | ||||
| <https://www.iana.org/assignments/ipv6-parameters/iana- | ||||
| icmpv6-types.xhtml>. | ||||
| [IEEE-802-1ah] | [IEEE-802-1ah] | |||
| IEEE, "IEEE Standard for Local and metropolitan area | IEEE, "IEEE Standard for Local and metropolitan area | |||
| networks -- Virtual Bridged Local Area Networks Amendment | networks -- Virtual Bridged Local Area Networks Amendment | |||
| 7: Provider Backbone Bridges", August 2008, | 7: Provider Backbone Bridges", IEEE Std 802.1ah-2008, | |||
| <https://standards.ieee.org/standard/802_1ah-2008.html>. | DOI 10.1109/IEEESTD.2008.4602826, August 2008, | |||
| <https://doi.org/10.1109/IEEESTD.2008.4602826>. | ||||
| [IEEE802.1Qcp] | [IEEE802.1Qcp] | |||
| IEEE, "IEEE Standard for Local and metropolitan area | IEEE, "IEEE Standard for Local and metropolitan area | |||
| networks--Bridges and Bridged Networks--Amendment 30: YANG | networks--Bridges and Bridged Networks--Amendment 30: YANG | |||
| Data Model", September 2018, | Data Model", IEEE Std 802.1Qcp-2018, | |||
| DOI 10.1109/IEEESTD.2018.8467507, September 2018, | ||||
| <https://doi.org/10.1109/IEEESTD.2018.8467507>. | <https://doi.org/10.1109/IEEESTD.2018.8467507>. | |||
| [RFC2780] Bradner, S. and V. Paxson, "IANA Allocation Guidelines For | ||||
| Values In the Internet Protocol and Related Headers", | ||||
| BCP 37, RFC 2780, DOI 10.17487/RFC2780, March 2000, | ||||
| <https://www.rfc-editor.org/rfc/rfc2780>. | ||||
| [RFC3692] Narten, T., "Assigning Experimental and Testing Numbers | [RFC3692] Narten, T., "Assigning Experimental and Testing Numbers | |||
| Considered Useful", BCP 82, RFC 3692, | Considered Useful", BCP 82, RFC 3692, | |||
| DOI 10.17487/RFC3692, January 2004, | DOI 10.17487/RFC3692, January 2004, | |||
| <https://www.rfc-editor.org/rfc/rfc3692>. | <https://www.rfc-editor.org/info/rfc3692>. | |||
| [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | |||
| Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | |||
| January 2006, <https://www.rfc-editor.org/rfc/rfc4252>. | January 2006, <https://www.rfc-editor.org/info/rfc4252>. | |||
| [RFC5237] Arkko, J. and S. Bradner, "IANA Allocation Guidelines for | ||||
| the Protocol Field", BCP 37, RFC 5237, | ||||
| DOI 10.17487/RFC5237, February 2008, | ||||
| <https://www.rfc-editor.org/rfc/rfc5237>. | ||||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/rfc/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC7045] Carpenter, B. and S. Jiang, "Transmission and Processing | ||||
| of IPv6 Extension Headers", RFC 7045, | ||||
| DOI 10.17487/RFC7045, December 2013, | ||||
| <https://www.rfc-editor.org/rfc/rfc7045>. | ||||
| [RFC7209] Sajassi, A., Aggarwal, R., Uttaro, J., Bitar, N., | [RFC7209] Sajassi, A., Aggarwal, R., Uttaro, J., Bitar, N., | |||
| Henderickx, W., and A. Isaac, "Requirements for Ethernet | Henderickx, W., and A. Isaac, "Requirements for Ethernet | |||
| VPN (EVPN)", RFC 7209, DOI 10.17487/RFC7209, May 2014, | VPN (EVPN)", RFC 7209, DOI 10.17487/RFC7209, May 2014, | |||
| <https://www.rfc-editor.org/rfc/rfc7209>. | <https://www.rfc-editor.org/info/rfc7209>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8329] Lopez, D., Lopez, E., Dunbar, L., Strassner, J., and R. | [RFC8329] Lopez, D., Lopez, E., Dunbar, L., Strassner, J., and R. | |||
| Kumar, "Framework for Interface to Network Security | Kumar, "Framework for Interface to Network Security | |||
| Functions", RFC 8329, DOI 10.17487/RFC8329, February 2018, | Functions", RFC 8329, DOI 10.17487/RFC8329, February 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8329>. | <https://www.rfc-editor.org/info/rfc8329>. | |||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC8955] Loibl, C., Hares, S., Raszuk, R., McPherson, D., and M. | [RFC8955] Loibl, C., Hares, S., Raszuk, R., McPherson, D., and M. | |||
| Bacher, "Dissemination of Flow Specification Rules", | Bacher, "Dissemination of Flow Specification Rules", | |||
| RFC 8955, DOI 10.17487/RFC8955, December 2020, | RFC 8955, DOI 10.17487/RFC8955, December 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8955>. | <https://www.rfc-editor.org/info/rfc8955>. | |||
| [RFC8956] Loibl, C., Ed., Raszuk, R., Ed., and S. Hares, Ed., | [RFC8956] Loibl, C., Ed., Raszuk, R., Ed., and S. Hares, Ed., | |||
| "Dissemination of Flow Specification Rules for IPv6", | "Dissemination of Flow Specification Rules for IPv6", | |||
| RFC 8956, DOI 10.17487/RFC8956, December 2020, | RFC 8956, DOI 10.17487/RFC8956, December 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8956>. | <https://www.rfc-editor.org/info/rfc8956>. | |||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC9132] Boucadair, M., Ed., Shallow, J., and T. Reddy.K, | [RFC9132] Boucadair, M., Ed., Shallow, J., and T. Reddy.K, | |||
| "Distributed Denial-of-Service Open Threat Signaling | "Distributed Denial-of-Service Open Threat Signaling | |||
| (DOTS) Signal Channel Specification", RFC 9132, | (DOTS) Signal Channel Specification", RFC 9132, | |||
| DOI 10.17487/RFC9132, September 2021, | DOI 10.17487/RFC9132, September 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9132>. | <https://www.rfc-editor.org/info/rfc9132>. | |||
| [YANG-XSLT] | ||||
| "iana-yang", n.d., <https://github.com/llhotka/iana-yang>. | ||||
| Appendix A. Initial Version of the ICMPv4 Types IANA-Maintained Module | ||||
| <CODE BEGINS> file "iana-icmpv4-types@2020-09-25.yang" | ||||
| module iana-icmpv4-types { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:iana-icmpv4-types"; | ||||
| prefix iana-icmpv4-types; | ||||
| organization | ||||
| "Internet Assigned Numbers Authority (IANA)"; | ||||
| contact | ||||
| "Internet Assigned Numbers Authority | ||||
| ICANN | ||||
| 12025 Waterfront Drive, Suite 300 | ||||
| Los Angeles, CA 90094 | ||||
| Tel: +1 424 254 5300 | ||||
| <mailto:iana@iana.org>"; | ||||
| description | ||||
| "This YANG module translates IANA registry 'ICMP Type Numbers' to | ||||
| YANG derived types. | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject to | ||||
| the license terms contained in, the Revised BSD License set | ||||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| The initial version of this YANG module is part of RFC XXXX; | ||||
| see the RFC itself for full legal notices. | ||||
| This version of this YANG module was generated from the | ||||
| corresponding IANA registry using an XSLT stylesheet from the | ||||
| 'iana-yang' project (https://github.com/llhotka/iana-yang)."; | ||||
| reference | ||||
| "Internet Control Message Protocol (ICMP) Parameters | ||||
| (https://www.iana.org/assignments/icmp-parameters/)"; | ||||
| revision 2020-09-25 { | ||||
| description | ||||
| "Current revision as of the revision date specified in the XML | ||||
| representation of the registry page."; | ||||
| reference | ||||
| "https://www.iana.org/assignments/icmp-parameters/ | ||||
| icmp-parameters.xml"; | ||||
| } | ||||
| /* Typedefs */ | ||||
| typedef icmpv4-type-name { | ||||
| type enumeration { | ||||
| enum EchoReply { | ||||
| value 0; | ||||
| description | ||||
| "Echo Reply"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum DestinationUnreachable { | ||||
| value 3; | ||||
| description | ||||
| "Destination Unreachable"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum SourceQuench { | ||||
| value 4; | ||||
| status deprecated; | ||||
| description | ||||
| "Source Quench (Deprecated)"; | ||||
| reference | ||||
| "- RFC 792 | ||||
| - RFC 6633"; | ||||
| } | ||||
| enum Redirect { | ||||
| value 5; | ||||
| description | ||||
| "Redirect"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum AlternateHostAddress { | ||||
| value 6; | ||||
| status deprecated; | ||||
| description | ||||
| "Alternate Host Address (Deprecated)"; | ||||
| reference | ||||
| "RFC 6918"; | ||||
| } | ||||
| enum Echo { | ||||
| value 8; | ||||
| description | ||||
| "Echo"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum RouterAdvertisement { | ||||
| value 9; | ||||
| description | ||||
| "Router Advertisement"; | ||||
| reference | ||||
| "RFC 1256"; | ||||
| } | ||||
| enum RouterSolicitation { | ||||
| value 10; | ||||
| description | ||||
| "Router Solicitation"; | ||||
| reference | ||||
| "RFC 1256"; | ||||
| } | ||||
| enum TimeExceeded { | ||||
| value 11; | ||||
| description | ||||
| "Time Exceeded"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum ParameterProblem { | ||||
| value 12; | ||||
| description | ||||
| "Parameter Problem"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum Timestamp { | ||||
| value 13; | ||||
| description | ||||
| "Timestamp"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum TimestampReply { | ||||
| value 14; | ||||
| description | ||||
| "Timestamp Reply"; | ||||
| reference | ||||
| "RFC 792"; | ||||
| } | ||||
| enum InformationRequest { | ||||
| value 15; | ||||
| status deprecated; | ||||
| description | ||||
| "Information Request (Deprecated)"; | ||||
| reference | ||||
| "- RFC 792 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum InformationReply { | ||||
| value 16; | ||||
| status deprecated; | ||||
| description | ||||
| "Information Reply (Deprecated)"; | ||||
| reference | ||||
| "- RFC 792 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum AddressMaskRequest { | ||||
| value 17; | ||||
| status deprecated; | ||||
| description | ||||
| "Address Mask Request (Deprecated)"; | ||||
| reference | ||||
| "- RFC 950 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum AddressMaskReply { | ||||
| value 18; | ||||
| status deprecated; | ||||
| description | ||||
| "Address Mask Reply (Deprecated)"; | ||||
| reference | ||||
| "- RFC 950 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum Traceroute { | ||||
| value 30; | ||||
| status deprecated; | ||||
| description | ||||
| "Traceroute (Deprecated)"; | ||||
| reference | ||||
| "- RFC 1393 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum DatagramConversionError { | ||||
| value 31; | ||||
| status deprecated; | ||||
| description | ||||
| "Datagram Conversion Error (Deprecated)"; | ||||
| reference | ||||
| "- RFC 1475 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum MobileHostRedirect { | ||||
| value 32; | ||||
| status deprecated; | ||||
| description | ||||
| "Mobile Host Redirect (Deprecated)"; | ||||
| reference | ||||
| "- David Johnson <> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum IPv6Where-Are-You { | ||||
| value 33; | ||||
| status deprecated; | ||||
| description | ||||
| "IPv6 Where-Are-You (Deprecated)"; | ||||
| reference | ||||
| "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum IPv6I-Am-Here { | ||||
| value 34; | ||||
| status deprecated; | ||||
| description | ||||
| "IPv6 I-Am-Here (Deprecated)"; | ||||
| reference | ||||
| "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum MobileRegistrationRequest { | ||||
| value 35; | ||||
| status deprecated; | ||||
| description | ||||
| "Mobile Registration Request (Deprecated)"; | ||||
| reference | ||||
| "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum MobileRegistrationReply { | ||||
| value 36; | ||||
| status deprecated; | ||||
| description | ||||
| "Mobile Registration Reply (Deprecated)"; | ||||
| reference | ||||
| "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum DomainNameRequest { | ||||
| value 37; | ||||
| status deprecated; | ||||
| description | ||||
| "Domain Name Request (Deprecated)"; | ||||
| reference | ||||
| "- RFC 1788 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum DomainNameReply { | ||||
| value 38; | ||||
| status deprecated; | ||||
| description | ||||
| "Domain Name Reply (Deprecated)"; | ||||
| reference | ||||
| "- RFC 1788 | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum SKIP { | ||||
| value 39; | ||||
| status deprecated; | ||||
| description | ||||
| "SKIP (Deprecated)"; | ||||
| reference | ||||
| "- Tom Markson <mailto:markson&osmosys.incog.com> | ||||
| - RFC 6918"; | ||||
| } | ||||
| enum Photuris { | ||||
| value 40; | ||||
| description | ||||
| "Photuris"; | ||||
| reference | ||||
| "RFC 2521"; | ||||
| } | ||||
| enum ICMPmessagesutilizedbyexperimentalmobilityprotocols { | ||||
| value 41; | ||||
| description | ||||
| "ICMP messages utilized by experimental mobility protocols | ||||
| such as Seamoby"; | ||||
| reference | ||||
| "RFC 4065"; | ||||
| } | ||||
| enum ExtendedEchoRequest { | ||||
| value 42; | ||||
| description | ||||
| "Extended Echo Request"; | ||||
| reference | ||||
| "RFC 8335"; | ||||
| } | ||||
| enum ExtendedEchoReply { | ||||
| value 43; | ||||
| description | ||||
| "Extended Echo Reply"; | ||||
| reference | ||||
| "RFC 8335"; | ||||
| } | ||||
| } | ||||
| description | ||||
| "This enumeration type defines mnemonic names and corresponding | ||||
| numeric values of ICMPv4 types."; | ||||
| reference | ||||
| "RFC 2708: IANA Allocation Guidelines For Values In the | ||||
| Internet Protocol and Related Headers"; | ||||
| } | ||||
| typedef icmpv4-type { | ||||
| type union { | ||||
| type uint8; | ||||
| type icmpv4-type-name; | ||||
| } | ||||
| description | ||||
| "This type allows reference to an ICMPv4 type using either the | ||||
| assigned mnemonic name or numeric value."; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| Appendix B. Initial Version of the ICMPv6 Types IANA-Maintained Module | ||||
| <CODE BEGINS> file "iana-icmpv6-types@2023-04-28.yang" | ||||
| module iana-icmpv6-types { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:iana-icmpv6-types"; | ||||
| prefix iana-icmpv6-types; | ||||
| organization | ||||
| "Internet Assigned Numbers Authority (IANA)"; | ||||
| contact | ||||
| "Internet Assigned Numbers Authority | ||||
| ICANN | ||||
| 12025 Waterfront Drive, Suite 300 | ||||
| Los Angeles, CA 90094 | ||||
| Tel: +1 424 254 5300 | ||||
| <mailto:iana@iana.org>"; | ||||
| description | ||||
| "This YANG module translates IANA registry 'ICMPv6 \"type\" | ||||
| Numbers' to YANG derived types. | ||||
| Copyright (c) 2023 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject to | ||||
| the license terms contained in, the Revised BSD License set | ||||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| The initial version of this YANG module is part of RFC XXXX; | ||||
| see the RFC itself for full legal notices. | ||||
| This version of this YANG module was generated from the | ||||
| corresponding IANA registry using an XSLT stylesheet from the | ||||
| 'iana-yang' project (https://github.com/llhotka/iana-yang)."; | ||||
| reference | ||||
| "Internet Control Message Protocol version 6 (ICMPv6) Parameters | ||||
| (https://www.iana.org/assignments/icmpv6-parameters/)"; | ||||
| revision 2023-04-28 { | ||||
| description | ||||
| "Current revision as of the revision date specified in the XML | ||||
| representation of the registry page."; | ||||
| reference | ||||
| "https://www.iana.org/assignments/icmpv6-parameters | ||||
| /icmpv6-parameters.xml"; | ||||
| } | ||||
| /* Typedefs */ | ||||
| typedef icmpv6-type-name { | ||||
| type enumeration { | ||||
| enum DestinationUnreachable { | ||||
| value 1; | ||||
| description | ||||
| "Destination Unreachable."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum PacketTooBig { | ||||
| value 2; | ||||
| description | ||||
| "Packet Too Big."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum TimeExceeded { | ||||
| value 3; | ||||
| description | ||||
| "Time Exceeded."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum ParameterProblem { | ||||
| value 4; | ||||
| description | ||||
| "Parameter Problem."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum EchoRequest { | ||||
| value 128; | ||||
| description | ||||
| "Echo Request."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum EchoReply { | ||||
| value 129; | ||||
| description | ||||
| "Echo Reply."; | ||||
| reference | ||||
| "RFC 4443"; | ||||
| } | ||||
| enum MulticastListenerQuery { | ||||
| value 130; | ||||
| description | ||||
| "Multicast Listener Query."; | ||||
| reference | ||||
| "RFC 2710"; | ||||
| } | ||||
| enum MulticastListenerReport { | ||||
| value 131; | ||||
| description | ||||
| "Multicast Listener Report."; | ||||
| reference | ||||
| "RFC 2710"; | ||||
| } | ||||
| enum MulticastListenerDone { | ||||
| value 132; | ||||
| description | ||||
| "Multicast Listener Done."; | ||||
| reference | ||||
| "RFC 2710"; | ||||
| } | ||||
| enum RouterSolicitation { | ||||
| value 133; | ||||
| description | ||||
| "Router Solicitation."; | ||||
| reference | ||||
| "RFC 4861"; | ||||
| } | ||||
| enum RouterAdvertisement { | ||||
| value 134; | ||||
| description | ||||
| "Router Advertisement."; | ||||
| reference | ||||
| "RFC 4861"; | ||||
| } | ||||
| enum NeighborSolicitation { | ||||
| value 135; | ||||
| description | ||||
| "Neighbor Solicitation."; | ||||
| reference | ||||
| "RFC 4861"; | ||||
| } | ||||
| enum NeighborAdvertisement { | ||||
| value 136; | ||||
| description | ||||
| "Neighbor Advertisement."; | ||||
| reference | ||||
| "RFC 4861"; | ||||
| } | ||||
| enum RedirectMessage { | ||||
| value 137; | ||||
| description | ||||
| "Redirect Message."; | ||||
| reference | ||||
| "RFC 4861"; | ||||
| } | ||||
| enum RouterRenumbering { | ||||
| value 138; | ||||
| description | ||||
| "Router Renumbering."; | ||||
| reference | ||||
| "RFC 2894"; | ||||
| } | ||||
| enum ICMPNodeInformationQuery { | ||||
| value 139; | ||||
| description | ||||
| "ICMP Node Information Query."; | ||||
| reference | ||||
| "RFC 4620"; | ||||
| } | ||||
| enum ICMPNodeInformationResponse { | ||||
| value 140; | ||||
| description | ||||
| "ICMP Node Information Response."; | ||||
| reference | ||||
| "RFC 4620"; | ||||
| } | ||||
| enum InverseNeighborDiscoverySolicitationMessage { | ||||
| value 141; | ||||
| description | ||||
| "Inverse Neighbor Discovery Solicitation Message."; | ||||
| reference | ||||
| "RFC 3122"; | ||||
| } | ||||
| enum InverseNeighborDiscoveryAdvertisementMessage { | ||||
| value 142; | ||||
| description | ||||
| "Inverse Neighbor Discovery Advertisement Message."; | ||||
| reference | ||||
| "RFC 3122"; | ||||
| } | ||||
| enum Version2MulticastListenerReport { | ||||
| value 143; | ||||
| description | ||||
| "Version 2 Multicast Listener Report."; | ||||
| reference | ||||
| "RFC 3810"; | ||||
| } | ||||
| enum HomeAgentAddressDiscoveryRequestMessage { | ||||
| value 144; | ||||
| description | ||||
| "Home Agent Address Discovery Request Message."; | ||||
| reference | ||||
| "RFC 6275"; | ||||
| } | ||||
| enum HomeAgentAddressDiscoveryReplyMessage { | ||||
| value 145; | ||||
| description | ||||
| "Home Agent Address Discovery Reply Message."; | ||||
| reference | ||||
| "RFC 6275"; | ||||
| } | ||||
| enum MobilePrefixSolicitation { | ||||
| value 146; | ||||
| description | ||||
| "Mobile Prefix Solicitation."; | ||||
| reference | ||||
| "RFC 6275"; | ||||
| } | ||||
| enum MobilePrefixAdvertisement { | ||||
| value 147; | ||||
| description | ||||
| "Mobile Prefix Advertisement."; | ||||
| reference | ||||
| "RFC 6275"; | ||||
| } | ||||
| enum CertificationPathSolicitationMessage { | ||||
| value 148; | ||||
| description | ||||
| "Certification Path Solicitation Message."; | ||||
| reference | ||||
| "RFC 3971"; | ||||
| } | ||||
| enum CertificationPathAdvertisementMessage { | ||||
| value 149; | ||||
| description | ||||
| "Certification Path Advertisement Message."; | ||||
| reference | ||||
| "RFC 3971"; | ||||
| } | ||||
| enum ICMPmessagesutilizedbyexperimentalmobilityprotocols { | ||||
| value 150; | ||||
| description | ||||
| "ICMP messages utilized by experimental mobility protocols | ||||
| such as Seamoby."; | ||||
| reference | ||||
| "RFC 4065"; | ||||
| } | ||||
| enum MulticastRouterAdvertisement { | ||||
| value 151; | ||||
| description | ||||
| "Multicast Router Advertisement."; | ||||
| reference | ||||
| "RFC 4286"; | ||||
| } | ||||
| enum MulticastRouterSolicitation { | ||||
| value 152; | ||||
| description | ||||
| "Multicast Router Solicitation."; | ||||
| reference | ||||
| "RFC 4286"; | ||||
| } | ||||
| enum MulticastRouterTermination { | ||||
| value 153; | ||||
| description | ||||
| "Multicast Router Termination."; | ||||
| reference | ||||
| "RFC 4286"; | ||||
| } | ||||
| enum FMIPv6Messages { | ||||
| value 154; | ||||
| description | ||||
| "FMIPv6 Messages."; | ||||
| reference | ||||
| "RFC 5568"; | ||||
| } | ||||
| enum RPLControlMessage { | ||||
| value 155; | ||||
| description | ||||
| "RPL Control Message."; | ||||
| reference | ||||
| "RFC 6550"; | ||||
| } | ||||
| enum ILNPv6LocatorUpdateMessage { | ||||
| value 156; | ||||
| description | ||||
| "ILNPv6 Locator Update Message."; | ||||
| reference | ||||
| "RFC 6743"; | ||||
| } | ||||
| enum DuplicateAddressRequest { | ||||
| value 157; | ||||
| description | ||||
| "Duplicate Address Request."; | ||||
| reference | ||||
| "RFC 6775"; | ||||
| } | ||||
| enum DuplicateAddressConfirmation { | ||||
| value 158; | ||||
| description | ||||
| "Duplicate Address Confirmation."; | ||||
| reference | ||||
| "RFC 6775"; | ||||
| } | ||||
| enum MPLControlMessage { | ||||
| value 159; | ||||
| description | ||||
| "MPL Control Message."; | ||||
| reference | ||||
| "RFC 7731"; | ||||
| } | ||||
| enum ExtendedEchoRequest { | ||||
| value 160; | ||||
| description | ||||
| "Extended Echo Request."; | ||||
| reference | ||||
| "RFC 8335"; | ||||
| } | ||||
| enum ExtendedEchoReply { | ||||
| value 161; | ||||
| description | ||||
| "Extended Echo Reply."; | ||||
| reference | ||||
| "RFC 8335"; | ||||
| } | ||||
| } | ||||
| description | ||||
| "This enumeration type defines mnemonic names and corresponding | ||||
| numeric values of ICMPv6 types."; | ||||
| reference | ||||
| "RFC 2708: IANA Allocation Guidelines For Values In the | ||||
| Internet Protocol and Related Headers"; | ||||
| } | ||||
| typedef icmpv6-type { | ||||
| type union { | ||||
| type uint8; | ||||
| type icmpv6-type-name; | ||||
| } | ||||
| description | ||||
| "This type allows reference to an ICMPv6 type using either the | ||||
| assigned mnemonic name or numeric value."; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| Appendix C. Initial Version of the IPv6 Extension Header Types IANA- | ||||
| Maintained Module | ||||
| <CODE BEGINS> file "iana-ipv6-ext-types@2023-09-29.yang" | ||||
| module iana-ipv6-ext-types { | ||||
| yang-version 1.1; | ||||
| namespace "urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types"; | ||||
| prefix iana-ipv6-ext-types; | ||||
| organization | ||||
| "Internet Assigned Numbers Authority (IANA)"; | ||||
| contact | ||||
| "Internet Assigned Numbers Authority | ||||
| ICANN | ||||
| 12025 Waterfront Drive, Suite 300 | ||||
| Los Angeles, CA 90094 | ||||
| Tel: +1 424 254 5300 | ||||
| <mailto:iana@iana.org>"; | ||||
| description | ||||
| "This YANG module translates IANA registry 'IPv6 Extension Header | ||||
| Types' to YANG derived types. | ||||
| Copyright (c) 2023 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject to | ||||
| the license terms contained in, the Revised BSD License set | ||||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module was generated from the | ||||
| corresponding IANA registry using an XSLT stylesheet from the | ||||
| 'iana-yang' project (https://github.com/llhotka/iana-yang)."; | ||||
| reference | ||||
| "Internet Protocol Version 6 (IPv6) Parameters | ||||
| (https://www.iana.org/assignments/ipv6-parameters/)"; | ||||
| revision 2023-09-29 { | ||||
| description | ||||
| "Current revision as of the revision date specified in the XML | ||||
| representation of the registry page."; | ||||
| reference | ||||
| "https://www.iana.org/assignments/ipv6-parameters | ||||
| /ipv6-parameters.xml"; | ||||
| } | ||||
| /* Typedefs */ | ||||
| typedef ipv6-extension-header-type-name { | [YANG-GUIDELINES] | |||
| type enumeration { | Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for | |||
| enum IPv6Hop-by-HopOption { | Authors and Reviewers of Documents Containing YANG Data | |||
| value 0; | Models", Work in Progress, Internet-Draft, draft-ietf- | |||
| description | netmod-rfc8407bis-28, 5 June 2025, | |||
| "IPv6 Hop-by-Hop Option"; | <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | |||
| reference | rfc8407bis-28>. | |||
| "RFC 8200"; | ||||
| } | ||||
| enum RoutingHeaderforIPv6 { | ||||
| value 43; | ||||
| description | ||||
| "Routing Header for IPv6"; | ||||
| reference | ||||
| "- RFC 8200 | ||||
| - RFC 5095"; | ||||
| } | ||||
| enum FragmentHeaderforIPv6 { | ||||
| value 44; | ||||
| description | ||||
| "Fragment Header for IPv6"; | ||||
| reference | ||||
| "RFC 8200"; | ||||
| } | ||||
| enum EncapsulatingSecurityPayload { | ||||
| value 50; | ||||
| description | ||||
| "Encapsulating Security Payload"; | ||||
| reference | ||||
| "RFC 4303"; | ||||
| } | ||||
| enum AuthenticationHeader { | ||||
| value 51; | ||||
| description | ||||
| "Authentication Header"; | ||||
| reference | ||||
| "RFC 4302"; | ||||
| } | ||||
| enum DestinationOptionsforIPv6 { | ||||
| value 60; | ||||
| description | ||||
| "Destination Options for IPv6"; | ||||
| reference | ||||
| "RFC 8200"; | ||||
| } | ||||
| enum MobilityHeader { | ||||
| value 135; | ||||
| description | ||||
| "Mobility Header"; | ||||
| reference | ||||
| "RFC 6275"; | ||||
| } | ||||
| enum HostIdentityProtocol { | ||||
| value 139; | ||||
| description | ||||
| "Host Identity Protocol"; | ||||
| reference | ||||
| "RFC 7401"; | ||||
| } | ||||
| enum Shim6Protocol { | ||||
| value 140; | ||||
| description | ||||
| "Shim6 Protocol"; | ||||
| reference | ||||
| "RFC 5533"; | ||||
| } | ||||
| } | ||||
| description | ||||
| "This enumeration type defines mnemonic names and | ||||
| corresponding numeric values of IPv6 Extension header | ||||
| types."; | ||||
| reference | ||||
| "RFC 2708: IANA Allocation Guidelines For Values In the | ||||
| Internet Protocol and Related Headers"; | ||||
| } | ||||
| typedef ipv6-extension-header-type { | [YANG-XSLT] | |||
| type union { | "iana-yang", commit 3a6cb69, December 2021, | |||
| type uint8; | <https://github.com/llhotka/iana-yang>. | |||
| type ipv6-extension-header-type-name; | ||||
| } | ||||
| description | ||||
| "This type allows reference to an IPv6 Extension header | ||||
| type using either the assigned mnemonic name or the | ||||
| numeric protocol number value."; | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| Appendix D. Problem Statement and Gap Analysis | Appendix A. Problem Statement and Gap Analysis | |||
| D.1. Suboptimal Configuration: Lack of Support for Lists of Prefixes | A.1. Suboptimal Configuration: Lack of Support for Lists of Prefixes | |||
| IP prefix-related data nodes, e.g., "destination-ipv4-network" or | IP prefix-related data nodes (e.g., "destination-ipv4-network" or | |||
| "destination-ipv6-network", do not support handling a list of IP | "destination-ipv6-network") do not support handling a list of IP | |||
| prefixes, which may then lead to having to support large numbers of | prefixes, which may then lead to having to support large numbers of | |||
| ACL entries in a configuration file. | ACL entries in a configuration file. | |||
| The same issue is encountered when ACLs have to be in place to | The same issue is encountered when ACLs have to be in place to | |||
| mitigate DDoS attacks that involve a set of sources (e.g., | mitigate DDoS attacks that involve a set of sources (e.g., | |||
| [RFC9132]). The situation is even worse when both a list of sources | [RFC9132]). The situation is even worse when both a list of sources | |||
| and destination prefixes are involved in the filtering. | and destination prefixes are involved in the filtering. | |||
| Figure 3 shows an example of the required ACL configuration for | Figure 3 shows an example of the required ACL configuration for | |||
| filtering traffic from two prefixes. | filtering traffic from two prefixes. | |||
| skipping to change at page 68, line 32 ¶ | skipping to change at line 2313 ¶ | |||
| "forwarding": "accept" | "forwarding": "accept" | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 3: Example Illustrating Sub-optimal Use of the ACL Model | Figure 3: Example Illustrating Suboptimal Use of the ACL Model | |||
| with a Prefix List (Message Body) | with a Prefix List (Message Body) | |||
| Such a configuration is suboptimal for both: | Such a configuration is suboptimal for both: | |||
| * Network controllers that need to manipulate large files. All or a | * network controllers that need to manipulate large files, as all or | |||
| subset for this configuration will need to be passed to the | a subset for this configuration will need to be passed to the | |||
| underlying network devices. | underlying network devices, and | |||
| * Devices may receive such a configuration and thus will need to | * devices that may receive such a configuration and thus will need | |||
| maintain it locally. | to maintain it locally. | |||
| D.2. Manageability: Impossibility to Use Aliases or Defined Sets | A.2. Manageability: Impossibility of Using Aliases or Defined Sets | |||
| The same approach as the one discussed for IP prefixes can be | The same approach as the one discussed for IP prefixes can be | |||
| generalized by introducing the concept of "aliases" or "defined | generalized by introducing the concept of "aliases" or "defined | |||
| sets". | sets". | |||
| The defined sets are reusable definitions across several ACLs. Each | The defined sets are reusable definitions across several ACLs. Each | |||
| category is modeled in YANG as a list of parameters related to the | category is modeled in YANG as a list of parameters related to the | |||
| class it represents. The following sets can be considered: | class it represents. The following sets can be considered: | |||
| Prefix sets: Used to create lists of IPv4 or IPv6 prefixes. | Prefix sets: Used to create lists of IPv4 or IPv6 prefixes. | |||
| Protocol sets: Used to create a list of protocols. | Protocol sets: Used to create a list of protocols. | |||
| Port number sets: Used to create lists of TCP or UDP port values (or | Port number sets: Used to create lists of TCP or UDP port values (or | |||
| any other transport protocol that makes uses of port numbers). | any other transport protocol that makes uses of port numbers). | |||
| The identity of the protocols is identified by the protocol set, | The identity of the protocols is identified by the protocol set, | |||
| if present. Otherwise, a set applies to any protocol. | if present. Otherwise, a set applies to any protocol. | |||
| ICMP sets: Uses to create lists of ICMP-based filters. This applies | ICMP sets: Used to create lists of ICMP-based filters. This applies | |||
| only when the protocol is set to ICMP or ICMPv6. | only when the protocol is set to ICMP or ICMPv6. | |||
| Aliases may also be considered to manage resources that are | Aliases may also be considered to manage resources that are | |||
| identified by a combination of various parameters (e.g., prefix, | identified by a combination of various parameters (e.g., prefix, | |||
| protocol, port number, FQDN, or VLAN IDs). Note that some aliases | protocol, port number, FQDN, or VLAN IDs). Note that some aliases | |||
| can be provided by decomposing them into separate sets. | can be provided by decomposing them into separate sets. | |||
| D.3. Bind ACLs to Devices, Not Only Interfaces | A.3. Bind ACLs to Devices, Not Only Interfaces | |||
| In the context of network management, an ACL may be enforced in many | In the context of network management, an ACL may be enforced in many | |||
| network locations. As such, the ACL module should allow for binding | network locations. As such, the ACL module should allow for binding | |||
| an ACL to multiple devices, not only (abstract) interfaces. | an ACL to multiple devices, not only (abstract) interfaces. | |||
| The ACL name must, thus, be unique at the scale of the network, but | Thus, the ACL name must be unique at the scale of the network, but | |||
| the same name may be used in many devices when enforcing node- | the same name may be used in many devices when enforcing node- | |||
| specific ACLs. | specific ACLs. | |||
| D.4. Partial or Lack of IPv4/IPv6 Fragment Handling | A.4. Partial or Lack of IPv4/IPv6 Fragment Handling | |||
| [RFC8519] does not support fragment handling for IPv6 but offers a | [RFC8519] does not support fragment handling for IPv6 but offers a | |||
| partial support for IPv4 through the use of 'flags'. Nevertheless, | partial support for IPv4 through the use of 'flags'. Nevertheless, | |||
| the use of 'flags' is problematic since it does not allow a bitmask | the use of 'flags' is problematic since it does not allow a bitmask | |||
| to be defined. For example, setting other bits not covered by the | to be defined. For example, setting other bits not covered by the | |||
| 'flags' filtering clause in a packet will allow that packet to get | 'flags' filtering clause in a packet will allow that packet to get | |||
| through (because it won't match the ACE). | through (because it won't match the ACE). | |||
| Defining a new IPv4/IPv6 matching field called 'fragment' is thus | Defining a new IPv4/IPv6 matching field called 'fragment' is thus | |||
| required to efficiently handle fragment-related filtering rules. | required to efficiently handle fragment-related filtering rules. | |||
| D.5. Suboptimal TCP Flags Handling | A.5. Suboptimal TCP Flags Handling | |||
| [RFC8519] supports including flags in the TCP match fields, however | [RFC8519] supports including flags in the TCP match fields; however, | |||
| that structure does not support matching operations as those | that structure does not support matching operations as those | |||
| supported in BGP Flow Spec. Defining this field to be defined as a | supported in BGP Flow Spec. Defining this field to be defined as a | |||
| flag bitmask together with a set of operations is meant to | flag bitmask together with a set of operations is meant to | |||
| efficiently handle TCP flags filtering rules. | efficiently handle TCP flags filtering rules. | |||
| D.6. Rate-Limit Action | A.6. Rate-Limit Action | |||
| [RFC8519] specifies that forwarding actions can be 'accept' (i.e., | [RFC8519] specifies that forwarding actions can be 'accept' (i.e., | |||
| accept matching traffic), 'drop' (i.e., drop matching traffic without | accept matching traffic), 'drop' (i.e., drop matching traffic without | |||
| sending any ICMP error message), or 'reject' (i.e., drop matching | sending any ICMP error message), or 'reject' (i.e., drop matching | |||
| traffic and send an ICMP error message to the source). However, | traffic and send an ICMP error message to the source). However, | |||
| there are situations where the matching traffic can be accepted, but | there are situations where the matching traffic can be accepted, but | |||
| with a rate-limit policy. This capability is not supported by | with a rate-limit policy. This capability is not supported by | |||
| [RFC8519]. | [RFC8519]. | |||
| D.7. Payload-based Filtering | A.7. Payload-Based Filtering | |||
| Some transport protocols use existing protocols (e.g., TCP or UDP) as | Some transport protocols use existing protocols (e.g., TCP or UDP) as | |||
| substrate. The match criteria for such protocols may rely upon the | substrate. The match criteria for such protocols may rely upon the | |||
| 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP | 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP | |||
| payload, or a combination thereof. [RFC8519] does not support | payload, or a combination thereof. [RFC8519] does not support | |||
| matching based on the payload. | matching based on the payload. | |||
| Likewise, the ACL model defined in [RFC8519] does not support | Likewise, the ACL model defined in [RFC8519] does not support | |||
| filtering of encapsulated traffic. | filtering of encapsulated traffic. | |||
| D.8. Reuse the ACLs Content Across Several Devices | A.8. Reuse the Content of ACLs Across Several Devices | |||
| Having a global network view of the ACLs is highly valuable for | Having a global network view of the ACLs is highly valuable for | |||
| service providers. An ACL could be defined and applied based on the | service providers. An ACL could be defined and applied based on the | |||
| network topology hierarchy. So, an ACL can be defined at the network | network topology hierarchy. Therefore, an ACL can be defined at the | |||
| level and, then, that same ACL can be used (or referenced to) in | network level, and then that same ACL can be used in (or referenced | |||
| several devices (including termination points) within the same | to) several devices (including termination points) within the same | |||
| network. | network. | |||
| This network/device ACLs differentiation introduces several new | This network/device differentiation of ACLs introduces several new | |||
| requirements, e.g.: | requirements, for example: | |||
| * An ACL name can be used at both network and device levels. | * An ACL name can be used at both network and device levels. | |||
| * An ACL content updated at the network level should imply a | * An ACL content updated at the network level should imply a | |||
| transaction that updates the relevant content in all the nodes | transaction that updates the relevant content in all the nodes | |||
| using this ACL. | using this ACL. | |||
| * ACLs defined at the device level have a local meaning for the | * ACLs defined at the device level have a local meaning for the | |||
| specific node. | specific node. | |||
| * A device can be associated with a router, a VRF, a logical system, | * A device can be associated with a router, a VRF, a logical system, | |||
| or a virtual node. ACLs can be applied in physical and logical | or a virtual node. ACLs can be applied in physical and logical | |||
| infrastructure. | infrastructure. | |||
| D.9. Match MPLS Headers | A.9. Match MPLS Headers | |||
| The ACLs can be used to create rules to match MPLS fields on a | The ACLs can be used to create rules to match MPLS fields on a | |||
| packet. [RFC8519] does not support such function. | packet. [RFC8519] does not support such function. | |||
| Appendix E. Examples | Appendix B. Examples | |||
| This section provides a few examples to illustrate the use of the | This section provides a few examples to illustrate the use of the | |||
| enhanced ACL module ("ietf-acl-enh"). | enhanced ACL module ("ietf-acl-enh"). | |||
| E.1. TCP Flags Handling | B.1. TCP Flags Handling | |||
| Figure 4 shows an example of the message body of a request to install | Figure 4 shows an example of the message body of a request to install | |||
| a filter to discard incoming TCP messages having all flags unset. | a filter to discard incoming TCP messages having all flags unset. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "tcp-flags-example", | "name": "tcp-flags-example", | |||
| "aces": { | "aces": { | |||
| skipping to change at page 72, line 5 ¶ | skipping to change at line 2474 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 4: Example of an ACL to Deny TCP Null Attack Messages | Figure 4: Example of an ACL to Deny TCP Null Attack Messages | |||
| (Request Body) | (Request Body) | |||
| E.2. Fragments Handling | B.2. Fragments Handling | |||
| Figure 5 shows the content of a POST request to allow the traffic | Figure 5 shows the content of a POST request to allow the traffic | |||
| destined to 198.51.100.0/24 and UDP port number 53, but to drop all | destined to 198.51.100.0/24 and UDP port number 53, but to drop all | |||
| fragmented packets. The following ACEs are defined (in this order): | fragmented packets. The following ACEs are defined (in this order): | |||
| * "drop-all-fragments" ACE: discards all fragments. | "drop-all-fragments" ACE: discards all fragments. | |||
| * "allow-dns-packets" ACE: accepts DNS packets destined to | "allow-dns-packets" ACE: accepts DNS packets destined to | |||
| 198.51.100.0/24. | 198.51.100.0/24. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "dns-fragments", | "name": "dns-fragments", | |||
| "type": "ipv4-acl-type", | "type": "ipv4-acl-type", | |||
| "aces": { | "aces": { | |||
| "ace": [ | "ace": [ | |||
| skipping to change at page 74, line 10 ¶ | skipping to change at line 2539 ¶ | |||
| } | } | |||
| Figure 5: Example Illustrating Candidate Filtering of IPv4 | Figure 5: Example Illustrating Candidate Filtering of IPv4 | |||
| Fragmented Packets (Message Body) | Fragmented Packets (Message Body) | |||
| Figure 6 shows an example of the body of a POST request to allow the | Figure 6 shows an example of the body of a POST request to allow the | |||
| traffic destined to 2001:db8::/32 and UDP port number 53, but to drop | traffic destined to 2001:db8::/32 and UDP port number 53, but to drop | |||
| all fragmented packets. The following ACEs are defined (in this | all fragmented packets. The following ACEs are defined (in this | |||
| order): | order): | |||
| * "drop-all-fragments" ACE: discards all fragments (including atomic | "drop-all-fragments" ACE: discards all fragments (including atomic | |||
| fragments). That is, IPv6 packets that include a Fragment header | fragments). That is, IPv6 packets that include a Fragment header | |||
| (44) are dropped. | (44) are dropped. | |||
| * "allow-dns-packets" ACE: accepts DNS packets destined to | "allow-dns-packets" ACE: accepts DNS packets destined to | |||
| 2001:db8::/32. | 2001:db8::/32. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "dns-fragments", | "name": "dns-fragments", | |||
| "type": "ipv6-acl-type", | "type": "ipv6-acl-type", | |||
| "aces": { | "aces": { | |||
| "ace": [ | "ace": [ | |||
| skipping to change at page 76, line 5 ¶ | skipping to change at line 2595 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 6: An Example Illustrating Filtering of IPv6 Fragmented | Figure 6: An Example Illustrating Filtering of IPv6 Fragmented | |||
| Packets (Message Body) | Packets (Message Body) | |||
| E.3. Pattern-based Filtering | B.3. Pattern-Based Filtering | |||
| Pattern-based filtering is useful to detect specific patterns, | Pattern-based filtering is useful to detect specific patterns, | |||
| signatures, or encapsulated packets. Figure 7 shows an example of | signatures, or encapsulated packets. Figure 7 shows an example of | |||
| the message body of a request to install a filter to discard IP-in-IP | the message body of a request to install a filter to discard IP-in-IP | |||
| encapsulated messages with an inner destination IP address equal to | encapsulated messages with an inner destination IP address equal to | |||
| "2001:db8::1". By using the offset at the end of layer 3, the rule | "2001:db8::1". By using the offset at the end of Layer 3, the rule | |||
| targets a specific portion of the payload that starts 20 bytes after | targets a specific portion of the payload that starts 20 bytes after | |||
| the beginning of the data (that is, skipping the first 20 bytes of | the beginning of the data (that is, skipping the first 20 bytes of | |||
| the inner IPv6 header). | the inner IPv6 header). | |||
| For the readers' convenience, the textual representation of the | For the reader's convenience, the textual representation of the | |||
| pattern is used in the example instead of the binary form. | pattern is used in the example instead of the binary form. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "pattern-example", | "name": "pattern-example", | |||
| "aces": { | "aces": { | |||
| "ace": [ | "ace": [ | |||
| { | { | |||
| skipping to change at page 77, line 5 ¶ | skipping to change at line 2643 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 7: Example of an ACL to Deny Encapsulated Messages with a | Figure 7: Example of an ACL to Deny Encapsulated Messages with a | |||
| Specific Inner Destination Address (Request Body) | Specific Inner Destination Address (Request Body) | |||
| E.4. VLAN Filtering | B.4. VLAN Filtering | |||
| Figure 8 shows an ACL example to illustrate how to apply a VLAN range | Figure 8 shows an ACL example to illustrate how to apply a VLAN range | |||
| filter. | filter. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "VLAN_FILTER", | "name": "VLAN_FILTER", | |||
| "aces": { | "aces": { | |||
| skipping to change at page 77, line 38 ¶ | skipping to change at line 2676 ¶ | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 8: Example of VLAN Filter (Message Body) | Figure 8: Example of VLAN Filter (Message Body) | |||
| E.5. ISID Filtering | B.5. ISID Filtering | |||
| Figure 9 shows an ACL example to illustrate the ISID range filtering. | Figure 9 shows an ACL example to illustrate the ISID range filtering. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "test", | "name": "test", | |||
| "aces": { | "aces": { | |||
| "ace": [ | "ace": [ | |||
| skipping to change at page 78, line 33 ¶ | skipping to change at line 2708 ¶ | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 9: Example ISID Filter (Message Body) | Figure 9: Example ISID Filter (Message Body) | |||
| E.6. Rate-Limit | B.6. Rate-Limit | |||
| Figure 10 shows an ACL example to rate-limit incoming SYNs during a | Figure 10 shows an ACL example to rate-limit incoming SYNs during a | |||
| SYN flood attack. | SYN flood attack. | |||
| { | { | |||
| "ietf-access-control-list:acls": { | "ietf-access-control-list:acls": { | |||
| "acl": [ | "acl": [ | |||
| { | { | |||
| "name": "tcp-flags-example-with-rate-limit", | "name": "tcp-flags-example-with-rate-limit", | |||
| "aces": { | "aces": { | |||
| skipping to change at page 79, line 34 ¶ | skipping to change at line 2742 ¶ | |||
| "ietf-acl-enh:rate-limit": "20.00" | "ietf-acl-enh:rate-limit": "20.00" | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 10: An Example of Rate-Limit Incoming TCP SYNs (Message Body). | Figure 10: An Example of Rate-Limiting Incoming TCP SYNs (Message | |||
| Body) | ||||
| Acknowledgments | Acknowledgments | |||
| Many thanks to Jon Shallow and Miguel Cros for the review and | Many thanks to Jon Shallow and Miguel Cros for their review and | |||
| comments to the document, including prior to publishing the document. | comments on this document. | |||
| Thanks to Qiufang Ma, Victor Lopez, Joe Clarke, and Mahesh | Thanks to Qiufang Ma, Victor Lopez, Joe Clarke, and Mahesh | |||
| Jethanandani for the comments and suggestions. | Jethanandani for their comments and suggestions. | |||
| Thanks to Lou Berger for Shepherding the document. | Thanks to Lou Berger for shepherding this document. | |||
| Thanks to David Black for the tsvart review, Tim Wicinski for the | Thanks to David Black for the tsvart review, Tim Wicinski for the | |||
| intdir review, Per Andersson for the yangdoctors review, Russ Housley | intdir review, Per Andersson for the yangdoctors review, Russ Housley | |||
| for genart review, and Linda Dunbar and Sean Turner for the secdir | for the genart review, and Linda Dunbar and Sean Turner for the | |||
| reviews. | secdir reviews. | |||
| Thanks to Erik Kline, Mike Bishop, Éric Vyncke, Roman Danyliw, and | Thanks to Erik Kline, Mike Bishop, Éric Vyncke, Roman Danyliw, and | |||
| Deb Cooley for the IESG review. | Deb Cooley for the IESG review. | |||
| The IANA-maintained modules were generated using an XSLT stylesheet | The IANA-maintained modules were generated using an XSLT stylesheet | |||
| from the 'iana-yang' project [YANG-XSLT]. | from the 'iana-yang' project [YANG-XSLT]. | |||
| This work is partially supported by the European Commission under | This work is partially supported by the European Commission under | |||
| Horizon 2020 Secured autonomic traffic management for a Tera of SDN | Horizon 2020 Secured autonomic traffic management for a Tera of SDN | |||
| flows (Teraflow) project (grant agreement number 101015857). | flows (Teraflow) project (grant agreement number 101015857). | |||
| End of changes. 213 change blocks. | ||||
| 1306 lines changed or deleted | 389 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||