rfc8519.alt-original | rfc8519.txt | |||
---|---|---|---|---|
NETMOD WG M. Jethanandani | Internet Engineering Task Force (IETF) M. Jethanandani | |||
Internet-Draft VMware | Request for Comments: 8519 VMware | |||
Intended status: Standards Track S. Agarwal | Category: Standards Track S. Agarwal | |||
Expires: May 10, 2019 Cisco Systems, Inc. | ISSN: 2070-1721 Cisco Systems, Inc. | |||
L. Huang | L. Huang | |||
D. Blair | D. Blair | |||
November 6, 2018 | March 2019 | |||
Network Access Control List (ACL) YANG Data Model | YANG Data Model for Network Access Control Lists (ACLs) | |||
draft-ietf-netmod-acl-model-21 | ||||
Abstract | Abstract | |||
This document defines a data model for Access Control List (ACL). An | This document defines a data model for Access Control Lists (ACLs). | |||
ACL is a user-ordered set of rules, used to configure the forwarding | An ACL is a user-ordered set of rules used to configure the | |||
behavior in device. Each rule is used to find a match on a packet, | forwarding behavior in a device. Each rule is used to find a match | |||
and define actions that will be performed on the packet. | on a packet and define actions that will be performed on the packet. | |||
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 May 10, 2019. | 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/rfc8519. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 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 | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 4 | 1.1. Definitions and Acronyms . . . . . . . . . . . . . . . . 3 | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.3. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 4 | 1.3. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Understanding ACL's Filters and Actions . . . . . . . . . . . 5 | 3. Understanding ACL's Filters and Actions . . . . . . . . . . . 4 | |||
3.1. ACL Modules . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.1. ACL Modules . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. ACL YANG Models . . . . . . . . . . . . . . . . . . . . . . . 10 | 4. ACL YANG Models . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.1. IETF Access Control List module . . . . . . . . . . . . . 10 | 4.1. IETF Access Control List Module . . . . . . . . . . . . . 9 | |||
4.2. IETF Packet Fields module . . . . . . . . . . . . . . . . 24 | 4.2. IETF Packet Fields Module . . . . . . . . . . . . . . . . 24 | |||
4.3. ACL Examples . . . . . . . . . . . . . . . . . . . . . . 37 | 4.3. ACL Examples . . . . . . . . . . . . . . . . . . . . . . 36 | |||
4.4. Port Range Usage and Other Examples . . . . . . . . . . . 39 | 4.4. Port Range Usage and Other Examples . . . . . . . . . . . 38 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 43 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 | |||
6.1. URI Registration . . . . . . . . . . . . . . . . . . . . 44 | 6.1. URI Registration . . . . . . . . . . . . . . . . . . . . 43 | |||
6.2. YANG Module Name Registration . . . . . . . . . . . . . . 44 | 6.2. YANG Module Name Registration . . . . . . . . . . . . . . 43 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 45 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | 7.1. Normative References . . . . . . . . . . . . . . . . . . 44 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 45 | 7.2. Informative References . . . . . . . . . . . . . . . . . 45 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 47 | Appendix A. Extending ACL Model Examples . . . . . . . . . . . . 46 | |||
Appendix A. Extending ACL model examples . . . . . . . . . . . . 48 | A.1. Example of a Company's Proprietary Module . . . . . . . . 46 | |||
A.1. A company proprietary module example . . . . . . . . . . 48 | A.2. Linux nftables . . . . . . . . . . . . . . . . . . . . . 50 | |||
A.2. Linux nftables . . . . . . . . . . . . . . . . . . . . . 51 | A.3. Ethertypes . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
A.3. Ethertypes . . . . . . . . . . . . . . . . . . . . . . . 52 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 | |||
1. Introduction | 1. Introduction | |||
Access Control List (ACL) is one of the basic elements used to | An Access Control List (ACL) is one of the basic elements used to | |||
configure device forwarding behavior. It is used in many networking | configure device-forwarding behavior. It is used in many networking | |||
technologies such as Policy Based Routing (PBR), firewalls etc. | technologies such as Policy-Based Routing (PBR), firewalls, etc. | |||
An ACL is an user-ordered set of rules, that is used to filter | An ACL is a user-ordered set of rules that is used to filter traffic | |||
traffic on a networking device. Each rule is represented by an | on a networking device. Each rule is represented by an Access | |||
Access Control Entry (ACE). | Control Entry (ACE). | |||
Each ACE has a group of match criteria and a group of actions. | Each ACE has a group of match criteria and a group of actions. | |||
The match criteria allow for definition of packet headers and | The match criteria allow for the definition of packet headers and | |||
metadata, the contents of which must match the definitions. | metadata, the contents of which must match the definitions. | |||
o Packet header matches apply to fields visible in the packet such | o Packet header matches apply to fields visible in the packet such | |||
as address or Class of Service (CoS) or port numbers. | as address, Class of Service (CoS), or port number. | |||
o In case a vendor supports it, metadata matches apply to fields | o In case a vendor supports it, metadata matches apply to fields | |||
associated with the packet but not in the packet header such as | associated with the packet, that are not in the packet header, | |||
input interface or length of the packet as received over the wire. | such as the input interface or length of the packet as received | |||
over the wire. | ||||
The actions specify what to do with the packet when the matching | The actions specify what to do with the packet when the matching | |||
criteria are met. These actions are any operations that would apply | criteria are met. These actions are any operations that would apply | |||
to the packet, such as counting, policing, or simply forwarding. The | to the packet, such as counting, policing, or simply forwarding. The | |||
list of potential actions is unbounded depending on the capabilities | list of potential actions is unbounded depending on the capabilities | |||
of the networking devices. | of the networking devices. | |||
Access Control List is also widely knowns as ACL (pronounce as [ak-uh | Access Control List is also widely known as ACL (pronounced as | |||
l]) or Access List. In this document, Access Control List, ACL and | [ak-uh l]) or Access List. In this document, Access Control List, | |||
Access List are used interchangeably. | ACL, and Access List are used interchangeably. | |||
The matching of filters and actions in an ACE/ACL are triggered only | The matching of filters and actions in an ACE/ACL is triggered only | |||
after the application/attachment of the ACL to an interface, VRF, | after the application/attachment of the ACL to an interface, a | |||
vty/tty session, QoS policy, or routing protocols, amongst various | Virtual Routing and Forwarding (VRF) interface, a vty/tty session, a | |||
other configuration attachment points. Once attached, it is used for | QoS policy, or routing protocols, amongst various other configuration | |||
filtering traffic using the match criteria in the ACEs and taking | attachment points. Once attached, it is used for filtering traffic | |||
appropriate action(s) that have been configured against that ACE. In | using the match criteria in the ACEs and taking appropriate action(s) | |||
order to apply an ACL to any attachment point other than an | that has been configured against that ACE. In order to apply an ACL | |||
interface, vendors would have to augment the ACL YANG model. | to any attachment point other than an interface, vendors would have | |||
to augment the ACL YANG model. | ||||
1.1. Definitions and Acronyms | 1.1. Definitions and Acronyms | |||
ACE: Access Control Entry | ACE: Access Control Entry | |||
ACL: Access Control List | ACL: Access Control List | |||
CoS: Class of Service | CoS: Class of Service | |||
DSCP: Differentiated Services Code Point | DSCP: Differentiated Services Code Point | |||
skipping to change at page 4, line ? ¶ | skipping to change at page 3, line 47 ¶ | |||
ICMP: Internet Control Message Protocol | ICMP: Internet Control Message Protocol | |||
IP: Internet Protocol | IP: Internet Protocol | |||
IPv4: Internet Protocol version 4 | IPv4: Internet Protocol version 4 | |||
IPv6: Internet Protocol version 6 | IPv6: Internet Protocol version 6 | |||
MAC: Media Access Control | MAC: Media Access Control | |||
PBR: Policy Based Routing | PBR: Policy-Based Routing | |||
TCP: Transmission Control Protocol | TCP: Transmission Control Protocol | |||
UDP: User Datagram Protocol | UDP: User Datagram Protocol | |||
1.2. Terminology | 1.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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
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. | |||
1.3. Tree Diagram | 1.3. Tree Diagram | |||
For a reference to the annotations used in tree diagrams included in | For a reference to the annotations used in the tree diagrams included | |||
this draft, please see YANG Tree Diagrams [RFC8340]. | in this document, please see "YANG Tree Diagrams" [RFC8340]. | |||
2. Problem Statement | 2. Problem Statement | |||
This document defines a YANG 1.1 [RFC7950] data model for the | This document defines a YANG 1.1 data model [RFC7950] for the | |||
configuration of ACLs. The model defines matching rules for commonly | configuration of ACLs. The model defines matching rules for commonly | |||
used protocols such as, Ethernet, IPv4, IPv6, TCP, UDP and ICMP. If | used protocols such as Ethernet, IPv4, IPv6, TCP, UDP, and ICMP. If | |||
more protocols need to be supported in the future, this base model | more protocols need to be supported in the future, this base model | |||
can be augmented. An example of such an augmentation can be seen in | can be augmented. An example of such an augmentation can be seen in | |||
the Appendix. | Appendix A. | |||
ACL implementations in every device may vary greatly in terms of the | ACL implementations in every device may vary greatly in terms of the | |||
filter constructs and actions that they support. Therefore, this | filter constructs and actions that they support. Therefore, this | |||
draft proposes a model that can be augmented by standard extensions | document proposes a model that can be augmented by standard | |||
and vendor proprietary models. | extensions and vendor proprietary models. | |||
3. Understanding ACL's Filters and Actions | 3. Understanding ACL's Filters and Actions | |||
Although different vendors have different ACL data models, there is a | Although different vendors have different ACL data models, there is a | |||
common understanding of what Access Control List (ACL) is. A network | common understanding of what an ACL is. A network system usually has | |||
system usually has a list of ACLs, and each ACL contains an ordered | a list of ACLs, and each ACL contains an ordered list of rules, also | |||
list of rules, also known as Access Control Entries (ACE). Each ACE | known as ACEs. Each ACE has a group of match criteria and a group of | |||
has a group of match criteria and a group of actions. The match | actions. The match criteria allows for definition of the contents of | |||
criteria allow for definition of contents of the packet headers or | the packet headers or metadata, if supported by the vendor. Packet | |||
metadata, if supported by the vendor. Packet header matching applies | header matching applies to fields visible in the packet such as | |||
to fields visible in the packet such as address or CoS or port | address, CoS, or port number. Metadata matching applies to fields | |||
numbers. Metadata matching applies to fields associated with the | associated with the packet, that are not in the packet header, such | |||
packet, but not in the packet header, such as input interface, packet | as the input interface, packet length, or source or destination | |||
length, or source or destination prefix length. The actions can be | prefix length. The actions can be any sort of operation from logging | |||
any sort of operation from logging to rate limiting or dropping to | to rate-limiting or dropping to simply forwarding. Actions on the | |||
simply forwarding. Actions on the first matching ACE are applied | first matching ACE are applied with no processing of subsequent ACEs. | |||
with no processing of subsequent ACEs. | ||||
The model also includes a container to hold overall operational state | The model also includes a container to hold overall operational state | |||
for each ACL and operational state for each ACE. One ACL can be | for each ACL and for each ACE. One ACL can be applied to multiple | |||
applied to multiple targets within the device, such as interface of a | targets within the device, such as the interface of a networking | |||
networking device, applications or features running in the device, | device, applications or features running in the device, etc. When | |||
etc. When applied to interfaces of a networked device, distinct ACLs | applied to interfaces of a networked device, distinct ACLs are | |||
are defined for the ingress (input) or egress (output) interface. | defined for the ingress (input) or egress (output) interface. | |||
This draft tries to address the commonalities between all vendors and | This document tries to address the commonalities between all vendors | |||
create a common model, which can be augmented with proprietary | and creates a common model, which can be augmented with proprietary | |||
models. The base model is simple in design, and we hope to achieve | models. The base model is simple in design, and we hope to achieve | |||
enough flexibility for each vendor to extend the base model. | enough flexibility for each vendor to extend the base model. | |||
The use of feature statements in the model allows vendors to | The use of feature statements in the model allows vendors to | |||
advertise match rules they are capable and willing to support. There | advertise match rules they are capable and willing to support. There | |||
are two sets of feature statements a device needs to advertise. The | are two sets of feature statements a device needs to advertise. The | |||
first set of feature statements specify the capability of the device. | first set of feature statements specifies the capability of the | |||
These include features such as "Device can support matching on | device. These include features such as "Device can support matching | |||
Ethernet headers" or "Device can support matching on IPv4 headers". | on Ethernet headers" or "Device can support matching on IPv4 | |||
The second set of feature statements specify the combinations of | headers". The second set of feature statements specifies the | |||
headers the device is willing to support. These include features | combinations of headers the device is willing to support. These | |||
such as "Plain IPv6 ACL supported" or "Ethernet, IPv4 and IPv6 ACL | include features such as "Plain IPv6 ACL supported" or "Ethernet, | |||
combinations supported". | IPv4 and IPv6 ACL combinations supported". | |||
3.1. ACL Modules | 3.1. ACL Modules | |||
There are two YANG modules in the model. The first module, "ietf- | There are two YANG modules in the model. The first module, "ietf- | |||
access-control-list", defines generic ACL aspects which are common to | access-control-list", defines generic ACL aspects that are common to | |||
all ACLs regardless of their type or vendor. In effect, the module | all ACLs regardless of their type or vendor. In effect, the module | |||
can be viewed as providing a generic ACL "superclass". It imports | can be viewed as providing a generic ACL "superclass". It imports | |||
the second module, "ietf-packet-fields". The match container in | the second module, "ietf-packet-fields". The match container in | |||
"ietf-access-control-list" uses groupings in "ietf-packet-fields" to | "ietf-access-control-list" uses groupings in "ietf-packet-fields" to | |||
specify match fields such as port numbers or protocol. The | specify match fields such as port numbers or protocols. The | |||
combination of 'if-feature' checks and 'must' statements allow for | combination of 'if-feature' checks and 'must' statements allows for | |||
the selection of relevant match fields that a user can define rules | the selection of relevant match fields that a user can define rules | |||
for. | for. | |||
If there is a need to define a new "matches" choice, such as IPFIX | If there is a need to define a new "matches" choice, such as IP Flow | |||
[RFC7011], the container "matches" can be augmented. | Information Export (IPFIX) [RFC7011], the container "matches" can be | |||
augmented. | ||||
module: ietf-access-control-list | module: ietf-access-control-list | |||
+--rw acls | +--rw acls | |||
+--rw acl* [name] | +--rw acl* [name] | |||
| +--rw name string | | +--rw name string | |||
| +--rw type? acl-type | | +--rw type? acl-type | |||
| +--rw aces | | +--rw aces | |||
| +--rw ace* [name] | | +--rw ace* [name] | |||
| +--rw name string | | +--rw name string | |||
| +--rw matches | | +--rw matches | |||
skipping to change at page 10, line 7 ¶ | skipping to change at page 9, line 24 ¶ | |||
+--rw acl-set* [name] | +--rw acl-set* [name] | |||
+--rw name -> /acls/acl/name | +--rw name -> /acls/acl/name | |||
+--ro ace-statistics* [name] {interface-stats}? | +--ro ace-statistics* [name] {interface-stats}? | |||
+--ro name | +--ro name | |||
| -> /acls/acl/aces/ace/name | | -> /acls/acl/aces/ace/name | |||
+--ro matched-packets? yang:counter64 | +--ro matched-packets? yang:counter64 | |||
+--ro matched-octets? yang:counter64 | +--ro matched-octets? yang:counter64 | |||
4. ACL YANG Models | 4. ACL YANG Models | |||
4.1. IETF Access Control List module | 4.1. IETF Access Control List Module | |||
"ietf-access-control-list" module defines the "acls" container that | The "ietf-access-control-list" module defines the "acls" container | |||
has a list of "acl". Each "acl" has information identifying the | that has a list of each "acl". Each "acl" has information | |||
access list by a name ("name") and a list ("aces") of rules | identifying the access list by a name ("name") and a list ("aces") of | |||
associated with the "name". Each of the entries in the list | rules associated with the "name". Each of the entries in the list | |||
("aces"), indexed by the string "name", has containers defining | ("aces"), indexed by the string "name", has containers defining | |||
"matches" and "actions". | "matches" and "actions". | |||
The model defines several ACL types and actions in the form of | The model defines several ACL types and actions in the form of | |||
identities and features. Features are used by implementors to select | identities and features. Features are used by implementors to select | |||
the ACL types the system can support and identities are used to | the ACL types the system can support, and identities are used to | |||
validate the types that have been selected. These types are | validate the types that have been selected. These types are | |||
implicitly inherited by the "ace", thus safeguarding against | implicitly inherited by the "ace", thus safeguarding against | |||
misconfiguration of "ace" types in an "acl". | misconfiguration of "ace" types in an "acl". | |||
The "matches" define criteria used to identify patterns in "ietf- | The "matches" define criteria used to identify patterns in "ietf- | |||
packet-fields". The choice statements within the match container | packet-fields". The choice statements within the match container | |||
allow for selection of one header within each of "l2", "l3", or "l4" | allow for the selection of one header within each of "l2", "l3", or | |||
headers. The "actions" define behavior to undertake once a "match" | "l4" headers. The "actions" define the behavior to undertake once a | |||
has been identified. In addition to permit and deny for actions, a | "match" has been identified. In addition to permit and deny actions, | |||
logging option allows for a match to be logged that can later be used | a logging option allows for a match to be logged that can later be | |||
to determine which rule was matched upon. The model also defines the | used to determine which rule was matched upon. The model also | |||
ability for ACLs to be attached to a particular interface. | defines the ability for ACLs to be attached to a particular | |||
interface. | ||||
Statistics in the ACL can be collected for an "ace" or for an | Statistics in the ACL can be collected for an "ace" or for an | |||
"interface". The feature statements defined for statistics can be | "interface". The feature statements defined for statistics can be | |||
used to determine whether statistics are being collected per "ace", | used to determine whether statistics are being collected per "ace" or | |||
or per "interface". | per "interface". | |||
This module imports definitions from Common YANG Data Types | ||||
[RFC6991], and A YANG Data Model for Interface Management [RFC8343]. | ||||
<CODE BEGINS> file "ietf-access-control-list@2018-11-06.yang" | ||||
module ietf-access-control-list { | ||||
yang-version 1.1; | ||||
namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list"; | ||||
prefix acl; | ||||
import ietf-yang-types { | ||||
prefix yang; | ||||
reference | ||||
"RFC 6991 - Common YANG Data Types."; | ||||
} | ||||
import ietf-packet-fields { | ||||
prefix pf; | ||||
reference | ||||
"RFC XXXX - Network ACL YANG Model."; | ||||
} | ||||
import ietf-interfaces { | ||||
prefix if; | ||||
reference | ||||
"RFC 8343 - A YANG Data Model for Interface Management."; | ||||
} | ||||
organization | ||||
"IETF NETMOD (Network Modeling Language) | ||||
Working Group"; | ||||
contact | ||||
"WG Web: http://tools.ietf.org/wg/netmod/ | ||||
WG List: netmod@ietf.org | ||||
Editor: Mahesh Jethanandani | ||||
mjethanandani@gmail.com | ||||
Editor: Lisa Huang | ||||
lyihuang16@gmail.com | ||||
Editor: Sonal Agarwal | ||||
sagarwal12@gmail.com | ||||
Editor: Dana Blair | ||||
dblair@cisco.com"; | ||||
description | This module imports definitions from "Common YANG Data Types" | |||
"This YANG module defines a component that describe the | [RFC6991] and "A YANG Data Model for Interface Management" [RFC8343]. | |||
configuration and monitoring of Access Control Lists (ACLs). | ||||
Copyright (c) 2018 IETF Trust and the persons identified as | <CODE BEGINS> file "ietf-access-control-list@2019-03-04.yang" | |||
the document authors. 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 Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see | module ietf-access-control-list { | |||
the RFC itself for full legal notices."; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list"; | ||||
prefix acl; | ||||
revision 2018-11-06 { | import ietf-yang-types { | |||
description | prefix yang; | |||
"Initial version."; | reference | |||
"RFC 6991 - Common YANG Data Types."; | ||||
} | ||||
reference | import ietf-packet-fields { | |||
"RFC XXX: Network Access Control List (ACL) YANG Data Model."; | prefix pf; | |||
} | reference | |||
"RFC 8519 - YANG Data Model for Network Access Control | ||||
Lists (ACLs)."; | ||||
} | ||||
/* | import ietf-interfaces { | |||
* Identities | prefix if; | |||
*/ | reference | |||
"RFC 8343 - A YANG Data Model for Interface Management."; | ||||
} | ||||
/* | organization | |||
* Forwarding actions for a packet | "IETF NETMOD (Network Modeling) Working Group."; | |||
*/ | ||||
identity forwarding-action { | ||||
description | ||||
"Base identity for actions in the forwarding category"; | ||||
} | ||||
identity accept { | contact | |||
base forwarding-action; | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
description | WG List: netmod@ietf.org | |||
"Accept the packet"; | ||||
} | ||||
identity drop { | Editor: Mahesh Jethanandani | |||
base forwarding-action; | mjethanandani@gmail.com | |||
description | Editor: Lisa Huang | |||
"Drop packet without sending any ICMP error message"; | lyihuang16@gmail.com | |||
} | Editor: Sonal Agarwal | |||
sagarwal12@gmail.com | ||||
Editor: Dana Blair | ||||
dblair@cisco.com"; | ||||
identity reject { | description | |||
base forwarding-action; | "This YANG module defines a component that describes the | |||
description | configuration and monitoring of Access Control Lists (ACLs). | |||
"Drop the packet and send an ICMP error message to the source"; | ||||
} | ||||
/* | Copyright (c) 2019 IETF Trust and the persons identified as | |||
* Logging actions for a packet | the document authors. All rights reserved. | |||
*/ | ||||
identity log-action { | ||||
description | ||||
"Base identity for defining the destination for logging actions"; | ||||
} | ||||
identity log-syslog { | Redistribution and use in source and binary forms, with or | |||
base log-action; | without modification, is permitted pursuant to, and subject | |||
description | to the license terms contained in, the Simplified BSD | |||
"System log (syslog) the information for the packet"; | License set forth in Section 4.c of the IETF Trust's Legal | |||
} | Provisions Relating to IETF Documents | |||
identity log-none { | (http://trustee.ietf.org/license-info). | |||
base log-action; | ||||
description | ||||
"No logging for the packet"; | ||||
} | ||||
/* | This version of this YANG module is part of RFC 8519; see | |||
* ACL type identities | the RFC itself for full legal notices."; | |||
*/ | ||||
identity acl-base { | ||||
description | ||||
"Base Access Control List type for all Access Control List type | ||||
identifiers."; | ||||
} | ||||
identity ipv4-acl-type { | revision 2019-03-04 { | |||
base acl:acl-base; | description | |||
if-feature "ipv4"; | "Initial version."; | |||
description | reference | |||
"An ACL that matches on fields from the IPv4 header | "RFC 8519: YANG Data Model for Network Access Control | |||
(e.g. IPv4 destination address) and layer 4 headers (e.g. TCP | Lists (ACLs)."; | |||
destination port). An acl of type ipv4 does not contain | } | |||
matches on fields in the ethernet header or the IPv6 header."; | ||||
} | ||||
identity ipv6-acl-type { | /* | |||
base acl:acl-base; | * Identities | |||
if-feature "ipv6"; | */ | |||
description | /* | |||
"An ACL that matches on fields from the IPv6 header | * Forwarding actions for a packet | |||
(e.g. IPv6 destination address) and layer 4 headers (e.g. TCP | */ | |||
destination port). An acl of type ipv6 does not contain | ||||
matches on fields in the ethernet header or the IPv4 header."; | ||||
} | ||||
identity eth-acl-type { | identity forwarding-action { | |||
base acl:acl-base; | description | |||
if-feature "eth"; | "Base identity for actions in the forwarding category."; | |||
description | } | |||
"An ACL that matches on fields in the ethernet header, | ||||
like 10/100/1000baseT or WiFi Access Control List. An acl of | ||||
type ethernet does not contain matches on fields in the IPv4 | ||||
header, IPv6 header or layer 4 headers."; | ||||
} | ||||
identity mixed-eth-ipv4-acl-type { | identity accept { | |||
base "acl:eth-acl-type"; | base forwarding-action; | |||
base "acl:ipv4-acl-type"; | description | |||
if-feature "mixed-eth-ipv4"; | "Accept the packet."; | |||
description | } | |||
"An ACL that contains a mix of entries that | ||||
match on fields in ethernet headers, | ||||
entries that match on IPv4 headers. | ||||
Matching on layer 4 header fields may also exist in the | ||||
list."; | ||||
} | ||||
identity mixed-eth-ipv6-acl-type { | identity drop { | |||
base "acl:eth-acl-type"; | base forwarding-action; | |||
base "acl:ipv6-acl-type"; | description | |||
if-feature "mixed-eth-ipv6"; | "Drop packet without sending any ICMP error message."; | |||
description | } | |||
"ACL that contains a mix of entries that | identity reject { | |||
match on fields in ethernet headers, entries | base forwarding-action; | |||
that match on fields in IPv6 headers. Matching on | description | |||
layer 4 header fields may also exist in the list."; | "Drop the packet and send an ICMP error message to the source."; | |||
} | } | |||
identity mixed-eth-ipv4-ipv6-acl-type { | /* | |||
base "acl:eth-acl-type"; | * Logging actions for a packet | |||
base "acl:ipv4-acl-type"; | */ | |||
base "acl:ipv6-acl-type"; | ||||
if-feature "mixed-eth-ipv4-ipv6"; | ||||
description | ||||
"ACL that contains a mix of entries that | ||||
match on fields in ethernet headers, entries | ||||
that match on fields in IPv4 headers, and entries | ||||
that match on fields in IPv6 headers. Matching on | ||||
layer 4 header fields may also exist in the list."; | ||||
} | ||||
/* | identity log-action { | |||
* Features | description | |||
*/ | "Base identity for defining the destination for logging | |||
actions."; | ||||
} | ||||
/* | identity log-syslog { | |||
* Features supported by device | base log-action; | |||
*/ | description | |||
feature match-on-eth { | "System log (syslog) the information for the packet."; | |||
description | } | |||
"The device can support matching on ethernet headers."; | ||||
} | ||||
feature match-on-ipv4 { | identity log-none { | |||
description | base log-action; | |||
"The device can support matching on IPv4 headers."; | description | |||
"No logging for the packet."; | ||||
} | ||||
} | /* | |||
* ACL type identities | ||||
*/ | ||||
feature match-on-ipv6 { | identity acl-base { | |||
description | description | |||
"The device can support matching on IPv6 headers."; | "Base Access Control List type for all Access Control List type | |||
} | identifiers."; | |||
} | ||||
feature match-on-tcp { | identity ipv4-acl-type { | |||
description | base acl:acl-base; | |||
"The device can support matching on TCP headers."; | if-feature "ipv4"; | |||
} | description | |||
"An ACL that matches on fields from the IPv4 header | ||||
(e.g., IPv4 destination address) and Layer 4 headers (e.g., TCP | ||||
destination port). An ACL of type ipv4 does not contain | ||||
matches on fields in the Ethernet header or the IPv6 header."; | ||||
} | ||||
identity ipv6-acl-type { | ||||
base acl:acl-base; | ||||
if-feature "ipv6"; | ||||
description | ||||
"An ACL that matches on fields from the IPv6 header | ||||
(e.g., IPv6 destination address) and Layer 4 headers (e.g., TCP | ||||
destination port). An ACL of type ipv6 does not contain | ||||
matches on fields in the Ethernet header or the IPv4 header."; | ||||
} | ||||
feature match-on-udp { | identity eth-acl-type { | |||
description | base acl:acl-base; | |||
"The device can support matching on UDP headers."; | if-feature "eth"; | |||
} | description | |||
"An ACL that matches on fields in the Ethernet header, | ||||
like 10/100/1000baseT or a Wi-Fi Access Control List. An ACL | ||||
of type ethernet does not contain matches on fields in the | ||||
IPv4 header, the IPv6 header, or Layer 4 headers."; | ||||
} | ||||
feature match-on-icmp { | identity mixed-eth-ipv4-acl-type { | |||
description | base acl:eth-acl-type; | |||
"The device can support matching on ICMP (v4 and v6) headers."; | base acl:ipv4-acl-type; | |||
} | if-feature "mixed-eth-ipv4"; | |||
description | ||||
"An ACL that contains a mix of entries that match | ||||
on fields in Ethernet headers and in IPv4 headers. | ||||
Matching on Layer 4 header fields may also exist in the | ||||
list."; | ||||
} | ||||
/* | identity mixed-eth-ipv6-acl-type { | |||
* Header classifications combinations supported by | base acl:eth-acl-type; | |||
* device | base acl:ipv6-acl-type; | |||
*/ | if-feature "mixed-eth-ipv6"; | |||
feature eth { | description | |||
if-feature "match-on-eth"; | "An ACL that contains a mix of entries that match on fields | |||
description | in Ethernet headers and in IPv6 headers. Matching | |||
"Plain Ethernet ACL supported"; | on Layer 4 header fields may also exist in the list."; | |||
} | } | |||
feature ipv4 { | identity mixed-eth-ipv4-ipv6-acl-type { | |||
if-feature "match-on-ipv4"; | base acl:eth-acl-type; | |||
description | base acl:ipv4-acl-type; | |||
"Plain IPv4 ACL supported"; | base acl:ipv6-acl-type; | |||
} | if-feature "mixed-eth-ipv4-ipv6"; | |||
description | ||||
"An ACL that contains a mix of entries that | ||||
match on fields in Ethernet headers, IPv4 headers, and IPv6 | ||||
headers. Matching on Layer 4 header fields may also exist | ||||
in the list."; | ||||
} | ||||
feature ipv6 { | /* | |||
if-feature "match-on-ipv6"; | * Features | |||
description | */ | |||
"Plain IPv6 ACL supported"; | ||||
} | ||||
feature mixed-eth-ipv4 { | /* | |||
if-feature "match-on-eth and match-on-ipv4"; | * Features supported by device | |||
description | */ | |||
"Ethernet and IPv4 ACL combinations supported"; | feature match-on-eth { | |||
description | ||||
"The device can support matching on Ethernet headers."; | ||||
} | ||||
} | feature match-on-ipv4 { | |||
description | ||||
"The device can support matching on IPv4 headers."; | ||||
} | ||||
feature mixed-eth-ipv6 { | feature match-on-ipv6 { | |||
if-feature "match-on-eth and match-on-ipv6"; | description | |||
description | "The device can support matching on IPv6 headers."; | |||
"Ethernet and IPv6 ACL combinations supported"; | } | |||
} | ||||
feature mixed-eth-ipv4-ipv6 { | feature match-on-tcp { | |||
if-feature "match-on-eth and match-on-ipv4 | description | |||
and match-on-ipv6"; | "The device can support matching on TCP headers."; | |||
description | } | |||
"Ethernet, IPv4 and IPv6 ACL combinations supported."; | ||||
} | ||||
/* | feature match-on-udp { | |||
* Stats Features | description | |||
*/ | "The device can support matching on UDP headers."; | |||
feature interface-stats { | } | |||
description | ||||
"ACL counters are available and reported only per interface"; | ||||
} | ||||
feature acl-aggregate-stats { | feature match-on-icmp { | |||
description | description | |||
"ACL counters are aggregated over all interfaces, and reported | "The device can support matching on ICMP (v4 and v6) headers."; | |||
only per ACL entry"; | } | |||
} | ||||
/* | /* | |||
* Attachment point features | * Header classifications combinations supported by | |||
*/ | * device | |||
feature interface-attachment { | */ | |||
description | ||||
"ACLs are set on interfaces."; | ||||
} | ||||
/* | feature eth { | |||
* Typedefs | if-feature "match-on-eth"; | |||
*/ | description | |||
typedef acl-type { | "Plain Ethernet ACL supported."; | |||
type identityref { | } | |||
base acl-base; | ||||
} | ||||
description | ||||
"This type is used to refer to an Access Control List | ||||
(ACL) type"; | ||||
} | ||||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping acl-counters { | ||||
description | ||||
"Common grouping for ACL counters"; | ||||
leaf matched-packets { | feature ipv4 { | |||
type yang:counter64; | if-feature "match-on-ipv4"; | |||
config false; | description | |||
description | "Plain IPv4 ACL supported."; | |||
"Count of the number of packets matching the current ACL | } | |||
entry. | ||||
An implementation should provide this counter on a | feature ipv6 { | |||
per-interface per-ACL-entry basis if possible. | if-feature "match-on-ipv6"; | |||
description | ||||
"Plain IPv6 ACL supported."; | ||||
} | ||||
If an implementation only supports ACL counters on a per | feature mixed-eth-ipv4 { | |||
entry basis (i.e., not broken out per interface), then the | if-feature "match-on-eth and match-on-ipv4"; | |||
value should be equal to the aggregate count across all | description | |||
interfaces. | "Ethernet and IPv4 ACL combinations supported."; | |||
} | ||||
An implementation that provides counters on a per entry per | feature mixed-eth-ipv6 { | |||
interface basis is not required to also provide an aggregate | if-feature "match-on-eth and match-on-ipv6"; | |||
count, e.g., per entry -- the user is expected to be able | description | |||
implement the required aggregation if such a count is | "Ethernet and IPv6 ACL combinations supported."; | |||
needed."; | } | |||
} | ||||
leaf matched-octets { | feature mixed-eth-ipv4-ipv6 { | |||
type yang:counter64; | if-feature | |||
config false; | "match-on-eth and match-on-ipv4 | |||
description | and match-on-ipv6"; | |||
"Count of the number of octets (bytes) matching the current | description | |||
ACL entry. | "Ethernet, IPv4, and IPv6 ACL combinations supported."; | |||
} | ||||
An implementation should provide this counter on a | /* | |||
per-interface per-ACL-entry if possible. | * Stats Features | |||
*/ | ||||
feature interface-stats { | ||||
description | ||||
"ACL counters are available and reported only per interface."; | ||||
} | ||||
If an implementation only supports ACL counters per entry | feature acl-aggregate-stats { | |||
(i.e., not broken out per interface), then the value | description | |||
should be equal to the aggregate count across all interfaces. | "ACL counters are aggregated over all interfaces and reported | |||
only per ACL entry."; | ||||
} | ||||
An implementation that provides counters per entry per | /* | |||
interface is not required to also provide an aggregate count, | * Attachment point features | |||
e.g., per entry -- the user is expected to be able implement | */ | |||
the required aggregation if such a count is needed."; | feature interface-attachment { | |||
} | description | |||
"ACLs are set on interfaces."; | ||||
} | ||||
} | /* | |||
* Typedefs | ||||
*/ | ||||
typedef acl-type { | ||||
type identityref { | ||||
base acl-base; | ||||
} | ||||
description | ||||
"This type is used to refer to an ACL type."; | ||||
} | ||||
/* | /* | |||
* Configuration and monitoring data nodes | * Groupings | |||
*/ | */ | |||
container acls { | grouping acl-counters { | |||
description | description | |||
"This is a top level container for Access Control Lists. | "Common grouping for ACL counters."; | |||
It can have one or more acl nodes."; | leaf matched-packets { | |||
list acl { | type yang:counter64; | |||
key "name"; | config false; | |||
description | description | |||
"An Access Control List (ACL) is an ordered list of | "Count of the number of packets matching the current ACL | |||
Access Control Entries (ACE). Each ACE has a | entry. | |||
list of match criteria and a list of actions. | ||||
Since there are several kinds of Access Control Lists | ||||
implemented with different attributes for | ||||
different vendors, this model accommodates customizing | ||||
Access Control Lists for each kind and, for each vendor."; | ||||
leaf name { | ||||
type string { | ||||
length "1..64"; | ||||
} | ||||
description | ||||
"The name of access list. A device MAY restrict the length | ||||
and value of this name, possibly space and special | ||||
characters are not allowed."; | ||||
} | ||||
leaf type { | ||||
type acl-type; | ||||
description | ||||
"Type of access control list. Indicates the primary intended | ||||
type of match criteria (e.g. ethernet, IPv4, IPv6, mixed, | ||||
etc) used in the list instance."; | ||||
} | ||||
container aces { | ||||
description | ||||
"The aces container contains one or more ace nodes."; | ||||
list ace { | ||||
key "name"; | ||||
ordered-by user; | ||||
description | ||||
"List of Access Control Entries (ACEs)"; | ||||
leaf name { | ||||
type string { | ||||
length "1..64"; | ||||
} | ||||
description | ||||
"A unique name identifying this Access Control | ||||
Entry (ACE)."; | ||||
} | ||||
container matches { | An implementation should provide this counter on a | |||
description | per-interface, per-ACL-entry basis if possible. | |||
"The rules in this set determine what fields will be | ||||
matched upon before any action is taken on them. | ||||
The rules are selected based on the feature set | ||||
defined by the server and the acl-type defined. | ||||
If no matches are defined in a particular container, | ||||
then any packet will match that container. If no | ||||
matches are specified at all in an ACE, then any | ||||
packet will match the ACE."; | ||||
choice l2 { | If an implementation only supports ACL counters on a per- | |||
container eth { | entry basis (i.e., not broken out per interface), then the | |||
when "derived-from-or-self(/acls/acl/type, " + | value should be equal to the aggregate count across all | |||
"'acl:eth-acl-type')"; | interfaces. | |||
if-feature match-on-eth; | ||||
uses pf:acl-eth-header-fields; | ||||
description | ||||
"Rule set that matches ethernet headers."; | ||||
} | ||||
description | ||||
"Match layer 2 headers, for example ethernet | ||||
header fields."; | ||||
} | ||||
choice l3 { | An implementation that provides counters on a per-entry, per- | |||
container ipv4 { | interface basis is not required to also provide an aggregate | |||
when "derived-from-or-self(/acls/acl/type, " + | count, e.g., per entry -- the user is expected to be able to | |||
"'acl:ipv4-acl-type')"; | implement the required aggregation if such a count is | |||
if-feature match-on-ipv4; | needed."; | |||
uses pf:acl-ip-header-fields; | ||||
uses pf:acl-ipv4-header-fields; | ||||
description | ||||
"Rule set that matches IPv4 headers."; | ||||
} | ||||
container ipv6 { | } | |||
when "derived-from-or-self(/acls/acl/type, " + | ||||
"'acl:ipv6-acl-type')"; | ||||
if-feature match-on-ipv6; | ||||
uses pf:acl-ip-header-fields; | ||||
uses pf:acl-ipv6-header-fields; | ||||
description | ||||
"Rule set that matches IPv6 headers."; | ||||
} | leaf matched-octets { | |||
description | type yang:counter64; | |||
"Choice of either ipv4 or ipv6 headers"; | config false; | |||
} | description | |||
"Count of the number of octets (bytes) matching the current | ||||
ACL entry. | ||||
choice l4 { | An implementation should provide this counter on a | |||
container tcp { | per-interface, per-ACL-entry basis if possible. | |||
if-feature match-on-tcp; | ||||
uses pf:acl-tcp-header-fields; | ||||
container source-port { | ||||
choice source-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Source port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of source port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of source ports to be referenced."; | ||||
} | ||||
description | ||||
"Source port definition."; | ||||
} | ||||
container destination-port { | ||||
choice destination-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Destination port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of destination port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of destination ports to be referenced."; | ||||
} | ||||
description | ||||
"Destination port definition."; | ||||
} | ||||
description | ||||
"Rule set that matches TCP headers."; | ||||
} | ||||
container udp { | If an implementation only supports ACL counters per entry | |||
if-feature match-on-udp; | (i.e., not broken out per interface), then the value | |||
uses pf:acl-udp-header-fields; | should be equal to the aggregate count across all interfaces. | |||
container source-port { | ||||
choice source-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Source port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of source port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of source ports to be referenced."; | ||||
} | ||||
description | ||||
"Source port definition."; | ||||
} | ||||
container destination-port { | ||||
choice destination-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Destination port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of destination port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of destination ports to be referenced."; | ||||
} | ||||
description | ||||
"Destination port definition."; | ||||
} | ||||
description | ||||
"Rule set that matches UDP headers."; | ||||
} | ||||
container icmp { | An implementation that provides counters per entry per | |||
if-feature match-on-icmp; | interface is not required to also provide an aggregate count, | |||
uses pf:acl-icmp-header-fields; | e.g., per entry -- the user is expected to be able to | |||
description | implement the required aggregation if such a count is needed."; | |||
"Rule set that matches ICMP headers."; | } | |||
} | } | |||
description | ||||
"Choice of TCP, UDP or ICMP headers."; | ||||
} | /* | |||
* Configuration and monitoring data nodes | ||||
*/ | ||||
leaf egress-interface { | container acls { | |||
type if:interface-ref; | description | |||
description | "This is a top-level container for Access Control Lists. | |||
"Egress interface. This should not be used if this ACL | It can have one or more acl nodes."; | |||
is attached as an egress ACL (or the value should | list acl { | |||
equal the interface to which the ACL is attached)."; | key "name"; | |||
} | description | |||
"An ACL is an ordered list of ACEs. Each ACE has a | ||||
list of match criteria and a list of actions. | ||||
Since there are several kinds of ACLs implemented | ||||
with different attributes for different vendors, | ||||
this model accommodates customizing ACLs for | ||||
each kind and for each vendor."; | ||||
leaf name { | ||||
type string { | ||||
length "1..64"; | ||||
} | ||||
description | ||||
"The name of the access list. A device MAY further | ||||
restrict the length of this name; space and special | ||||
characters are not allowed."; | ||||
leaf ingress-interface { | } | |||
type if:interface-ref; | leaf type { | |||
description | type acl-type; | |||
"Ingress interface. This should not be used if this ACL | description | |||
is attached as an ingress ACL (or the value should | "Type of ACL. Indicates the primary intended | |||
equal the interface to which the ACL is attached)"; | type of match criteria (e.g., Ethernet, IPv4, IPv6, mixed, | |||
} | etc.) used in the list instance."; | |||
} | } | |||
container aces { | ||||
description | ||||
"The aces container contains one or more ACE nodes."; | ||||
list ace { | ||||
key "name"; | ||||
ordered-by user; | ||||
description | ||||
"List of ACEs."; | ||||
leaf name { | ||||
type string { | ||||
length "1..64"; | ||||
} | ||||
description | ||||
"A unique name identifying this ACE."; | ||||
} | ||||
container matches { | ||||
description | ||||
"The rules in this set determine what fields will be | ||||
matched upon before any action is taken on them. | ||||
The rules are selected based on the feature set | ||||
defined by the server and the acl-type defined. | ||||
If no matches are defined in a particular container, | ||||
then any packet will match that container. If no | ||||
matches are specified at all in an ACE, then any | ||||
packet will match the ACE."; | ||||
container actions { | choice l2 { | |||
description | container eth { | |||
"Definitions of action for this ace entry"; | when "derived-from-or-self(/acls/acl/type, " | |||
leaf forwarding { | + "'acl:eth-acl-type')"; | |||
type identityref { | if-feature "match-on-eth"; | |||
base forwarding-action; | uses pf:acl-eth-header-fields; | |||
} | description | |||
mandatory true; | "Rule set that matches Ethernet headers."; | |||
description | } | |||
"Specifies the forwarding action per ace entry"; | description | |||
} | "Match Layer 2 headers, for example, Ethernet | |||
header fields."; | ||||
} | ||||
choice l3 { | ||||
container ipv4 { | ||||
when "derived-from-or-self(/acls/acl/type, " | ||||
+ "'acl:ipv4-acl-type')"; | ||||
if-feature "match-on-ipv4"; | ||||
uses pf:acl-ip-header-fields; | ||||
uses pf:acl-ipv4-header-fields; | ||||
description | ||||
"Rule set that matches IPv4 headers."; | ||||
} | ||||
leaf logging { | container ipv6 { | |||
type identityref { | when "derived-from-or-self(/acls/acl/type, " | |||
base log-action; | + "'acl:ipv6-acl-type')"; | |||
} | if-feature "match-on-ipv6"; | |||
default log-none; | uses pf:acl-ip-header-fields; | |||
description | uses pf:acl-ipv6-header-fields; | |||
"Specifies the log action and destination for | description | |||
matched packets. Default value is not to log the | "Rule set that matches IPv6 headers."; | |||
packet."; | } | |||
} | description | |||
} | "Choice of either IPv4 or IPv6 headers"; | |||
container statistics { | } | |||
if-feature "acl-aggregate-stats"; | ||||
config false; | ||||
description | ||||
"Statistics gathered across all attachment points for the | ||||
given ACL."; | ||||
uses acl-counters; | choice l4 { | |||
} | container tcp { | |||
} | if-feature "match-on-tcp"; | |||
} | uses pf:acl-tcp-header-fields; | |||
} | container source-port { | |||
container attachment-points { | choice source-port { | |||
description | case range-or-operator { | |||
"Enclosing container for the list of | uses pf:port-range-or-operator; | |||
attachment-points on which ACLs are set"; | description | |||
"Source port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of source port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of source ports to be referenced."; | ||||
} | ||||
description | ||||
"Source port definition."; | ||||
} | ||||
container destination-port { | ||||
choice destination-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Destination port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of destination port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of destination ports to be referenced."; | ||||
} | ||||
description | ||||
"Destination port definition."; | ||||
} | ||||
description | ||||
"Rule set that matches TCP headers."; | ||||
} | ||||
/* | container udp { | |||
* Groupings | if-feature "match-on-udp"; | |||
*/ | uses pf:acl-udp-header-fields; | |||
grouping interface-acl { | container source-port { | |||
description | choice source-port { | |||
"Grouping for per-interface ingress ACL data"; | case range-or-operator { | |||
uses pf:port-range-or-operator; | ||||
description | ||||
"Source port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of source port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of source ports to be referenced."; | ||||
} | ||||
description | ||||
"Source port definition."; | ||||
} | ||||
container destination-port { | ||||
choice destination-port { | ||||
case range-or-operator { | ||||
uses pf:port-range-or-operator; | ||||
description | ||||
"Destination port definition from range or | ||||
operator."; | ||||
} | ||||
description | ||||
"Choice of destination port definition using | ||||
range/operator or a choice to support future | ||||
'case' statements, such as one enabling a | ||||
group of destination ports to be referenced."; | ||||
} | ||||
description | ||||
"Destination port definition."; | ||||
} | ||||
description | ||||
"Rule set that matches UDP headers."; | ||||
} | ||||
container acl-sets { | container icmp { | |||
description | if-feature "match-on-icmp"; | |||
"Enclosing container the list of ingress ACLs on the | uses pf:acl-icmp-header-fields; | |||
interface"; | description | |||
"Rule set that matches ICMP headers."; | ||||
} | ||||
description | ||||
"Choice of TCP, UDP, or ICMP headers."; | ||||
} | ||||
list acl-set { | leaf egress-interface { | |||
key "name"; | type if:interface-ref; | |||
ordered-by user; | description | |||
description | "Egress interface. This should not be used if this ACL | |||
"List of ingress ACLs on the interface"; | is attached as an egress ACL (or the value should | |||
equal the interface to which the ACL is attached)."; | ||||
} | ||||
leaf name { | leaf ingress-interface { | |||
type leafref { | type if:interface-ref; | |||
path "/acls/acl/name"; | description | |||
} | "Ingress interface. This should not be used if this ACL | |||
description | is attached as an ingress ACL (or the value should | |||
"Reference to the ACL name applied on ingress"; | equal the interface to which the ACL is attached)."; | |||
} | } | |||
} | ||||
list ace-statistics { | container actions { | |||
if-feature "interface-stats"; | description | |||
key "name"; | "Definition of actions for this ace entry."; | |||
config false; | leaf forwarding { | |||
description | type identityref { | |||
"List of Access Control Entries (ACEs)"; | base forwarding-action; | |||
leaf name { | } | |||
type leafref { | mandatory true; | |||
path "/acls/acl/aces/ace/name"; | description | |||
} | "Specifies the forwarding action per ace entry."; | |||
description | ||||
"The ace name"; | ||||
} | } | |||
uses acl-counters; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
list interface { | leaf logging { | |||
if-feature interface-attachment; | type identityref { | |||
key "interface-id"; | base log-action; | |||
description | } | |||
"List of interfaces on which ACLs are set"; | default "log-none"; | |||
description | ||||
"Specifies the log action and destination for | ||||
matched packets. Default value is not to log the | ||||
packet."; | ||||
} | ||||
} | ||||
container statistics { | ||||
if-feature "acl-aggregate-stats"; | ||||
config false; | ||||
description | ||||
"Statistics gathered across all attachment points for the | ||||
given ACL."; | ||||
uses acl-counters; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
container attachment-points { | ||||
description | ||||
"Enclosing container for the list of | ||||
attachment points on which ACLs are set."; | ||||
/* | ||||
* Groupings | ||||
*/ | ||||
grouping interface-acl { | ||||
description | ||||
"Grouping for per-interface ingress ACL data."; | ||||
container acl-sets { | ||||
description | ||||
"Enclosing container for the list of ingress ACLs on the | ||||
interface."; | ||||
list acl-set { | ||||
key "name"; | ||||
ordered-by user; | ||||
description | ||||
"List of ingress ACLs on the interface."; | ||||
leaf name { | ||||
type leafref { | ||||
path "/acls/acl/name"; | ||||
} | ||||
description | ||||
"Reference to the ACL name applied on the ingress."; | ||||
} | ||||
list ace-statistics { | ||||
if-feature "interface-stats"; | ||||
key "name"; | ||||
config false; | ||||
description | ||||
"List of ACEs."; | ||||
leaf name { | ||||
type leafref { | ||||
path "/acls/acl/aces/ace/name"; | ||||
} | ||||
description | ||||
"Name of the ace entry."; | ||||
} | ||||
uses acl-counters; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
leaf interface-id { | list interface { | |||
type if:interface-ref; | if-feature "interface-attachment"; | |||
description | key "interface-id"; | |||
"Reference to the interface id list key"; | description | |||
} | "List of interfaces on which ACLs are set."; | |||
container ingress { | leaf interface-id { | |||
uses interface-acl; | type if:interface-ref; | |||
description | description | |||
"The ACLs applied to ingress interface"; | "Reference to the interface id list key."; | |||
} | } | |||
container egress { | ||||
uses interface-acl; | ||||
description | ||||
"The ACLs applied to egress interface"; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||
<CODE ENDS> | container ingress { | |||
uses interface-acl; | ||||
description | ||||
"The ACLs applied to the ingress interface."; | ||||
} | ||||
container egress { | ||||
uses interface-acl; | ||||
description | ||||
"The ACLs applied to the egress interface."; | ||||
} | ||||
} | ||||
} | ||||
} | ||||
} | ||||
<CODE ENDS> | ||||
4.2. IETF Packet Fields module | 4.2. IETF Packet Fields Module | |||
The packet fields module defines the necessary groups for matching on | The packet fields module defines the necessary groups for matching on | |||
fields in the packet including ethernet, ipv4, ipv6, and transport | fields in the packet including Ethernet, IPv4, IPv6, and transport- | |||
layer fields. The "type" node determines which of these fields get | layer fields. The "type" node determines which of these fields get | |||
included for any given ACL with the exception of TCP, UDP and ICMP | included for any given ACL with the exception of TCP, UDP, and ICMP | |||
header fields. Those fields can be used in conjunction with any of | header fields. Those fields can be used in conjunction with any of | |||
the above layer 2 or layer 3 fields. | the above Layer 2 or Layer 3 fields. | |||
Since the number of match criteria are very large, the base draft | Since the number of match criteria are very large, the base | |||
does not include these directly but references them by 'uses' | specification does not include these directly but references them by | |||
statement to keep the base module simple. In case more match | the 'uses' statement to keep the base module simple. In case more | |||
conditions are needed, those can be added by augmenting choices | match conditions are needed, those can be added by augmenting choices | |||
within container "matches" in ietf-access-control-list.yang model. | within container "matches" in the ietf-access-control-list.yang data | |||
model. | ||||
This module imports definitions from Common YANG Data Types [RFC6991] | This module imports definitions from "Common YANG Data Types" | |||
and references IP [RFC0791], ICMP [RFC0792], TCP [RFC0793], | [RFC6991] and references "Internet Protocol" [RFC0791], "Internet | |||
Definition of the Differentiated Services Field in the IPv4 and IPv6 | Control Message Protocol" [RFC0792], "Transmission Control Protocol" | |||
Headers [RFC2474], The Addition of Explicit Congestion Notification | [RFC0793], "Definition of the Differentiated Services Field (DS | |||
(ECN) to IP [RFC3168], , IPv6 Scoped Address Architecture [RFC4007], | Field) in the IPv4 and IPv6 Headers" [RFC2474], "The Addition of | |||
IPv6 Addressing Architecture [RFC4291], A Recommendation for IPv6 | Explicit Congestion Notification (ECN) to IP" [RFC3168], "IPv6 Scoped | |||
Address Text Representation [RFC5952], IPv6 [RFC8200]. | Address Architecture" [RFC4007], "IP Version 6 Addressing | |||
Architecture" [RFC4291], "A Recommendation for IPv6 Address Text | ||||
Representation" [RFC5952], and "Internet Protocol, Version 6 (IPv6) | ||||
Specification" [RFC8200]. | ||||
<CODE BEGINS> file "ietf-packet-fields@2018-11-06.yang" | <CODE BEGINS> file "ietf-packet-fields@2019-03-04.yang" | |||
module ietf-packet-fields { | module ietf-packet-fields { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-packet-fields"; | namespace "urn:ietf:params:xml:ns:yang:ietf-packet-fields"; | |||
prefix packet-fields; | prefix packet-fields; | |||
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 25, line 33 ¶ | skipping to change at page 25, line 4 ¶ | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
"RFC 6991 - Common YANG Data Types."; | "RFC 6991 - Common YANG Data Types."; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
reference | reference | |||
"RFC 6991 - Common YANG Data Types."; | "RFC 6991 - Common YANG Data Types."; | |||
} | } | |||
import ietf-ethertypes { | import ietf-ethertypes { | |||
prefix eth; | prefix eth; | |||
reference | reference | |||
"RFC XXXX - Network ACL YANG Model."; | "RFC 8519 - YANG Data Model for Network Access Control | |||
Lists (ACLs)."; | ||||
} | } | |||
organization | organization | |||
"IETF NETMOD (Network Modeling Language) Working | "IETF NETMOD (Network Modeling) Working Group."; | |||
Group"; | ||||
contact | contact | |||
"WG Web: http://tools.ietf.org/wg/netmod/ | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
WG List: netmod@ietf.org | WG List: netmod@ietf.org | |||
Editor: Mahesh Jethanandani | Editor: Mahesh Jethanandani | |||
mjethanandani@gmail.com | mjethanandani@gmail.com | |||
Editor: Lisa Huang | Editor: Lisa Huang | |||
lyihuang16@gmail.com | lyihuang16@gmail.com | |||
Editor: Sonal Agarwal | Editor: Sonal Agarwal | |||
sagarwal12@gmail.com | sagarwal12@gmail.com | |||
Editor: Dana Blair | Editor: Dana Blair | |||
dblair@cisco.com"; | dblair@cisco.com"; | |||
description | description | |||
"This YANG module defines groupings that are used by | "This YANG module defines groupings that are used by | |||
ietf-access-control-list YANG module. Their usage is not | the ietf-access-control-list YANG module. Their usage | |||
limited to ietf-access-control-list and can be | is not limited to ietf-access-control-list and can be | |||
used anywhere as applicable. | used anywhere as applicable. | |||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2019 IETF Trust and the persons identified as | |||
the document authors. All rights reserved. | the document authors. 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 Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see | Redistribution and use in source and binary forms, with or | |||
the RFC itself for full legal notices."; | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
revision 2018-11-06 { | This version of this YANG module is part of RFC 8519; see | |||
the RFC itself for full legal notices."; | ||||
revision 2019-03-04 { | ||||
description | description | |||
"Initial version."; | "Initial version."; | |||
reference | reference | |||
"RFC XXX: Network Access Control List (ACL) YANG Data Model."; | "RFC 8519: YANG Data Model for Network Access Control | |||
Lists (ACLs)."; | ||||
} | } | |||
/* | /* | |||
* Typedefs | * Typedefs | |||
*/ | */ | |||
typedef operator { | typedef operator { | |||
type enumeration { | type enumeration { | |||
enum lte { | enum lte { | |||
description | description | |||
"Less than or equal."; | "Less than or equal to."; | |||
} | } | |||
enum gte { | enum gte { | |||
description | description | |||
"Greater than or equal."; | "Greater than or equal to."; | |||
} | } | |||
enum eq { | enum eq { | |||
description | description | |||
"Equal to."; | "Equal to."; | |||
} | } | |||
enum neq { | enum neq { | |||
description | description | |||
"Not equal to."; | "Not equal to."; | |||
} | } | |||
} | } | |||
description | description | |||
"The source and destination port range definitions | "The source and destination port range definitions | |||
can be further qualified using an operator. An | can be further qualified using an operator. An | |||
operator is needed only if lower-port is specified | operator is needed only if the lower-port is specified | |||
and upper-port is not specified. The operator | and the upper-port is not specified. The operator | |||
therefore further qualifies lower-port only."; | therefore further qualifies the lower-port only."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping port-range-or-operator { | grouping port-range-or-operator { | |||
choice port-range-or-operator { | choice port-range-or-operator { | |||
case range { | case range { | |||
leaf lower-port { | leaf lower-port { | |||
type inet:port-number; | type inet:port-number; | |||
must ". <= ../upper-port" { | must '. <= ../upper-port' { | |||
error-message | error-message | |||
"The lower-port must be less than or equal to | "The lower-port must be less than or equal to | |||
upper-port."; | the upper-port."; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Lower boundry for a port."; | "Lower boundary for a port."; | |||
} | } | |||
leaf upper-port { | leaf upper-port { | |||
type inet:port-number; | type inet:port-number; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Upper boundry for port."; | "Upper boundary for a port."; | |||
} | } | |||
} | } | |||
case operator { | case operator { | |||
leaf operator { | leaf operator { | |||
type operator; | type operator; | |||
default eq; | default "eq"; | |||
description | description | |||
"Operator to be applied on the port below."; | "Operator to be applied on the port below."; | |||
} | } | |||
leaf port { | leaf port { | |||
type inet:port-number; | type inet:port-number; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Port number along with operator on which to | "Port number along with the operator on which to | |||
match."; | match."; | |||
} | } | |||
} | } | |||
description | description | |||
"Choice of specifying a port range or a single | "Choice of specifying a port range or a single | |||
port along with an operator."; | port along with an operator."; | |||
} | } | |||
description | description | |||
"Grouping for port definitions in the form of a | "Grouping for port definitions in the form of a | |||
choice statement."; | choice statement."; | |||
} | } | |||
grouping acl-ip-header-fields { | grouping acl-ip-header-fields { | |||
description | description | |||
"IP header fields common to ipv4 and ipv6"; | "IP header fields common to IPv4 and IPv6"; | |||
reference | reference | |||
"RFC 791: Internet Protocol."; | "RFC 791: Internet Protocol."; | |||
leaf dscp { | leaf dscp { | |||
type inet:dscp; | type inet:dscp; | |||
description | description | |||
"Differentiated Services Code Point."; | "Differentiated Services Code Point."; | |||
reference | reference | |||
"RFC 2474: Definition of Differentiated services field | "RFC 2474: Definition of the Differentiated Services | |||
(DS field) in the IPv4 and IPv6 headers."; | Field (DS Field) in the IPv4 and IPv6 | |||
Headers."; | ||||
} | } | |||
leaf ecn { | leaf ecn { | |||
type uint8 { | type uint8 { | |||
range 0..3; | range "0..3"; | |||
} | } | |||
description | description | |||
"Explicit Congestion Notification."; | "Explicit Congestion Notification."; | |||
reference | reference | |||
"RFC 3168: Explicit Congestion Notification."; | "RFC 3168: The Addition of Explicit Congestion | |||
Notification (ECN) to IP."; | ||||
} | } | |||
leaf length { | leaf length { | |||
type uint16; | type uint16; | |||
description | description | |||
"In IPv4 header field, this field is known as the Total Length. | "In the IPv4 header field, this field is known as the Total | |||
Total Length is the length of the datagram, measured in octets, | Length. Total Length is the length of the datagram, measured | |||
including internet header and data. | in octets, including internet header and data. | |||
In IPv6 header field, this field is known as the Payload | In the IPv6 header field, this field is known as the Payload | |||
Length, the length of the IPv6 payload, i.e. the rest of | Length, which is the length of the IPv6 payload, i.e., the rest | |||
the packet following the IPv6 header, in octets."; | of the packet following the IPv6 header, in octets."; | |||
reference | reference | |||
"RFC 791: Internet Protocol, | "RFC 791: Internet Protocol | |||
RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | |||
} | } | |||
leaf ttl { | leaf ttl { | |||
type uint8; | type uint8; | |||
description | description | |||
"This field indicates the maximum time the datagram is allowed | "This field indicates the maximum time the datagram is allowed | |||
to remain in the internet system. If this field contains the | to remain in the internet system. If this field contains the | |||
value zero, then the datagram must be dropped. | value zero, then the datagram must be dropped. | |||
In IPv6, this field is known as the Hop Limit."; | In IPv6, this field is known as the Hop Limit."; | |||
reference | reference | |||
"RFC 791: Internet Protocol, | "RFC 791: Internet Protocol | |||
RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | |||
} | } | |||
leaf protocol { | leaf protocol { | |||
type uint8; | type uint8; | |||
description | description | |||
"Internet Protocol number. Refers to the protocol of the | "Internet Protocol number. Refers to the protocol of the | |||
payload. In IPv6, this field is known as 'next-header, | payload. In IPv6, this field is known as 'next-header', | |||
and if extension headers are present, the protocol is | and if extension headers are present, the protocol is | |||
present in the 'upper-layer' header."; | present in the 'upper-layer' header."; | |||
reference | reference | |||
"RFC 791: Internet Protocol, | "RFC 791: Internet Protocol | |||
RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | |||
} | } | |||
} | } | |||
grouping acl-ipv4-header-fields { | grouping acl-ipv4-header-fields { | |||
description | description | |||
"Fields in IPv4 header."; | "Fields in the IPv4 header."; | |||
leaf ihl { | leaf ihl { | |||
type uint8 { | type uint8 { | |||
range "5..60"; | range "5..60"; | |||
} | } | |||
description | description | |||
"An IPv4 header field, the Internet Header Length (IHL) is | "In an IPv4 header field, the Internet Header Length (IHL) is | |||
the length of the internet header in 32 bit words, and | the length of the internet header in 32-bit words and | |||
thus points to the beginning of the data. Note that the | thus points to the beginning of the data. Note that the | |||
minimum value for a correct header is 5."; | minimum value for a correct header is 5."; | |||
} | } | |||
leaf flags { | leaf flags { | |||
type bits { | type bits { | |||
bit reserved { | bit reserved { | |||
position 0; | position 0; | |||
description | description | |||
"Reserved. Must be zero."; | "Reserved. Must be zero."; | |||
} | } | |||
bit fragment { | bit fragment { | |||
position 1; | position 1; | |||
description | description | |||
"Setting value to 0 indicates may fragment, while setting | "Setting the value to 0 indicates may fragment, while | |||
the value to 1 indicates do not fragment."; | setting the value to 1 indicates do not fragment."; | |||
} | } | |||
bit more { | bit more { | |||
position 2; | position 2; | |||
description | description | |||
"Setting the value to 0 indicates this is the last fragment, | "Setting the value to 0 indicates this is the last fragment, | |||
and setting the value to 1 indicates more fragments are | and setting the value to 1 indicates more fragments are | |||
coming."; | coming."; | |||
} | } | |||
} | } | |||
description | description | |||
"Bit definitions for the flags field in IPv4 header."; | "Bit definitions for the Flags field in the IPv4 header."; | |||
} | } | |||
leaf offset { | leaf offset { | |||
type uint16 { | type uint16 { | |||
range "20..65535"; | range "20..65535"; | |||
} | } | |||
description | description | |||
"The fragment offset is measured in units of 8 octets (64 bits). | "The fragment offset is measured in units of 8 octets (64 bits). | |||
The first fragment has offset zero. The length is 13 bits"; | The first fragment has offset zero. The length is 13 bits"; | |||
} | } | |||
leaf identification { | leaf identification { | |||
type uint16; | type uint16; | |||
description | description | |||
"An identifying value assigned by the sender to aid in | "An identifying value assigned by the sender to aid in | |||
assembling the fragments of a datagram."; | assembling the fragments of a datagram."; | |||
} | } | |||
choice destination-network { | choice destination-network { | |||
case destination-ipv4-network { | case destination-ipv4-network { | |||
leaf destination-ipv4-network { | leaf destination-ipv4-network { | |||
skipping to change at page 31, line 22 ¶ | skipping to change at page 30, line 39 ¶ | |||
} | } | |||
} | } | |||
description | description | |||
"Choice of specifying a source IPv4 address or | "Choice of specifying a source IPv4 address or | |||
referring to a group of IPv4 source addresses."; | referring to a group of IPv4 source addresses."; | |||
} | } | |||
} | } | |||
grouping acl-ipv6-header-fields { | grouping acl-ipv6-header-fields { | |||
description | description | |||
"Fields in IPv6 header"; | "Fields in the IPv6 header."; | |||
choice destination-network { | choice destination-network { | |||
case destination-ipv6-network { | case destination-ipv6-network { | |||
leaf destination-ipv6-network { | leaf destination-ipv6-network { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
description | description | |||
"Destination IPv6 address prefix."; | "Destination IPv6 address prefix."; | |||
} | } | |||
} | } | |||
description | description | |||
"Choice of specifying a destination IPv6 address | "Choice of specifying a destination IPv6 address | |||
or referring to a group of IPv6 destination | or referring to a group of IPv6 destination | |||
addresses."; | addresses."; | |||
} | } | |||
choice source-network { | choice source-network { | |||
case source-ipv6-network { | case source-ipv6-network { | |||
leaf source-ipv6-network { | leaf source-ipv6-network { | |||
type inet:ipv6-prefix; | type inet:ipv6-prefix; | |||
description | description | |||
"Source IPv6 address prefix."; | "Source IPv6 address prefix."; | |||
} | } | |||
} | } | |||
description | description | |||
"Choice of specifying a source IPv6 address or | "Choice of specifying a source IPv6 address or | |||
referring to a group of IPv6 source addresses."; | referring to a group of IPv6 source addresses."; | |||
} | } | |||
leaf flow-label { | leaf flow-label { | |||
type inet:ipv6-flow-label; | type inet:ipv6-flow-label; | |||
description | description | |||
"IPv6 Flow label."; | "IPv6 Flow label."; | |||
} | } | |||
reference | reference | |||
"RFC 4291: IP Version 6 Addressing Architecture | "RFC 4291: IP Version 6 Addressing Architecture | |||
RFC 4007: IPv6 Scoped Address Architecture | RFC 4007: IPv6 Scoped Address Architecture | |||
RFC 5952: A Recommendation for IPv6 Address Text | RFC 5952: A Recommendation for IPv6 Address Text | |||
Representation"; | Representation."; | |||
} | } | |||
grouping acl-eth-header-fields { | grouping acl-eth-header-fields { | |||
description | description | |||
"Fields in Ethernet header."; | "Fields in the Ethernet header."; | |||
leaf destination-mac-address { | leaf destination-mac-address { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"Destination IEEE 802 MAC address."; | "Destination IEEE 802 Media Access Control (MAC) | |||
address."; | ||||
} | } | |||
leaf destination-mac-address-mask { | leaf destination-mac-address-mask { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"Destination IEEE 802 MAC address mask."; | "Destination IEEE 802 MAC address mask."; | |||
} | } | |||
leaf source-mac-address { | leaf source-mac-address { | |||
type yang:mac-address; | type yang:mac-address; | |||
description | description | |||
"Source IEEE 802 MAC address."; | "Source IEEE 802 MAC address."; | |||
skipping to change at page 32, line 47 ¶ | skipping to change at page 32, line 16 ¶ | |||
"Source IEEE 802 MAC address mask."; | "Source IEEE 802 MAC address mask."; | |||
} | } | |||
leaf ethertype { | leaf ethertype { | |||
type eth:ethertype; | type eth:ethertype; | |||
description | description | |||
"The Ethernet Type (or Length) value represented | "The Ethernet Type (or Length) value represented | |||
in the canonical order defined by IEEE 802. | in the canonical order defined by IEEE 802. | |||
The canonical representation uses lowercase | The canonical representation uses lowercase | |||
characters."; | characters."; | |||
reference | reference | |||
"IEEE 802-2014 Clause 9.2"; | "IEEE 802-2014, Clause 9.2."; | |||
} | } | |||
reference | reference | |||
"IEEE 802: IEEE Standard for Local and Metropolitan | "IEEE 802: IEEE Standard for Local and Metropolitan | |||
Area Networks: Overview and Architecture."; | Area Networks: Overview and Architecture."; | |||
} | } | |||
grouping acl-tcp-header-fields { | grouping acl-tcp-header-fields { | |||
description | description | |||
"Collection of TCP header fields that can be used to | "Collection of TCP header fields that can be used to | |||
setup a match filter."; | set up a match filter."; | |||
leaf sequence-number { | leaf sequence-number { | |||
type uint32; | type uint32; | |||
description | description | |||
"Sequence number that appears in the packet."; | "Sequence number that appears in the packet."; | |||
} | } | |||
leaf acknowledgement-number { | leaf acknowledgement-number { | |||
type uint32; | type uint32; | |||
description | description | |||
"The acknowledgement number that appears in the | "The acknowledgement number that appears in the | |||
packet."; | packet."; | |||
} | } | |||
leaf data-offset { | leaf data-offset { | |||
type uint8 { | type uint8 { | |||
range "5..15"; | range "5..15"; | |||
} | } | |||
description | description | |||
"Specifies the size of the TCP header in 32-bit | "Specifies the size of the TCP header in 32-bit | |||
words. The minimum size header is 5 words and | words. The minimum size header is 5 words and | |||
the maximum is 15 words thus giving the minimum | the maximum is 15 words; thus, this gives a | |||
size of 20 bytes and maximum of 60 bytes, | minimum size of 20 bytes and a maximum of 60 | |||
allowing for up to 40 bytes of options in the | bytes, allowing for up to 40 bytes of options | |||
header."; | in the header."; | |||
} | } | |||
leaf reserved { | leaf reserved { | |||
type uint8; | type uint8; | |||
description | description | |||
"Reserved for future use."; | "Reserved for future use."; | |||
} | } | |||
leaf flags { | leaf flags { | |||
type bits { | type bits { | |||
bit cwr { | bit cwr { | |||
position 1; | position 1; | |||
description | description | |||
"Congestion Window Reduced (CWR) flag is set by | "The Congestion Window Reduced (CWR) flag is set | |||
the sending host to indicate that it received | by the sending host to indicate that it received | |||
a TCP segment with the ECE flag set and had | a TCP segment with the ECN-Echo (ECE) flag set | |||
responded in congestion control mechanism."; | and had responded in the congestion control | |||
mechanism."; | ||||
reference | reference | |||
"RFC 3168: The Addition of Explicit Congestion | "RFC 3168: The Addition of Explicit Congestion | |||
Notification (ECN) to IP."; | Notification (ECN) to IP."; | |||
} | } | |||
bit ece { | bit ece { | |||
position 2; | position 2; | |||
description | description | |||
"ECN-Echo has a dual role, depending on the value | "ECN-Echo has a dual role, depending on the value | |||
of the SYN flag. It indicates: | of the SYN flag. It indicates the following: if | |||
If the SYN flag is set (1), that the TCP peer is ECN | the SYN flag is set (1), the TCP peer is ECN | |||
capable. If the SYN flag is clear (0), that a packet | capable, and if the SYN flag is clear (0), a packet | |||
with Congestion Experienced flag set (ECN=11) in IP | with the Congestion Experienced flag set (ECN=11) | |||
header was received during normal transmission | in the IP header was received during normal | |||
(added to header by RFC 3168). This serves as an | transmission (added to the header by RFC 3168). | |||
indication of network congestion (or impending | This serves as an indication of network congestion | |||
congestion) to the TCP sender."; | (or impending congestion) to the TCP sender."; | |||
reference | reference | |||
"RFC 3168: The Addition of Explicit Congestion | "RFC 3168: The Addition of Explicit Congestion | |||
Notification (ECN) to IP."; | Notification (ECN) to IP."; | |||
} | } | |||
bit urg { | bit urg { | |||
position 3; | position 3; | |||
description | description | |||
"Indicates that the Urgent pointer field is significant."; | "Indicates that the Urgent Pointer field is significant."; | |||
} | } | |||
bit ack { | bit ack { | |||
position 4; | position 4; | |||
description | description | |||
"Indicates that the Acknowledgment field is significant. | "Indicates that the Acknowledgement field is significant. | |||
All packets after the initial SYN packet sent by the | All packets after the initial SYN packet sent by the | |||
client should have this flag set."; | client should have this flag set."; | |||
} | } | |||
bit psh { | bit psh { | |||
position 5; | position 5; | |||
description | description | |||
"Push function. Asks to push the buffered data to the | "Push function. Asks to push the buffered data to the | |||
receiving application."; | receiving application."; | |||
} | } | |||
bit rst { | bit rst { | |||
position 6; | position 6; | |||
description | description | |||
"Reset the connection."; | "Reset the connection."; | |||
} | } | |||
bit syn { | bit syn { | |||
position 7; | position 7; | |||
description | description | |||
"Synchronize sequence numbers. Only the first packet | "Synchronize sequence numbers. Only the first packet | |||
sent from each end should have this flag set. Some | sent from each end should have this flag set. Some | |||
other flags and fields change meaning based on this | other flags and fields change meaning based on this | |||
flag, and some are only valid for when it is set, | flag, and some are only valid for when it is set, | |||
and others when it is clear."; | and others when it is clear."; | |||
} | } | |||
bit fin { | bit fin { | |||
position 8; | position 8; | |||
description | description | |||
"Last package from sender."; | "Last package from the sender."; | |||
} | } | |||
} | } | |||
description | description | |||
"Also known as Control Bits. Contains 9 1-bit flags."; | "Also known as Control Bits. Contains nine 1-bit flags."; | |||
reference | reference | |||
"RFC 793: Transmission Control Protocol (TCP)."; | "RFC 793: Transmission Control Protocol."; | |||
} | } | |||
leaf window-size { | leaf window-size { | |||
type uint16; | type uint16; | |||
units "bytes"; | units "bytes"; | |||
description | description | |||
"The size of the receive window, which specifies | "The size of the receive window, which specifies | |||
the number of window size units beyond the segment | the number of window size units beyond the segment | |||
identified by the sequence number in the acknowledgment | identified by the sequence number in the Acknowledgement | |||
field that the sender of this segment is currently | field that the sender of this segment is currently | |||
willing to receive."; | willing to receive."; | |||
} | } | |||
leaf urgent-pointer { | leaf urgent-pointer { | |||
type uint16; | type uint16; | |||
description | description | |||
"This field is an offset from the sequence number | "This field is an offset from the sequence number | |||
indicating the last urgent data byte."; | indicating the last urgent data byte."; | |||
} | } | |||
leaf options { | leaf options { | |||
type binary { | type binary { | |||
length "1..40"; | length "1..40"; | |||
} | } | |||
description | description | |||
"The length of this field is determined by the | "The length of this field is determined by the | |||
data offset field. Options have up to three | Data Offset field. Options have up to three | |||
fields: Option-Kind (1 byte), Option-Length | fields: Option-Kind (1 byte), Option-Length | |||
(1 byte), Option-Data (variable). The Option-Kind | (1 byte), and Option-Data (variable). The Option-Kind | |||
field indicates the type of option, and is the | field indicates the type of option and is the | |||
only field that is not optional. Depending on | only field that is not optional. Depending on | |||
what kind of option we are dealing with, | what kind of option we are dealing with, | |||
the next two fields may be set: the Option-Length | the next two fields may be set: the Option-Length | |||
field indicates the total length of the option, | field indicates the total length of the option, | |||
and the Option-Data field contains the value of | and the Option-Data field contains the value of | |||
the option, if applicable."; | the option, if applicable."; | |||
} | } | |||
} | } | |||
grouping acl-udp-header-fields { | grouping acl-udp-header-fields { | |||
description | description | |||
"Collection of UDP header fields that can be used | "Collection of UDP header fields that can be used | |||
to setup a match filter."; | to set up a match filter."; | |||
leaf length { | leaf length { | |||
type uint16; | type uint16; | |||
description | description | |||
"A field that specifies the length in bytes of | "A field that specifies the length in bytes of | |||
the UDP header and UDP data. The minimum | the UDP header and UDP data. The minimum | |||
length is 8 bytes because that is the length of | length is 8 bytes because that is the length of | |||
the header. The field size sets a theoretical | the header. The field size sets a theoretical | |||
limit of 65,535 bytes (8 byte header + 65,527 | limit of 65,535 bytes (8-byte header plus 65,527 | |||
bytes of data) for a UDP datagram. However the | bytes of data) for a UDP datagram. However, the | |||
actual limit for the data length, which is | actual limit for the data length, which is | |||
imposed by the underlying IPv4 protocol, is | imposed by the underlying IPv4 protocol, is | |||
65,507 bytes (65,535 minus 8 byte UDP header | 65,507 bytes (65,535 minus 8-byte UDP header | |||
minus 20 byte IP header). | minus 20-byte IP header). | |||
In IPv6 jumbograms it is possible to have | In IPv6 jumbograms, it is possible to have | |||
UDP packets of size greater than 65,535 bytes. | UDP packets of a size greater than 65,535 bytes. | |||
RFC 2675 specifies that the length field is set | RFC 2675 specifies that the Length field is set | |||
to zero if the length of the UDP header plus | to zero if the length of the UDP header plus | |||
UDP data is greater than 65,535."; | UDP data is greater than 65,535."; | |||
} | } | |||
} | } | |||
grouping acl-icmp-header-fields { | grouping acl-icmp-header-fields { | |||
description | description | |||
"Collection of ICMP header fields that can be | "Collection of ICMP header fields that can be | |||
used to setup a match filter."; | used to set up a match filter."; | |||
leaf type { | leaf type { | |||
type uint8; | type uint8; | |||
description | description | |||
"Also known as Control messages."; | "Also known as control messages."; | |||
reference | reference | |||
"RFC 792: Internet Control Message Protocol (ICMP), | "RFC 792: Internet Control Message Protocol | |||
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) | |||
Specifciation."; | Specification."; | |||
} | } | |||
leaf code { | leaf code { | |||
type uint8; | type uint8; | |||
description | description | |||
"ICMP subtype. Also known as Control messages."; | "ICMP subtype. Also known as control messages."; | |||
reference | reference | |||
"RFC 792: Internet Control Message Protocol (ICMP), | "RFC 792: Internet Control Message Protocol | |||
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) | |||
Specifciation."; | 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 792: Internet Control Message Protocol (ICMP), | "RFC 792: Internet Control Message Protocol | |||
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) | |||
Specifciation."; | Specification."; | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
4.3. ACL Examples | 4.3. ACL Examples | |||
Requirement: Deny tcp traffic from 192.0.2.0/24, destined to | Requirement: Deny tcp traffic from 192.0.2.0/24, destined to | |||
198.51.100.0/24. | 198.51.100.0/24. | |||
Here is the acl configuration xml for this Access Control List: | Here is the ACL configuration xml for this Access Control List: | |||
[note: '\' line wrapping for formatting only] | [note: '\' line wrapping for formatting only] | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<acls | <acls | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | |||
<acl> | <acl> | |||
<name>sample-ipv4-acl</name> | <name>sample-ipv4-acl</name> | |||
<type>ipv4-acl-type</type> | <type>ipv4-acl-type</type> | |||
<aces> | <aces> | |||
<ace> | <ace> | |||
<name>rule1</name> | <name>rule1</name> | |||
<matches> | <matches> | |||
<ipv4> | <ipv4> | |||
<protocol>6</protocol> | <protocol>6</protocol> | |||
<destination-ipv4-network>198.51.100.0/24</destination\ | <destination-ipv4-network>198.51.100.0/24</destination\ | |||
-ipv4-network> | -ipv4-network> | |||
<source-ipv4-network>192.0.2.0/24</source-ipv4-network\ | <source-ipv4-network>192.0.2.0/24</source-ipv4-network> | |||
> | ||||
</ipv4> | </ipv4> | |||
</matches> | </matches> | |||
<actions> | <actions> | |||
<forwarding>drop</forwarding> | <forwarding>drop</forwarding> | |||
</actions> | </actions> | |||
</ace> | </ace> | |||
</aces> | </aces> | |||
</acl> | </acl> | |||
</acls> | </acls> | |||
</config> | </config> | |||
The acl and aces can be described in CLI as the following: | The ACL and ACEs can be described in the command-line interface (CLI) | |||
as the following: | ||||
acl ipv4 sample-ipv4-acl | acl ipv4 sample-ipv4-acl | |||
deny tcp 192.0.2.0/24 198.51.100.0/24 | deny tcp 192.0.2.0/24 198.51.100.0/24 | |||
Requirement: Accept all DNS traffic destined for 2001:db8::/32 on | Requirement: Accept all DNS traffic destined for 2001:db8::/32 on | |||
port 53. | port 53. | |||
[note: '\' line wrapping for formatting only] | [note: '\' line wrapping for formatting only] | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
skipping to change at page 39, line 41 ¶ | skipping to change at page 38, line 41 ¶ | |||
</actions> | </actions> | |||
</ace> | </ace> | |||
</aces> | </aces> | |||
</acl> | </acl> | |||
</acls> | </acls> | |||
</config> | </config> | |||
4.4. Port Range Usage and Other Examples | 4.4. Port Range Usage and Other Examples | |||
When a lower-port and an upper-port are both present, it represents a | When a lower-port and an upper-port are both present, it represents a | |||
range between lower-port and upper-port with both the lower-port and | range between the lower-port and upper-port with both the lower-port | |||
upper-port included. When only a port is present, it represents a | and upper-port included. When only a port is present, it represents | |||
port, with the operator specifying the range. | a port, with the operator specifying the range. | |||
The following XML example represents a configuration where TCP | The following XML example represents a configuration where TCP | |||
traffic from source ports 16384, 16385, 16386, and 16387 is dropped. | traffic from source ports 16384, 16385, 16386, and 16387 is dropped. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<acls | <acls | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | |||
<acl> | <acl> | |||
<name>sample-port-acl</name> | <name>sample-port-acl</name> | |||
skipping to change at page 41, line 33 ¶ | skipping to change at page 40, line 33 ¶ | |||
<actions> | <actions> | |||
<forwarding>drop</forwarding> | <forwarding>drop</forwarding> | |||
</actions> | </actions> | |||
</ace> | </ace> | |||
</aces> | </aces> | |||
</acl> | </acl> | |||
</acls> | </acls> | |||
</config> | </config> | |||
The following XML example represents a configuration of a single | The following XML example represents a configuration of a single | |||
port, port 21 that accepts TCP traffic. | port, port 21, that accepts TCP traffic. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<acls | <acls | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | |||
<acl> | <acl> | |||
<name>sample-ipv4-acl</name> | <name>sample-ipv4-acl</name> | |||
<type>ipv4-acl-type</type> | <type>ipv4-acl-type</type> | |||
<aces> | <aces> | |||
<ace> | <ace> | |||
skipping to change at page 42, line 33 ¶ | skipping to change at page 41, line 33 ¶ | |||
<actions> | <actions> | |||
<forwarding>accept</forwarding> | <forwarding>accept</forwarding> | |||
</actions> | </actions> | |||
</ace> | </ace> | |||
</aces> | </aces> | |||
</acl> | </acl> | |||
</acls> | </acls> | |||
</config> | </config> | |||
The following XML example represents a configuration specifying all | The following XML example represents a configuration specifying all | |||
ports that are not equal to 21, that will drop TCP packets destined | ports that are not equal to 21 that will drop TCP packets destined | |||
for those ports. | for those ports. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<acls | <acls | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-access-control-list"> | |||
<acl> | <acl> | |||
<name>sample-ipv4-acl</name> | <name>sample-ipv4-acl</name> | |||
<type>ipv4-acl-type</type> | <type>ipv4-acl-type</type> | |||
<aces> | <aces> | |||
skipping to change at page 43, line 34 ¶ | skipping to change at page 42, line 34 ¶ | |||
<forwarding>drop</forwarding> | <forwarding>drop</forwarding> | |||
</actions> | </actions> | |||
</ace> | </ace> | |||
</aces> | </aces> | |||
</acl> | </acl> | |||
</acls> | </acls> | |||
</config> | </config> | |||
5. Security Considerations | 5. Security Considerations | |||
The YANG module specified in this document defines a schema for data | The YANG modules specified in this document define a schema for data | |||
that is designed to be accessed via network management protocol such | that is designed to be accessed via network management protocol such | |||
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
is the secure transport layer and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
transport is SSH [RFC6242]. The lowest RESTCONF layer is HTTPS, and | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
the mandatory-to-implement secure transport is TLS [RFC8446]. | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
[RFC8446]. | ||||
The NETCONF Access Control Model (NACM [RFC8341]) provides the means | The NETCONF Access Control Model (NACM) [RFC8341] provides the means | |||
to restrict access for particular NETCONF users to a pre-configured | to restrict access for particular NETCONF or RESTCONF users to a | |||
subset of all available NETCONF protocol operations and content. | preconfigured subset of all available NETCONF or RESTCONF protocol | |||
operations and content. | ||||
There are a number of data nodes defined in the YANG module which are | There are a number of data nodes defined in these YANG modules that | |||
writable/creatable/deletable (i.e., config true, which is the | are writable/creatable/deletable (i.e., config true, which is the | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations (e.g., <edit-config>) | in some network environments. Write operations (e.g., edit-config) | |||
to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
effect on network operations. | effect on network operations. These are the subtrees and data nodes | |||
and their sensitivity/vulnerability: | ||||
These are the subtrees and data nodes and their sensitivity/ | ||||
vulnerability: | ||||
/acls/acl/aces: This list specifies all the configured access | /acls/acl/aces: This list specifies all the configured access | |||
control entries on the device. Unauthorized write access to this | control entries on the device. Unauthorized write access to this | |||
list can allow intruders to modify the entries so as to permit | list can allow intruders to modify the entries so as to permit | |||
traffic that should not be permitted, or deny traffic that should | traffic that should not be permitted, or deny traffic that should | |||
be permitted. The former may result in a DoS attack, or | be permitted. The former may result in a DoS attack, or | |||
compromise the device. The latter may result in a DoS attack. | compromise the device. The latter may result in a DoS attack. | |||
The impact of an unauthorized read access of the list will allow | The impact of an unauthorized read access of the list will allow | |||
the attacker to determine which rules are in effect, to better | the attacker to determine which rules are in effect, to better | |||
craft an attack. | craft an attack. | |||
skipping to change at page 44, line 31 ¶ | skipping to change at page 43, line 31 ¶ | |||
ace entries, overwhelming the server in the process. Unauthorized | ace entries, overwhelming the server in the process. Unauthorized | |||
read access of this node can allow intruders to access logging | read access of this node can allow intruders to access logging | |||
information, which could be used to craft an attack the server. | information, which could be used to craft an attack the server. | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document registers three URIs and three YANG modules. | This document registers three URIs and three YANG modules. | |||
6.1. URI Registration | 6.1. URI Registration | |||
This document registers three URIs in the IETF XML registry | This document registers three URIs in the "IETF XML Registry" | |||
[RFC3688]. Following the format in RFC 3688, the following | [RFC3688] as follows: | |||
registration is requested to be made: | ||||
URI: urn:ietf:params:xml:ns:yang:ietf-access-control-list | URI: urn:ietf:params:xml:ns:yang:ietf-access-control-list | |||
URI: urn:ietf:params:xml:ns:yang:ietf-packet-fields | URI: urn:ietf:params:xml:ns:yang:ietf-packet-fields | |||
URI: urn:ietf:params:xml:ns:yang:ietf-ethertypes | URI: urn:ietf:params:xml:ns:yang:ietf-ethertypes | |||
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 Registration | 6.2. YANG Module Name Registration | |||
This document registers three YANG module in the YANG Module Names | This document registers three YANG modules in the "YANG Module Names" | |||
registry YANG [RFC6020]. | registry [RFC6020]. | |||
name: ietf-access-control-list | Name: ietf-access-control-list | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-access-control-list | Namespace: urn:ietf:params:xml:ns:yang:ietf-access-control-list | |||
prefix: acl | Prefix: acl | |||
reference: RFC XXXX | Reference: RFC 8519 | |||
name: ietf-packet-fields | Name: ietf-packet-fields | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-packet-fields | Namespace: urn:ietf:params:xml:ns:yang:ietf-packet-fields | |||
prefix: packet-fields | Prefix: packet-fields | |||
reference: RFC XXXX | Reference: RFC 8519 | |||
name: ietf-ethertypes | Name: ietf-ethertypes | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-ethertypes | Namespace: urn:ietf:params:xml:ns:yang:ietf-ethertypes | |||
prefix: ethertypes | Prefix: ethertypes | |||
reference: RFC XXXX | Reference: RFC 8519 | |||
8. References | 7. References | |||
8.1. Normative References | 7.1. Normative References | |||
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
DOI 10.17487/RFC0791, September 1981, | DOI 10.17487/RFC0791, September 1981, | |||
<https://www.rfc-editor.org/info/rfc791>. | <https://www.rfc-editor.org/info/rfc791>. | |||
[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/info/rfc792>. | <https://www.rfc-editor.org/info/rfc792>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
skipping to change at page 47, line 14 ¶ | skipping to change at page 45, line 40 ¶ | |||
[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/info/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
[RFC8343] Bjorklund, M., "A YANG Data Model for Interface | [RFC8343] Bjorklund, M., "A YANG Data Model for Interface | |||
Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8343>. | <https://www.rfc-editor.org/info/rfc8343>. | |||
8.2. Informative References | 7.2. Informative References | |||
[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/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
[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/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
skipping to change at page 48, line 9 ¶ | skipping to change at page 46, line 37 ¶ | |||
[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/info/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
[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/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
Appendix A. Extending ACL model examples | Appendix A. Extending ACL Model Examples | |||
A.1. A company proprietary module example | A.1. Example of a Company's Proprietary Module | |||
Module "example-newco-acl" is an example of company proprietary model | The "example-newco-acl" module is an example of a company's | |||
that augments "ietf-acl" module. It shows how to use 'augment' with | proprietary model that augments the "ietf-acl" module. It shows how | |||
an XPath expression to add additional match criteria, actions, and | to use 'augment' with an XML Path Language (XPath) expression to add | |||
default actions for when no ACE matches are found. All these are | additional match criteria, actions, and default actions for when no | |||
company proprietary extensions or system feature extensions. | ACE matches are found. All these are company proprietary extensions | |||
"example-newco-acl" is just an example and it is expected that | or system feature extensions. "example-newco-acl" is just an | |||
vendors will create their own proprietary models. | example, and it is expected that vendors will create their own | |||
proprietary models. | ||||
module example-newco-acl { | module example-newco-acl { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "http://example.com/ns/example-newco-acl"; | namespace "http://example.com/ns/example-newco-acl"; | |||
prefix example-newco-acl; | prefix example-newco-acl; | |||
import ietf-access-control-list { | import ietf-access-control-list { | |||
prefix "acl"; | prefix acl; | |||
} | } | |||
organization | organization | |||
"Newco model group."; | "Newco model group."; | |||
contact | contact | |||
"abc@newco.com"; | "abc@newco.com"; | |||
description | description | |||
"This YANG module augments IETF ACL Yang."; | "This YANG module augments the IETF ACL YANG module."; | |||
revision 2018-11-06 { | revision 2019-03-04 { | |||
description | description | |||
"Creating NewCo proprietary extensions to ietf-acl model"; | "Creating NewCo proprietary extensions to the ietf-acl | |||
model."; | ||||
reference | reference | |||
"RFC XXXX: Network Access Control List (ACL) | "RFC 8519: YANG Data Model for Network Access Control | |||
YANG Data Model"; | Lists (ACLs)."; | |||
} | } | |||
augment "/acl:acls/acl:acl/" + | augment "/acl:acls/acl:acl/" | |||
"acl:aces/acl:ace/" + | + "acl:aces/acl:ace/" | |||
"acl:matches" { | + "acl:matches" { | |||
description | ||||
description "Newco proprietary simple filter matches"; | "Newco proprietary simple filter matches."; | |||
choice protocol-payload-choice { | choice protocol-payload-choice { | |||
description "Newco proprietary payload match condition"; | description | |||
"Newco proprietary payload match condition."; | ||||
list protocol-payload { | list protocol-payload { | |||
key value-keyword; | key "value-keyword"; | |||
ordered-by user; | ordered-by user; | |||
description "Match protocol payload"; | description | |||
"Match protocol payload."; | ||||
uses match-simple-payload-protocol-value; | uses match-simple-payload-protocol-value; | |||
} | } | |||
} | } | |||
choice metadata { | choice metadata { | |||
description "Newco proprietary interface match condition"; | description | |||
"Newco proprietary interface match condition."; | ||||
leaf packet-length { | leaf packet-length { | |||
type uint16; | type uint16; | |||
description "Match on packet length"; | description | |||
"Match on packet length."; | ||||
} | } | |||
} | } | |||
} | } | |||
augment "/acl:acls/acl:acl/" + | augment "/acl:acls/acl:acl/" | |||
"acl:aces/acl:ace/" + | + "acl:aces/acl:ace/" | |||
"acl:actions" { | + "acl:actions" { | |||
description "Newco proprietary simple filter actions"; | description | |||
"Newco proprietary simple filter actions."; | ||||
choice action { | choice action { | |||
description ""; | description | |||
"Newco proprietary action choices."; | ||||
case count { | case count { | |||
description "Count the packet in the named counter"; | description | |||
"Count the packet in the named counter."; | ||||
leaf count { | leaf count { | |||
type uint32; | type uint32; | |||
description "Count"; | description | |||
"Count."; | ||||
} | } | |||
} | } | |||
case policer { | case policer { | |||
description "Name of policer to use to rate-limit traffic"; | description | |||
"Name of policer used to rate-limit traffic."; | ||||
leaf policer { | leaf policer { | |||
type string; | type string; | |||
description "Name of the policer"; | description | |||
"Name of the policer."; | ||||
} | } | |||
} | } | |||
case hiearchical-policer { | case hierarchical-policer { | |||
leaf hierarchitacl-policer { | leaf hierarchical-policer { | |||
type string; | type string; | |||
description | description | |||
"Name of the hierarchical policer."; | "Name of the hierarchical policer."; | |||
} | } | |||
description | description | |||
"Name of hierarchical policer to use to | "Name of the hierarchical policer used to | |||
rate-limit traffic"; | rate-limit traffic."; | |||
} | } | |||
} | } | |||
} | } | |||
augment "/acl:acls/acl:acl" + | augment "/acl:acls/acl:acl" | |||
"/acl:aces/acl:ace/" + | + "/acl:aces/acl:ace/" | |||
"acl:actions" { | + "acl:actions" { | |||
leaf default-action { | leaf default-action { | |||
type identityref { | type identityref { | |||
base acl:forwarding-action; | base acl:forwarding-action; | |||
} | } | |||
default acl:drop; | default "acl:drop"; | |||
description | description | |||
"Actions that occur if no ace is matched."; | "Actions that occur if no ACE is matched."; | |||
} | } | |||
description | description | |||
"Newco proprietary default action"; | "Newco proprietary default action."; | |||
} | } | |||
grouping match-simple-payload-protocol-value { | grouping match-simple-payload-protocol-value { | |||
description "Newco proprietary payload"; | description | |||
"Newco proprietary payload"; | ||||
leaf value-keyword { | leaf value-keyword { | |||
type enumeration { | type enumeration { | |||
enum icmp { | enum icmp { | |||
description "Internet Control Message Protocol"; | description | |||
"Internet Control Message Protocol."; | ||||
} | } | |||
enum icmp6 { | enum icmp6 { | |||
description | description | |||
"Internet Control Message Protocol | "Internet Control Message Protocol | |||
Version 6"; | Version 6."; | |||
} | } | |||
enum range { | enum range { | |||
description "Range of values"; | description | |||
"Range of values."; | ||||
} | } | |||
} | } | |||
description "(null)"; | description | |||
"(null)."; | ||||
} | } | |||
} | } | |||
} | } | |||
The following figure is the tree diagram of example-newco-acl. In | The following figure is the tree diagram of example-newco-acl. In | |||
this example, /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace/ | this example, /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace/ | |||
ietf-acl:matches are augmented with two new choices, protocol- | ietf-acl:matches are augmented with two new choices: protocol- | |||
payload-choice and metadata. The protocol-payload-choice uses a | payload-choice and metadata. The protocol-payload-choice uses a | |||
grouping with an enumeration of all supported protocol values. | grouping with an enumeration of all supported protocol values. | |||
Metadata matches apply to fields associated with the packet but not | Metadata matches apply to fields associated with the packet, that are | |||
in the packet header such as overall packet length. In another | not in the packet header, such as overall packet length. In another | |||
example, /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace/ietf- | example, /ietf-acl:acls/ietf-acl:acl/ietf-acl:aces/ietf-acl:ace/ietf- | |||
acl:actions are augmented with a new choice of actions. | acl:actions are augmented with a new choice of actions. | |||
module: example-newco-acl | module: example-newco-acl | |||
augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches: | augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches: | |||
+--rw (protocol-payload-choice)? | +--rw (protocol-payload-choice)? | |||
| +--:(protocol-payload) | | +--:(protocol-payload) | |||
| +--rw protocol-payload* [value-keyword] | | +--rw protocol-payload* [value-keyword] | |||
| +--rw value-keyword enumeration | | +--rw value-keyword enumeration | |||
+--rw (metadata)? | +--rw (metadata)? | |||
+--:(packet-length) | +--:(packet-length) | |||
+--rw packet-length? uint16 | +--rw packet-length? uint16 | |||
augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions: | augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions: | |||
+--rw (action)? | +--rw (action)? | |||
+--:(count) | +--:(count) | |||
| +--rw count? uint32 | | +--rw count? uint32 | |||
+--:(policer) | +--:(policer) | |||
| +--rw policer? string | | +--rw policer? string | |||
+--:(hiearchical-policer) | +--:(hierarchical-policer) | |||
+--rw hierarchitacl-policer? string | +--rw hierarchical-policer? string | |||
augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions: | augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions: | |||
+--rw default-action? identityref | +--rw default-action? identityref | |||
A.2. Linux nftables | A.2. Linux nftables | |||
As Linux platform is becoming more popular as networking platform, | As the Linux platform is becoming more popular than the networking | |||
the Linux data model is changing. Previously ACLs in Linux were | platform, the Linux data model is changing. Previously, ACLs in | |||
highly protocol specific and different utilities were used (iptables, | Linux were highly protocol specific, and different utilities were | |||
ip6tables, arptables, ebtables), so each one had separate data model. | used (iptables, ip6tables, arptables, and ebtables), so each one had | |||
Recently, this has changed and a single utility, nftables, has been | a separate data model. Recently, this has changed, and a single | |||
developed. With a single application, it has a single data model for | utility, nftables, has been developed. With a single application, it | |||
filewall filters and it follows very similarly to the ietf-access- | has a single data model for firewall filters, and it follows very | |||
control list module proposed in this draft. The nftables support | similarly the ietf-access-control list module proposed in this | |||
input and output ACEs and each ACE can be defined with match and | document. The nftables support input and output ACEs, and each ACE | |||
action. | can be defined with match and action. | |||
The example in Section 4.3 can be configured using nftable tool as | The example in Section 4.3 can be configured using nftable tool as | |||
below. | below. | |||
nft add table ip filter | nft add table ip filter | |||
nft add chain filter input | nft add chain filter input | |||
nft add rule ip filter input ip protocol tcp ip saddr \ | nft add rule ip filter input ip protocol tcp ip saddr \ | |||
192.0.2.1/24 drop | 192.0.2.1/24 drop | |||
The configuration entries added in nftable would be. | The configuration entries added in nftable would be: | |||
table ip filter { | table ip filter { | |||
chain input { | chain input { | |||
ip protocol tcp ip saddr 192.0.2.1/24 drop | ip protocol tcp ip saddr 192.0.2.1/24 drop | |||
} | } | |||
} | } | |||
We can see that there are many similarities between Linux nftables | We can see that there are many similarities between Linux nftables | |||
and IETF ACL YANG data models and its extension models. It should be | and IETF ACL YANG data models and their extension models. It should | |||
fairly easy to do translation between ACL YANG model described in | be fairly easy to do translation between the ACL YANG model described | |||
this draft and Linux nftables. | in this document and Linux nftables. | |||
A.3. Ethertypes | A.3. Ethertypes | |||
The ACL module is dependent on the definition of ethertypes. IEEE | The ACL module is dependent on the definition of Ethertypes. IEEE | |||
owns the allocation of those ethertypes. This model is being | owns the allocation of those Ethertypes. This model is being | |||
included here to enable definition of those types till such time that | included here to enable the definition of those types till such time | |||
IEEE takes up the task of publication of the model that defines those | that IEEE takes up the task of publication of the model that defines | |||
ethertypes. At that time, this model can be deprecated. | those Ethertypes. At that time, this model can be deprecated. | |||
<CODE BEGINS> file "ietf-ethertypes@2018-11-06.yang" | <CODE BEGINS> file "ietf-ethertypes@2019-03-04.yang" | |||
module ietf-ethertypes { | module ietf-ethertypes { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-ethertypes"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ethertypes"; | |||
prefix ethertypes; | prefix ethertypes; | |||
organization | organization | |||
"IETF NETMOD (NETCONF Data Modeling Language)"; | "IETF NETMOD (Network Modeling) Working Group."; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
Editor: Mahesh Jethanandani | Editor: Mahesh Jethanandani | |||
<mjethanandani@gmail.com>"; | <mjethanandani@gmail.com>"; | |||
description | description | |||
"This module contains the common definitions for the | "This module contains common definitions for the | |||
Ethertype used by different modules. It is a | Ethertype used by different modules. It is a | |||
placeholder module, till such time that IEEE | placeholder module, till such time that IEEE | |||
starts a project to define these Ethertypes | starts a project to define these Ethertypes | |||
and publishes a standard. | and publishes a standard. | |||
At that time this module can be deprecated."; | At that time, this module can be deprecated. | |||
revision 2018-11-06 { | Copyright (c) 2019 IETF Trust and the persons identified as | |||
the document authors. 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 Simplified BSD | ||||
License set forth in Section 4.c of the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC 8519; see | ||||
the RFC itself for full legal notices."; | ||||
revision 2019-03-04 { | ||||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: IETF Ethertype YANG Data Module."; | "RFC 8519: YANG Data Model for Network Access Control | |||
Lists (ACLs)."; | ||||
} | } | |||
typedef ethertype { | typedef ethertype { | |||
type union { | type union { | |||
type uint16; | type uint16; | |||
type enumeration { | type enumeration { | |||
enum ipv4 { | enum ipv4 { | |||
value 2048; | value 2048; | |||
description | description | |||
"Internet Protocol version 4 (IPv4) with a | "Internet Protocol version 4 (IPv4) with a | |||
hex value of 0x0800."; | hex value of 0x0800."; | |||
reference | reference | |||
"RFC 791: Internet Protocol."; | "RFC 791: Internet Protocol."; | |||
} | } | |||
enum arp { | enum arp { | |||
value 2054; | value 2054; | |||
description | description | |||
"Address Resolution Protocol (ARP) with a | "Address Resolution Protocol (ARP) with a | |||
hex value of 0x0806."; | hex value of 0x0806."; | |||
reference | reference | |||
"RFC 826: An Ethernet Address Resolution Protocol."; | "RFC 826: An Ethernet Address Resolution Protocol: Or | |||
Converting Network Protocol Addresses to 48.bit | ||||
Ethernet Address for Transmission on Ethernet | ||||
Hardware."; | ||||
} | } | |||
enum wlan { | enum wlan { | |||
value 2114; | value 2114; | |||
description | description | |||
"Wake-on-LAN. Hex value of 0x0842."; | "Wake-on-LAN. Hex value of 0x0842."; | |||
} | } | |||
enum trill { | enum trill { | |||
value 8947; | value 8947; | |||
description | description | |||
"Transparent Interconnection of Lots of Links. | "Transparent Interconnection of Lots of Links. | |||
Hex value of 0x22F3."; | Hex value of 0x22F3."; | |||
reference | reference | |||
"RFC 6325: Routing Bridges (RBridges): Base Protocol | "RFC 6325: Routing Bridges (RBridges): Base Protocol | |||
Specification."; | Specification."; | |||
} | } | |||
enum srp { | enum srp { | |||
value 8938; | value 8938; | |||
description | description | |||
"Stream Reservation Protocol. Hex value of | "Stream Reservation Protocol. Hex value of | |||
0x22EA."; | 0x22EA."; | |||
reference | reference | |||
"IEEE 801.1Q-2011."; | "IEEE 801.1Q-2011."; | |||
} | } | |||
enum decnet { | enum decnet { | |||
value 24579; | value 24579; | |||
description | description | |||
"DECnet Phase IV. Hex value of 0x6003."; | "DECnet Phase IV. Hex value of 0x6003."; | |||
} | } | |||
enum rarp { | enum rarp { | |||
value 32821; | value 32821; | |||
description | description | |||
"Reverse Address Resolution Protocol. | "Reverse Address Resolution Protocol. | |||
Hex value 0x8035."; | Hex value 0x8035."; | |||
reference | reference | |||
"RFC 903. A Reverse Address Resolution Protocol."; | "RFC 903: A Reverse Address Resolution Protocol."; | |||
} | } | |||
enum appletalk { | enum appletalk { | |||
value 32923; | value 32923; | |||
description | description | |||
"Appletalk (Ethertalk). Hex value 0x809B."; | "Appletalk (Ethertalk). Hex value of 0x809B."; | |||
} | } | |||
enum aarp { | enum aarp { | |||
value 33011; | value 33011; | |||
description | description | |||
"Appletalk Address Resolution Protocol. Hex value | "Appletalk Address Resolution Protocol. Hex value | |||
of 0x80F3."; | of 0x80F3."; | |||
} | } | |||
enum vlan { | enum vlan { | |||
value 33024; | value 33024; | |||
description | description | |||
"VLAN-tagged frame (802.1Q) and Shortest Path | "VLAN-tagged frame (IEEE 802.1Q) and Shortest Path | |||
Bridging IEEE 802.1aq with NNI compatibility. | Bridging IEEE 802.1aq with Network-Network | |||
Hex value 0x8100."; | Interface (NNI) compatibility. Hex value of | |||
0x8100."; | ||||
reference | reference | |||
"802.1Q."; | "IEEE 802.1Q."; | |||
} | } | |||
enum ipx { | enum ipx { | |||
value 33079; | value 33079; | |||
description | description | |||
"Internetwork Packet Exchange (IPX). Hex value | "Internetwork Packet Exchange (IPX). Hex value | |||
of 0x8137."; | of 0x8137."; | |||
} | } | |||
enum qnx { | enum qnx { | |||
value 33284; | value 33284; | |||
description | description | |||
"QNX Qnet. Hex value of 0x8204."; | "QNX Qnet. Hex value of 0x8204."; | |||
} | } | |||
enum ipv6 { | enum ipv6 { | |||
value 34525; | value 34525; | |||
description | description | |||
"Internet Protocol Version 6 (IPv6). Hex value | "Internet Protocol Version 6 (IPv6). Hex value | |||
of 0x86DD."; | of 0x86DD."; | |||
reference | reference | |||
"RFC 8200: Internet Protocol, Version 6 (IPv6) | "RFC 8200: Internet Protocol, Version 6 (IPv6) | |||
Specification | Specification | |||
RFC 8201: Path MTU Discovery for IPv6."; | RFC 8201: Path MTU Discovery for IP version 6."; | |||
} | } | |||
enum efc { | enum efc { | |||
value 34824; | value 34824; | |||
description | description | |||
"Ethernet flow control using pause frames. | "Ethernet flow control using pause frames. | |||
Hex value of 0x8808"; | Hex value of 0x8808."; | |||
reference | reference | |||
"IEEE Std. 802.1Qbb."; | "IEEE 802.1Qbb."; | |||
} | } | |||
enum esp { | enum esp { | |||
value 34825; | value 34825; | |||
description | description | |||
"Ethernet Slow Protocol. Hex value of 0x8809."; | "Ethernet Slow Protocol. Hex value of 0x8809."; | |||
reference | reference | |||
"IEEE Std. 802.3-2015"; | "IEEE 802.3-2015."; | |||
} | } | |||
enum cobranet { | enum cobranet { | |||
value 34841; | value 34841; | |||
description | description | |||
"CobraNet. Hex value of 0x8819"; | "CobraNet. Hex value of 0x8819."; | |||
} | } | |||
enum mpls-unicast { | enum mpls-unicast { | |||
value 34887; | value 34887; | |||
description | description | |||
"MultiProtocol Label Switch (MPLS) unicast traffic. | "Multiprotocol Label Switching (MPLS) unicast traffic. | |||
Hex value of 0x8847."; | Hex value of 0x8847."; | |||
reference | reference | |||
"RFC 3031: Multiprotocol Label Switching Architecture."; | "RFC 3031: Multiprotocol Label Switching Architecture."; | |||
} | } | |||
enum mpls-multicast { | enum mpls-multicast { | |||
value 34888; | value 34888; | |||
description | description | |||
"MultiProtocol Label Switch (MPLS) multicast traffic. | "MPLS multicast traffic. Hex value of 0x8848."; | |||
Hex value of 0x8848."; | ||||
reference | reference | |||
"RFC 3031: Multiprotocol Label Switching Architecture."; | "RFC 3031: Multiprotocol Label Switching Architecture."; | |||
} | } | |||
enum pppoe-discovery { | enum pppoe-discovery { | |||
value 34915; | value 34915; | |||
description | description | |||
"Point-to-Point Protocol over Ethernet. Used during | "Point-to-Point Protocol over Ethernet. Used during | |||
the discovery process. Hex value of 0x8863."; | the discovery process. Hex value of 0x8863."; | |||
reference | reference | |||
"RFC 2516: A method for Transmitting PPP over Ethernet | "RFC 2516: A Method for Transmitting PPP Over Ethernet | |||
PPPoE."; | (PPPoE)."; | |||
} | } | |||
enum pppoe-session { | enum pppoe-session { | |||
value 34916; | value 34916; | |||
description | description | |||
"Point-to-Point Protocol over Ethernet. Used during | "Point-to-Point Protocol over Ethernet. Used during | |||
session stage. Hex value of 0x8864."; | session stage. Hex value of 0x8864."; | |||
reference | reference | |||
"RFC 2516: A method for Transmitting PPP over Ethernet | "RFC 2516: A Method for Transmitting PPP Over Ethernet | |||
PPPoE."; | (PPPoE)."; | |||
} | } | |||
enum intel-ans { | enum intel-ans { | |||
value 34925; | value 34925; | |||
description | description | |||
"Intel Advanced Networking Services. Hex value of | "Intel Advanced Networking Services. Hex value of | |||
0x886D."; | 0x886D."; | |||
} | } | |||
enum jumbo-frames { | enum jumbo-frames { | |||
value 34928; | value 34928; | |||
description | description | |||
"Jumbo frames or Ethernet frames with more than | "Jumbo frames or Ethernet frames with more than | |||
1500 bytes of payload, upto 9000 bytes."; | 1500 bytes of payload, up to 9000 bytes."; | |||
} | } | |||
enum homeplug { | enum homeplug { | |||
value 34939; | value 34939; | |||
description | description | |||
"Family name for the various power line | "Family name for the various power line | |||
communications. Hex value of 0x887B."; | communications. Hex value of 0x887B."; | |||
} | } | |||
enum eap { | enum eap { | |||
value 34958; | value 34958; | |||
description | description | |||
"Ethernet Access Protocol (EAP) over LAN. Hex value | "Ethernet Access Protocol (EAP) over LAN. Hex value | |||
of 0x888E."; | of 0x888E."; | |||
reference | reference | |||
"IEEE 802.1X"; | "IEEE 802.1X."; | |||
} | } | |||
enum profinet { | enum profinet { | |||
value 34962; | value 34962; | |||
description | description | |||
"PROcess FIeld Net (PROFINET). Hex value of 0x8892."; | "PROcess FIeld Net (PROFINET). Hex value of 0x8892."; | |||
} | } | |||
enum hyperscsi { | enum hyperscsi { | |||
value 34970; | value 34970; | |||
description | description | |||
"SCSI over Ethernet. Hex value of 0x889A"; | "Small Computer System Interface (SCSI) over Ethernet. | |||
Hex value of 0x889A."; | ||||
} | } | |||
enum aoe { | enum aoe { | |||
value 34978; | value 34978; | |||
description | description | |||
"Advanced Technology Advancement (ATA) over Ethernet. | "Advanced Technology Advancement (ATA) over Ethernet. | |||
Hex value of 0x88A2."; | Hex value of 0x88A2."; | |||
} | } | |||
enum ethercat { | enum ethercat { | |||
value 34980; | value 34980; | |||
description | description | |||
"Ethernet for Control Automation Technology (EtherCAT). | "Ethernet for Control Automation Technology (EtherCAT). | |||
Hex value of 0x88A4."; | Hex value of 0x88A4."; | |||
} | } | |||
enum provider-bridging { | enum provider-bridging { | |||
value 34984; | value 34984; | |||
description | description | |||
"Provider Bridging (802.1ad) and Shortest Path Bridging | "Provider Bridging (802.1ad) and Shortest Path Bridging | |||
(801.1aq). Hex value of 0x88A8."; | (801.1aq). Hex value of 0x88A8."; | |||
reference | reference | |||
"IEEE 802.1ad, IEEE 802.1aq)."; | "IEEE 802.1ad and IEEE 802.1aq)."; | |||
} | } | |||
enum ethernet-powerlink { | enum ethernet-powerlink { | |||
value 34987; | value 34987; | |||
description | description | |||
"Ethernet Powerlink. Hex value of 0x88AB."; | "Ethernet Powerlink. Hex value of 0x88AB."; | |||
} | } | |||
enum goose { | enum goose { | |||
value 35000; | value 35000; | |||
description | description | |||
"Generic Object Oriented Substation Event (GOOSE). | "Generic Object Oriented Substation Event (GOOSE). | |||
Hex value of 0x88B8."; | Hex value of 0x88B8."; | |||
reference | reference | |||
"IEC/ISO 8802-2 and 8802-3."; | "IEC/ISO 8802-2 and 8802-3."; | |||
} | } | |||
enum gse { | enum gse { | |||
value 35001; | value 35001; | |||
description | description | |||
"Generic Substation Events. Hex value of 88B9."; | "Generic Substation Events. Hex value of 88B9."; | |||
reference | reference | |||
"IEC 61850."; | "IEC 61850."; | |||
} | } | |||
enum sv { | enum sv { | |||
value 35002; | value 35002; | |||
description | description | |||
"Sampled Value Transmission. Hex value of 0x88BA."; | "Sampled Value Transmission. Hex value of 0x88BA."; | |||
reference | reference | |||
"IEC 61850."; | "IEC 61850."; | |||
} | } | |||
enum lldp { | enum lldp { | |||
value 35020; | value 35020; | |||
description | description | |||
"Link Layer Discovery Protocol (LLDP). Hex value of | "Link Layer Discovery Protocol (LLDP). Hex value of | |||
0x88CC."; | 0x88CC."; | |||
reference | reference | |||
"IEEE 802.1AB."; | "IEEE 802.1AB."; | |||
} | } | |||
enum sercos { | enum sercos { | |||
value 35021; | value 35021; | |||
description | description | |||
"Sercos Interface. Hex value of 0x88CD."; | "Sercos Interface. Hex value of 0x88CD."; | |||
} | } | |||
enum wsmp { | enum wsmp { | |||
value 35036; | value 35036; | |||
description | description | |||
"WAVE Short Message Protocl (WSMP). Hex value of | "WAVE Short Message Protocol (WSMP). Hex value of | |||
0x88DC."; | 0x88DC."; | |||
} | } | |||
enum homeplug-av-mme { | enum homeplug-av-mme { | |||
value 35041; | value 35041; | |||
description | description | |||
"HomePlug AV MME. Hex value of 88E1."; | "HomePlug AV Mobile Management Entity (MME). Hex value | |||
of 88E1."; | ||||
} | } | |||
enum mrp { | enum mrp { | |||
value 35043; | value 35043; | |||
description | description | |||
"Media Redundancy Protocol (MRP). Hex value of | "Media Redundancy Protocol (MRP). Hex value of | |||
0x88E3."; | 0x88E3."; | |||
reference | reference | |||
"IEC62439-2."; | "IEC 62439-2."; | |||
} | } | |||
enum macsec { | enum macsec { | |||
value 35045; | value 35045; | |||
description | description | |||
"MAC Security. Hex value of 0x88E5."; | "MAC Security. Hex value of 0x88E5."; | |||
reference | reference | |||
"IEEE 802.1AE."; | "IEEE 802.1AE."; | |||
} | } | |||
enum pbb { | enum pbb { | |||
value 35047; | value 35047; | |||
description | description | |||
"Provider Backbone Bridges (PBB). Hex value of | "Provider Backbone Bridges (PBB). Hex value of | |||
0x88E7."; | 0x88E7."; | |||
reference | reference | |||
"IEEE 802.1ah."; | "IEEE 802.1ah."; | |||
} | } | |||
enum cfm { | enum cfm { | |||
value 35074; | value 35074; | |||
description | description | |||
"Connectivity Fault Management (CFM). Hex value of | "Connectivity Fault Management (CFM). Hex value of | |||
0x8902."; | 0x8902."; | |||
reference | reference | |||
"IEEE 802.1ag."; | "IEEE 802.1ag."; | |||
} | } | |||
enum fcoe { | enum fcoe { | |||
value 35078; | value 35078; | |||
description | description | |||
"Fiber Channel over Ethernet (FCoE). Hex value of | "Fiber Channel over Ethernet (FCoE). Hex value of | |||
0x8906."; | 0x8906."; | |||
reference | reference | |||
"T11 FC-BB-5."; | "T11 FC-BB-5."; | |||
} | } | |||
enum fcoe-ip { | enum fcoe-ip { | |||
value 35092; | value 35092; | |||
description | description | |||
"FCoE Initialization Protocol. Hex value of 0x8914."; | "FCoE Initialization Protocol. Hex value of 0x8914."; | |||
} | } | |||
enum roce { | enum roce { | |||
value 35093; | value 35093; | |||
description | description | |||
"RDMA over Converged Ethernet (RoCE). Hex value of | "RDMA over Converged Ethernet (RoCE). Hex value of | |||
0x8915."; | 0x8915."; | |||
} | } | |||
enum tte { | enum tte { | |||
value 35101; | value 35101; | |||
description | description | |||
"TTEthernet Protocol Control Frame (TTE). Hex value | "TTEthernet Protocol Control Frame (TTE). Hex value | |||
of 0x891D."; | of 0x891D."; | |||
reference | reference | |||
"SAE AS6802."; | "SAE AS6802."; | |||
} | } | |||
enum hsr { | enum hsr { | |||
value 35119; | value 35119; | |||
description | description | |||
"High-availability Seamless Redundancy (HSR). Hex | "High-availability Seamless Redundancy (HSR). Hex | |||
value of 0x892F."; | value of 0x892F."; | |||
reference | reference | |||
"IEC 62439-3:2016."; | "IEC 62439-3:2016."; | |||
} | } | |||
} | } | |||
} | } | |||
description | description | |||
"The uint16 type placeholder is defined to enable | "The uint16 type placeholder is defined to enable | |||
users to manage their own ethertypes not | users to manage their own ethertypes not | |||
covered by the module. Otherwise the module contains | covered by the module. Otherwise, the module contains | |||
enum definitions for the more commonly used ethertypes."; | enum definitions for the more commonly used ethertypes."; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
7. Acknowledgements | Acknowledgements | |||
Alex Clemm, Andy Bierman and Lisa Huang started it by sketching out | Alex Clemm, Andy Bierman, and Lisa Huang started by sketching an | |||
an initial IETF draft in several past IETF meetings. That draft | initial draft version in several past IETF meetings. That document | |||
included an ACL YANG model structure and a rich set of match filters, | included an ACL YANG model structure and a rich set of match filters, | |||
and acknowledged contributions by Louis Fourie, Dana Blair, Tula | and it acknowledged contributions by Louis Fourie, Dana Blair, Tula | |||
Kraiser, Patrick Gili, George Serpa, Martin Bjorklund, Kent Watsen, | Kraiser, Patrick Gili, George Serpa, Martin Bjorklund, Kent Watsen, | |||
and Phil Shafer. Many people have reviewed the various earlier | and Phil Shafer. Many people have reviewed the various earlier draft | |||
drafts that made the draft went into IETF charter. | versions that made the document that went into IETF charter. | |||
Dean Bogdanovic, Kiran Agrahara Sreenivasa, Lisa Huang, and Dana | Dean Bogdanovic, Kiran Agrahara Sreenivasa, Lisa Huang, and Dana | |||
Blair each evaluated the YANG model in previous drafts separately, | Blair each evaluated the YANG model in earlier draft versions | |||
and then worked together to created a ACL draft that was supported by | separately, and then they worked together to create an ACL draft | |||
different vendors. That draft removed vendor specific features, and | version that was supported by different vendors. That document | |||
gave examples to allow vendors to extend in their own proprietary | removed vendor-specific features and gave examples that allowed | |||
ACL. The earlier draft was superseded with this updated draft and | vendors to extend their own proprietary ACLs. That earlier draft | |||
received more participation from many vendors. | version was superseded with this document and received participation | |||
from many vendors. | ||||
Authors would like to thank Jason Sterne, Lada Lhotka, Juergen | The authors would like to thank Jason Sterne, Lada Lhotka, Juergen | |||
Schoenwalder, David Bannister, Jeff Haas, Kristian Larsson and Einar | Schoenwalder, David Bannister, Jeff Haas, Kristian Larsson, and Einar | |||
Nilsen-Nygaard for their review of and suggestions to the draft. | Nilsen-Nygaard for their reviews of and suggestions for the document. | |||
Authors' Addresses | Authors' Addresses | |||
Mahesh Jethanandani | Mahesh Jethanandani | |||
VMware | VMware | |||
Email: mjethanandani@gmail.com | Email: mjethanandani@gmail.com | |||
Sonal Agarwal | Sonal Agarwal | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
End of changes. 329 change blocks. | ||||
1087 lines changed or deleted | 1101 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |