| ietf-dslite.OGyang | ietf-dslite.yang | |||
|---|---|---|---|---|
| module ietf-dslite { | module ietf-dslite { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-dslite"; | namespace "urn:ietf:params:xml:ns:yang:ietf-dslite"; | |||
| prefix dslite; | prefix dslite; | |||
| 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-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"; | |||
| } | } | |||
| import iana-if-type { | ||||
| import iana-if-type { | ||||
| prefix ianaift; | prefix ianaift; | |||
| reference | reference | |||
| "RFC 7224: IANA Interface Type YANG Module"; | "RFC 7224: IANA Interface Type YANG Module"; | |||
| } | } | |||
| import ietf-nat { | import ietf-nat { | |||
| prefix nat; | prefix nat; | |||
| reference | reference | |||
| "RFC 8512: A YANG Module for Network Address Translation (NAT) | "RFC 8512: A YANG Module for Network Address Translation (NAT) | |||
| and Network Prefix Translation (NPT)"; | and Network Prefix Translation (NPT)"; | |||
| } | } | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference | reference | |||
| "Section 3 of RFC 6991"; | "Section 3 of RFC 6991"; | |||
| } | } | |||
| organization "IETF Softwire Working Group"; | organization | |||
| "IETF Softwire Working Group"; | ||||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/softwire/> | "WG Web: <https://datatracker.ietf.org/wg/softwire/> | |||
| WG List: <mailto:softwires@ietf.org> | WG List: <mailto:softwires@ietf.org> | |||
| Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
| <mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
| Author: Christian Jacquenet | Author: Christian Jacquenet | |||
| <mailto:christian.jacquenet@orange.com> | <mailto:christian.jacquenet@orange.com> | |||
| Author: Senthil Sivakumar | Author: Senthil Sivakumar | |||
| skipping to change at line 53 ¶ | skipping to change at line 47 ¶ | |||
| WG List: <mailto:softwires@ietf.org> | WG List: <mailto:softwires@ietf.org> | |||
| Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
| <mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
| Author: Christian Jacquenet | Author: Christian Jacquenet | |||
| <mailto:christian.jacquenet@orange.com> | <mailto:christian.jacquenet@orange.com> | |||
| Author: Senthil Sivakumar | Author: Senthil Sivakumar | |||
| <mailto:ssenthil@cisco.com>"; | <mailto:ssenthil@cisco.com>"; | |||
| description | ||||
| "This module is a YANG module for DS-Lite AFTR and B4 | ||||
| implementations. | ||||
| description | Copyright (c) 2018 IETF Trust and the persons identified as | |||
| "This module is a YANG module for DS-Lite AFTR and B4 | authors of the code. All rights reserved. | |||
| implementations. | ||||
| Copyright (c) 2018 IETF Trust and the persons identified as | ||||
| 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 8513; see | This version of this YANG module is part of RFC 8513; see | |||
| the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
| revision 2018-12-14 { | revision 2018-12-14 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC 8513: A YANG Data Model for Dual-Stack Lite (DS-Lite)"; | "RFC 8513: A YANG Data Model for Dual-Stack Lite (DS-Lite)"; | |||
| } | } | |||
| /* | /* | |||
| * Features | * Features | |||
| */ | */ | |||
| feature b4 { | feature b4 { | |||
| description | description | |||
| "The B4 element is a function implemented on a dual-stack-capable | "The B4 element is a function implemented on a dual-stack-capable | |||
| node, either a directly connected device or Customer Premises | node, either a directly connected device or Customer Premises | |||
| Equipment (CPE), that creates a tunnel to an AFTR."; | Equipment (CPE), that creates a tunnel to an AFTR."; | |||
| reference | reference | |||
| "Section 5 of RFC 6333"; | "Section 5 of RFC 6333"; | |||
| } | } | |||
| feature aftr { | feature aftr { | |||
| description | description | |||
| "An AFTR element is the combination of an IPv4-in-IPv6 tunnel | "An AFTR element is the combination of an IPv4-in-IPv6 tunnel | |||
| endpoint and an IPv4-IPv4 NAT implemented on the same node."; | endpoint and an IPv4-IPv4 NAT implemented on the same node."; | |||
| reference | reference | |||
| "Section 6 of RFC 6333"; | "Section 6 of RFC 6333"; | |||
| } | } | |||
| /* | /* | |||
| * Augments | * Augments | |||
| */ | */ | |||
| augment "/if:interfaces/if:interface" { | augment "/if:interfaces/if:interface" { | |||
| when 'derived-from(if:type, "ianaift:tunnel")'; | when 'derived-from(if:type, "ianaift:tunnel")'; | |||
| description | description | |||
| "Augments Interface module with DS-Lite parameters. | "Augments Interface module with DS-Lite parameters. | |||
| IANA interface types are maintained at this registry: | IANA interface types are maintained at this registry: | |||
| <https://www.iana.org/assignments/ianaiftype-mib/>. | <https://www.iana.org/assignments/ianaiftype-mib/>. | |||
| tunnel (131), -- Encapsulation interface"; | tunnel (131), -- Encapsulation interface"; | |||
| skipping to change at line 136 ¶ | skipping to change at line 127 ¶ | |||
| 192.0.0.1 is reserved for the AFTR element, while | 192.0.0.1 is reserved for the AFTR element, while | |||
| 192.0.0.0/29 is reserved for the B4 element. | 192.0.0.0/29 is reserved for the B4 element. | |||
| This address can be used to report ICMP problems and will | This address can be used to report ICMP problems and will | |||
| appear in traceroute outputs."; | appear in traceroute outputs."; | |||
| reference | reference | |||
| "RFC 6333: Dual-Stack Lite Broadband Deployments Following | "RFC 6333: Dual-Stack Lite Broadband Deployments Following | |||
| IPv4 Exhaustion"; | IPv4 Exhaustion"; | |||
| } | } | |||
| leaf aftr-ipv6-addr { | leaf aftr-ipv6-addr { | |||
| if-feature b4; | if-feature "b4"; | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Indicates the AFTR's IPv6 address to be used by a B4 | "Indicates the AFTR's IPv6 address to be used by a B4 | |||
| element."; | element."; | |||
| reference | reference | |||
| "RFC 6333: Dual-Stack Lite Broadband Deployments Following | "RFC 6333: Dual-Stack Lite Broadband Deployments Following | |||
| IPv4 Exhaustion"; | IPv4 Exhaustion"; | |||
| } | } | |||
| leaf tunnel-mtu { | leaf tunnel-mtu { | |||
| type uint16; | type uint16; | |||
| description | description | |||
| "Configures a tunnel MTU. | "Configures a tunnel MTU. | |||
| RFC 6908 specifies that since fragmentation and reassembly | RFC 6908 specifies that since fragmentation and reassembly | |||
| are not optimal, the operator should do everything possible | are not optimal, the operator should do everything possible | |||
| to eliminate the need for them. If the operator uses simple | to eliminate the need for them. If the operator uses simple | |||
| IPv4-in-IPv6 softwire, it is recommended that the MTU size | IPv4-in-IPv6 softwire, it is recommended that the MTU size | |||
| of the IPv6 network between the B4 and the AFTR account | of the IPv6 network between the B4 and the AFTR account | |||
| skipping to change at line 177 ¶ | skipping to change at line 165 ¶ | |||
| According to Section 2.10 of RFC 6908, operators should | According to Section 2.10 of RFC 6908, operators should | |||
| use the uniform model by provisioning the network such | use the uniform model by provisioning the network such | |||
| that the AFTR/B4 copies the DSCP value in the IPv4 header | that the AFTR/B4 copies the DSCP value in the IPv4 header | |||
| to the Traffic Class field in the IPv6 header, after the | to the Traffic Class field in the IPv6 header, after the | |||
| IPv4-in-IPv6 encapsulation."; | IPv4-in-IPv6 encapsulation."; | |||
| reference | reference | |||
| "Section 2.10 of RFC 6908"; | "Section 2.10 of RFC 6908"; | |||
| } | } | |||
| } | } | |||
| augment "/nat:nat/nat:instances/nat:instance/nat:policy" { | augment "/nat:nat/nat:instances/nat:instance/nat:policy" { | |||
| when "derived-from-or-self(/nat:nat/nat:instances/nat:instance/" + | when "derived-from-or-self(/nat:nat/nat:instances/nat:instance/" + | |||
| "nat:type, 'nat:napt44')" + | "nat:type, 'nat:napt44')" + | |||
| " and /nat:nat/nat:instances/nat:instance/" + | " and /nat:nat/nat:instances/nat:instance/" + | |||
| "nat:per-interface-binding='dslite'"; | "nat:per-interface-binding='dslite'"; | |||
| if-feature aftr; | if-feature "aftr"; | |||
| description | description | |||
| "Augments the NAPT44 module with AFTR parameters."; | "Augments the NAPT44 module with AFTR parameters."; | |||
| leaf max-softwires-per-subscriber { | leaf max-softwires-per-subscriber { | |||
| type uint8; | type uint8; | |||
| default 1; | default "1"; | |||
| description | description | |||
| "Configures the maximum softwires per subscriber feature. | "Configures the maximum softwires per subscriber feature. | |||
| A subscriber is uniquely identified by means | A subscriber is uniquely identified by means | |||
| of a subscriber-mask (subscriber-mask-v6). | of a subscriber-mask (subscriber-mask-v6). | |||
| This policy aims to prevent a misbehaving subscriber from | This policy aims to prevent a misbehaving subscriber from | |||
| mounting several DS-Lite softwires that would consume | mounting several DS-Lite softwires that would consume | |||
| additional AFTR resources (e.g., get more external ports | additional AFTR resources (e.g., get more external ports | |||
| if the quota was enforced on a per-softwire basis and | if the quota was enforced on a per-softwire basis and | |||
| skipping to change at line 202 ¶ | skipping to change at line 188 ¶ | |||
| A subscriber is uniquely identified by means | A subscriber is uniquely identified by means | |||
| of a subscriber-mask (subscriber-mask-v6). | of a subscriber-mask (subscriber-mask-v6). | |||
| This policy aims to prevent a misbehaving subscriber from | This policy aims to prevent a misbehaving subscriber from | |||
| mounting several DS-Lite softwires that would consume | mounting several DS-Lite softwires that would consume | |||
| additional AFTR resources (e.g., get more external ports | additional AFTR resources (e.g., get more external ports | |||
| if the quota was enforced on a per-softwire basis and | if the quota was enforced on a per-softwire basis and | |||
| consume extra processing due to a large number of active | consume extra processing due to a large number of active | |||
| softwires)."; | softwires)."; | |||
| reference | reference | |||
| "Section 4 of RFC 7785"; | "Section 4 of RFC 7785"; | |||
| } | } | |||
| leaf state-migrate { | leaf state-migrate { | |||
| type boolean; | type boolean; | |||
| default true; | default "true"; | |||
| description | description | |||
| "State migration is enabled by default. | "State migration is enabled by default. | |||
| In the event a new IPv6 address is assigned to the B4 element, | In the event a new IPv6 address is assigned to the B4 element, | |||
| the AFTR should migrate existing state to be bound to the new | the AFTR should migrate existing state to be bound to the new | |||
| IPv6 address. This operation ensures that traffic destined to | IPv6 address. This operation ensures that traffic destined to | |||
| the previous B4's IPv6 address will be redirected to the newer | the previous B4's IPv6 address will be redirected to the newer | |||
| B4's IPv6 address. The destination IPv6 address for tunneling | B4's IPv6 address. The destination IPv6 address for tunneling | |||
| return traffic from the AFTR should be the last seen as the | return traffic from the AFTR should be the last seen as the | |||
| B4's IPv6 source address from the user device (e.g., CPE). | B4's IPv6 source address from the user device (e.g., CPE). | |||
| skipping to change at line 226 ¶ | skipping to change at line 210 ¶ | |||
| the previous B4's IPv6 address will be redirected to the newer | the previous B4's IPv6 address will be redirected to the newer | |||
| B4's IPv6 address. The destination IPv6 address for tunneling | B4's IPv6 address. The destination IPv6 address for tunneling | |||
| return traffic from the AFTR should be the last seen as the | return traffic from the AFTR should be the last seen as the | |||
| B4's IPv6 source address from the user device (e.g., CPE). | B4's IPv6 source address from the user device (e.g., CPE). | |||
| The AFTR uses the subscriber-mask-v6 to determine whether two | The AFTR uses the subscriber-mask-v6 to determine whether two | |||
| IPv6 addresses belong to the same CPE (e.g., if the | IPv6 addresses belong to the same CPE (e.g., if the | |||
| subscriber-mask-v6 is set to 56, the AFTR concludes that | subscriber-mask-v6 is set to 56, the AFTR concludes that | |||
| 2001:db8:100:100::1 and 2001:db8:100:100::2 belongs to the same | 2001:db8:100:100::1 and 2001:db8:100:100::2 belongs to the same | |||
| CPE assigned with 2001:db8:100:100::/56)."; | CPE assigned with 2001:db8:100:100::/56)."; | |||
| reference | reference | |||
| "RFC 7785: Recommendations for Prefix Binding in the Context | "RFC 7785: Recommendations for Prefix Binding in the Context | |||
| of Softwire Dual-Stack Lite"; | of Softwire Dual-Stack Lite"; | |||
| } | } | |||
| leaf b4-address-change-limit { | leaf b4-address-change-limit { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| default '1800'; | default "1800"; | |||
| description | description | |||
| "Minimum number of seconds between a successive B4's IPv6 | "Minimum number of seconds between a successive B4's IPv6 | |||
| address change from the same prefix. | address change from the same prefix. | |||
| Changing the source B4's IPv6 address may be used as an attack | Changing the source B4's IPv6 address may be used as an attack | |||
| vector. Packets with a new B4's IPv6 address from the same | vector. Packets with a new B4's IPv6 address from the same | |||
| prefix should be rate-limited. | prefix should be rate-limited. | |||
| It is recommended that this rate limit be set to 30 minutes; | It is recommended that this rate limit be set to 30 minutes; | |||
| other values can be set on a per-deployment basis."; | other values can be set on a per-deployment basis."; | |||
| skipping to change at line 246 ¶ | skipping to change at line 228 ¶ | |||
| description | description | |||
| "Minimum number of seconds between a successive B4's IPv6 | "Minimum number of seconds between a successive B4's IPv6 | |||
| address change from the same prefix. | address change from the same prefix. | |||
| Changing the source B4's IPv6 address may be used as an attack | Changing the source B4's IPv6 address may be used as an attack | |||
| vector. Packets with a new B4's IPv6 address from the same | vector. Packets with a new B4's IPv6 address from the same | |||
| prefix should be rate-limited. | prefix should be rate-limited. | |||
| It is recommended that this rate limit be set to 30 minutes; | It is recommended that this rate limit be set to 30 minutes; | |||
| other values can be set on a per-deployment basis."; | other values can be set on a per-deployment basis."; | |||
| reference | reference | |||
| "RFC 7785: Recommendations for Prefix Binding in the Context | "RFC 7785: Recommendations for Prefix Binding in the Context | |||
| of Softwire Dual-Stack Lite"; | of Softwire Dual-Stack Lite"; | |||
| } | } | |||
| container mss-clamping { | container mss-clamping { | |||
| description | description | |||
| "MSS rewriting configuration to avoid IPv6 fragmentation."; | "MSS rewriting configuration to avoid IPv6 fragmentation."; | |||
| leaf enable { | leaf enable { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Enable/disable MSS rewriting feature."; | "Enable/disable MSS rewriting feature."; | |||
| } | } | |||
| leaf mss-value { | leaf mss-value { | |||
| type uint16; | type uint16; | |||
| units "octets"; | units "octets"; | |||
| description | description | |||
| "Sets the MSS value to be used for MSS rewriting."; | "Sets the MSS value to be used for MSS rewriting."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| augment "/nat:nat/nat:instances/nat:instance/" + | ||||
| augment "/nat:nat/nat:instances/nat:instance/"+ | ||||
| "nat:mapping-table/nat:mapping-entry" { | "nat:mapping-table/nat:mapping-entry" { | |||
| when "derived-from-or-self(/nat:nat/nat:instances/nat:instance/" + | when "derived-from-or-self(/nat:nat/nat:instances/nat:instance/" + | |||
| "nat:type, 'nat:napt44')" + | "nat:type, 'nat:napt44')" + | |||
| " and /nat:nat/nat:instances/nat:instance/" + | " and /nat:nat/nat:instances/nat:instance/" + | |||
| "nat:per-interface-binding='dslite'"; | "nat:per-interface-binding='dslite'"; | |||
| if-feature aftr; | if-feature "aftr"; | |||
| description | description | |||
| "Augments the NAPT44 mapping table with DS-Lite specifics."; | "Augments the NAPT44 mapping table with DS-Lite specifics."; | |||
| container b4-ipv6-address { | container b4-ipv6-address { | |||
| description | description | |||
| "Records the IPv6 address used by a B4 element and the last | "Records the IPv6 address used by a B4 element and the last | |||
| time that address changed."; | time that address changed."; | |||
| leaf address { | leaf address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Corresponds to the IPv6 address used by a B4 element."; | "Corresponds to the IPv6 address used by a B4 element."; | |||
| reference | reference | |||
| "RFC 6333: Dual-Stack Lite Broadband Deployments Following | "RFC 6333: Dual-Stack Lite Broadband Deployments Following | |||
| IPv4 Exhaustion"; | IPv4 Exhaustion"; | |||
| } | } | |||
| leaf last-address-change { | leaf last-address-change { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Records the last time that the address changed."; | "Records the last time that the address changed."; | |||
| } | } | |||
| } | } | |||
| leaf v6-dscp { | leaf v6-dscp { | |||
| when "/if:interfaces/if:interface/" + | when "/if:interfaces/if:interface/" + | |||
| "dslite:v6-v4-dscp-preservation='true'"; | "dslite:v6-v4-dscp-preservation='true'"; | |||
| type inet:dscp; | type inet:dscp; | |||
| description | description | |||
| "DSCP value used at the softwire level (i.e., IPv6 header)."; | "DSCP value used at the softwire level (i.e., IPv6 header)."; | |||
| } | } | |||
| leaf internal-v4-dscp { | leaf internal-v4-dscp { | |||
| when "/if:interfaces/if:interface/" + | when "/if:interfaces/if:interface/" + | |||
| "dslite:v6-v4-dscp-preservation='true'"; | "dslite:v6-v4-dscp-preservation='true'"; | |||
| type inet:dscp; | type inet:dscp; | |||
| description | description | |||
| "DSCP value of the encapsulated IPv4 packet."; | "DSCP value of the encapsulated IPv4 packet."; | |||
| } | } | |||
| leaf external-v4-dscp { | leaf external-v4-dscp { | |||
| when "/if:interfaces/if:interface/" + | when "/if:interfaces/if:interface/" + | |||
| "dslite:v6-v4-dscp-preservation='true'"; | "dslite:v6-v4-dscp-preservation='true'"; | |||
| type inet:dscp; | type inet:dscp; | |||
| description | description | |||
| "DSCP value of the translated IPv4 packet as marked by | "DSCP value of the translated IPv4 packet as marked by | |||
| the AFTR."; | the AFTR."; | |||
| } | } | |||
| } | } | |||
| augment "/nat:nat/nat:instances/nat:instance/" + | ||||
| augment "/nat:nat/nat:instances/nat:instance/nat:statistics/" + | "nat:statistics/nat:mappings-statistics" { | |||
| "nat:mappings-statistics" { | if-feature "aftr"; | |||
| if-feature aftr; | ||||
| description | description | |||
| "Indicates the number of active softwires."; | "Indicates the number of active softwires."; | |||
| leaf active-softwires { | ||||
| leaf active-softwires{ | ||||
| type yang:gauge32; | type yang:gauge32; | |||
| description | description | |||
| "The number of currently active softwires on the AFTR | "The number of currently active softwires on the AFTR | |||
| instance."; | instance."; | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * Notifications | * Notifications | |||
| */ | */ | |||
| notification b4-address-change-limit-policy-violation { | notification b4-address-change-limit-policy-violation { | |||
| if-feature aftr; | if-feature "aftr"; | |||
| description | description | |||
| "Generates notifications when a B4 unsuccessfully attempts | "Generates notifications when a B4 unsuccessfully attempts | |||
| to change the IPv6 address in a time shorter than the value | to change the IPv6 address in a time shorter than the value | |||
| of b4-address-change-limit. | of b4-address-change-limit. | |||
| Notifications are rate-limited (notify-interval)."; | Notifications are rate-limited (notify-interval)."; | |||
| leaf id { | leaf id { | |||
| type leafref { | type leafref { | |||
| path "/nat:nat/nat:instances/nat:instance/nat:id"; | path "/nat:nat/nat:instances/nat:instance/nat: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:nat/nat:instances/nat:instance/nat:policy/nat:id"; | path "/nat:nat/nat:instances/nat:instance/nat:policy/nat:id"; | |||
| } | } | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Policy identifier."; | "Policy identifier."; | |||
| } | } | |||
| leaf address { | leaf address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "B4's IPv6 address."; | "B4's IPv6 address."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| End of changes. 45 change blocks. | ||||
| 68 lines changed or deleted | 37 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/ | ||||