ietf-nat@2018-09-27.yang | ietf-nat@2018-12-14.yang | |||
---|---|---|---|---|
module ietf-nat { | module ietf-nat { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-nat"; | namespace "urn:ietf:params:xml:ns:yang:ietf-nat"; | |||
prefix "nat"; | prefix nat; | |||
import ietf-inet-types { | import ietf-inet-types { | |||
prefix inet; | prefix inet; | |||
reference | reference | |||
"Section 4 of RFC 6991"; | "Section 4 of RFC 6991"; | |||
} | } | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
reference | reference | |||
"Section 3 of RFC 6991"; | "Section 3 of RFC 6991"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix if; | prefix if; | |||
reference | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
} | } | |||
organization | organization | |||
"IETF OPSAWG (Operations and Management Area Working Group)"; | "IETF OPSAWG (Operations and Management Area Working Group)"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/opsawg/> | "WG Web: <https://datatracker.ietf.org/wg/opsawg/> | |||
WG List: <mailto:opsawg@ietf.org> | WG List: <mailto:opsawg@ietf.org> | |||
Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
<mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
Author: Senthil Sivakumar | Author: Senthil Sivakumar | |||
<mailto:ssenthil@cisco.com> | <mailto:ssenthil@cisco.com> | |||
Author: Christian Jacquenet | Author: Christian Jacquenet | |||
skipping to change at line 46 ¶ | skipping to change at line 42 ¶ | |||
<mailto:ssenthil@cisco.com> | <mailto:ssenthil@cisco.com> | |||
Author: Christian Jacquenet | Author: Christian Jacquenet | |||
<mailto:christian.jacquenet@orange.com> | <mailto:christian.jacquenet@orange.com> | |||
Author: Suresh Vinapamula | Author: Suresh Vinapamula | |||
<mailto:sureshk@juniper.net> | <mailto:sureshk@juniper.net> | |||
Author: Qin Wu | Author: Qin Wu | |||
<mailto:bill.wu@huawei.com>"; | <mailto:bill.wu@huawei.com>"; | |||
description | description | |||
"This module is a YANG module for NAT implementations. | "This module is a YANG module for NAT implementations. | |||
NAT44, Network Address and Protocol Translation from IPv6 | NAT44, Network Address and Protocol Translation from IPv6 | |||
Clients to IPv4 Servers (NAT64), Customer-side transLATor (CLAT), | Clients to IPv4 Servers (NAT64), customer-side translator | |||
Stateless IP/ICMP Translation (SIIT), Explicit Address Mappings | (CLAT), Stateless IP/ICMP Translation (SIIT), Explicit | |||
for Stateless IP/ICMP Translation (SIIT EAM), IPv6 Network | Address Mappings (EAM) for SIIT, IPv6 Network Prefix | |||
Prefix Translation (NPTv6), and Destination NAT are covered. | Translation (NPTv6), and Destination NAT are covered. | |||
Copyright (c) 2018 IETF Trust and the persons identified as | Copyright (c) 2018 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD License | to the license terms contained in, the Simplified BSD License | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC 8512; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
revision 2018-09-27 { | revision 2018-12-14 { | |||
description | description | |||
"Initial revision."; | "Initial revision."; | |||
reference | reference | |||
"RFC XXXX: A YANG Module for Network Address Translation | "RFC 8512: A YANG Module for Network Address Translation | |||
(NAT) and Network Prefix Translation (NPT)"; | (NAT) and Network Prefix Translation (NPT)"; | |||
} | } | |||
/* | /* | |||
* Definitions | * Definitions | |||
*/ | */ | |||
typedef percent { | typedef percent { | |||
type uint8 { | type uint8 { | |||
range "0 .. 100"; | range "0 .. 100"; | |||
} | } | |||
description | description | |||
"Percentage"; | "Percentage"; | |||
skipping to change at line 93 ¶ | skipping to change at line 87 ¶ | |||
range "0 .. 100"; | range "0 .. 100"; | |||
} | } | |||
description | description | |||
"Percentage"; | "Percentage"; | |||
} | } | |||
/* | /* | |||
* Features | * Features | |||
*/ | */ | |||
feature basic-nat44{ | feature basic-nat44 { | |||
description | description | |||
"Basic NAT44 translation is limited to IP addresses alone."; | "Basic NAT44 translation is limited to IP addresses alone."; | |||
reference | reference | |||
"RFC 3022: Traditional IP Network Address Translator | "RFC 3022: Traditional IP Network Address Translator | |||
(Traditional NAT)"; | (Traditional NAT)"; | |||
} | } | |||
feature napt44 { | feature napt44 { | |||
description | description | |||
"Network Address/Port Translator (NAPT): translation is | "Network Address Port Translator (NAPT): translation is | |||
extended to include IP addresses and transport identifiers | extended to include IP addresses and transport identifiers | |||
(such as a TCP/UDP port or ICMP query ID). | (such as a TCP/UDP port or ICMP query ID). | |||
If the internal IP address is not sufficient to uniquely | If the internal IP address is not sufficient to uniquely | |||
disambiguate NAPT44 mappings, an additional attribute is | disambiguate NAPT44 mappings, an additional attribute is | |||
required. For example, that additional attribute may | required. For example, that additional attribute may | |||
be an IPv6 address (a.k.a., DS-Lite) or | be an IPv6 address (a.k.a., DS-Lite) or | |||
a Layer 2 identifier (a.k.a., Per-Interface NAT)"; | a Layer 2 identifier (a.k.a., Per-Interface NAT)"; | |||
reference | reference | |||
"RFC 3022: Traditional IP Network Address Translator | "RFC 3022: Traditional IP Network Address Translator | |||
(Traditional NAT)"; | (Traditional NAT)"; | |||
} | } | |||
feature dst-nat { | feature dst-nat { | |||
description | description | |||
"Destination NAT is a translation that acts on the destination | "Destination NAT is a translation that acts on the destination | |||
IP address and/or destination port number. This flavor is | IP address and/or destination port number. This flavor is | |||
usually deployed in load balancers or at devices | usually deployed in load balancers or at devices | |||
in front of public servers."; | in front of public servers."; | |||
} | } | |||
feature nat64 { | feature nat64 { | |||
description | description | |||
"NAT64 translation allows IPv6-only clients to contact IPv4 | "NAT64 translation allows IPv6-only clients to contact IPv4 | |||
servers using, e.g., UDP, TCP, or ICMP. One or more | servers using, e.g., UDP, TCP, or ICMP. One or more | |||
public IPv4 addresses assigned to a NAT64 translator are | public IPv4 addresses assigned to a NAT64 translator are | |||
shared among several IPv6-only clients."; | shared among several IPv6-only clients."; | |||
reference | reference | |||
"RFC 6146: Stateful NAT64: Network Address and Protocol | "RFC 6146: Stateful NAT64: Network Address and Protocol | |||
Translation from IPv6 Clients to IPv4 Servers"; | Translation from IPv6 Clients to IPv4 Servers"; | |||
} | } | |||
feature siit { | feature siit { | |||
description | description | |||
"The Stateless IP/ICMP Translation Algorithm (SIIT), which | "The Stateless IP/ICMP Translation Algorithm (SIIT), which | |||
translates between IPv4 and IPv6 packet headers (including | translates between IPv4 and IPv6 packet headers (including | |||
ICMP headers). | ICMP headers). | |||
In the stateless mode, an IP/ICMP translator converts IPv4 | In the stateless mode, an IP/ICMP translator converts IPv4 | |||
addresses to IPv6 and vice versa solely based on the | addresses to IPv6, and vice versa, solely based on the | |||
configuration of the stateless IP/ICMP translator and | configuration of the stateless IP/ICMP translator and | |||
information contained within the packet being translated. | information contained within the packet being translated. | |||
The translator must support the stateless address mapping | The translator must support the stateless address mapping | |||
algorithm defined in RFC6052, which is the default behavior."; | algorithm defined in RFC 6052, which is the default behavior."; | |||
reference | reference | |||
"RFC 7915: IP/ICMP Translation Algorithm"; | "RFC 7915: IP/ICMP Translation Algorithm"; | |||
} | } | |||
feature clat { | feature clat { | |||
description | description | |||
"CLAT is customer-side translator that algorithmically | "CLAT is customer-side translator that algorithmically | |||
translates 1:1 private IPv4 addresses to global IPv6 addresses, | translates 1:1 private IPv4 addresses to global IPv6 | |||
and vice versa. | addresses, and vice versa. | |||
When a dedicated /64 prefix is not available for translation | When a dedicated /64 prefix is not available for translation | |||
from DHCPv6-PD, the CLAT may perform NAT44 for all IPv4 LAN | from DHCPv6-PD, the CLAT may perform NAT44 for all IPv4 LAN | |||
packets so that all the LAN-originated IPv4 packets appear | packets so that all the LAN-originated IPv4 packets appear | |||
from a single IPv4 address and are then statelessly translated | from a single IPv4 address and are then statelessly translated | |||
to one interface IPv6 address that is claimed by the CLAT via | to one interface IPv6 address that is claimed by the CLAT via | |||
the Neighbor Discovery Protocol (NDP) and defended with | the Neighbor Discovery Protocol (NDP) and defended with | |||
Duplicate Address Detection."; | Duplicate Address Detection."; | |||
reference | reference | |||
"RFC 6877: 464XLAT: Combination of Stateful and Stateless | "RFC 6877: 464XLAT: Combination of Stateful and | |||
Translation"; | Stateless Translation"; | |||
} | } | |||
feature eam { | feature eam { | |||
description | description | |||
"Explicit Address Mapping (EAM) is a bidirectional coupling | "Explicit Address Mapping (EAM) is a bidirectional coupling | |||
between an IPv4 Prefix and an IPv6 Prefix."; | between an IPv4 prefix and an IPv6 prefix."; | |||
reference | reference | |||
"RFC 7757: Explicit Address Mappings for Stateless IP/ICMP | "RFC 7757: Explicit Address Mappings for Stateless IP/ICMP | |||
Translation"; | Translation"; | |||
} | } | |||
feature nptv6 { | feature nptv6 { | |||
description | description | |||
"NPTv6 is a stateless transport-agnostic IPv6-to-IPv6 | "NPTv6 is a stateless transport-agnostic IPv6-to-IPv6 | |||
prefix translation."; | prefix translation."; | |||
reference | reference | |||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | "RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | |||
} | } | |||
skipping to change at line 251 ¶ | skipping to change at line 246 ¶ | |||
reference | reference | |||
"RFC 6877: 464XLAT: Combination of Stateful and Stateless | "RFC 6877: 464XLAT: Combination of Stateful and Stateless | |||
Translation"; | Translation"; | |||
} | } | |||
identity eam { | identity eam { | |||
base nat:nat-type; | base nat:nat-type; | |||
description | description | |||
"Identity for EAM support."; | "Identity for EAM support."; | |||
reference | reference | |||
"RFC 7757: Explicit Address Mappings for Stateless IP/ICMP | "RFC 7757: Explicit Address Mappings for Stateless IP/ICMP | |||
Translation"; | Translation"; | |||
} | } | |||
identity nptv6 { | identity nptv6 { | |||
base nat:nat-type; | base nat:nat-type; | |||
description | description | |||
"Identity for NPTv6 support."; | "Identity for NPTv6 support."; | |||
reference | reference | |||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | "RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | |||
} | } | |||
/* | ||||
* Grouping | /* | |||
*/ | * Grouping | |||
*/ | ||||
grouping port-number { | grouping port-number { | |||
description | description | |||
"An individual port number or a range of ports. | "An individual port number or a range of ports. | |||
When only start-port-number is present, | When only start-port-number is present, | |||
it represents a single port number."; | it represents a single port number."; | |||
leaf start-port-number { | leaf start-port-number { | |||
type inet:port-number; | type inet:port-number; | |||
description | description | |||
"Beginning of the port range."; | "Beginning of the port range."; | |||
reference | reference | |||
"Section 3.2.9 of RFC 8045."; | "Section 3.2.9 of RFC 8045"; | |||
} | } | |||
leaf end-port-number { | leaf end-port-number { | |||
type inet:port-number; | type inet:port-number; | |||
must '. >= ../start-port-number' { | ||||
must ". >= ../start-port-number" | error-message | |||
{ | "The end-port-number must be greater than or | |||
error-message | equal to start-port-number."; | |||
"The end-port-number must be greater than or | } | |||
equal to start-port-number."; | ||||
} | ||||
description | description | |||
"End of the port range."; | "End of the port range."; | |||
reference | reference | |||
"Section 3.2.10 of RFC 8045."; | "Section 3.2.10 of RFC 8045"; | |||
} | } | |||
} | } | |||
grouping port-set { | grouping port-set { | |||
description | description | |||
"Indicates a set of port numbers. | "Indicates a set of port numbers. | |||
It may be a simple port range, or use the Port Set ID (PSID) | It may be a simple port range, or use the Port Set | |||
algorithm to represent a range of transport layer | Identifier (PSID) algorithm to represent a range of | |||
port numbers which will be used by a NAPT."; | transport-layer port numbers that will be used by a | |||
NAPT."; | ||||
choice port-type { | choice port-type { | |||
default port-range; | default "port-range"; | |||
description | description | |||
"Port type: port-range or port-set-algo."; | "Port type: port-range or port-set-algo."; | |||
case port-range { | case port-range { | |||
uses port-number; | uses port-number; | |||
} | } | |||
case port-set-algo { | case port-set-algo { | |||
leaf psid-offset { | leaf psid-offset { | |||
type uint8 { | type uint8 { | |||
range 0..15; | range "0..15"; | |||
} | } | |||
description | description | |||
"The number of offset bits (a.k.a., 'a' bits). | "The number of offset bits (a.k.a., 'a' bits). | |||
Specifies the numeric value for the excluded port | Specifies the numeric value for the excluded port | |||
range/offset bits. | range/offset bits. | |||
Allowed values are between 0 and 15."; | Allowed values are between 0 and 15."; | |||
reference | reference | |||
"Section 5.1 of RFC 7597"; | "Section 5.1 of RFC 7597"; | |||
} | } | |||
leaf psid-len { | leaf psid-len { | |||
type uint8 { | type uint8 { | |||
range 0..15; | range "0..15"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | ||||
"The length of PSID, representing the sharing | ||||
ratio for an IPv4 address. | ||||
description | (also known as 'k'). | |||
"The length of PSID, representing the sharing | ||||
ratio for an IPv4 address. | ||||
(also known as 'k'). | ||||
The address-sharing ratio would be 2^k."; | The address-sharing ratio would be 2^k."; | |||
reference | reference | |||
"Section 5.1 of RFC 7597"; | "Section 5.1 of RFC 7597"; | |||
} | } | |||
leaf psid { | leaf psid { | |||
type uint16; | type uint16; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Port Set Identifier (PSID) value, which | "PSID value, which identifies a set | |||
identifies a set of ports algorithmically."; | of ports algorithmically."; | |||
reference | reference | |||
"Section 5.1 of RFC 7597"; | "Section 5.1 of RFC 7597"; | |||
} | } | |||
} | } | |||
reference | reference | |||
"Section 7597: Mapping of Address and Port with | "RFC 7597: Mapping of Address and Port with | |||
Encapsulation (MAP-E)"; | Encapsulation (MAP-E)"; | |||
} | } | |||
} | } | |||
grouping mapping-entry { | grouping mapping-entry { | |||
description | description | |||
"NAT mapping entry. | "NAT mapping entry. | |||
If an attribute is not stored in the mapping/session table, | If an attribute is not stored in the mapping/session table, | |||
this means the corresponding field of a packet that | it means the corresponding field of a packet that | |||
matches this entry is not rewritten by the NAT or this | matches this entry is not rewritten by the NAT or this | |||
information is not required for NAT filtering purposes."; | information is not required for NAT filtering purposes."; | |||
leaf index { | leaf index { | |||
type uint32; | type uint32; | |||
description | description | |||
"A unique identifier of a mapping entry. This identifier can be | "A unique identifier of a mapping entry. This identifier | |||
automatically assigned by the NAT instance or be explicitly | can be automatically assigned by the NAT instance or be | |||
configured."; | explicitly configured."; | |||
} | } | |||
leaf type { | leaf type { | |||
type enumeration { | type enumeration { | |||
enum "static" { | enum static { | |||
description | description | |||
"The mapping entry is explicitly configured | "The mapping entry is explicitly configured | |||
(e.g., via command-line interface)."; | (e.g., via a command-line interface)."; | |||
} | } | |||
enum dynamic-implicit { | ||||
enum "dynamic-implicit" { | ||||
description | description | |||
"This mapping is created implicitly as a side effect | "This mapping is created implicitly as a side effect | |||
of processing a packet that requires a new mapping."; | of processing a packet that requires a new mapping."; | |||
} | } | |||
enum dynamic-explicit { | ||||
enum "dynamic-explicit" { | ||||
description | description | |||
"This mapping is created as a result of an explicit | "This mapping is created as a result of an explicit | |||
request, e.g., a PCP message."; | request, e.g., a PCP message."; | |||
} | } | |||
} | } | |||
description | description | |||
"Indicates the type of a mapping entry. E.g., | "Indicates the type of mapping entry. For example, | |||
a mapping can be: static, implicit dynamic, | a mapping can be: static, implicit dynamic, | |||
or explicit dynamic."; | or explicit dynamic."; | |||
} | } | |||
leaf transport-protocol { | leaf transport-protocol { | |||
type uint8; | type uint8; | |||
description | description | |||
"Upper-layer protocol associated with this mapping. | "The upper-layer protocol associated with this mapping. | |||
Values are taken from the IANA protocol registry:: | Values are taken from the IANA Protocol Numbers registry: | |||
https://www.iana.org/assignments/protocol-numbers/ | <https://www.iana.org/assignments/protocol-numbers/>. | |||
protocol-numbers.xhtml | ||||
For example, this field contains 6 for TCP, | For example, this field contains 6 for TCP, | |||
17 for UDP, 33 for DCCP, or 132 for SCTP. | 17 for UDP, 33 for DCCP, or 132 for SCTP. | |||
If this leaf is not instantiated, then the mapping | If this leaf is not instantiated, then the mapping | |||
applies to any protocol."; | applies to any protocol."; | |||
} | } | |||
leaf internal-src-address { | leaf internal-src-address { | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"Corresponds to the source IPv4/IPv6 address/prefix | "Corresponds to the source IPv4/IPv6 address/prefix | |||
of the packet received on an internal interface."; | of the packet received on an internal interface."; | |||
} | } | |||
container internal-src-port { | container internal-src-port { | |||
description | description | |||
"Corresponds to the source port of the packet received | "Corresponds to the source port of the packet received | |||
on an internal interface. | on an internal interface. | |||
It is used also to indicate the internal source ICMP | It is also used to indicate the internal source ICMP | |||
identifier. | identifier. | |||
As a reminder, all the ICMP Query messages contain | As a reminder, all the ICMP Query messages contain | |||
an 'Identifier' field, which is referred to in this | an 'Identifier' field, which is referred to in this | |||
document as the 'ICMP Identifier'."; | document as the 'ICMP Identifier'."; | |||
uses port-number; | ||||
uses port-number; | ||||
} | } | |||
leaf external-src-address { | leaf external-src-address { | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"Source IP address/prefix of the packet sent on an | "Source IP address/prefix of the packet sent on an | |||
external interface of the NAT."; | external interface of the NAT."; | |||
} | } | |||
container external-src-port { | container external-src-port { | |||
description | description | |||
"Source port of the packet sent on an external | "Source port of the packet sent on an external | |||
interface of the NAT. | interface of the NAT. | |||
It is used also to indicate the external source ICMP | It is also used to indicate the external source ICMP | |||
identifier."; | identifier."; | |||
uses port-number; | uses port-number; | |||
} | } | |||
leaf internal-dst-address { | leaf internal-dst-address { | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"Corresponds to the destination IP address/prefix | "Corresponds to the destination IP address/prefix | |||
of the packet received on an internal interface | of the packet received on an internal interface | |||
of the NAT. | of the NAT. | |||
For example, some NAT implementations support | For example, some NAT implementations support | |||
the translation of both source and destination | the translation of both source and destination | |||
addresses and port numbers, sometimes referred to | addresses and port numbers, sometimes referred to | |||
skipping to change at line 474 ¶ | skipping to change at line 445 ¶ | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"Corresponds to the destination IP address/prefix | "Corresponds to the destination IP address/prefix | |||
of the packet received on an internal interface | of the packet received on an internal interface | |||
of the NAT. | of the NAT. | |||
For example, some NAT implementations support | For example, some NAT implementations support | |||
the translation of both source and destination | the translation of both source and destination | |||
addresses and port numbers, sometimes referred to | addresses and port numbers, sometimes referred to | |||
as 'Twice NAT'."; | as 'Twice NAT'."; | |||
} | } | |||
container internal-dst-port { | container internal-dst-port { | |||
description | description | |||
"Corresponds to the destination port of the | "Corresponds to the destination port of the | |||
IP packet received on the internal interface. | IP packet received on the internal interface. | |||
It is used also to include the internal | It is also used to include the internal | |||
destination ICMP identifier."; | destination ICMP identifier."; | |||
uses port-number; | uses port-number; | |||
} | } | |||
leaf external-dst-address { | leaf external-dst-address { | |||
type inet:ip-prefix; | type inet:ip-prefix; | |||
description | description | |||
"Corresponds to the destination IP address/prefix | "Corresponds to the destination IP address/prefix | |||
of the packet sent on an external interface | of the packet sent on an external interface | |||
of the NAT."; | of the NAT."; | |||
} | } | |||
container external-dst-port { | container external-dst-port { | |||
description | description | |||
"Corresponds to the destination port number of | "Corresponds to the destination port number of | |||
the packet sent on the external interface | the packet sent on the external interface | |||
of the NAT. | of the NAT. | |||
It is used also to include the external | It is also used to include the external | |||
destination ICMP identifier."; | destination ICMP identifier."; | |||
uses port-number; | uses port-number; | |||
} | } | |||
leaf lifetime { | leaf lifetime { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
description | description | |||
"When specified, it is used to track the connection that is | "When specified, it is used to track the connection that is | |||
fully-formed (e.g., once the three-way handshake | fully formed (e.g., once the three-way handshake | |||
TCP is completed) or the duration for maintaining | TCP is completed) or the duration for maintaining | |||
an explicit mapping alive. The mapping entry will be | an explicit mapping alive. The mapping entry will be | |||
removed by the NAT instance once this lifetime is expired. | removed by the NAT instance once this lifetime is expired. | |||
When reported in a get operation, the lifetime indicates | When reported in a get operation, the lifetime indicates | |||
the remaining validity lifetime. | the remaining validity lifetime. | |||
Static mappings may not be associated with a | Static mappings may not be associated with a | |||
lifetime. If no lifetime is associated with a | lifetime. If no lifetime is associated with a | |||
static mapping, an explicit action is required to | static mapping, an explicit action is required to | |||
remove that mapping."; | remove that mapping."; | |||
} | } | |||
} | } | |||
/* | /* | |||
* NAT Module | * NAT Module | |||
*/ | */ | |||
container nat { | container nat { | |||
description | description | |||
"NAT module"; | "NAT module"; | |||
container instances { | container instances { | |||
description | description | |||
"NAT instances"; | "NAT instances"; | |||
list instance { | list instance { | |||
key "id"; | key "id"; | |||
description | description | |||
"A NAT instance. This identifier can be automatically assigned | "A NAT instance. This identifier can be automatically | |||
or explicitly configured."; | assigned or explicitly configured."; | |||
leaf id { | leaf id { | |||
type uint32; | type uint32; | |||
must ". >= 1"; | must '. >= 1'; | |||
description | description | |||
"NAT instance identifier. | "NAT instance identifier. | |||
The identifier must be greater than zero."; | The identifier must be greater than zero."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects for Network | "RFC 7659: Definitions of Managed Objects for Network | |||
Address Translators (NATs)"; | Address Translators (NATs)"; | |||
} | } | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"A name associated with the NAT instance."; | "A name associated with the NAT instance."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects for Network | "RFC 7659: Definitions of Managed Objects for Network | |||
Address Translators (NATs)"; | Address Translators (NATs)"; | |||
} | } | |||
leaf enable { | leaf enable { | |||
type boolean; | type boolean; | |||
description | description | |||
"Status of the NAT instance."; | "Status of the NAT instance."; | |||
} | } | |||
container capabilities { | container capabilities { | |||
config false; | config false; | |||
description | description | |||
"NAT capabilities"; | "NAT capabilities."; | |||
leaf-list nat-flavor { | leaf-list nat-flavor { | |||
type identityref { | type identityref { | |||
base nat-type; | base nat-type; | |||
} | } | |||
description | description | |||
"Supported translation type(s)."; | "Supported translation type(s)."; | |||
} | } | |||
leaf-list per-interface-binding { | leaf-list per-interface-binding { | |||
type enumeration { | type enumeration { | |||
enum "unsupported" { | enum unsupported { | |||
description | description | |||
"No capability to associate a NAT binding with | "No capability to associate a NAT binding with | |||
an extra identifier."; | an extra identifier."; | |||
} | ||||
enum layer-2 { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
a Layer 2 identifier."; | ||||
} | ||||
enum dslite { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
an IPv6 address (a.k.a., DS-Lite)."; | ||||
} | ||||
} | } | |||
enum "layer-2" { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
a layer-2 identifier."; | ||||
} | ||||
enum "dslite" { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
an IPv6 address (a.k.a., DS-Lite)."; | ||||
} | ||||
} | ||||
description | ||||
"Indicates the capability of a NAT to associate a particular | ||||
NAT session not only with the five tuples used for the | ||||
transport connection on both sides of the NAT but also with | ||||
the internal interface on which the user device is | ||||
connected to the NAT."; | ||||
reference | ||||
"Section 4 of RFC 6619"; | ||||
} | ||||
list transport-protocols { | ||||
key protocol-id; | ||||
description | ||||
"List of supported protocols."; | ||||
leaf protocol-id { | ||||
type uint8; | ||||
mandatory true; | ||||
description | description | |||
"Upper-layer protocol associated with a mapping. | "Indicates the capability of a NAT to associate a | |||
particular NAT session not only with the five | ||||
Values are taken from the IANA protocol registry. | tuples used for the transport connection on both | |||
sides of the NAT but also with the internal | ||||
For example, this field contains 6 for TCP, | interface on which the user device is | |||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | connected to the NAT."; | |||
reference | ||||
"Section 4 of RFC 6619"; | ||||
} | } | |||
list transport-protocols { | ||||
leaf protocol-name { | key "protocol-id"; | |||
type string; | ||||
description | description | |||
"The name of the Upper-layer protocol associated | "List of supported protocols."; | |||
with this mapping. | leaf protocol-id { | |||
type uint8; | ||||
For example, TCP, UDP, DCCP, and SCTP."; | mandatory true; | |||
} | ||||
} | ||||
leaf restricted-port-support { | ||||
type boolean; | ||||
description | ||||
"Indicates source port NAT restriction support."; | ||||
reference | ||||
"RFC 7596: Lightweight 4over6: An Extension to | ||||
the Dual-Stack Lite Architecture."; | ||||
} | ||||
leaf static-mapping-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether static mappings are supported."; | ||||
} | ||||
leaf port-randomization-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether port randomization is supported."; | ||||
reference | ||||
"Section 4.2.1 of RFC 4787."; | ||||
} | ||||
leaf port-range-allocation-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether port range allocation is supported."; | ||||
reference | ||||
"Section 1.1 of RFC 7753."; | ||||
} | ||||
leaf port-preservation-suport { | ||||
type boolean; | ||||
description | ||||
"Indicates whether port preservation is supported."; | ||||
reference | ||||
"Section 4.2.1 of RFC 4787."; | ||||
} | ||||
leaf port-parity-preservation-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether port parity preservation is | ||||
supported."; | ||||
reference | ||||
"Section 8 of RFC 7857."; | ||||
} | ||||
leaf address-roundrobin-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address allocation round robin is | ||||
supported."; | ||||
} | ||||
leaf paired-address-pooling-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether paired-address-pooling is | ||||
supported"; | ||||
reference | ||||
"REQ-2 of RFC 4787."; | ||||
} | ||||
leaf endpoint-independent-mapping-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether endpoint-independent- | ||||
mapping is supported."; | ||||
reference | ||||
"Section 4 of RFC 4787."; | ||||
} | ||||
leaf address-dependent-mapping-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-dependent-mapping is | ||||
supported."; | ||||
reference | ||||
"Section 4 of RFC 4787."; | ||||
} | ||||
leaf address-and-port-dependent-mapping-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-and-port-dependent-mapping is | ||||
supported."; | ||||
reference | ||||
"Section 4 of RFC 4787."; | ||||
} | ||||
leaf endpoint-independent-filtering-support { | ||||
type boolean; | ||||
description | ||||
"Indicates whether endpoint-independent-filtering is | ||||
supported."; | ||||
reference | ||||
"Section 5 of RFC 4787."; | ||||
} | ||||
leaf address-dependent-filtering { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-dependent-filtering is | ||||
supported."; | ||||
reference | ||||
"Section 5 of RFC 4787."; | ||||
} | ||||
leaf address-and-port-dependent-filtering { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-and-port-dependent is | ||||
supported."; | ||||
reference | ||||
"Section 5 of RFC 4787."; | ||||
} | ||||
leaf fragment-behavior { | ||||
type enumeration { | ||||
enum "unsupported" { | ||||
description | description | |||
"No capability to translate incoming fragments. | "The upper-layer protocol associated with a mapping. | |||
All received fragments are dropped."; | ||||
} | ||||
enum "in-order" { | Values are taken from the IANA Protocol Numbers | |||
description | registry. | |||
"The NAT instance is able to translate fragments only if | ||||
they are received in order. That is, in particular the | ||||
header is in the first packet. Fragments received | ||||
out of order are dropped. "; | ||||
} | ||||
enum "out-of-order" { | For example, this field contains 6 for TCP, | |||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | ||||
} | ||||
leaf protocol-name { | ||||
type string; | ||||
description | description | |||
"The NAT instance is able to translate a fragment even | "The name of the upper-layer protocol associated | |||
if it is received out of order. | with this mapping. | |||
This behavior is recommended."; | For example, TCP, UDP, DCCP, and SCTP."; | |||
reference | ||||
"REQ-14 of RFC 4787"; | ||||
} | } | |||
} | } | |||
description | leaf restricted-port-support { | |||
"The fragment behavior is the NAT instance's capability to | type boolean; | |||
translate fragments received on the external interface of | ||||
the NAT."; | ||||
} | ||||
} | ||||
leaf type { | ||||
type identityref { | ||||
base nat-type; | ||||
} | ||||
description | ||||
"Specify the translation type. Particularly useful when | ||||
multiple translation flavors are supported. | ||||
If one type is supported by a NAT, this parameter is by | ||||
default set to that type."; | ||||
} | ||||
leaf per-interface-binding { | ||||
type enumeration { | ||||
enum "disabled" { | ||||
description | description | |||
"Disable the capability to associate an extra identifier | "Indicates source port NAT restriction support."; | |||
with NAT mappings."; | reference | |||
"RFC 7596: Lightweight 4over6: An Extension to | ||||
the Dual-Stack Lite Architecture"; | ||||
} | } | |||
leaf static-mapping-support { | ||||
enum "layer-2" { | type boolean; | |||
description | description | |||
"The NAT instance is able to associate a mapping with | "Indicates whether static mappings are supported."; | |||
a layer-2 identifier."; | ||||
} | } | |||
leaf port-randomization-support { | ||||
enum "dslite" { | type boolean; | |||
description | description | |||
"The NAT instance is able to associate a mapping with | "Indicates whether port randomization is supported."; | |||
an IPv6 address (a.k.a., DS-Lite)."; | reference | |||
"Section 4.2.1 of RFC 4787"; | ||||
} | } | |||
} | leaf port-range-allocation-support { | |||
description | type boolean; | |||
"A NAT that associates a particular NAT session not only with | description | |||
the five tuples used for the transport connection on both | "Indicates whether port range allocation is supported."; | |||
sides of the NAT but also with the internal interface on | ||||
which the user device is connected to the NAT. | ||||
If supported, this mode of operation should be configurable, | ||||
and it should be disabled by default in general-purpose NAT | ||||
devices. | ||||
If one single per-interface binding behavior is supported by | ||||
a NAT, this parameter is by default set to that behavior."; | ||||
reference | ||||
"Section 4 of RFC 6619"; | ||||
} | ||||
list nat-pass-through { | ||||
if-feature "basic-nat44 or napt44 or dst-nat"; | ||||
key id; | ||||
description | ||||
"IP prefix NAT pass through."; | ||||
leaf id { | ||||
type uint32; | ||||
description | ||||
"An identifier of the IP prefix pass through."; | ||||
} | ||||
leaf prefix { | ||||
type inet:ip-prefix; | ||||
mandatory true; | ||||
description | ||||
"The IP addresses that match should not be translated. | ||||
It must be possible to administratively turn | ||||
off translation for specific destination addresses | ||||
and/or ports."; | ||||
reference | ||||
"REQ#6 of RFC 6888."; | ||||
} | ||||
leaf port { | ||||
type inet:port-number; | ||||
description | ||||
"It must be possible to administratively turn off | ||||
translation for specific destination addresses | ||||
and/or ports. | ||||
If no prefix is defined, the NAT pass through bound | ||||
to a given port applies for any destination address."; | ||||
reference | ||||
"REQ#6 of RFC 6888."; | ||||
} | ||||
} | ||||
list policy { | ||||
key id; | ||||
description | ||||
"NAT parameters for a given instance"; | ||||
leaf id { | ||||
type uint32; | ||||
description | ||||
"An identifier of the NAT policy. It must be unique | ||||
within the NAT instance."; | ||||
} | ||||
container clat-parameters { | ||||
if-feature clat; | ||||
description | ||||
"CLAT parameters."; | ||||
list clat-ipv6-prefixes { | ||||
key ipv6-prefix; | ||||
description | ||||
"464XLAT double translation treatment is stateless when a | ||||
dedicated /64 is available for translation on the CLAT. | ||||
Otherwise, the CLAT will have both stateful and stateless | ||||
since it requires NAT44 from the LAN to a single IPv4 | ||||
address and then stateless translation to a single | ||||
IPv6 address."; | ||||
reference | reference | |||
"RFC 6877: 464XLAT: Combination of Stateful and Stateless | "Section 1.1 of RFC 7753"; | |||
Translation"; | ||||
leaf ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
description | ||||
"An IPv6 prefix used for CLAT."; | ||||
} | ||||
} | } | |||
leaf port-preservation-suport { | ||||
list ipv4-prefixes { | type boolean; | |||
key ipv4-prefix; | ||||
description | description | |||
"Pool of IPv4 addresses used for CLAT. | "Indicates whether port preservation is supported."; | |||
192.0.0.0/29 is the IPv4 service continuity prefix."; | ||||
reference | reference | |||
"RFC 7335: IPv4 Service Continuity Prefix"; | "Section 4.2.1 of RFC 4787"; | |||
} | ||||
leaf ipv4-prefix { | leaf port-parity-preservation-support { | |||
type inet:ipv4-prefix; | type boolean; | |||
description | ||||
"464XLAT double translation treatment is | ||||
stateless when a dedicated /64 is available | ||||
for translation on the CLAT. Otherwise, the | ||||
CLAT will have both stateful and stateless | ||||
since it requires NAT44 from the LAN to | ||||
a single IPv4 address and then stateless | ||||
translation to a single IPv6 address. | ||||
The CLAT performs NAT44 for all IPv4 LAN | ||||
packets so that all the LAN-originated IPv4 | ||||
packets appear from a single IPv4 address | ||||
and are then statelessly translated to one | ||||
interface IPv6 address that is claimed by | ||||
the CLAT. | ||||
An IPv4 address from this pool is also | ||||
provided to an application that makes | ||||
use of literals."; | ||||
reference | ||||
"RFC 6877: 464XLAT: Combination of Stateful and Stateless | ||||
Translation"; | ||||
} | ||||
} | ||||
} | ||||
list nptv6-prefixes { | ||||
if-feature nptv6; | ||||
key internal-ipv6-prefix ; | ||||
description | ||||
"Provides one or a list of (internal IPv6 prefix, | ||||
external IPv6 prefix) required for NPTv6. | ||||
In its simplest form, NPTv6 interconnects two network | ||||
links, one of which is an 'internal' network link | ||||
attached to a leaf network within a single | ||||
administrative domain and the other of which is an | ||||
'external' network with connectivity to the global | ||||
Internet."; | ||||
reference | ||||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | ||||
leaf internal-ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | description | |||
"An IPv6 prefix used by an internal interface of NPTv6."; | "Indicates whether port parity preservation is | |||
supported."; | ||||
reference | reference | |||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | "Section 8 of RFC 7857"; | |||
} | ||||
leaf external-ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | ||||
"An IPv6 prefix used by the external interface of NPTv6."; | ||||
reference | ||||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | ||||
} | ||||
} | ||||
list eam { | ||||
if-feature eam; | ||||
key ipv4-prefix; | ||||
description | ||||
"The Explicit Address Mapping Table, a conceptual | ||||
table in which each row represents an EAM. | ||||
Each EAM describes a mapping between IPv4 and IPv6 | ||||
prefixes/addresses."; | ||||
reference | ||||
"Section 3.1 of RFC 7757."; | ||||
leaf ipv4-prefix { | ||||
type inet:ipv4-prefix; | ||||
mandatory true; | ||||
description | ||||
"The IPv4 prefix of an EAM."; | ||||
reference | ||||
"Section 3.2 of RFC 7757."; | ||||
} | ||||
leaf ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | ||||
"The IPv6 prefix of an EAM."; | ||||
reference | ||||
"Section 3.2 of RFC 7757."; | ||||
} | ||||
} | ||||
list nat64-prefixes { | ||||
if-feature "siit or nat64 or clat"; | ||||
key nat64-prefix; | ||||
description | ||||
"Provides one or a list of NAT64 prefixes | ||||
with or without a list of destination IPv4 prefixes. | ||||
It allows mapping IPv4 address ranges to IPv6 prefixes. | ||||
For example: | ||||
192.0.2.0/24 is mapped to 2001:db8:122:300::/56. | ||||
198.51.100.0/24 is mapped to 2001:db8:122::/48."; | ||||
reference | ||||
"Section 5.1 of RFC 7050."; | ||||
leaf nat64-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | ||||
"A NAT64 prefix. Can be Network-Specific Prefix (NSP) or | ||||
Well-Known Prefix (WKP). | ||||
Organizations deploying stateless IPv4/IPv6 translation | ||||
should assign a Network-Specific Prefix to their | ||||
IPv4/IPv6 translation service. | ||||
For stateless NAT64, IPv4-translatable IPv6 addresses | ||||
must use the selected Network-Specific Prefix. | ||||
Both IPv4-translatable IPv6 addresses and IPv4-converted | ||||
IPv6 addresses should use the same prefix."; | ||||
reference | ||||
"Sections 3.3 and 3.4 of RFC 6052."; | ||||
} | ||||
list destination-ipv4-prefix { | ||||
key ipv4-prefix; | ||||
description | ||||
"An IPv4 prefix/address."; | ||||
leaf ipv4-prefix { | ||||
type inet:ipv4-prefix; | ||||
description | ||||
"An IPv4 address/prefix."; | ||||
} | ||||
} | } | |||
leaf address-roundrobin-support { | ||||
leaf stateless-enable { | ||||
type boolean; | type boolean; | |||
default false; | ||||
description | description | |||
"Enable explicitly stateless NAT64."; | "Indicates whether address allocation round robin is | |||
} | supported."; | |||
} | } | |||
leaf paired-address-pooling-support { | ||||
list external-ip-address-pool { | type boolean; | |||
if-feature "basic-nat44 or napt44 or nat64"; | ||||
key pool-id; | ||||
description | ||||
"Pool of external IP addresses used to service internal | ||||
hosts. | ||||
A pool is a set of IP prefixes."; | ||||
leaf pool-id { | ||||
type uint32; | ||||
must ". >= 1"; | ||||
description | ||||
"An identifier that uniquely identifies the address pool | ||||
within a NAT instance. | ||||
The identifier must be greater than zero."; | ||||
reference | ||||
"RFC 7659: Definitions of Managed Objects for | ||||
Network Address Translators (NATs)"; | ||||
} | ||||
leaf external-ip-pool { | ||||
type inet:ipv4-prefix; | ||||
mandatory true; | ||||
description | ||||
"An IPv4 prefix used for NAT purposes."; | ||||
} | ||||
} | ||||
container port-set-restrict { | ||||
if-feature "napt44 or nat64"; | ||||
description | ||||
"Configures contiguous and non-contiguous port ranges. | ||||
The port set is used to restrict the external source | ||||
port numbers used by the translator."; | ||||
uses port-set; | ||||
} | ||||
leaf dst-nat-enable { | ||||
if-feature "basic-nat44 or napt44"; | ||||
type boolean; | ||||
default false; | ||||
description | ||||
"Enable/Disable destination NAT. | ||||
A NAT44 may be configured to enable Destination | ||||
NAT, too."; | ||||
} | ||||
list dst-ip-address-pool { | ||||
if-feature dst-nat; | ||||
key pool-id; | ||||
description | ||||
"Pool of IP addresses used for destination NAT."; | ||||
leaf pool-id { | ||||
type uint32; | ||||
description | description | |||
"An identifier of the address pool."; | "Indicates whether paired-address-pooling is | |||
supported"; | ||||
reference | ||||
"REQ-2 of RFC 4787"; | ||||
} | } | |||
leaf endpoint-independent-mapping-support { | ||||
leaf dst-in-ip-pool { | type boolean; | |||
type inet:ip-prefix; | ||||
description | description | |||
"Is used to identify an internal destination | "Indicates whether endpoint-independent- | |||
IP prefix/address to be translated."; | mapping is supported."; | |||
reference | ||||
"Section 4 of RFC 4787"; | ||||
} | } | |||
leaf address-dependent-mapping-support { | ||||
leaf dst-out-ip-pool { | type boolean; | |||
type inet:ip-prefix; | ||||
mandatory true; | ||||
description | description | |||
"IP address/prefix used for destination NAT."; | "Indicates whether address-dependent-mapping is | |||
supported."; | ||||
reference | ||||
"Section 4 of RFC 4787"; | ||||
} | } | |||
} | leaf address-and-port-dependent-mapping-support { | |||
type boolean; | ||||
list transport-protocols { | ||||
if-feature "napt44 or nat64 or dst-nat"; | ||||
key protocol-id; | ||||
description | ||||
"Configure the transport protocols to be handled by | ||||
the translator. | ||||
TCP and UDP are supported by default."; | ||||
leaf protocol-id { | ||||
type uint8; | ||||
mandatory true; | ||||
description | description | |||
"Upper-layer protocol associated with this mapping. | "Indicates whether address-and-port-dependent-mapping is | |||
supported."; | ||||
Values are taken from the IANA protocol registry. | reference | |||
"Section 4 of RFC 4787"; | ||||
For example, this field contains 6 for TCP, | ||||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | ||||
} | } | |||
leaf endpoint-independent-filtering-support { | ||||
leaf protocol-name { | type boolean; | |||
type string; | ||||
description | description | |||
"The name of the Upper-layer protocol associated | "Indicates whether endpoint-independent-filtering is | |||
with this mapping. | supported."; | |||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
leaf address-dependent-filtering { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-dependent-filtering is | ||||
supported."; | ||||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
leaf address-and-port-dependent-filtering { | ||||
type boolean; | ||||
description | ||||
"Indicates whether address-and-port-dependent is | ||||
supported."; | ||||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
leaf fragment-behavior { | ||||
type enumeration { | ||||
enum unsupported { | ||||
description | ||||
"No capability to translate incoming fragments. | ||||
All received fragments are dropped."; | ||||
} | ||||
enum in-order { | ||||
description | ||||
"The NAT instance is able to translate fragments | ||||
only if they are received in order. That is, in | ||||
particular the header is in the first packet. | ||||
Fragments received out of order are dropped. "; | ||||
} | ||||
enum out-of-order { | ||||
description | ||||
"The NAT instance is able to translate a fragment even | ||||
if it is received out of order. | ||||
For example, TCP, UDP, DCCP, and SCTP."; | This behavior is recommended."; | |||
reference | ||||
"REQ-14 of RFC 4787"; | ||||
} | ||||
} | ||||
description | ||||
"The fragment behavior is the NAT instance's capability to | ||||
translate fragments received on the external interface of | ||||
the NAT."; | ||||
} | } | |||
} | } | |||
leaf type { | ||||
leaf subscriber-mask-v6 { | type identityref { | |||
type uint8 { | base nat-type; | |||
range "0 .. 128"; | ||||
} | } | |||
description | description | |||
"The subscriber mask is an integer that indicates | "Specify the translation type. Particularly useful when | |||
the length of significant bits to be applied on | multiple translation flavors are supported. | |||
the source IPv6 address (internal side) to | ||||
unambiguously identify a user device (e.g., CPE). | ||||
Subscriber mask is a system-wide configuration | ||||
parameter that is used to enforce generic | ||||
per-subscriber policies (e.g., port-quota). | ||||
The enforcement of these generic policies does not | ||||
require the configuration of every subscriber's | ||||
prefix. | ||||
Example: suppose the 2001:db8:100:100::/56 prefix | If one type is supported by a NAT, this parameter is by | |||
is assigned to a NAT64 serviced CPE. Suppose also | default set to that type."; | |||
that 2001:db8:100:100::1 is the IPv6 address used | ||||
by the client that resides in that CPE. When the | ||||
NAT64 receives a packet from this client, | ||||
it applies the subscriber-mask-v6 (e.g., 56) on | ||||
the source IPv6 address to compute the associated | ||||
prefix for this client (2001:db8:100:100::/56). | ||||
Then, the NAT64 enforces policies based on that | ||||
prefix (2001:db8:100:100::/56), not on the exact | ||||
source IPv6 address."; | ||||
} | } | |||
leaf per-interface-binding { | ||||
type enumeration { | ||||
enum disabled { | ||||
description | ||||
"Disable the capability to associate an extra identifier | ||||
with NAT mappings."; | ||||
} | ||||
enum layer-2 { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
a Layer 2 identifier."; | ||||
} | ||||
enum dslite { | ||||
description | ||||
"The NAT instance is able to associate a mapping with | ||||
an IPv6 address (a.k.a., DS-Lite)."; | ||||
} | ||||
} | ||||
description | ||||
"A NAT that associates a particular NAT session not | ||||
only with the five tuples used for the transport | ||||
connection on both sides of the NAT but also with | ||||
the internal interface on which the user device is | ||||
connected to the NAT. | ||||
list subscriber-match { | If supported, this mode of operation should be | |||
configurable, and it should be disabled by default in | ||||
general-purpose NAT devices. | ||||
If one single per-interface binding behavior is | ||||
supported by a NAT, this parameter is by default set to | ||||
that behavior."; | ||||
reference | ||||
"Section 4 of RFC 6619"; | ||||
} | ||||
list nat-pass-through { | ||||
if-feature "basic-nat44 or napt44 or dst-nat"; | if-feature "basic-nat44 or napt44 or dst-nat"; | |||
key match-id; | key "id"; | |||
description | description | |||
"IP prefix match. | "IP prefix NAT pass-through."; | |||
A subscriber is identified by a subnet."; | leaf id { | |||
leaf match-id { | ||||
type uint32; | type uint32; | |||
description | description | |||
"An identifier of the subscriber match."; | "An identifier of the IP prefix pass-through."; | |||
} | } | |||
leaf prefix { | ||||
leaf subnet { | ||||
type inet:ip-prefix; | type inet:ip-prefix; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The IP address subnets that match | "The IP addresses that match should not be translated. | |||
should be translated. E.g., all addresses | ||||
that belong to the 192.0.2.0/24 prefix must | ||||
be processed by the NAT."; | ||||
} | ||||
} | ||||
leaf address-allocation-type { | It must be possible to administratively turn | |||
type enumeration { | off translation for specific destination addresses | |||
enum "arbitrary" { | and/or ports."; | |||
if-feature "basic-nat44 or napt44 or nat64"; | reference | |||
description | "REQ-6 of RFC 6888"; | |||
"Arbitrary pooling behavior means that the NAT | } | |||
instance may create the new port mapping using any | leaf port { | |||
address in the pool that has a free port for the | type inet:port-number; | |||
protocol concerned."; | description | |||
} | "It must be possible to administratively turn off | |||
translation for specific destination addresses | ||||
and/or ports. | ||||
enum "roundrobin" { | If no prefix is defined, the NAT pass-through bound | |||
if-feature "basic-nat44 or napt44 or nat64"; | to a given port applies for any destination address."; | |||
reference | ||||
"REQ-6 of RFC 6888"; | ||||
} | ||||
} | ||||
list policy { | ||||
key "id"; | ||||
description | ||||
"NAT parameters for a given instance"; | ||||
leaf id { | ||||
type uint32; | ||||
description | ||||
"An identifier of the NAT policy. It must be unique | ||||
within the NAT instance."; | ||||
} | ||||
container clat-parameters { | ||||
if-feature "clat"; | ||||
description | ||||
"CLAT parameters."; | ||||
list clat-ipv6-prefixes { | ||||
key "ipv6-prefix"; | ||||
description | description | |||
"Round robin allocation."; | "464XLAT double-translation treatment is stateless | |||
when a dedicated /64 is available for translation | ||||
on the CLAT. Otherwise, the CLAT will have both | ||||
stateful and stateless translation since it requires | ||||
NAT44 from the LAN to a single IPv4 address and then | ||||
stateless translation to a single IPv6 address."; | ||||
reference | ||||
"RFC 6877: 464XLAT: Combination of Stateful and | ||||
Stateless Translation"; | ||||
leaf ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
description | ||||
"An IPv6 prefix used for CLAT."; | ||||
} | ||||
} | } | |||
list ipv4-prefixes { | ||||
enum "paired" { | key "ipv4-prefix"; | |||
if-feature "napt44 or nat64"; | ||||
description | description | |||
"Paired address pooling informs the NAT | "Pool of IPv4 addresses used for CLAT. | |||
that all the flows from an internal IP | 192.0.0.0/29 is the IPv4 service continuity prefix."; | |||
address must be assigned the same external | ||||
address. This is the recommended behavior for | ||||
NAPT/NAT64."; | ||||
reference | reference | |||
"RFC 4787: Network Address Translation (NAT) | "RFC 7335: IPv4 Service Continuity Prefix"; | |||
Behavioral Requirements for Unicast UDP"; | leaf ipv4-prefix { | |||
type inet:ipv4-prefix; | ||||
description | ||||
"464XLAT double-translation treatment is | ||||
stateless when a dedicated /64 is available | ||||
for translation on the CLAT. Otherwise, the | ||||
CLAT will have both stateful and stateless | ||||
translation since it requires NAT44 from the | ||||
LAN to a single IPv4 address and then stateless | ||||
translation to a single IPv6 address. | ||||
The CLAT performs NAT44 for all IPv4 LAN | ||||
packets so that all the LAN-originated IPv4 | ||||
packets appear from a single IPv4 address | ||||
and are then statelessly translated to one | ||||
interface IPv6 address that is claimed by | ||||
the CLAT. | ||||
An IPv4 address from this pool is also | ||||
provided to an application that makes | ||||
use of literals."; | ||||
reference | ||||
"RFC 6877: 464XLAT: Combination of Stateful and | ||||
Stateless Translation"; | ||||
} | ||||
} | } | |||
} | } | |||
description | list nptv6-prefixes { | |||
"Specifies how external IP addresses are allocated."; | if-feature "nptv6"; | |||
} | key "internal-ipv6-prefix"; | |||
description | ||||
"Provides one or a list of (internal IPv6 prefix, | ||||
external IPv6 prefix) required for NPTv6. | ||||
leaf port-allocation-type { | In its simplest form, NPTv6 interconnects two | |||
if-feature "napt44 or nat64"; | network links: one is an 'internal' network | |||
type enumeration { | link attached to a leaf network within a single | |||
enum "random" { | administrative domain, and the other is an | |||
'external' network with connectivity to the | ||||
global Internet."; | ||||
reference | ||||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | ||||
leaf internal-ipv6-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | description | |||
"Port randomization is enabled. A NAT port allocation | "An IPv6 prefix used by an internal interface of | |||
scheme should make it hard for attackers to guess | NPTv6."; | |||
port numbers"; | ||||
reference | reference | |||
"REQ-15 of RFC 6888"; | "RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | |||
} | } | |||
leaf external-ipv6-prefix { | ||||
enum "port-preservation" { | type inet:ipv6-prefix; | |||
mandatory true; | ||||
description | description | |||
"Indicates whether the NAT should preserve the internal | "An IPv6 prefix used by the external interface of | |||
port number."; | NPTv6."; | |||
reference | ||||
"RFC 6296: IPv6-to-IPv6 Network Prefix Translation"; | ||||
} | } | |||
} | ||||
list eam { | ||||
if-feature "eam"; | ||||
key "ipv4-prefix"; | ||||
description | ||||
"The Explicit Address Mapping Table is a conceptual | ||||
table in which each row represents an EAM. | ||||
enum "port-parity-preservation" { | Each EAM describes a mapping between IPv4 and IPv6 | |||
prefixes/addresses."; | ||||
reference | ||||
"Section 3.1 of RFC 7757"; | ||||
leaf ipv4-prefix { | ||||
type inet:ipv4-prefix; | ||||
mandatory true; | ||||
description | description | |||
"Indicates whether the NAT should preserve the port | "The IPv4 prefix of an EAM."; | |||
parity of the internal port number."; | reference | |||
"Section 3.2 of RFC 7757"; | ||||
} | } | |||
leaf ipv6-prefix { | ||||
enum "port-range-allocation" { | type inet:ipv6-prefix; | |||
mandatory true; | ||||
description | description | |||
"Indicates whether the NAT assigns a range of ports | "The IPv6 prefix of an EAM."; | |||
for an internal host. This scheme allows to minimize | ||||
log volume."; | ||||
reference | reference | |||
"REQ-14 of RFC 6888"; | "Section 3.2 of RFC 7757"; | |||
} | } | |||
} | } | |||
list nat64-prefixes { | ||||
if-feature "siit or nat64 or clat"; | ||||
key "nat64-prefix"; | ||||
description | description | |||
"Indicates the type of port allocation."; | "Provides one or a list of NAT64 prefixes | |||
} | with or without a list of destination IPv4 prefixes. | |||
It allows mapping IPv4 address ranges to IPv6 prefixes. | ||||
leaf mapping-type { | For example: | |||
if-feature "napt44 or nat64"; | 192.0.2.0/24 is mapped to 2001:db8:122:300::/56. | |||
type enumeration { | 198.51.100.0/24 is mapped to 2001:db8:122::/48."; | |||
enum "eim" { | reference | |||
"Section 5.1 of RFC 7050"; | ||||
leaf nat64-prefix { | ||||
type inet:ipv6-prefix; | ||||
mandatory true; | ||||
description | description | |||
"endpoint-independent-mapping."; | "A NAT64 prefix. Can be a Network-Specific Prefix (NSP) | |||
or a Well-Known Prefix (WKP). | ||||
Organizations deploying stateless IPv4/IPv6 translation | ||||
should assign an NSP to their IPv4/IPv6 translation | ||||
service. | ||||
For stateless NAT64, IPv4-translatable IPv6 addresses | ||||
must use the selected NSP. | ||||
Both IPv4-translatable IPv6 addresses and | ||||
IPv4-converted IPv6 addresses should use | ||||
the same prefix."; | ||||
reference | reference | |||
"Section 4 of RFC 4787."; | "Sections 3.3 and 3.4 of RFC 6052"; | |||
} | } | |||
list destination-ipv4-prefix { | ||||
enum "adm" { | key "ipv4-prefix"; | |||
description | description | |||
"address-dependent-mapping."; | "An IPv4 prefix/address."; | |||
reference | leaf ipv4-prefix { | |||
"Section 4 of RFC 4787."; | type inet:ipv4-prefix; | |||
description | ||||
"An IPv4 address/prefix."; | ||||
} | ||||
} | } | |||
leaf stateless-enable { | ||||
enum "edm" { | type boolean; | |||
default "false"; | ||||
description | description | |||
"address-and-port-dependent-mapping."; | "Enable explicitly stateless NAT64."; | |||
reference | ||||
"Section 4 of RFC 4787."; | ||||
} | } | |||
} | } | |||
description | list external-ip-address-pool { | |||
"Indicates the type of a NAT mapping."; | if-feature "basic-nat44 or napt44 or nat64"; | |||
} | key "pool-id"; | |||
description | ||||
"Pool of external IP addresses used to service internal | ||||
hosts. | ||||
leaf filtering-type { | A pool is a set of IP prefixes."; | |||
if-feature "napt44 or nat64"; | leaf pool-id { | |||
type enumeration { | type uint32; | |||
enum "eif" { | must '. >= 1'; | |||
description | description | |||
"endpoint-independent-filtering."; | "An identifier that uniquely identifies the address pool | |||
reference | within a NAT instance. | |||
"Section 5 of RFC 4787."; | ||||
} | ||||
enum "adf" { | The identifier must be greater than zero."; | |||
description | ||||
"address-dependent-filtering."; | ||||
reference | reference | |||
"Section 5 of RFC 4787."; | "RFC 7659: Definitions of Managed Objects for | |||
Network Address Translators (NATs)"; | ||||
} | } | |||
leaf external-ip-pool { | ||||
enum "edf" { | type inet:ipv4-prefix; | |||
mandatory true; | ||||
description | description | |||
"address-and-port-dependent-filtering"; | "An IPv4 prefix used for NAT purposes."; | |||
reference | ||||
"Section 5 of RFC 4787."; | ||||
} | } | |||
} | } | |||
container port-set-restrict { | ||||
if-feature "napt44 or nat64"; | ||||
description | description | |||
"Indicates the type of a NAT filtering."; | "Configures contiguous and non-contiguous port ranges. | |||
} | ||||
leaf fragment-behavior { | The port set is used to restrict the external source | |||
if-feature "napt44 or nat64"; | port numbers used by the translator."; | |||
type enumeration { | uses port-set; | |||
enum "drop-all" { | } | |||
leaf dst-nat-enable { | ||||
if-feature "basic-nat44 or napt44"; | ||||
type boolean; | ||||
default "false"; | ||||
description | ||||
"Enable/disable Destination NAT. | ||||
A NAT44 may be configured to enable Destination | ||||
NAT, too."; | ||||
} | ||||
list dst-ip-address-pool { | ||||
if-feature "dst-nat"; | ||||
key "pool-id"; | ||||
description | ||||
"Pool of IP addresses used for Destination NAT."; | ||||
leaf pool-id { | ||||
type uint32; | ||||
description | description | |||
"All received fragments are dropped."; | "An identifier of the address pool."; | |||
} | } | |||
leaf dst-in-ip-pool { | ||||
enum "in-order" { | type inet:ip-prefix; | |||
description | description | |||
"Translate fragments only if they are received | "Is used to identify an internal destination | |||
in order."; | IP prefix/address to be translated."; | |||
} | } | |||
leaf dst-out-ip-pool { | ||||
type inet:ip-prefix; | ||||
mandatory true; | ||||
description | ||||
"IP address/prefix used for Destination NAT."; | ||||
} | ||||
} | ||||
list transport-protocols { | ||||
if-feature "napt44 or nat64 or dst-nat"; | ||||
key "protocol-id"; | ||||
description | ||||
"Configure the transport protocols to be handled by | ||||
the translator. | ||||
enum "out-of-order" { | TCP and UDP are supported by default."; | |||
leaf protocol-id { | ||||
type uint8; | ||||
mandatory true; | ||||
description | description | |||
"Translate a fragment even if it is received out | "The upper-layer protocol associated with this | |||
of order. | mapping. | |||
This behavior is recommended."; | Values are taken from the IANA Protocol Numbers | |||
reference | registry. | |||
"REQ-14 of RFC 4787"; | ||||
} | For example, this field contains 6 for TCP, | |||
} | 17 for UDP, 33 for DCCP, or 132 for SCTP."; | |||
description | } | |||
"The fragment behavior instructs the NAT about the | leaf protocol-name { | |||
behavior to follow to translate fragments received | type string; | |||
on the external interface of the NAT."; | description | |||
"The name of the upper-layer protocol associated | ||||
with this mapping. | ||||
For example, TCP, UDP, DCCP, and SCTP."; | ||||
} | ||||
} | } | |||
leaf subscriber-mask-v6 { | ||||
type uint8 { | ||||
range "0 .. 128"; | ||||
} | ||||
description | ||||
"The subscriber mask is an integer that indicates | ||||
the length of significant bits to be applied on | ||||
the source IPv6 address (internal side) to | ||||
unambiguously identify a user device (e.g., CPE). | ||||
list port-quota { | Subscriber mask is a system-wide configuration | |||
if-feature "napt44 or nat64"; | parameter that is used to enforce generic | |||
key quota-type; | per-subscriber policies (e.g., port-quota). | |||
description | ||||
"Configures a port quota to be assigned per subscriber. | ||||
It corresponds to the maximum number of ports to be | ||||
used by a subscriber."; | ||||
leaf port-limit { | The enforcement of these generic policies does not | |||
type uint16; | require the configuration of every subscriber's | |||
prefix. | ||||
Example: suppose the 2001:db8:100:100::/56 prefix | ||||
is assigned to a NAT64-serviced CPE. Suppose also | ||||
that 2001:db8:100:100::1 is the IPv6 address used | ||||
by the client that resides in that CPE. When the | ||||
NAT64 receives a packet from this client, | ||||
it applies the subscriber-mask-v6 (e.g., 56) on | ||||
the source IPv6 address to compute the associated | ||||
prefix for this client (2001:db8:100:100::/56). | ||||
Then, the NAT64 enforces policies based on that | ||||
prefix (2001:db8:100:100::/56), not on the exact | ||||
source IPv6 address."; | ||||
} | ||||
list subscriber-match { | ||||
if-feature "basic-nat44 or napt44 or dst-nat"; | ||||
key "match-id"; | ||||
description | ||||
"IP prefix match. | ||||
A subscriber is identified by a subnet."; | ||||
leaf match-id { | ||||
type uint32; | ||||
description | ||||
"An identifier of the subscriber match."; | ||||
} | ||||
leaf subnet { | ||||
type inet:ip-prefix; | ||||
mandatory true; | ||||
description | ||||
"The IP address subnets that match | ||||
should be translated. For example, all addresses | ||||
that belong to the 192.0.2.0/24 prefix must | ||||
be processed by the NAT."; | ||||
} | ||||
} | ||||
leaf address-allocation-type { | ||||
type enumeration { | ||||
enum arbitrary { | ||||
if-feature "basic-nat44 or napt44 or nat64"; | ||||
description | ||||
"Arbitrary pooling behavior means that the NAT | ||||
instance may create the new port mapping using any | ||||
address in the pool that has a free port for the | ||||
protocol concerned."; | ||||
} | ||||
enum roundrobin { | ||||
if-feature "basic-nat44 or napt44 or nat64"; | ||||
description | ||||
"Round-robin allocation."; | ||||
} | ||||
enum paired { | ||||
if-feature "napt44 or nat64"; | ||||
description | ||||
"Paired address pooling informs the NAT | ||||
that all the flows from an internal IP | ||||
address must be assigned the same external | ||||
address. This is the recommended behavior | ||||
for NAPT/NAT64."; | ||||
reference | ||||
"RFC 4787: Network Address Translation (NAT) | ||||
Behavioral Requirements for Unicast UDP"; | ||||
} | ||||
} | ||||
description | ||||
"Specifies how external IP addresses are allocated."; | ||||
} | ||||
leaf port-allocation-type { | ||||
if-feature "napt44 or nat64"; | ||||
type enumeration { | ||||
enum random { | ||||
description | ||||
"Port randomization is enabled. A NAT port allocation | ||||
scheme should make it hard for attackers to guess | ||||
port numbers"; | ||||
reference | ||||
"REQ-15 of RFC 6888"; | ||||
} | ||||
enum port-preservation { | ||||
description | ||||
"Indicates whether the NAT should preserve the | ||||
internal port number."; | ||||
} | ||||
enum port-parity-preservation { | ||||
description | ||||
"Indicates whether the NAT should preserve the port | ||||
parity of the internal port number."; | ||||
} | ||||
enum port-range-allocation { | ||||
description | ||||
"Indicates whether the NAT assigns a range of ports | ||||
for an internal host. This scheme allows the | ||||
minimizing of the log volume."; | ||||
reference | ||||
"REQ-14 of RFC 6888"; | ||||
} | ||||
} | ||||
description | ||||
"Indicates the type of port allocation."; | ||||
} | ||||
leaf mapping-type { | ||||
if-feature "napt44 or nat64"; | ||||
type enumeration { | ||||
enum eim { | ||||
description | ||||
"endpoint-independent-mapping."; | ||||
reference | ||||
"Section 4 of RFC 4787"; | ||||
} | ||||
enum adm { | ||||
description | ||||
"address-dependent-mapping."; | ||||
reference | ||||
"Section 4 of RFC 4787"; | ||||
} | ||||
enum edm { | ||||
description | ||||
"address-and-port-dependent-mapping."; | ||||
reference | ||||
"Section 4 of RFC 4787"; | ||||
} | ||||
} | ||||
description | ||||
"Indicates the type of NAT mapping."; | ||||
} | ||||
leaf filtering-type { | ||||
if-feature "napt44 or nat64"; | ||||
type enumeration { | ||||
enum eif { | ||||
description | ||||
"endpoint-independent-filtering."; | ||||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
enum adf { | ||||
description | ||||
"address-dependent-filtering."; | ||||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
enum edf { | ||||
description | ||||
"address-and-port-dependent-filtering"; | ||||
reference | ||||
"Section 5 of RFC 4787"; | ||||
} | ||||
} | ||||
description | ||||
"Indicates the type of NAT filtering."; | ||||
} | ||||
leaf fragment-behavior { | ||||
if-feature "napt44 or nat64"; | ||||
type enumeration { | ||||
enum drop-all { | ||||
description | ||||
"All received fragments are dropped."; | ||||
} | ||||
enum in-order { | ||||
description | ||||
"Translate fragments only if they are received | ||||
in order."; | ||||
} | ||||
enum out-of-order { | ||||
description | ||||
"Translate a fragment even if it is received out | ||||
of order. | ||||
This behavior is recommended."; | ||||
reference | ||||
"REQ-14 of RFC 4787"; | ||||
} | ||||
} | ||||
description | ||||
"The fragment behavior instructs the NAT about the | ||||
behavior to follow to translate fragments received | ||||
on the external interface of the NAT."; | ||||
} | ||||
list port-quota { | ||||
if-feature "napt44 or nat64"; | ||||
key "quota-type"; | ||||
description | description | |||
"Configures a port quota to be assigned per subscriber. | "Configures a port quota to be assigned per subscriber. | |||
It corresponds to the maximum number of ports to be | It corresponds to the maximum number of ports to be | |||
used by a subscriber."; | used by a subscriber."; | |||
reference | leaf port-limit { | |||
"REQ-4 of RFC 6888."; | type uint16; | |||
} | description | |||
"Configures a port quota to be assigned per subscriber. | ||||
leaf quota-type { | It corresponds to the maximum number of ports to be | |||
used by a subscriber."; | ||||
reference | ||||
"REQ-4 of RFC 6888"; | ||||
} | ||||
leaf quota-type { | ||||
type uint8; | type uint8; | |||
description | description | |||
"Indicates whether the port quota applies to | "Indicates whether the port quota applies to | |||
all protocols (0) or to a specific protocol."; | all protocols (0) or to a specific protocol."; | |||
} | ||||
} | } | |||
} | container port-set { | |||
when "../port-allocation-type = 'port-range-allocation'"; | ||||
container port-set { | if-feature "napt44 or nat64"; | |||
when "../port-allocation-type = 'port-range-allocation'"; | ||||
if-feature "napt44 or nat64"; | ||||
description | ||||
"Manages port-set assignments."; | ||||
leaf port-set-size { | ||||
type uint16; | ||||
mandatory true; | ||||
description | description | |||
"Indicates the size of assigned port sets."; | "Manages port-set assignments."; | |||
leaf port-set-size { | ||||
type uint16; | ||||
mandatory true; | ||||
description | ||||
"Indicates the size of assigned port sets."; | ||||
} | ||||
leaf port-set-timeout { | ||||
type uint32; | ||||
units "seconds"; | ||||
description | ||||
"inactivity timeout for port sets."; | ||||
} | ||||
} | } | |||
container timers { | ||||
leaf port-set-timeout { | if-feature "napt44 or nat64"; | |||
type uint32; | ||||
units "seconds"; | ||||
description | description | |||
"inactivity timeout for port sets."; | "Configure values of various timeouts."; | |||
} | ||||
} | ||||
container timers { | ||||
if-feature "napt44 or nat64"; | ||||
description | ||||
"Configure values of various timeouts."; | ||||
leaf udp-timeout { | leaf udp-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 300; | default "300"; | |||
description | description | |||
"UDP inactivity timeout. That is the time a mapping | "UDP inactivity timeout. That is the time a mapping | |||
will stay active without packets traversing the NAT."; | will stay active without packets traversing the NAT."; | |||
reference | reference | |||
"RFC 4787: Network Address Translation (NAT) | "RFC 4787: Network Address Translation (NAT) | |||
Behavioral Requirements for Unicast UDP"; | Behavioral Requirements for Unicast UDP"; | |||
} | } | |||
leaf tcp-idle-timeout { | leaf tcp-idle-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 7440; | default "7440"; | |||
description | description | |||
"TCP Idle timeout should be 2 hours and 4 minutes."; | "TCP idle timeout should be 2 hours and 4 minutes."; | |||
reference | reference | |||
"RFC 5382: NAT Behavioral Requirements for TCP"; | "RFC 5382: NAT Behavioral Requirements for TCP"; | |||
} | } | |||
leaf tcp-trans-open-timeout { | leaf tcp-trans-open-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 240; | default "240"; | |||
description | description | |||
"The value of the transitory open connection | "The value of the transitory open connection | |||
idle-timeout. | idle-timeout. | |||
A NAT should provide different configurable | A NAT should provide different configurable | |||
parameters for configuring the open and | parameters for configuring the open and | |||
closing idle timeouts. | closing idle timeouts. | |||
To accommodate deployments that consider | To accommodate deployments that consider | |||
a partially open timeout of 4 minutes as being | a partially open timeout of 4 minutes as being | |||
excessive from a security standpoint, a NAT may | excessive from a security standpoint, a NAT may | |||
allow the configured timeout to be less than | allow the configured timeout to be less than | |||
4 minutes. | 4 minutes. | |||
However, a minimum default transitory connection | However, a minimum default transitory connection | |||
idle-timeout of 4 minutes is recommended."; | idle-timeout of 4 minutes is recommended."; | |||
reference | reference | |||
"Section 2.1 of RFC 7857."; | "Section 2.1 of RFC 7857"; | |||
} | } | |||
leaf tcp-trans-close-timeout { | leaf tcp-trans-close-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 240; | default "240"; | |||
description | description | |||
"The value of the transitory close connection | "The value of the transitory close connection | |||
idle-timeout. | idle-timeout. | |||
A NAT should provide different configurable | A NAT should provide different configurable | |||
parameters for configuring the open and | parameters for configuring the open and | |||
closing idle timeouts."; | closing idle timeouts."; | |||
reference | reference | |||
"Section 2.1 of RFC 7857."; | "Section 2.1 of RFC 7857"; | |||
} | } | |||
leaf tcp-in-syn-timeout { | leaf tcp-in-syn-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 6; | default "6"; | |||
description | description | |||
"A NAT must not respond to an unsolicited | "A NAT must not respond to an unsolicited | |||
inbound SYN packet for at least 6 seconds | inbound SYN packet for at least 6 seconds | |||
after the packet is received. If during | after the packet is received. If during | |||
this interval the NAT receives and translates | this interval the NAT receives and translates | |||
an outbound SYN for the connection the NAT | an outbound SYN for the connection the NAT | |||
must silently drop the original unsolicited | must silently drop the original unsolicited | |||
inbound SYN packet."; | inbound SYN packet."; | |||
reference | reference | |||
"RFC 5382 NAT Behavioral Requirements for TCP"; | "RFC 5382 NAT Behavioral Requirements for TCP"; | |||
} | } | |||
leaf fragment-min-timeout { | leaf fragment-min-timeout { | |||
when "../../fragment-behavior='out-of-order'"; | when "../../fragment-behavior='out-of-order'"; | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 2; | default "2"; | |||
description | description | |||
"As long as the NAT has available resources, | "As long as the NAT has available resources, | |||
the NAT allows the fragments to arrive | the NAT allows the fragments to arrive | |||
over fragment-min-timeout interval. | over the fragment-min-timeout interval. | |||
The default value is inspired from RFC6146."; | The default value is inspired from RFC 6146."; | |||
} | } | |||
leaf icmp-timeout { | leaf icmp-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 60; | default "60"; | |||
description | description | |||
"An ICMP Query session timer must not expire | "An ICMP Query session timer must not expire | |||
in less than 60 seconds. It is recommended | in less than 60 seconds. It is recommended | |||
that the ICMP Query session timer be made | that the ICMP Query session timer be made | |||
configurable"; | configurable"; | |||
reference | reference | |||
"RFC 5508: NAT Behavioral Requirements for ICMP"; | "RFC 5508: NAT Behavioral Requirements for ICMP"; | |||
} | } | |||
list per-port-timeout { | list per-port-timeout { | |||
key port-number; | key "port-number"; | |||
description | description | |||
"Some NATs are configurable with short timeouts | "Some NATs are configurable with short timeouts | |||
for some ports, e.g., as 10 seconds on | for some ports, e.g., as 10 seconds on | |||
port 53 (DNS) and 123 (NTP) and longer timeouts | port 53 (DNS) and 123 (NTP), and longer timeouts | |||
on other ports."; | on other ports."; | |||
leaf port-number { | leaf port-number { | |||
type inet:port-number; | type inet:port-number; | |||
description | description | |||
"A port number."; | "A port number."; | |||
} | } | |||
leaf protocol { | leaf protocol { | |||
type uint8; | type uint8; | |||
description | description | |||
"Upper-layer protocol associated with this port. | "The upper-layer protocol associated with this port. | |||
Values are taken from the IANA protocol registry. | Values are taken from the IANA Protocol Numbers | |||
registry. | ||||
If no protocol is indicated, this means 'any | If no protocol is indicated, it means 'any | |||
protocol'."; | protocol'."; | |||
} | } | |||
leaf timeout { | leaf timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Timeout for this port number"; | "Timeout for this port number"; | |||
} | } | |||
} | } | |||
leaf hold-down-timeout { | leaf hold-down-timeout { | |||
type uint32; | type uint32; | |||
units "seconds"; | units "seconds"; | |||
default 120; | default "120"; | |||
description | description | |||
"Hold down timer. | "Hold-down timer. | |||
Ports in the hold down pool are not reassigned until | Ports in the hold-down pool are not reassigned until | |||
hold-down-timeout expires. | hold-down-timeout expires. | |||
The length of time and the maximum number of ports in | The length of time and the maximum number of ports in | |||
this state must be configurable by the administrator. | this state must be configurable by the administrator. | |||
This is necessary in order to prevent collisions | This is necessary in order to prevent collisions | |||
between old and new mappings and sessions. It ensures | between old and new mappings and sessions. It ensures | |||
that all established sessions are broken instead of | that all established sessions are broken instead of | |||
redirected to a different peer."; | redirected to a different peer."; | |||
reference | reference | |||
"REQ#8 of RFC 6888."; | "REQ-8 of RFC 6888"; | |||
} | } | |||
leaf hold-down-max { | leaf hold-down-max { | |||
type uint32; | type uint32; | |||
description | description | |||
"Maximum ports in the hold down port pool."; | "Maximum ports in the hold-down port pool."; | |||
reference | reference | |||
"REQ#8 of RFC 6888."; | "REQ-8 of RFC 6888"; | |||
} | } | |||
} | } | |||
leaf fragments-limit { | ||||
leaf fragments-limit{ | ||||
when "../fragment-behavior='out-of-order'"; | when "../fragment-behavior='out-of-order'"; | |||
type uint32; | type uint32; | |||
description | description | |||
"Limits the number of out of order fragments that can | "Limits the number of out-of-order fragments that can | |||
be handled."; | be handled."; | |||
reference | reference | |||
"Section 11 of RFC 4787."; | "Section 11 of RFC 4787"; | |||
} | } | |||
list algs { | list algs { | |||
key name; | key "name"; | |||
description | description | |||
"ALG-related features."; | "Features related to the Application Layer | |||
Gateway (ALG)."; | ||||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"The name of the ALG."; | "The name of the ALG."; | |||
} | } | |||
leaf transport-protocol { | leaf transport-protocol { | |||
type uint32; | type uint32; | |||
description | description | |||
"The transport protocol used by the ALG | "The transport protocol used by the ALG | |||
(e.g., TCP, UDP)."; | (e.g., TCP and UDP)."; | |||
} | } | |||
container dst-transport-port { | container dst-transport-port { | |||
uses port-number; | uses port-number; | |||
description | description | |||
"The destination port number(s) used by the ALG. | "The destination port number(s) used by the ALG. | |||
For example, | For example, | |||
- 21 for the FTP ALG | - 21 for the FTP ALG | |||
- 53 for the DNS ALG."; | - 53 for the DNS ALG."; | |||
} | } | |||
container src-transport-port { | container src-transport-port { | |||
uses port-number; | uses port-number; | |||
description | description | |||
"The source port number(s) used by the ALG."; | "The source port number(s) used by the ALG."; | |||
} | } | |||
leaf status { | leaf status { | |||
type boolean; | type boolean; | |||
description | description | |||
"Enable/disable the ALG."; | "Enable/disable the ALG."; | |||
} | } | |||
} | } | |||
leaf all-algs-enable { | leaf all-algs-enable { | |||
type boolean; | type boolean; | |||
description | description | |||
"Disable/enable all ALGs. | "Disable/enable all ALGs. | |||
When specified, this parameter overrides the one | When specified, this parameter overrides the one | |||
that may be indicated, eventually, by the 'status' | that may be indicated, eventually, by the 'status' | |||
of an individual ALG."; | of an individual ALG."; | |||
} | } | |||
container notify-pool-usage { | container notify-pool-usage { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
description | description | |||
"Notification of pool usage when certain criteria | "Notification of pool usage when certain criteria | |||
are met."; | are met."; | |||
leaf pool-id { | leaf pool-id { | |||
type uint32; | type uint32; | |||
description | description | |||
"Pool-ID for which the notification criteria | "Pool-ID for which the notification criteria | |||
is defined"; | is defined"; | |||
} | } | |||
leaf low-threshold { | leaf low-threshold { | |||
type percent; | type percent; | |||
description | description | |||
"Notification must be generated when the defined low | "Notification must be generated when the defined low | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when the | For example, if a notification is required when the | |||
pool utilization reaches below 10%, this | pool utilization reaches below 10%, this | |||
configuration parameter must be set to 10. | configuration parameter must be set to 10. | |||
skipping to change at line 1708 ¶ | skipping to change at line 1552 ¶ | |||
"Notification must be generated when the defined low | "Notification must be generated when the defined low | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when the | For example, if a notification is required when the | |||
pool utilization reaches below 10%, this | pool utilization reaches below 10%, this | |||
configuration parameter must be set to 10. | configuration parameter must be set to 10. | |||
0% indicates that low-threshold notification is | 0% indicates that low-threshold notification is | |||
disabled."; | disabled."; | |||
} | } | |||
leaf high-threshold { | leaf high-threshold { | |||
type percent; | type percent; | |||
must ". >= ../low-threshold" { | must '. >= ../low-threshold' { | |||
error-message | error-message | |||
"The high threshold must be greater than or equal | "The high threshold must be greater than or equal | |||
to the low threshold."; | to the low threshold."; | |||
} | } | |||
description | description | |||
"Notification must be generated when the defined high | "Notification must be generated when the defined high | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when the | For example, if a notification is required when the | |||
pool utilization reaches 90%, this configuration | pool utilization reaches 90%, this configuration | |||
skipping to change at line 1727 ¶ | skipping to change at line 1570 ¶ | |||
"Notification must be generated when the defined high | "Notification must be generated when the defined high | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when the | For example, if a notification is required when the | |||
pool utilization reaches 90%, this configuration | pool utilization reaches 90%, this configuration | |||
parameter must be set to 90. | parameter must be set to 90. | |||
Setting the same value as low-threshold is equivalent | Setting the same value as low-threshold is equivalent | |||
to disabling high-threshold notification."; | to disabling high-threshold notification."; | |||
} | } | |||
leaf notify-interval { | leaf notify-interval { | |||
type uint32 { | type uint32 { | |||
range "1 .. 3600"; | range "1 .. 3600"; | |||
} | } | |||
units "seconds"; | units "seconds"; | |||
default '20'; | default "20"; | |||
description | description | |||
"Minimum number of seconds between successive | "Minimum number of seconds between successive | |||
notifications for this pool."; | notifications for this pool."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects for | "RFC 7659: Definitions of Managed Objects for | |||
Network Address Translators (NATs)"; | Network Address Translators (NATs)"; | |||
} | } | |||
} | } | |||
container external-realm { | container external-realm { | |||
description | description | |||
"Identifies the external realm of the NAT instance."; | "Identifies the external realm of the NAT instance."; | |||
choice realm-type { | choice realm-type { | |||
description | description | |||
"Can be an interface, VRF instance, etc."; | "Can be an interface, VRF instance, etc."; | |||
case interface { | case interface { | |||
description | description | |||
"External interface."; | "External interface."; | |||
leaf external-interface { | leaf external-interface { | |||
type if:interface-ref; | type if:interface-ref; | |||
description | description | |||
"Name of the external interface."; | "Name of the external interface."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
container mapping-limits { | container mapping-limits { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
description | description | |||
"Information about the configuration parameters that | "Information about the configuration parameters that | |||
limits the mappings based upon various criteria."; | limits the mappings based upon various criteria."; | |||
leaf limit-subscribers { | leaf limit-subscribers { | |||
type uint32; | type uint32; | |||
description | description | |||
"Maximum number of subscribers that can be serviced | "Maximum number of subscribers that can be serviced | |||
by a NAT instance. | by a NAT instance. | |||
A subscriber is identified by a given prefix."; | A subscriber is identified by a given prefix."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects for | "RFC 7659: Definitions of Managed Objects for | |||
Network Address Translators (NATs)"; | Network Address Translators (NATs)"; | |||
} | } | |||
leaf limit-address-mappings { | leaf limit-address-mappings { | |||
type uint32; | type uint32; | |||
description | description | |||
"Maximum number of address mappings that can be | "Maximum number of address mappings that can be | |||
handled by a NAT instance. | handled by a NAT instance. | |||
When this limit is reached, packets that would | When this limit is reached, packets that would | |||
normally trigger translation, will be dropped."; | normally trigger translation will be dropped."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects | "RFC 7659: Definitions of Managed Objects for | |||
for Network Address Translators | Network Address Translators (NATs)"; | |||
(NATs)"; | ||||
} | } | |||
leaf limit-port-mappings { | leaf limit-port-mappings { | |||
type uint32; | type uint32; | |||
description | description | |||
"Maximum number of port mappings that can be handled | "Maximum number of port mappings that can be handled | |||
by a NAT instance. | by a NAT instance. | |||
When this limit is reached, packets that would | When this limit is reached, packets that would | |||
normally trigger translation, will be dropped."; | normally trigger translation will be dropped."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects for | "RFC 7659: Definitions of Managed Objects for | |||
Network Address Translators (NATs)"; | Network Address Translators (NATs)"; | |||
} | } | |||
list limit-per-protocol { | list limit-per-protocol { | |||
if-feature "napt44 or nat64 or dst-nat"; | if-feature "napt44 or nat64 or dst-nat"; | |||
key protocol-id; | key "protocol-id"; | |||
description | description | |||
"Configure limits per transport protocol"; | "Configure limits per transport protocol"; | |||
leaf protocol-id { | leaf protocol-id { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Upper-layer protocol. | "The upper-layer protocol. | |||
Values are taken from the IANA protocol registry. | ||||
Values are taken from the IANA Protocol Numbers | ||||
registry. | ||||
For example, this field contains 6 for TCP, | For example, this field contains 6 for TCP, | |||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | 17 for UDP, 33 for DCCP, or 132 for SCTP."; | |||
} | } | |||
leaf limit { | leaf limit { | |||
type uint32; | type uint32; | |||
description | description | |||
"Maximum number of protocol-specific NAT mappings | "Maximum number of protocol-specific NAT mappings | |||
per instance."; | per instance."; | |||
} | } | |||
} | } | |||
} | } | |||
container connection-limits { | container connection-limits { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
description | description | |||
"Information about the configuration parameters that | "Information about the configuration parameters that | |||
rate limit the translation based upon various criteria."; | rate-limit the translation based upon various criteria."; | |||
leaf limit-per-subscriber { | leaf limit-per-subscriber { | |||
type uint32; | type uint32; | |||
units "bits/second"; | units "bits/second"; | |||
description | description | |||
"Rate-limit the number of new mappings and sessions | "Rate-limit the number of new mappings and sessions | |||
per subscriber."; | per subscriber."; | |||
} | } | |||
leaf limit-per-instance { | leaf limit-per-instance { | |||
type uint32; | type uint32; | |||
units "bits/second"; | units "bits/second"; | |||
description | description | |||
"Rate-limit the number of new mappings and sessions | "Rate-limit the number of new mappings and sessions | |||
per instance."; | per instance."; | |||
} | } | |||
list limit-per-protocol { | list limit-per-protocol { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
key protocol-id; | key "protocol-id"; | |||
description | description | |||
"Configure limits per transport protocol"; | "Configure limits per transport protocol"; | |||
leaf protocol-id { | leaf protocol-id { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Upper-layer protocol. | "The upper-layer protocol. | |||
Values are taken from the IANA protocol registry. | Values are taken from the IANA Protocol Numbers | |||
registry. | ||||
For example, this field contains 6 for TCP, | For example, this field contains 6 for TCP, | |||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | 17 for UDP, 33 for DCCP, or 132 for SCTP."; | |||
} | } | |||
leaf limit { | leaf limit { | |||
type uint32; | type uint32; | |||
description | description | |||
"Limit the number of protocol-specific mappings | "Limit the number of protocol-specific mappings | |||
and sessions per instance."; | and sessions per instance."; | |||
} | } | |||
} | } | |||
} | } | |||
container notification-limits { | container notification-limits { | |||
description "Sets notification limits."; | description | |||
"Sets notification limits."; | ||||
leaf notify-interval { | leaf notify-interval { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type uint32 { | type uint32 { | |||
range "1 .. 3600"; | range "1 .. 3600"; | |||
} | } | |||
units "seconds"; | units "seconds"; | |||
default '10'; | default "10"; | |||
description | description | |||
"Minimum number of seconds between successive | "Minimum number of seconds between successive | |||
notifications for this NAT instance."; | notifications for this NAT instance."; | |||
reference | reference | |||
"RFC 7659: Definitions of Managed Objects | "RFC 7659: Definitions of Managed Objects for | |||
for Network Address Translators (NATs)"; | Network Address Translators (NATs)"; | |||
} | } | |||
leaf notify-addresses-usage { | ||||
leaf notify-addresses-usage { | ||||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type percent; | type percent; | |||
description | description | |||
"Notification of address mappings usage over | "Notification of address mappings usage over | |||
the whole NAT instance. | the whole NAT instance. | |||
Notification must be generated when the defined | Notification must be generated when the defined | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when | For example, if a notification is required when | |||
the address mappings utilization reaches 90%, | the address mappings utilization reaches 90%, | |||
this configuration parameter must be set | this configuration parameter must be set | |||
to 90."; | to 90."; | |||
} | } | |||
leaf notify-ports-usage { | ||||
leaf notify-ports-usage { | ||||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type percent; | type percent; | |||
description | description | |||
"Notification of port mappings usage over the | "Notification of port mappings usage over the | |||
whole NAT instance. | whole NAT instance. | |||
Notification must be generated when the defined | Notification must be generated when the defined | |||
threshold is reached. | threshold is reached. | |||
For example, if a notification is required when | For example, if a notification is required when | |||
the port mappings utilization reaches 90%, this | the port mappings utilization reaches 90%, this | |||
configuration parameter must be set to 90."; | configuration parameter must be set to 90."; | |||
} | } | |||
leaf notify-subscribers-limit { | ||||
leaf notify-subscribers-limit { | ||||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type uint32; | type uint32; | |||
description | description | |||
"Notification of active subscribers per NAT | "Notification of active subscribers per NAT | |||
instance. | instance. | |||
Notification must be generated when the defined | Notification must be generated when the defined | |||
threshold is reached."; | threshold is reached."; | |||
} | } | |||
} | } | |||
container mapping-table { | container mapping-table { | |||
if-feature "basic-nat44 or napt44 " + | if-feature "basic-nat44 or napt44 or nat64 " + | |||
"or nat64 or clat or dst-nat"; | "or clat or dst-nat"; | |||
description | description | |||
"NAT mapping table. Applicable for functions which maintain | "NAT mapping table. Applicable for functions that maintain | |||
static and/or dynamic mappings, such as NAT44, Destination | static and/or dynamic mappings, such as NAT44, Destination | |||
NAT, NAT64, or CLAT."; | NAT, NAT64, or CLAT."; | |||
list mapping-entry { | list mapping-entry { | |||
key "index"; | key "index"; | |||
description "NAT mapping entry."; | description | |||
"NAT mapping entry."; | ||||
uses mapping-entry; | uses mapping-entry; | |||
} | } | |||
} | } | |||
container statistics { | container statistics { | |||
config false; | config false; | |||
description | description | |||
"Statistics related to the NAT instance."; | "Statistics related to the NAT instance."; | |||
leaf discontinuity-time { | leaf discontinuity-time { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time on the most recent occasion at which the NAT | "The time on the most recent occasion at which the NAT | |||
instance suffered a discontinuity. This must be | instance suffered a discontinuity. This must be | |||
initialized when the NAT instance is configured | initialized when the NAT instance is configured | |||
or rebooted."; | or rebooted."; | |||
} | } | |||
container traffic-statistics { | container traffic-statistics { | |||
description | description | |||
"Generic traffic statistics."; | "Generic traffic statistics."; | |||
leaf sent-packets { | leaf sent-packets { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of packets sent."; | "Number of packets sent."; | |||
} | } | |||
leaf sent-bytes { | leaf sent-bytes { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter for sent traffic in bytes."; | "Counter for sent traffic in bytes."; | |||
} | } | |||
leaf rcvd-packets { | leaf rcvd-packets { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of received packets."; | "Number of received packets."; | |||
} | } | |||
leaf rcvd-bytes { | leaf rcvd-bytes { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter for received traffic in bytes."; | "Counter for received traffic in bytes."; | |||
} | } | |||
leaf dropped-packets { | leaf dropped-packets { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets."; | "Number of dropped packets."; | |||
} | } | |||
leaf dropped-bytes { | leaf dropped-bytes { | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter for dropped traffic in bytes."; | "Counter for dropped traffic in bytes."; | |||
} | } | |||
leaf dropped-fragments { | leaf dropped-fragments { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped fragments on the external realm."; | "Number of dropped fragments on the external realm."; | |||
} | } | |||
leaf dropped-address-limit-packets { | leaf dropped-address-limit-packets { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets because an address limit | "Number of dropped packets because an address limit | |||
is reached."; | is reached."; | |||
} | } | |||
leaf dropped-address-limit-bytes { | leaf dropped-address-limit-bytes { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter of dropped packets because an address limit | "Counter of dropped packets because an address limit | |||
is reached, in bytes."; | is reached, in bytes."; | |||
} | } | |||
leaf dropped-address-packets { | leaf dropped-address-packets { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets because no address is | "Number of dropped packets because no address is | |||
available for allocation."; | available for allocation."; | |||
} | } | |||
leaf dropped-address-bytes { | leaf dropped-address-bytes { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter of dropped packets because no address is | "Counter of dropped packets because no address is | |||
available for allocation, in bytes."; | available for allocation, in bytes."; | |||
} | } | |||
leaf dropped-port-limit-packets { | leaf dropped-port-limit-packets { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets because a port limit | "Number of dropped packets because a port limit | |||
is reached."; | is reached."; | |||
} | } | |||
leaf dropped-port-limit-bytes { | leaf dropped-port-limit-bytes { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter of dropped packets because a port limit | "Counter of dropped packets because a port limit | |||
is reached, in bytes."; | is reached, in bytes."; | |||
} | } | |||
leaf dropped-port-packets { | leaf dropped-port-packets { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets because no port is | "Number of dropped packets because no port is | |||
available for allocation."; | available for allocation."; | |||
} | } | |||
leaf dropped-port-bytes { | leaf dropped-port-bytes { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter of dropped packets because no port is | "Counter of dropped packets because no port is | |||
available for allocation, in bytes."; | available for allocation, in bytes."; | |||
} | } | |||
leaf dropped-subscriber-limit-packets { | leaf dropped-subscriber-limit-packets { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
description | description | |||
"Number of dropped packets because the subscriber | "Number of dropped packets because the subscriber | |||
limit per instance is reached."; | limit per instance is reached."; | |||
} | } | |||
leaf dropped-subscriber-limit-bytes { | leaf dropped-subscriber-limit-bytes { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
units 'bytes'; | units "bytes"; | |||
description | description | |||
"Counter of dropped packets because the subscriber | "Counter of dropped packets because the subscriber | |||
limit per instance is reached, in bytes."; | limit per instance is reached, in bytes."; | |||
} | } | |||
} | } | |||
container mappings-statistics { | container mappings-statistics { | |||
description | description | |||
"Mappings statistics."; | "Mappings statistics."; | |||
leaf total-active-subscribers { | leaf total-active-subscribers { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Total number of active subscribers (that is, | "Total number of active subscribers (that is, | |||
subscribers for which the NAT maintains active | subscribers for which the NAT maintains active | |||
mappings. | mappings). | |||
A subscriber is identified by a subnet, | A subscriber is identified by a subnet, | |||
subscriber-mask, etc."; | subscriber-mask, etc."; | |||
} | } | |||
leaf total-address-mappings { | leaf total-address-mappings { | |||
if-feature "basic-nat44 or napt44 " + | if-feature "basic-nat44 or napt44 or nat64 " + | |||
"or nat64 or clat or dst-nat"; | "or clat or dst-nat"; | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Total number of address mappings present at a given | "Total number of address mappings present at a given | |||
time. It includes both static and dynamic mappings."; | time. It includes both static and dynamic mappings."; | |||
reference | reference | |||
"Section 3.3.8 of RFC 7659"; | "Section 3.3.8 of RFC 7659"; | |||
} | } | |||
leaf total-port-mappings { | leaf total-port-mappings { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Total number of NAT port mappings present at | "Total number of NAT port mappings present at | |||
a given time. It includes both static and dynamic | a given time. It includes both static and dynamic | |||
mappings."; | mappings."; | |||
reference | reference | |||
"Section 3.3.9 of RFC 7659"; | "Section 3.3.9 of RFC 7659"; | |||
} | } | |||
list total-per-protocol { | list total-per-protocol { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
key protocol-id; | key "protocol-id"; | |||
description | description | |||
"Total mappings for each enabled/supported protocol."; | "Total mappings for each enabled/supported protocol."; | |||
leaf protocol-id { | leaf protocol-id { | |||
type uint8; | type uint8; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Upper-layer protocol. | "The upper-layer protocol. | |||
For example, this field contains 6 for TCP, | For example, this field contains 6 for TCP, | |||
17 for UDP, 33 for DCCP, or 132 for SCTP."; | 17 for UDP, 33 for DCCP, or 132 for SCTP."; | |||
} | } | |||
leaf total { | leaf total { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Total number of a protocol-specific mappings present | "Total number of a protocol-specific mappings present | |||
at a given time. The protocol is identified by | at a given time. The protocol is identified by | |||
protocol-id."; | protocol-id."; | |||
} | } | |||
} | } | |||
} | } | |||
container pools-stats { | container pools-stats { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
description | description | |||
"Statistics related to address/prefix pools | "Statistics related to address/prefix pools | |||
usage"; | usage"; | |||
leaf addresses-allocated { | leaf addresses-allocated { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of all allocated addresses."; | "Number of all allocated addresses."; | |||
} | } | |||
leaf addresses-free { | leaf addresses-free { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of unallocated addresses of all pools at | "Number of unallocated addresses of all pools at | |||
a given time. The sum of unallocated and allocated | a given time. The sum of unallocated and allocated | |||
addresses is the total number of addresses of | addresses is the total number of addresses of | |||
the pools."; | the pools."; | |||
} | } | |||
container ports-stats { | container ports-stats { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
description | description | |||
"Statistics related to port numbers usage."; | "Statistics related to port numbers usage."; | |||
leaf ports-allocated { | leaf ports-allocated { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of allocated ports from all pools."; | "Number of allocated ports from all pools."; | |||
} | } | |||
leaf ports-free { | leaf ports-free { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of unallocated addresses from all pools."; | "Number of unallocated addresses from all pools."; | |||
} | } | |||
} | } | |||
list per-pool-stats { | list per-pool-stats { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
key "pool-id"; | key "pool-id"; | |||
description | description | |||
"Statistics related to address/prefix pool usage"; | "Statistics related to address/prefix pool usage"; | |||
leaf pool-id { | leaf pool-id { | |||
type uint32; | type uint32; | |||
description | description | |||
"Unique Identifier that represents a pool of | "Unique identifier that represents a pool of | |||
addresses/prefixes."; | addresses/prefixes."; | |||
} | } | |||
leaf discontinuity-time { | leaf discontinuity-time { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"The time on the most recent occasion at which this | "The time on the most recent occasion at which this | |||
pool counters suffered a discontinuity. This must | pool counter suffered a discontinuity. This must | |||
be initialized when the address pool is | be initialized when the address pool is | |||
configured."; | configured."; | |||
} | } | |||
container pool-stats { | container pool-stats { | |||
description | description | |||
"Statistics related to address/prefix pool usage"; | "Statistics related to address/prefix pool usage"; | |||
leaf addresses-allocated { | leaf addresses-allocated { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of allocated addresses from this pool."; | "Number of allocated addresses from this pool."; | |||
} | } | |||
leaf addresses-free { | leaf addresses-free { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of unallocated addresses in this pool."; | "Number of unallocated addresses in this pool."; | |||
} | } | |||
} | } | |||
container port-stats { | container port-stats { | |||
if-feature "napt44 or nat64"; | if-feature "napt44 or nat64"; | |||
description | description | |||
"Statistics related to port numbers usage."; | "Statistics related to port numbers usage."; | |||
leaf ports-allocated { | leaf ports-allocated { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of allocated ports from this pool."; | "Number of allocated ports from this pool."; | |||
} | } | |||
leaf ports-free { | leaf ports-free { | |||
type yang:gauge32; | type yang:gauge32; | |||
description | description | |||
"Number of unallocated addresses from this pool."; | "Number of unallocated addresses from this pool."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at line 2291 ¶ | skipping to change at line 2064 ¶ | |||
} | } | |||
/* | /* | |||
* Notifications | * Notifications | |||
*/ | */ | |||
notification nat-pool-event { | notification nat-pool-event { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
description | description | |||
"Notifications must be generated when the defined high/low | "Notifications must be generated when the defined high/low | |||
threshold is reached. Related configuration parameters | threshold is reached. Related configuration parameters | |||
must be provided to trigger the notifications."; | must be provided to trigger the notifications."; | |||
leaf id { | leaf id { | |||
type leafref { | type leafref { | |||
path "/nat/instances/instance/id"; | path "/nat/instances/instance/id"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"NAT instance Identifier."; | "NAT instance identifier."; | |||
} | } | |||
leaf policy-id { | leaf policy-id { | |||
type leafref { | type leafref { | |||
path "/nat/instances/instance/policy/id"; | path "/nat/instances/instance/policy/id"; | |||
} | } | |||
description | description | |||
"Policy Identifier."; | "Policy identifier."; | |||
} | } | |||
leaf pool-id { | leaf pool-id { | |||
type leafref { | type leafref { | |||
path "/nat/instances/instance/policy/" + | path "/nat/instances/instance/policy/" + | |||
"external-ip-address-pool/pool-id"; | "external-ip-address-pool/pool-id"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Pool Identifier."; | "Pool Identifier."; | |||
} | } | |||
leaf notify-pool-threshold { | leaf notify-pool-threshold { | |||
type percent; | type percent; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"A threshold (high-threshold or low-threshold) has | "A threshold (high threshold or low threshold) has | |||
been fired."; | been fired."; | |||
} | } | |||
} | } | |||
notification nat-instance-event { | notification nat-instance-event { | |||
if-feature "basic-nat44 or napt44 or nat64"; | if-feature "basic-nat44 or napt44 or nat64"; | |||
description | description | |||
"Notifications must be generated when notify-addresses-usage | "Notifications must be generated when notify-addresses-usage | |||
and/or notify-ports-usage threshold are reached."; | and/or notify-ports-usage thresholds are reached."; | |||
leaf id { | leaf id { | |||
type leafref { | type leafref { | |||
path "/nat/instances/instance/id"; | path "/nat/instances/instance/id"; | |||
} | } | |||
mandatory true; | mandatory true; | |||
description | description | |||
"NAT instance Identifier."; | "NAT instance identifier."; | |||
} | } | |||
leaf notify-subscribers-threshold { | leaf notify-subscribers-threshold { | |||
type uint32; | type uint32; | |||
description | description | |||
"The notify-subscribers-limit threshold has been fired."; | "The notify-subscribers-limit threshold has been fired."; | |||
} | } | |||
leaf notify-addresses-threshold { | leaf notify-addresses-threshold { | |||
type percent; | type percent; | |||
description | description | |||
"The notify-addresses-usage threshold has been fired."; | "The notify-addresses-usage threshold has been fired."; | |||
} | } | |||
leaf notify-ports-threshold { | leaf notify-ports-threshold { | |||
type percent; | type percent; | |||
description | description | |||
"The notify-ports-usage threshold has been fired."; | "The notify-ports-usage threshold has been fired."; | |||
} | } | |||
} | } | |||
} | } | |||
End of changes. 372 change blocks. | ||||
1112 lines changed or deleted | 874 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/ |