module ietf-flow-detnet {
namespace "urn:ietf:params:xml:ns:yang:ietf-flow-detnet";
prefix "detnet";
import ietf-yang-types {
prefix "yang";
}
import ietf-interfaces {
prefix "if";
}
import ietf-inet-types{
prefix "inet";
}
import ietf-routing-types {
prefix "rt-types";
}
organization "IETF DetNet Working Group";
contact
"WG Web:
WG List:
WG Chair: Lou Berger
Editor: Xuesong Geng
Editor: Mach Chen
Editor: Zhenqiang Li
Eidtor: Reshad Rahman
";
description
"This YAGN module describes the parameters needed
for DetNet configuration";
revision "2018-06-26" {
description "Latest revision for ietf-detnet";
reference
"RFC XXXX: YANG Data Model for ietf-detnet";
}
identity detnet-node-type {
description
"base detnet-node-type";
}
identity detnet-edge-node-type {
base detnet-node-type;
description
"An instance of a DetNet relay node that
includes either a DetNet service layer proxy
function for DetNet service protection (e.g.
the addition or removal of packet sequencing
information) for one or more end systems, or
starts or terminate congestion protection at
the DetNet transport layer,analogous to a
Label Edge Router (LER).";
}
identity detnet-relay-node-type {
base detnet-node-type;
description
"A DetNet node including a service layer
function that interconnects different DetNet
transport layer paths to provide service
protection.A DetNet relay node can be a bridge,
a router, a firewall, or any other system that
participates in the DetNet service layer. It
typically incorporates DetNet transport layer
functions as well, in which case it is
collocated with a transit node.";
}
identity detnet-transit-node-type {
base detnet-node-type;
description
"A node operating at the DetNet transport layer,
that utilizes link layer and/or network layer
switching across multiple links and/or
sub-networks to provide paths for DetNet
service layer functions.Optionally provides
congestion protection over those paths.An MPLS
LSR is an example of a DetNet transit node.";
}
identity detnet-transport-layer {
description
"The layer that optionally provides congestion
protection for DetNet flows over paths provided
by the underlying network.";
}
identity detnet-service-layer {
description
"The layer at which service protection is
provided, either packet sequencing, replication,
and elimination or packet encoding";
}
typedef segment-operation-type {
type enumeration {
enum replication {
description
"One of the Packet Replication and
Elimination Function (PREF), which does
the packet elimination
processing of DetNet flow packets in
edge or relay nodes.";
}
enum elimination {
description
"One of the Packet Replication and
Elimination Function (PREF), which does
the packet replication processing of
DetNet flow packets in
edge or relay nodes.";
}
enum elimination-and-replication {
description
"One of the Packet Replication and
Elimination Function (PREF), which does
the packet elimination and replication
processing of DetNet flow packets in
edge or relay nodes.";
}
}
description
"";
}
grouping detnet-transport-instance{
description
"";
container detnet-transport-instance{
description
"the contents of detnet transport instance
depend on data plane solution of this detnet
domain";
}
}
grouping sequence-number-generation {
description
"";
leaf bit-number{
type uint32;
description
"";
}
leaf upper-bound {
type uint32;
description
"";
}
leaf lower-bound {
type uint32;
description
"";
}
}
grouping in-segment-content {
description
"in-segment grouping in the detnet service
layer";
container in-segment-list {
description
"";
list in-segment {
key "in-segment-id";
description
"";
leaf in-segment-id{
type uint32;
description
"";
}
leaf incoming-interface {
type if:interface-ref;
description
"Name of the incoming
interface.";
}
leaf operation {
type segment-operation-type;
description
"";
}
choice in-segment-type{
description
"";
case non-detnet-in-segment{
description
"";
container sequence-number-generation{
description
"";
uses sequence-number-generation;
}
}
}
}
}
}
grouping out-segment-content{
description
"";
container out-segment-list {
description
"";
list out-segment{
key "out-segment-id";
description
"";
leaf out-segment-id{
type uint32;
description
"";
}
leaf outgoing-interface {
type if:interface-ref;
description
"Name of the outgoing interface.";
}
container detnet-transport-instance{
description
"";
uses detnet-transport-instance;
}
}
}
}
grouping segment-mapping-metadata{
description
"";
leaf active {
type boolean;
description
"Whether the segment mapping base is active
or not";
}
leaf last-updated {
type yang:date-and-time;
description
"Time stamp of the last modification of the
mapping. If the mapping was never modified,
it is the time when the mapping was
inserted into the RIB.";
}
}
grouping detnet-service-instance{
description
"";
container control-plane-protocal{
description
"";
leaf name{
type string;
description
"the name of the control plane protocal";
}
}
container segment-mapping-base{
description
"";
list segment-mapping{
key "segment-mapping-id";
description
"";
leaf segment-mapping-id{
type uint32;
description
"";
}
uses segment-mapping-metadata;
container in-segment{
description
"";
uses in-segment-content;
}
container out-segment{
description
"";
uses out-segment-content;
}
}
}
}
grouping flow-identfication {
description
"DetNet flow identification";
reference
"draft-farkas-detnet-flow-information-model";
leaf source-ip-address {
type inet:ip-address;
description
"Source IP address";
}
leaf destination-ip-address {
type inet:ip-address;
description
"Destination IP address";
}
leaf source-mac-address {
type yang:mac-address;
description
"Source MAC address";
}
leaf destination-mac-address {
type yang:mac-address;
description
"Destination MAC address";
}
leaf ipv6-flow-label {
type uint32;
description
"ipv6 flow label";
}
leaf mpls-label {
type rt-types:mpls-label;
description
"MPLS Label";
}
}
grouping traffic-specification{
description
"traffic-specification specifies how the Source
transmits packets for the flow. This is the
promise/request of the Source to the network.
The network uses this traffic specification
to allocate resources and adjust queue
parameters in network nodes.";
reference
"draft-farkas-detnet-flow-information-model";
leaf max-packets-per-interval{
type uint16;
description
"max-packets-per-interval specifies the maximum
number of packets that the application shall
transmit in one Interval.";
}
leaf max-packet-size{
type uint16;
description
"max-packet-size specifies maximum packet size
that the Source will transmit";
}
leaf queuing-algorithm-selection{
type uint8;
description
"";
}
}
grouping client-flow{
description
"";
leaf flow-id{
type uint16;
description
"";
}
container flow-identification{
description
"";
uses flow-identfication;
}
container traffic-specification{
description
"";
uses traffic-specification;
}
}
grouping flow-to-detnet-mapping{
description
"";
container flow-to-detnet-mapping-base{
description
"";
list flow-to-detnet-mappings{
key "flow-to-detnet-mapping-id";
description
"";
leaf flow-to-detnet-mapping-id{
type uint16;
description
"";
}
container client-flows{
description
"";
list client-flows{
key "client-flow-id";
description
"";
leaf client-flow-id{
type uint16;
description
"";
}
uses client-flow;
}
}
container detnet-service-instance{
description
"";
uses detnet-service-instance;
}
}
}
}
/* Congfiguration Data */
container detnet-config{
description
"";
choice detnet-node-type{
description
"";
case detnet-transit-node-type{
description
"";
uses detnet-transport-instance;
}
case detnet-relay-node-type{
description
"";
uses detnet-service-instance;
}
case detnet-edge-node-type{
description
"";
uses flow-to-detnet-mapping;
}
}
}
/* Status Data */
container detnet-state{
config "false";
description
"";
choice detnet-node-type{
description
"";
case detnet-transit-node-type{
description
"";
uses detnet-transport-instance;
}
case detnet-relay-node-type{
description
"";
uses detnet-service-instance;
}
case detnet-edge-node-type{
description
"";
uses flow-to-detnet-mapping;
}
}
}
}