module ietf-dmm-fpc-settingsext {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpc-settingsext";
prefix fpcbase;
import ietf-inet-types { prefix inet;
revision-date 2013-07-15; }
import ietf-trafficselector-types { prefix traffic-selectors;
revision-date 2017-10-29; }
import ietf-yang-types { prefix ytypes;
revision-date 2013-07-15; }
import ietf-pmip-qos { prefix pmipqos;
revision-date 2016-02-10; }
organization "IETF Distributed Mobility Management (DMM)
Working Group";
contact
"WG Web:
WG List:
WG Chair: Dapeng Liu
WG Chair: Jouni Korhonen
Editor: Satoru Matsushima
Editor: Lyle Bertz
";
description
"This module contains YANG definition for
Forwarding Policy Configuration Protocol(FPCP).
It contains Settings defintions as well as Descriptor and
Action extensions.
Copyright (c) 2016 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.";
revision 2017-09-27 {
description "Version 10 updates.";
reference "draft-ietf-dmm-fpc-cpdp-10";
}
revision 2017-07-22 {
description "Version 08 updates.";
reference "draft-ietf-dmm-fpc-cpdp-08";
}
revision 2017-03-08 {
description "Version 06 updates.";
reference "draft-ietf-dmm-fpc-cpdp-06";
}
revision 2016-08-03 {
description "Initial Revision.";
reference "draft-ietf-dmm-fpc-cpdp-05";
}
// Next Hop Structures - SETTING
typedef fpc-service-path-id {
type uint32 {
range "0..33554431";
}
description "SERVICE_PATH_ID";
}
typedef fpc-mpls-label {
type uint32 {
range "0..1048575";
}
description "MPLS label";
}
identity fpc-nexthop-type {
description "NAT Service";
}
grouping fpc-nexthop {
leaf nexthop-type {
type identityref {
base "fpcbase:fpc-nexthop-type";
}
mandatory true;
description "Nexthop Type";
}
choice nexthop-value {
mandatory true;
case ip-nexthop {
leaf ip {
type inet:ip-address;
description "IP Value";
}
description "IP Case";
}
case macaddress-nexthop {
leaf macaddress {
type ytypes:mac-address;
description "MAC Address Value";
}
}
case servicepath-nexthop {
leaf servicepath {
type fpcbase:fpc-service-path-id;
description "Service Path Value";
}
description "Service Path Case";
}
case mplslabel-nexthop {
leaf lsp {
type fpcbase:fpc-mpls-label;
description "MPLS Value";
}
description "Service Path Case";
}
case if-nexthop {
leaf if-index {
type uint16;
description "If (interface) Value";
}
description "Service Path Case";
}
description "Value";
}
description "Nexthop Value";
}
// Address Translation - ACTION
grouping simple-nat {
leaf outbound-nat-address {
type inet:ip-address;
description "Outbound NAT Address";
}
description "Simple NAT value";
}
grouping simple-napt {
leaf source-port {
type inet:port-number;
description "Source Port";
}
leaf outbound-napt-address {
type inet:ip-address;
description "Outbound NAPT Address";
}
leaf destination-port {
type inet:port-number;
description "Destination Port";
}
description "Simple NAPT Configuration";
}
// COPY FORWARD - ACTION
grouping copy-forward {
container destination {
choice value {
case nexthop-case {
container nexthop {
uses fpcbase:fpc-nexthop;
description "Next Hop";
}
description "Port Forward Case";
}
description "Copy Forward Value";
}
description "destination";
}
description "Copy Then Forward to Port/Context Action";
}
//////////////////////////////
// PMIP Integration //
identity pmip-tunnel-type {
description "PMIP Tunnel Type";
}
identity grev1 {
base "pmip-tunnel-type";
description "GRE v1";
}
identity grev2 {
base "pmip-tunnel-type";
description "GRE v2";
}
identity ipinip {
base "pmip-tunnel-type";
description "IP in IP";
}
grouping pmip-tunnel-info {
leaf pmip-tunnel-type {
type identityref {
base "pmip-tunnel-type";
}
description "PMIP Mobility";
}
choice pmip-tunnel-value {
case gre {
leaf gre-key {
type uint32;
description "GRE_KEY";
}
description "GRE Value";
}
description "PMIP Mobility value";
}
uses traffic-selectors:traffic-selector;
description "PMIP Tunnel Information";
}
typedef pmip-commandset {
type bits {
bit assign-ip {
position 0;
description "Assign IP";
}
bit assign-dpn {
position 1;
description "Assign DPN";
}
bit session {
position 2;
description "Session Level";
}
bit uplink {
position 3;
description "Uplink";
}
bit downlink {
position 4;
description "Downlink";
}
}
description "PMIP Instructions";
}
///////////////////////////////
// 3GPP Integration //
// Tunnel Types
identity threeGPP-tunnel-type {
description "3GPP Base Tunnel Type";
}
identity gtpv1 {
base "fpcbase:threeGPP-tunnel-type";
description "GTP version 1 Tunnel";
}
identity gtpv2 {
base "fpcbase:threeGPP-tunnel-type";
description "GTP version 2 Tunnel";
}
// QoS Profile
typedef fpc-qos-class-identifier {
type uint8 {
range "1..9";
}
description "QoS Class Identifier (QCI)";
}
grouping threeGPP-QoS {
description "3GPP QoS Attributes";
leaf qci {
type fpc-qos-class-identifier;
description "QCI";
}
leaf gbr {
type uint32;
description "Guaranteed Bit Rate";
}
leaf mbr {
type uint32;
description "Maximum Bit Rate";
}
leaf apn-ambr {
type uint32;
description "Access Point Name Aggregate Max Bit Rate";
}
leaf ue-ambr {
type uint32;
description "User Equipment Aggregate Max Bit Rate";
}
container arp {
uses pmipqos:Allocation-Retention-Priority-Value;
description "Allocation Retention Priority";
}
}
typedef ebi-type {
type uint8 {
range "0..15";
}
description "EUTRAN Bearere Identifier (EBI) Type";
}
// From 3GPP TS 24.008 version 13.5.0 Release 13
typedef component-type-enum {
type enumeration {
enum ipv4RemoteAddress {
value 16;
description "IPv4 Remote Address";
}
enum ipv4LocalAddress {
value 17;
description "IPv4 Local Address";
}
enum ipv6RemoteAddress {
value 32;
description "IPv6 Remote Address";
}
enum ipv6RemoteAddressPrefix {
value 33;
description "IPv6 Remote Address Prefix";
}
enum ipv6LocalAddressPrefix {
value 35;
description "IPv6 Local Address Prefix";
}
enum protocolNextHeader {
value 48;
description "Protocol (IPv4) or NextHeader (IPv6)
value";
}
enum localPort {
value 64;
description "Local Port";
}
enum localPortRange {
value 65;
description "Local Port Range";
}
enum reomotePort {
value 80;
description "Remote Port";
}
enum remotePortRange {
value 81;
description "Remote Port Range";
}
enum secParamIndex {
value 96;
description "Security Parameter Index (SPI)";
}
enum tosTraffClass {
value 112;
description "TOS Traffic Class";
}
enum flowLabel {
value 128;
description "Flow Label";
}
}
description "TFT Component Type";
}
typedef packet-filter-direction {
type enumeration {
enum preRel7Tft {
value 0;
description "Pre-Release 7 TFT";
}
enum uplink {
value 1;
description "uplink";
}
enum downlink {
value 2;
description "downlink";
}
enum bidirectional {
value 3;
description "bi-direcitonal";
}
}
description "Packet Filter Direction";
}
typedef component-type-id {
type uint8 {
range "16 | 17 | 32 | 33 | 35 | 48 | 64 | 65 |"
+ " 80 | 81 | 96 | 112 | 128";
}
description "Specifies the Component Type";
}
grouping packet-filter {
leaf direction {
type fpcbase:packet-filter-direction;
description "Filter Direction";
}
leaf identifier {
type uint8 {
range "1..15";
}
description "Filter Identifier";
}
leaf evaluation-precedence {
type uint8;
description "Evaluation Precedence";
}
list contents {
key component-type-identifier;
description "Filter Contents";
leaf component-type-identifier {
type fpcbase:component-type-id;
description "Component Type";
}
choice value {
case ipv4-local {
leaf ipv4-local {
type inet:ipv4-address;
description "IPv4 Local Address";
}
}
case ipv6-prefix-local {
leaf ipv6-prefix-local {
type inet:ipv6-prefix;
description "IPv6 Local Prefix";
}
}
case ipv4-ipv6-remote {
leaf ipv4-ipv6-remote {
type inet:ip-address;
description "Ipv4 Ipv6 remote address";
}
}
case ipv6-prefix-remote {
leaf ipv6-prefix-remote {
type inet:ipv6-prefix;
description "IPv6 Remote Prefix";
}
}
case next-header {
leaf next-header {
type uint8;
description "Next Header";
}
}
case local-port {
leaf local-port {
type inet:port-number;
description "Local Port";
}
}
case local-port-range {
leaf local-port-lo {
type inet:port-number;
description "Local Port Min Value";
}
leaf local-port-hi {
type inet:port-number;
description "Local Port Max Value";
}
}
case remote-port {
leaf remote-port {
type inet:port-number;
description "Remote Port";
}
}
case remote-port-range {
leaf remote-port-lo {
type inet:port-number;
description "Remote Por Min Value";
}
leaf remote-port-hi {
type inet:port-number;
description "Remote Port Max Value";
}
}
case ipsec-index {
leaf ipsec-index {
type traffic-selectors:ipsec-spi;
description "IPSec Index";
}
}
case traffic-class {
leaf traffic-class {
type inet:dscp;
description "Traffic Class";
}
}
case traffic-class-range {
leaf traffic-class-lo {
type inet:dscp;
description "Traffic Class Min Value";
}
leaf traffic-class-hi {
type inet:dscp;
description "Traffic Class Max Value";
}
}
case flow-label-type {
leaf-list flow-label {
type inet:ipv6-flow-label;
description "Flow Label";
}
}
description "Component Value";
}
}
description "Packet Filter";
}
grouping tft {
list packet-filters {
key identifier;
uses fpcbase:packet-filter;
description "List of Packet Filters";
}
description "Packet Filter List";
}
typedef imsi-type {
type uint64;
description
"International Mobile Subscriber Identity (IMSI)
Value Type";
}
typedef threegpp-instr {
type bits {
bit assign-ip {
position 0;
description "Assign IP Address/Prefix";
}
bit assign-fteid-ip {
position 1;
description "Assign FTEID-IP";
}
bit assign-fteid-teid {
position 2;
description "Assign FTEID-TEID";
}
bit session {
position 3;
description "Commands apply to the Session Level";
}
bit uplink {
position 4;
description "Commands apply to the Uplink";
}
bit downlink {
position 5;
description "Commands apply to the Downlink";
}
bit assign-dpn {
position 6;
description "Assign DPN";
}
}
description "Instruction Set for 3GPP R11";
}
grouping threegpp-tunnel-info {
leaf tunnel-type {
type identityref {
base "fpcbase:threeGPP-tunnel-type";
}
description "3GPP Tunnel Subtype";
}
leaf tunnel-identifier {
type uint32;
description "Tunnel Endpoint IDentifier (TEID)";
}
choice tft-or-ref {
case defined-tft {
uses fpcbase:tft;
}
description "TFT Value";
}
description "3GPP TFT and Tunnel Information";
}
grouping threegpp-properties {
leaf imsi {
type fpcbase:imsi-type;
description "IMSI";
}
leaf ebi {
type fpcbase:ebi-type;
description "EUTRAN Bearere Identifier (EBI)";
}
leaf lbi {
type fpcbase:ebi-type;
description "Linked Bearer Identifier (LBI)";
}
description "3GPP Mobility Session Properties";
}
//////////////////////////////
// ACTION VALUE AUGMENTS
grouping fpc-action-value {
choice action-value {
mandatory true;
case drop {
leaf drop {
type empty;
description "Drop Traffic";
}
}
case simple-nat {
uses fpcbase:simple-nat;
description "Simple NAT value";
}
case simple-napt {
uses fpcbase:simple-napt;
description "Simple NAPT Value";
}
case copy-forward {
uses fpcbase:copy-forward;
description "Copy Forward Value";
}
case pmip-selector {
uses traffic-selectors:traffic-selector;
description "PMIP Selector";
}
description "Action Value";
}
description "FPC Action Value";
}
//////////////////////////////
// DESCRIPTOR DEFINITIONS
grouping fpc-descriptor-value {
choice descriptor-value {
mandatory true;
case all-traffic {
leaf all-traffic {
type empty;
description "admit any";
}
}
case no-traffic {
leaf no-traffic {
type empty;
description "deny any";
}
}
case prefix-descriptor {
leaf destination-ip {
type inet:ip-prefix;
description "Rule of destination IP";
}
leaf source-ip {
type inet:ip-prefix;
description "Rule of source IP";
}
description "Traffic descriptor based upon source/
destination as IP prefixes";
}
case pmip-selector {
uses traffic-selectors:traffic-selector;
description "PMIP Selector";
}
case threegpp-tft {
uses fpcbase:tft;
description "3GPP TFT";
}
description "Descriptor Value";
}
description "FPC Descriptor Values";
}
//SETTINGS DEFINITIONS
grouping fpc-settings {
leaf-list delegated-ip-prefixes {
type inet:ip-prefix;
description "Delegated Prefix(es)";
}
leaf tunnel-local-address {
type inet:ip-address;
description "local tunnel address";
}
leaf tunnel-remote-address {
type inet:ip-address;
description "remote tunnel address";
}
leaf mtu-size {
type uint32;
description "MTU size";
}
container mobility-tunnel-parameters {
choice profile-parameters {
case nothing {
leaf none {
type empty;
description "Empty Value";
}
description "No Parameters Case";
}
case pmip {
uses pmip-tunnel-info;
}
case threegpp {
uses threegpp-tunnel-info;
uses threegpp-properties;
}
description "Mobility Profile Parameters";
}
description
"Profile specific tunnel parameters";
}
container nexthop {
uses fpcbase:fpc-nexthop;
description "Next Hop";
}
container qos-profile-parameters {
choice value {
description "QoS Value";
}
description "QoS Parameters";
}
description "A collection of settings";
}
identity access-technology {
description "The technology used in the access network";
}
identity role {
description "The access-technology function of the DPN";
}
identity ietf-pmip-access-type {
base "fpcbase:access-technology";
description "PMIP Access";
}
identity threeGPP-access-type {
base "fpcbase:access-technology";
description "3GPP Access Type";
}
// Instructions
grouping instructions {
container instructions {
choice instr-type {
case threegpp-instr {
leaf instr-3gpp-mob {
type fpcbase:threegpp-instr;
description "3GPP GTP Mobility Instructions";
}
}
case pmip-instr {
leaf instr-pmip {
type pmip-commandset;
description "PMIP Instructions";
}
}
description "Instruction Value Choice";
}
description "Instructions";
}
description "Instructions Value";
}
}