Softwire Working Group Q. Sun Internet-Draft H. Wang Intended status: Standards Track Y. Cui Expires: August 16, 2015 Tsinghua University I. Farrer Deutsche Telekom AG M. Boucadair France Telecom R. Asati Cisco Systems, Inc. February 12, 2015 YANG Data Model for IPv4-in-IPv6 Softwire draft-sun-softwire-yang-02 Abstract This document defines a YANG data model for the configuration and management of IPv4-in-IPv6 Softwire Border Routers and Customer Premises Equipment. It covers Lightweight 4over6, MAP-E and MAP-T Softwire mechanisms. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on August 16, 2015. Sun, et al. Expires August 16, 2015 [Page 1] Internet-Draft YANG for softwire February 2015 Copyright Notice Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 1.2. YANG Modelling of NAT44 Functionality . . . . . . . . . . 4 2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1. Common . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Lightweight 4over6 AFTR . . . . . . . . . . . . . . . . . 4 2.3. Lightweight 4over6 lwB4 . . . . . . . . . . . . . . . . . 5 2.4. MAP-E . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.5. MAP-T . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3. Softwire YANG Tree Diagrams . . . . . . . . . . . . . . . . . 5 3.1. Common Tree Diagrams . . . . . . . . . . . . . . . . . . 5 3.2. Lightweight 4over6 AFTR Tree Diagrams . . . . . . . . . . 6 3.3. Lightweight 4over6 lwB4 Tree Diagrams . . . . . . . . . . 7 3.4. MAP-E Tree Diagrams . . . . . . . . . . . . . . . . . . . 9 3.5. MAP-T Tree Diagrams . . . . . . . . . . . . . . . . . . . 11 3.6. Notifications for Softwire YANG . . . . . . . . . . . . . 13 4. Softwire YANG Model . . . . . . . . . . . . . . . . . . . . . 13 5. Example of Configure Lw4over6 Binding-Table . . . . . . . . . 30 6. Security Considerations (TBD) . . . . . . . . . . . . . . . . 31 7. IANA Considerations (TBD) . . . . . . . . . . . . . . . . . . 31 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 9.1. Normative References . . . . . . . . . . . . . . . . . . 32 9.2. Informative References . . . . . . . . . . . . . . . . . 32 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 1. Introduction The IETF Softwire Working Group has developed several IPv4-in-IPv6 Softwire mechanisms to address various deployment contexts and constraints. As a companion to the architectural specification Sun, et al. Expires August 16, 2015 [Page 2] Internet-Draft YANG for softwire February 2015 documents, this document focuses on the provisioning aspects for softwire functional elements that are: Border Routers (BRs) and Customer Premises Equipment (CPEs). This document defines a YANG data model that can be used for the configuration and management of IPv4-in-IPv6 Softwire BRs and/or CPEs. To ensure interoperability in mixed vendor environments, it is important that the models can be easily reused between different vendors and implementations. Due to the inherent similarities of the data plane forwarding, the configuration and management parameters of the different softwire mechanisms are defined in the same YANG model. Parameters that are common to all solutions are abstracted in the common module while specific parameters are defined in individual modules that are specific to a given mechanism (see for example, [I-D.ietf-softwire-unified-cpe]). Each specific softwire mechanism has their own individual YANG modules: o Lightweight 4over6 [I-D.ietf-softwire-lw4over6] o MAP-E [I-D.ietf-softwire-map] o MAP-T [I-D.ietf-softwire-map-t] This model is structured into two root containers: 1. Container "softwire-config" holds the collection of YANG definitions common to all softwire configuration of BRs and CPEs. 2. Container "softwire-state" holds YANG definitions for the operational state of the Softwire BRs and CPEs. This approach has been taken so that the model can be easily extended in the future to support additional softwire mechanism, should this be necessary. 1.1. Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. The reader should be familiar with the terms defined in [I-D.ietf-softwire-lw4over6] [I-D.ietf-softwire-map] [I-D.ietf-softwire-map-t] , and the YANG data modelling language Sun, et al. Expires August 16, 2015 [Page 3] Internet-Draft YANG for softwire February 2015 [RFC6020]. A simplified graphical representation of the data model is provided in this document. [RFC6087] provides definitions of the symbols used in these diagrams. 1.2. YANG Modelling of NAT44 Functionality This documented model does not include NAT-specific provisioning parameters other than the external IP address and port set which a softwire client may use for NAT44. Additional NAT-specific considerations are out of scope. 2. Objectives This document defines a YANG data model that can be used to configure and manage BRs and CPEs for the following IPv4-in-IPv6 Softwire mechanisms: Lightweight 4over6, MAP-E and MAP-T. For the lightweight 4over6, the configure and manage information of lwB4 and lwAFTR are different. The lw4over6 AFTRs needs to maintain the binding table of lwB4s. The lw4o6 lwB4s need to maintain the NAPT table of hosts. For the MAP-T and MAP-T, CE and BR both need to maintain the map-rule table. Thus, there is no need to distinguish BR and CE. 2.1. Common This common model abstracts the shared features of different BRs and CPEs such as softwire type, maximum number of softwires, etc. The following sections of the document are structured with the root of the softwire YANG model (common to all mechanisms) described first. The subsequent sections describe the models relevant to the different softwire mechanisms. All functions are listed, but the YANG models use the "feature" statement to distinguish among the different softwire mechanisms. 2.2. Lightweight 4over6 AFTR The lw4over6 AFTR holds configuration for IPv4-IPv6 address bindings. This is used for the forwarding of traffic originating from lwB4s. Sun, et al. Expires August 16, 2015 [Page 4] Internet-Draft YANG for softwire February 2015 2.3. Lightweight 4over6 lwB4 The lw4over6 lwB4 is configured with the relevant parameters for establishing the IPv4 in IPv6 tunnel including an IPv6 address for the lwAFTR and the IPv4 configuration for NAPT44. 2.4. MAP-E MAP-E elements (BR and CPE) are provisioned with the MAP rules necessary for defining MAP domains and forwarding rules. 2.5. MAP-T MAP-E elements (BR and CPE) are provisioned with the MAP rules necessary for defining MAP domains and forwarding rules. MAP-T CPEs an additional "ipv6-prefix" parameter is also configured. 3. Softwire YANG Tree Diagrams 3.1. Common Tree Diagrams Figure 1 describes the softwire data model which is common to all of the different softwire mechanisms listed in Section 1: +--rw softwire-config | +--rw enable? boolean | +--rw description? string | +--rw tunnel-mtu uint32 | +--rw lw4over6-aftr? | +--rw lw4over6-b4? | +--rw map-e? | +--rw map-t? | +--ro softwire-state +--ro enable? boolean +--ro description? string +--ro tunnel-mtu uint32 +--ro lw4over6-aftr? +--ro lw4over6-b4? +--ro map-e? +--ro map-t? Figure 1: Softwire Common Data Model Structure The mechanism specific models for lw4over6-aftr, lw4over6-b4, MAP-E and MAP-T are described in detail in the following sections. Sun, et al. Expires August 16, 2015 [Page 5] Internet-Draft YANG for softwire February 2015 3.2. Lightweight 4over6 AFTR Tree Diagrams Figure 2 defines the softwire data model for Lightweight 4over6 AFTR: +--rw softwire-config | +--... | +--rw lw4over6-aftr | +--rw enable? boolean | +--rw lw4over6-aftr-instances | +--rw lw4over6-aftr-instance* [id] | +--rw id uint32 | +--rw name? string | +--rw softwire-num-threshold uint32 | +--rw binding-table | +--rw binding-entries* [binding-ipv6-addr] | +--rw binding-ipv6-addr inet:ipv6-address | +--rw binding-ipv6-prefix inet:ipv6-prefix | +--rw binding-ipv4-addr inet:ipv4-address | +--rw port-set | | +--rw offset uint8 | | +--rw psid uint16 | | +--rw psid-len uint8 | +--rw lwaftr-ipv6-addr? inet:ipv6-prefix | +--rw lifetime? uint32 | +--rw active? boolean +--ro softwire-state +--... +--ro lw4over6-aftr +--ro enable? boolean +--ro lw4over6-aftr-instances +--ro lw4over6-aftr-instance* [id] +--ro id uint32 +--ro name? string +--ro active-softwire-num uint32 +--ro binding-table +--ro binding-entries* [binding-ipv6-addr] +--ro binding-ipv6-addr inet:ipv6-address +--ro binding-ipv6-prefix inet:ipv6-prefix +--ro binding-ipv4-addr inet:ipv4-address +--ro port-set | +--ro offset uint8 | +--ro psid uint16 | +--ro psid-len uint8 +--ro lwaftr-ipv6-addr? inet:ipv6-prefix +--ro active? boolean Figure 2: Softwire Lightweight 4over6 AFTR Data Model Structure Sun, et al. Expires August 16, 2015 [Page 6] Internet-Draft YANG for softwire February 2015 o Node "softwire-num-threshold" is used to set the maximum number of tunnels that can be created on the lw4over6 device simultaneously. o Node "active-softwire-num" is used to present the number of tunnels currently provisioned on the device. o Node "offset" is used to set the number of offset bits as in the PSID algorithm. o Node "psid" is used to algorithmically identify a set of ports for a specific softwire. o Node "active" is used to add or delete a particular binding-entry. 3.3. Lightweight 4over6 lwB4 Tree Diagrams Figure 3 defines the softwire data model for a Lightweight 4over6 lwB4 element: Sun, et al. Expires August 16, 2015 [Page 7] Internet-Draft YANG for softwire February 2015 module: ietf-softwire +--rw softwire-config | +--... | +--rw lw4over6-b4 | +--rw enable? boolean | +--rw lw4over6-b4-instances | +--rw lw4over6-b4-instance* [binding-ipv6-addr] | +--rw name? string | +--rw b4-ipv6-addr-format boolean | +--rw binding-ipv6-addr inet:ipv6-address | +--rw binding-ipv6-prefix inet:ipv6-prefix | +--rw binding-ipv4-addr inet:ipv4-address | +--rw port-set | | +--rw offset uint8 | | +--rw psid uint16 | | +--rw psid-len uint8 | +--rw lwaftr-ipv6-addr? inet:ipv6-prefix | +--rw lifetime? uint32 | +--rw nat-table | +--... +--ro softwire-state +--... +--ro lw4over6-b4 +--ro enable? boolean +--ro lw4over6-b4-instances +--ro lw4over6-b4-instance* [binding-ipv6-addr] +--ro name? string +--ro b4-ipv6-addr-format boolean +--ro binding-ipv6-addr inet:ipv6-address +--ro binding-ipv6-prefix inet:ipv6-prefix +--ro binding-ipv4-addr inet:ipv4-address +--ro port-set | +--ro offset uint8 | +--ro psid uint16 | +--ro psid-len uint8 +--ro lwaftr-ipv6-addr? inet:ipv6-prefix +--ro nat-table +--... Figure 3: Softwire Lightweight 4over6 lwB4 Data Model Structure o Node "b4-ipv6-addr-format" indicates the format of lwB4 IPv6 address. If set to true, it indicates that the IPv6 source address of the lwB4 is constructed according to the description in [I-D.ietf-softwire-lw4over6]; if set to false, the lwB4 can use any /128 address from the assigned IPv6 prefix. Sun, et al. Expires August 16, 2015 [Page 8] Internet-Draft YANG for softwire February 2015 o Node "binding-ipv4-addr" is used to configure an IPv4 address to the lwB4. o Node "offset" is used to set the number of offset bits. o Node "psid" is used to algorithmically identifies a set of ports exclusively, it is allocated by vendors and calculated by devices. o Node "bind-ipv6-prefix" is used to perform a longest prefix match against the active IPv6 addresses configured on the lwB4 so that a suitable tunnel source address prefix can be selected. o Container "nat-table" is not extended. It means that the focus is on the provisioning of the external IP address and/or port set; other NAT-specific considerations are out of scope. 3.4. MAP-E Tree Diagrams Figure 4 defines the softwire data model for MAP-E: Sun, et al. Expires August 16, 2015 [Page 9] Internet-Draft YANG for softwire February 2015 module: ietf-softwire +--rw softwire-config | +--... | +--rw map-e {map-e}? | +--rw enable? boolean | +--rw map-e-instances | +--rw map-e-instance* [id] | +--rw id uint32 | +--rw name? string | +--rw map-rule-table | | +--rw map-rules* [id] | | +--rw id uint32 | | +--rw map-rule-type enumeration | | +--rw rule-ipv6-prefix inet:ipv6-prefix | | +--rw rule-ipv4-prefix inet:ipv4-prefix | | +--rw port-set | | | +--rw offset uint8 | | | +--rw psid uint16 | | | +--rw psid-len uint8 | | +--rw ea-len uint8 | +--rw br-ipv6-addr? inet:ipv6-address +--ro softwire-state +--... +--ro map-e {map-e}? +--ro enable? boolean +--ro map-e-instances +--ro map-e-instance* [id] +--ro id uint32 +--ro map-rule-table | +--ro map-rules* [id] | +--ro id string | +--ro map-rule-type enumeration | +--ro rule-ipv6-prefix inet:ipv6-prefix | +--ro rule-ipv4-prefix inet:ipv4-prefix | +--ro port-set | | +--ro offset uint8 | | +--ro psid uint16 | | +--ro psid-len uint8 | +--ro ea-len uint8 +--ro br-ipv6-addr inet:ipv6-address Figure 4: Softwire MAP-E Data Model Structure o Node "map-rule-type" is used to define the type of map rule. The data type is enumeration, which are "BMR" and "FMR". o Node "offset" is used to set the number of offset bits. Sun, et al. Expires August 16, 2015 [Page 10] Internet-Draft YANG for softwire February 2015 o Node "psid" is used to algorithmically identify a set of ports exclusively for a specific softwire. o Node "ea-len" is used to set the length of the Embedded- Address (EA), which defined in the mapping rule for a MAP domain. 3.5. MAP-T Tree Diagrams Figure 5 defines the softwire data model for MAP-T: Sun, et al. Expires August 16, 2015 [Page 11] Internet-Draft YANG for softwire February 2015 module: ietf-softwire +--rw softwire-config | +--... | +--rw map-t {map-t}? | +--rw enable? boolean | +--rw map-t-instances | +--rw map-t-instance* [id] | +--rw id uint32 | +--rw name? string | +--rw map-rule-table | | +--rw map-rules* [id] | | +--rw id uint8 | | +--rw map-rule-type enumeration | | +--rw rule-ipv6-prefix inet:ipv6-prefix | | +--rw rule-ipv4-prefix inet:ipv4-prefix | | +--rw port-set | | | +--rw offset uint8 | | | +--rw psid uint16 | | | +--rw psid-len uint8 | | +--rw ea-len uint8 | +--rw dmr-ipv6-prefix? inet:ipv6-prefix +--ro softwire-state +--... +--ro map-t {map-t}? +--ro enable? boolean +--ro map-t-instances +--ro map-t-instance* [id] +--ro id uint32 +--ro map-rule-table | +--ro map-rules* [id] | +--ro id uint32 | +--ro map-rule-type enumeration | +--ro rule-ipv6-prefix inet:ipv6-prefix | +--ro rule-ipv4-prefix inet:ipv4-prefix | +--ro port-set | | +--ro offset uint8 | | +--ro psid uint16 | | +--ro psid-len uint8 | +--ro ea-len uint8 +--ro map-t-ce {map-t-ce}? +--ro dmr-ipv6-prefix? inet:ipv6-prefix Figure 5: Softwire MAP-T Data Model Structure o Node "map-rule-type" is used to define the type of map rule. The data type is enumeration, which are "BMR" and "FMR". Sun, et al. Expires August 16, 2015 [Page 12] Internet-Draft YANG for softwire February 2015 o Node "dmr-ipv6-prefix" defines the DMR in MAP-T. o Node "offset" is used to set the number of offset bits. o Node "psid" is used to algorithmically identify a set of ports exclusively for a specific softwire. o Node "ea-len" is used to set the length of the Embedded- Address (EA), which defined in the mapping rule for a MAP domain. 3.6. Notifications for Softwire YANG This section describes the diagram tree for the notifications. These notifications pertain to configuration and monitoring portions of specific Softwire machanisms. The logic is that, the softwire instance notifies the NETCONF client with the index for a mapping entry and then the NETCONF client retrieves the related information from the operational datastore of that instance. module: ietf-softwire notifications: +---n softwire-lwaftr-event {lw4over6-aftr}? | +--ro lwaftr-id leafref | +--ro exceed-sw-num-limit? boolean | +--ro invalid-entry* leafref | +--ro added-entry* inet:ipv6-address | +--ro modified-entry* leafref +---n softwire-lwb4-event {lw4over6-b4}? | +--ro lwb4-binding-ipv6-addr-change inet:ipv6-address +---n softwire-map-e-event {map-e}? | +--ro map-e-id leafref | +--ro invalid-entry-id* leafref | +--ro added-entry* uint32 | +--ro modified-entry* leafref +---n softwire-map-t-event {map-t}? +--ro map-t-id leafref +--ro invalid-entry-id* leafref +--ro added-entry* uint32 +--ro modified-entry* leafref Figure 6: Softwire Notifications Data Model Structure 4. Softwire YANG Model This module imports typedefs from [RFC6991]. file "ietf-softwire@2015-02-10.yang" Sun, et al. Expires August 16, 2015 [Page 13] Internet-Draft YANG for softwire February 2015 module ietf-softwire { namespace "urn:ietf:params:xml:ns:yang:softwire"; prefix "softwire"; import ietf-inet-types { prefix inet; } organization "Softwire Working Group"; contact " Qi Sun sunqi@csnet1.cs.tsinghua.edu.cn Hao Wang wangh13@mails.tsinghua.edu.cn Yong Cui yong@csnet1.cs.tsinghua.edu.cn Ian Farrer ian.farrer@telekom.de Mohamed Boucadair mohamed.boucadair@orange.com Rajiv Asati rajiva@cisco.com "; description "This document defines a YANG data model for the configuration and management of IPv4-in-IPv6 Softwire Border Routers and Customer Premises Equipment. It covers Lightweight 4over6, MAP-E and MAP-T Softwire mechanisms. Copyright (c) 2014 IETF Trust and the persons identified as authors of the code. All rights reserved. This version of this YANG module is part of RFC XXX; see the RFC itself for full legal notices."; revision 2015-02-10 { description "Add notifications."; } revision 2015-02-06 { description "Correct grammar errors; Reuse groupings; Update descriptions."; } revision 2015-02-02 { description "Initial revision."; } /* * Typedef */ Sun, et al. Expires August 16, 2015 [Page 14] Internet-Draft YANG for softwire February 2015 /* * Features */ feature lw4over6 { description "Lightweight 4over6 (lw4over6) is an IPv4-over-IPv6 tunnelling transition mechanism. Lightweight 4over6 is a solution designed specifically for complete independence between IPv6 subnet prefix (and /128 IPv6 address) and IPv4 address with or without IPv4 address sharing. This is accomplished by maintaining state for each softwire (per-subscriber state) in the central lwAFTR and a hub-and-spoke forwarding architecture. In order to delegate the NAPT function and achieve IPv4 address sharing, port-restricted IPv4 addresses needs to be allocated to CPEs."; reference "I-D.ietf-softwire-lw4over6"; } feature lw4over6-aftr { if-feature lw4over6; description "The AFTRs (BRs) for Lightweight 4over6, so-called lwAFTR. This feature indicates that a instance functions as a lwAFTR. A lwAFTR is an IPv4-in-IPv6 tunnel concentrator that maintains per-subscriber IPv4-IPv6 address binding. "; } feature lw4over6-b4 { if-feature lw4over6; description "The B4s (CPEs) for Lightweight 4over6, so-called lwB4. This feature indicates that a instance functions as a lwB4. A lwB4 is an IPv4-in-IPv6 tunnel initiator. It is dual-stack capable node, either a directly connected end-host or a CPE. It sources IPv4 conncections using the configured port-set and the public IPv4 address. "; } feature map-e { description "MAP-E is an IPv6 transition mechanism for transporting IPv4 packets across an IPv6 network using IP encapsulation. MAP-E allows for a reduction of the amount of centralized state using rules to express IPv4/IPv6 address mappings. This introduces an algorithmic relationship between the IPv6 subnet and IPv4 address. This relationship also allows the option of direct, meshed connectivity between users. Alternatively, Sun, et al. Expires August 16, 2015 [Page 15] Internet-Draft YANG for softwire February 2015 MAP-E can be configured to support IPv4/IPv6 indepent binding. This feature indicates the instance functions as a MAP-E instance. "; reference "I-D.ietf-softwire-map"; } feature map-e-ce { if-feature map-e; description "Indicates the instance functions as a MAP-E CPE."; //Not sure if this is needed. } feature map-t { description "The Mapping of Address and Port - Translation (MAP-T) architecture is a double stateless NAT64 based solution. It uses the stateless algorithmic address & transport layer port mapping scheme defined in MAP-E. The MAP-T solution differs from MAP-E in the use of IPv4-IPv6 translation, rather than encapsulation, as the form of IPv6 domain transport. This feature indicates the instance functions as a MAP-T instance. "; reference "I-D.ietf-softwire-map-t"; } feature map-t-ce { if-feature map-t; description "Indicates the instance functions as a MAP-T CPE."; //Not sure if this is needed. } /* * Grouping */ grouping port-set { description "Use the PSID algorithm to represent a range of transport layer ports."; leaf offset { mandatory true; type uint8 { range 0..16; } description Sun, et al. Expires August 16, 2015 [Page 16] Internet-Draft YANG for softwire February 2015 "The number of offset bits. In Lightweight 4over6, the defaul value is 0 for assigning one contiguous port range. In MAP-E/T, the default value is 6, which excludes system ports by default and assigns distributed port ranges. If the this parameter is larger than 0, the value of offset MUST be greater than 0. "; } leaf psid { mandatory true; type uint16; description "Port Set Identifier (PSID) value, which identifies a set of ports algorithmically."; } leaf psid-len { mandatory true; type uint8 { range 0..16; } description "The length of PSID, representing the sharing ratio for a IPv4 address."; } } grouping binding-entry { description "The lwAFTR maintains an address binding table that contains the binding between the lwB4's IPv6 address, the allocated IPv4 address and restricted port-set. "; leaf binding-ipv6-addr { mandatory true; type inet:ipv6-address; description "The /128 IPv6 address of the lwB4, which is used to bind the IPv4 address and port-set and source the tunnel. "; } leaf binding-ipv6-prefix { mandatory true; type inet:ipv6-prefix; description "The operator-assigned IPv6 prefix of the lwB4. "; } leaf binding-ipv4-addr { mandatory true; type inet:ipv4-address; description Sun, et al. Expires August 16, 2015 [Page 17] Internet-Draft YANG for softwire February 2015 "The IPv4 address assigned to the lwB4, which is used as the IPv4 External Address for lwB4 local NAPT44. "; } container port-set { uses port-set { refine offset { default "0"; } } } leaf lwaftr-ipv6-addr { type inet:ipv6-prefix; description "The IPv6 address for lwaftr. Optional for the binding entry."; } } grouping nat-table { description "Grouping 'nat-table' is not extended. The current mechanism is focusing on the provisioning of external IP address and port set; other NAT-specific considerations are out of scope for this model."; } grouping map-rule { description "A set of parameters describing the mapping between an IPv4 prefix, IPv4 address or shared IPv4 address and an IPv6 prefix or address. Each domain uses a differe mapping rule set. "; leaf map-rule-type { mandatory true; type enumeration { enum "BMR"; enum "FMR"; } description "The BMR and FMR share the rule format. BMR is used for a node to configure itself with IPv4 information retrived from the rule. FMR is designed for the in-domain 4-in-6 routing, used in mesh mode. A BMR can be FMR in some case. The DMR for map-t is defined separately. "; } leaf rule-ipv6-prefix { type inet:ipv6-prefix; mandatory true; description Sun, et al. Expires August 16, 2015 [Page 18] Internet-Draft YANG for softwire February 2015 "The Rule IPv6 prefix defined in the mapping rule. "; } leaf rule-ipv4-prefix { type inet:ipv4-prefix; mandatory true; description "The Rule IPv4 prefix defined in the mapping rule. "; } container port-set { uses port-set{ refine offset { default "6"; } } } leaf ea-len { mandatory true; type uint8; description "Embedded Address (EA) bits are the IPv4 EA-bits in the IPv6 address identify an IPv4 prefix/address (or part thereof) or a shared IPv4 address (or part thereof) and a port-set identifier. The length of the EA-bits is defined as part of a MAP rule for a MAP domain. "; } } /* * Configuration Data Nodes */ container softwire-config { description "The configuration data for Softwire instances. "; leaf enable { type boolean; default "true"; description "Enable/disable the Softwire function."; } leaf description { type string; description "A textual description of Softwire."; } Sun, et al. Expires August 16, 2015 [Page 19] Internet-Draft YANG for softwire February 2015 leaf tunnel-mtu { mandatory true; type uint32; description "The MTU for softwire tunnel."; } container lw4over6-aftr { if-feature lw4over6-aftr; description "Indicate this instance supports the lwAFTR function. The instances advertise the lw4over6-aftr feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Enable/disable the lwAFTR function."; } container lw4over6-aftr-instances { description "A set of lwAFTRs to be configured."; list lw4over6-aftr-instance { key "id"; leaf id { type uint32; } leaf name { type string; description "The name for the lw4over6-aftr."; } leaf softwire-num-threshold { mandatory true; type uint32; description "The maximum number of tunnels that can be created on the lwAFTR."; } container binding-table { list binding-entries { key "binding-ipv6-addr"; uses binding-entry; leaf lifetime { type uint32; units seconds; description "The lifetime for the entry."; } leaf active { Sun, et al. Expires August 16, 2015 [Page 20] Internet-Draft YANG for softwire February 2015 type boolean; default true; description "Establish or tear down the tunnel."; } } } } } } container lw4over6-b4 { if-feature lw4over6-b4; description "Indicate this instance supports the lwB4 function. The instances advertise the lw4over6-b4 feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Enable/disable the lwB4 function."; } container lw4over6-b4-instances { description "A set of lwB4s to be configured."; list lw4over6-b4-instance { key "binding-ipv6-addr"; leaf name { type string; description "The lw4over6-b4 name."; } leaf b4-ipv6-addr-format { type boolean; mandatory true; description "The format of lwB4 IPv6 address. If set to true, it indicates that the IPv6 source address of the lwB4 is constructed according to the description in [I-D.ietf-softwire-lw4over6]; if set to false, the lwB4 can use any /128 address from the assigned IPv6 prefix."; } uses binding-entry; leaf lifetime { type uint32; units seconds; } container nat-table { uses nat-table; description "To be extended."; Sun, et al. Expires August 16, 2015 [Page 21] Internet-Draft YANG for softwire February 2015 } } } } container map-e { if-feature map-e; description "Indicate the instances support the MAP-E function. The instances advertise the map-e feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; default "true"; description "Enable/disable the MAP-E function."; } container map-e-instances { description "A set of MAP-E instances to be configured, including BRs and CPEs."; list map-e-instance { key "id"; leaf id { type uint32; } leaf name { type string; } container map-rule-table { list map-rules { key "id"; leaf id { type uint32; } uses map-rule; } } leaf br-ipv6-addr { //if-feature map-e-ce; type inet:ipv6-address; description "The IPv6 address of the MAP-E BR."; } } } } container map-t { if-feature map-t; description Sun, et al. Expires August 16, 2015 [Page 22] Internet-Draft YANG for softwire February 2015 "Indicate the instances support the MAP-T function. The instances advertise the map-t feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; default "true"; description "Enable/disable the MAP-T function."; } container map-t-instances { description "A set of the MAP-T instances to be configured, including BRs and CPEs."; list map-t-instance { key "id"; leaf id { type uint32; } leaf name { type string; } container map-rule-table { list map-rules { key "id"; leaf id { type uint8; } uses map-rule; } } leaf dmr-ipv6-prefix { //if-feature map-t-ce; type inet:ipv6-prefix; description "The IPv6 prefix of the MAP-T BR. "; //I think both the BR and CE should be configured with this parameter for consistence. } } } } } /* * Operational state Data Nodes */ container softwire-state { config false; Sun, et al. Expires August 16, 2015 [Page 23] Internet-Draft YANG for softwire February 2015 description "The operational state data for Softwire instances. "; leaf enable { type boolean; description "Status of the Softwire function."; } leaf description { type string; description "A textual description of the softwire instances."; } leaf tunnel-mtu { mandatory true; type uint32; description "The tunnel MTU for softwire instances."; } container lw4over6-aftr { if-feature lw4over6-aftr; config false; description "Indicate this instance supports the lwAFTR function. The instances advertise the lw4over6-aftr feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Status of the lwAFTR function."; } container lw4over6-aftr-instances { description "A set of lwAFTRs."; list lw4over6-aftr-instance { key "id"; leaf id { type uint32; } leaf name { type string; description "The name for this lw4over6-aftr."; } leaf active-softwire-num { mandatory true; type uint32; description "The number of currently active tunnels on the lw4over6 instance."; } Sun, et al. Expires August 16, 2015 [Page 24] Internet-Draft YANG for softwire February 2015 container binding-table { list binding-entries { key "binding-ipv6-addr"; uses binding-entry; leaf active { type boolean; description "Status of a specific tunnel."; } } } } } } container lw4over6-b4 { if-feature lw4over6-b4; config false; description "Indicate this instance supports the lwB4 function. The instances advertise the lw4over6-b4 feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Status of the lwB4 function."; } container lw4over6-b4-instances { description "A set of lwB4s."; list lw4over6-b4-instance { key "binding-ipv6-addr"; leaf name { type string; } leaf b4-ipv6-addr-format { mandatory true; type boolean; description "The format of lwB4 IPv6 address. If the parameter is true, it indicates that the IPv6 source address of the lwB4 is constructed according to the description in [I-D.ietf-softwire-lw4over6]; if it's false, the lwB4 is using any /128 address from the assigned IPv6 prefix."; } uses binding-entry; container nat-table { uses nat-table; } Sun, et al. Expires August 16, 2015 [Page 25] Internet-Draft YANG for softwire February 2015 } } } container map-e { if-feature map-e; config false; description "Indicate the instances support the MAP-E function. The instances advertise the map-e feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Status of the MAP-E function."; } container map-e-instances { description "A set of MAP-E instances, including BRs and CPEs."; list map-e-instance { key "id"; leaf id { type uint32; } container map-rule-table { list map-rules { key "id"; leaf id { type string; } uses map-rule; } } leaf br-ipv6-addr { if-feature map-e-ce; mandatory true; type inet:ipv6-address; description "The IPv6 address of the MAP-E BR."; // Where should this be, inside or outside the list?? } } } } container map-t { if-feature map-t; config false; description "Indicate the instances support the MAP-T function. The instances Sun, et al. Expires August 16, 2015 [Page 26] Internet-Draft YANG for softwire February 2015 advertise the map-t feature through the capability exchange mechanism when a NETCONF session is established."; leaf enable { type boolean; description "Status of the MAP-T function."; } container map-t-instances { description "A set of the MAP-T instances, including BRs and CPEs."; list map-t-instance { key "id"; leaf id { type uint32; } container map-rule-table { list map-rules { key "id"; leaf id { type uint32; } uses map-rule; } } container map-t-ce { if-feature map-t-ce; leaf dmr-ipv6-prefix { type inet:ipv6-prefix; description "The IPv6 prefix of the DMR (default mapping rule)."; } } } } } } /* * Notifications */ notification softwire-lwaftr-event { if-feature lw4over6-aftr; leaf lwaftr-id { mandatory true; type leafref { path "/softwire-state/lw4over6-aftr/lw4over6-aftr-instances/" + "lw4over6-aftr-instance/id"; } Sun, et al. Expires August 16, 2015 [Page 27] Internet-Draft YANG for softwire February 2015 } leaf exceed-sw-num-limit { type boolean; default false; } leaf-list invalid-entry { type leafref { path "/softwire-state/lw4over6-aftr/lw4over6-aftr-instances/" + "lw4over6-aftr-instance[id=current()/../lwaftr-id]/" + "binding-table/binding-entries/binding-ipv6-addr"; } description "Notify the client that a specific binding entry has been expired/invalid. The binding-ipv6-addr identifies an entry."; } leaf-list added-entry { type inet:ipv6-address; description "Notify the client that a binding entry has been added. The ipv6 address of that entry is the index. The client get other information from the lwaftr about the entry indexed by that ipv6 address. "; } leaf-list modified-entry { type leafref { path "/softwire-state/lw4over6-aftr/lw4over6-aftr-instances/" + "lw4over6-aftr-instance[id=current()/../lwaftr-id]/" + "binding-table/binding-entries/binding-ipv6-addr"; } } } notification softwire-lwb4-event { if-feature lw4over6-b4; leaf lwb4-binding-ipv6-addr-change { mandatory true; type inet:ipv6-address; description "The sourch tunnel IPv6 address of the lwB4. If 'b4-ipv6-addr-format' is false, or the lwb4's binding-ipv6-address changes for any reason, it SHOULD notify the NETCONF client."; } } notification softwire-map-e-event { if-feature map-e; leaf map-e-id { Sun, et al. Expires August 16, 2015 [Page 28] Internet-Draft YANG for softwire February 2015 mandatory true; type leafref { path "/softwire-state/map-e/map-e-instances/map-e-instance/id"; } } leaf-list invalid-entry-id { type leafref { path "/softwire-state/map-e/map-e-instances/" + "map-e-instance[id=current()/../map-e-id]/map-rule-table/" + "map-rules/id"; } } leaf-list added-entry { type uint32; } leaf-list modified-entry { type leafref { path "/softwire-state/map-e/map-e-instances/" + "map-e-instance[id=current()/../map-e-id]/map-rule-table/" + "map-rules/id"; } } } notification softwire-map-t-event { if-feature map-t; leaf map-t-id { mandatory true; type leafref { path "/softwire-state/map-t/map-t-instances/map-t-instance/id"; } } leaf-list invalid-entry-id { type leafref { path "/softwire-state/map-t/map-t-instances/" + "map-t-instance[id=current()/../map-t-id]/map-rule-table/" + "map-rules/id"; } } leaf-list added-entry { type uint32; } leaf-list modified-entry { type leafref { Sun, et al. Expires August 16, 2015 [Page 29] Internet-Draft YANG for softwire February 2015 path "/softwire-state/map-t/map-t-instances/" + "map-t-instance[id=current()/../map-t-id]/map-rule-table/" + "map-rules/id"; } } } } 5. Example of Configure Lw4over6 Binding-Table The lwAFTR maintains an address binding table which contains the following 3-tuples: o IPv6 Address for a single lwB4 o Public IPv4 Address o Restricted port-set The entry has two functions: the IPv6 encapsulation of inbound IPv4 packets destined to the lwB4 and the validation of outbound IPv4-in- IPv6 packets received from the lwB4 for de-capsulation. Requirement: Add an entry that maintain the relationship between 3-tuples of lwB4 (2001::1) in binding-table, which on the lwAFTR (2001::2). The data value of this 3-tuples are '2001::1', '123.1.1.1' and '1234' respectively. Here is the example binding-table configuration xml: Sun, et al. Expires August 16, 2015 [Page 30] Internet-Draft YANG for softwire February 2015 // replace with IANA namespace when assigned. 2001::2 123.1.1.1 1234 2001::1 1 Figure 7: Lw4over6 Binding-Table Configuration XML 6. Security Considerations (TBD) TBD 7. IANA Considerations (TBD) TBD 8. Acknowledgements The authors would like to thank Lishan Li and Rajiv Asati for their contributions to this work. 9. References Sun, et al. Expires August 16, 2015 [Page 31] Internet-Draft YANG for softwire February 2015 9.1. Normative References [I-D.ietf-softwire-lw4over6] Cui, Y., Qiong, Q., Boucadair, M., Tsou, T., Lee, Y., and I. Farrer, "Lightweight 4over6: An Extension to the DS- Lite Architecture", draft-ietf-softwire-lw4over6-13 (work in progress), November 2014. [I-D.ietf-softwire-map] Troan, O., Dec, W., Li, X., Bao, C., Matsushima, S., Murakami, T., and T. Taylor, "Mapping of Address and Port with Encapsulation (MAP)", draft-ietf-softwire-map-12 (work in progress), November 2014. [I-D.ietf-softwire-map-t] Li, X., Bao, C., Dec, W., Troan, O., Matsushima, S., and T. Murakami, "Mapping of Address and Port using Translation (MAP-T)", draft-ietf-softwire-map-t-08 (work in progress), December 2014. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, October 2010. [RFC6021] Schoenwaelder, J., "Common YANG Data Types", RFC 6021, October 2010. [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG Data Model Documents", RFC 6087, January 2011. [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241, June 2011. [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, July 2013. 9.2. Informative References [I-D.ietf-softwire-unified-cpe] Boucadair, M., Farrer, I., Perreault, S., and S. Sivakumar, "Unified IPv4-in-IPv6 Softwire CPE", draft- ietf-softwire-unified-cpe-01 (work in progress), May 2013. Sun, et al. Expires August 16, 2015 [Page 32] Internet-Draft YANG for softwire February 2015 [RFC6333] Durand, A., Droms, R., Woodyatt, J., and Y. Lee, "Dual- Stack Lite Broadband Deployments Following IPv4 Exhaustion", RFC 6333, August 2011. [RFC6470] Bierman, A., "Network Configuration Protocol (NETCONF) Base Notifications", RFC 6470, February 2012. Authors' Addresses Qi Sun Tsinghua University Beijing 100084 P.R. China Phone: +86-10-6278-5822 Email: sunqi@csnet1.cs.tsinghua.edu.cn Hao Wang Tsinghua University Beijing 100084 P.R. China Phone: +86-10-6278-5822 Email: wangh13@mails.tsinghua.edu.cn Yong Cui Tsinghua University Beijing 100084 P.R. China Phone: +86-10-6260-3059 Email: yong@csnet1.cs.tsinghua.edu.cn Ian Farrer Deutsche Telekom AG CTO-ATI,Landgrabenweg 151 Bonn, NRW 53227 Germany Email: ian.farrer@telekom.de Sun, et al. Expires August 16, 2015 [Page 33] Internet-Draft YANG for softwire February 2015 Mohamed Boucadair France Telecom Rennes 35000 France Email: mohamed.boucadair@orange.com Rajiv Asati Cisco Systems, Inc. 7025 Kit Creek Rd. RTP, NC 27709 USA Email: Rajiva@cisco.com Sun, et al. Expires August 16, 2015 [Page 34]