draft-ietf-babel-yang-model-09.txt   draft-ietf-babel-yang-model-10.txt 
Babel Working Group M. Jethanandani Babel Working Group M. Jethanandani
Internet-Draft Kloud Services Internet-Draft Kloud Services
Intended status: Standards Track B. Stark Intended status: Standards Track B. Stark
Expires: September 13, 2021 AT&T Expires: 13 November 2021 AT&T
March 12, 2021 12 May 2021
YANG Data Model for Babel YANG Data Model for Babel
draft-ietf-babel-yang-model-09 draft-ietf-babel-yang-model-10
Abstract Abstract
This document defines a data model for the Babel routing protocol. This document defines a data model for the Babel routing protocol.
The data model is defined using the YANG data modeling language. The data model is defined using the YANG data modeling language.
Requirements Language Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
skipping to change at page 1, line 40 skipping to change at page 1, line 40
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 13, 2021. This Internet-Draft will expire on 13 November 2021.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents (https://trustee.ietf.org/
(https://trustee.ietf.org/license-info) in effect on the date of license-info) in effect on the date of publication of this document.
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect Please review these documents carefully, as they describe your rights
to this document. Code Components extracted from this document must and restrictions with respect to this document. Code Components
include Simplified BSD License text as described in Section 4.e of extracted from this document must include Simplified BSD License text
the Trust Legal Provisions and are provided without warranty as as described in Section 4.e of the Trust Legal Provisions and are
described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Note to RFC Editor . . . . . . . . . . . . . . . . . . . 2 1.1. Note to RFC Editor . . . . . . . . . . . . . . . . . . . 2
1.2. Tree Diagram Annotations . . . . . . . . . . . . . . . . 3 1.2. Tree Diagram Annotations . . . . . . . . . . . . . . . . 3
2. Babel Module . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Babel Module . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Information Model . . . . . . . . . . . . . . . . . . . . 3 2.1. Information Model . . . . . . . . . . . . . . . . . . . . 3
2.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 3
2.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 4 2.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 5
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 30
3.1. URI Registrations . . . . . . . . . . . . . . . . . . . . 29 3.1. URI Registrations . . . . . . . . . . . . . . . . . . . . 30
3.2. YANG Module Name Registration . . . . . . . . . . . . . . 29 3.2. YANG Module Name Registration . . . . . . . . . . . . . . 30
4. Security Considerations . . . . . . . . . . . . . . . . . . . 30 4. Security Considerations . . . . . . . . . . . . . . . . . . . 30
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 31
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.1. Normative References . . . . . . . . . . . . . . . . . . 31 6.1. Normative References . . . . . . . . . . . . . . . . . . 31
6.2. Informative References . . . . . . . . . . . . . . . . . 32 6.2. Informative References . . . . . . . . . . . . . . . . . 32
Appendix A. An Appendix . . . . . . . . . . . . . . . . . . . . 33 Appendix A. An Appendix . . . . . . . . . . . . . . . . . . . . 33
A.1. Statistics Gathering Enabled . . . . . . . . . . . . . . 33 A.1. Statistics Gathering Enabled . . . . . . . . . . . . . . 34
A.2. Automatic Detection of Properties . . . . . . . . . . . . 35 A.2. Automatic Detection of Properties . . . . . . . . . . . . 35
A.3. Override Default Properties . . . . . . . . . . . . . . . 36 A.3. Override Default Properties . . . . . . . . . . . . . . . 37
A.4. Configuring other Properties . . . . . . . . . . . . . . 37 A.4. Configuring other Properties . . . . . . . . . . . . . . 38
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 39 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 39
1. Introduction 1. Introduction
This document defines a data model for The Babel Routing Protocol This document defines a data model for The Babel Routing Protocol
[RFC8966]. The data model is defined using YANG 1.1 [RFC7950] data [RFC8966]. The data model is defined using YANG 1.1 [RFC7950] data
modeling language and is Network Management Datastore Architecture modeling language and is Network Management Datastore Architecture
(NDMA) [RFC8342] compatible. It is based on the Babel Information (NDMA) [RFC8342] compatible. It is based on the Babel Information
Model [I-D.ietf-babel-information-model]. The data model only Model [I-D.ietf-babel-information-model]. The data model only
includes data nodes that are useful for managing Babel over IPv6. includes data nodes that are useful for managing Babel over IPv6.
1.1. Note to RFC Editor 1.1. Note to RFC Editor
Artwork in this document contains shorthand references to drafts in Artwork in this document contains shorthand references to drafts in
progress. Please apply the following replacements and remove this progress. Please apply the following replacements and remove this
note before publication. note before publication.
o "XXXX" --> the assigned RFC value for this draft both in this * "XXXX" --> the assigned RFC value for this draft both in this
draft and in the YANG models under the revision statement. draft and in the YANG models under the revision statement.
o "ZZZZ" --> the assigned RFC value for Babel Information Model * "ZZZZ" --> the assigned RFC value for Babel Information Model
[I-D.ietf-babel-information-model] [I-D.ietf-babel-information-model]
o Revision date in model, in the format 2021-03-12 needs to get * Revision date in model, in the format 2021-05-12 needs to get
updated with the date the draft gets approved. The date also updated with the date the draft gets approved. The date also
needs to get reflected on the line with <CODE BEGINS>. needs to get reflected on the line with <CODE BEGINS>.
1.2. Tree Diagram Annotations 1.2. Tree Diagram Annotations
For a reference to the annotations used in tree diagrams included in For a reference to the annotations used in tree diagrams included in
this draft, please see YANG Tree Diagrams [RFC8340]. this draft, please see YANG Tree Diagrams [RFC8340].
2. Babel Module 2. Babel Module
This document defines a YANG 1.1 [RFC7950] data model for the This document defines a YANG 1.1 [RFC7950] data model for the
configuration and management of Babel. The YANG module is based on configuration and management of Babel. The YANG module is based on
the Babel Information Model [I-D.ietf-babel-information-model]. the Babel Information Model [I-D.ietf-babel-information-model].
2.1. Information Model 2.1. Information Model
There are a few things that should be noted between the Babel There are a few things that should be noted between the Babel
Information Model and this data module. The information model Information Model and this data module. The information model
mandates the definition of some of the attributes, e.g. 'babel- mandates the definition of some of the attributes, e.g. 'babel-
implementation-version' or the 'babel-self-router-id'. These implementation-version' or the 'babel-self-router-id'. These
attributes are marked a read-only objects in the information module attributes are marked as read-only objects in the information module
as well as in this data module. However, there is no way in the data as well as in this data module. However, there is no way in the data
module to mandate that a read-only attribute be present. It is up to module to mandate that a read-only attribute be present. It is up to
the implementation of this data module to make sure that the the implementation of this data module to make sure that the
attributes that are marked read-only and are mandatory are indeed attributes that are marked read-only and are mandatory are indeed
present. present.
2.2. Tree Diagram 2.2. Tree Diagram
The following diagram illustrates a top level hierarchy of the model. The following diagram illustrates a top level hierarchy of the model.
In addition to information like the version number implemented by In addition to information like the version number implemented by
skipping to change at page 5, line 14 skipping to change at page 5, line 21
interface defined by A YANG Data Model for Interface Management interface defined by A YANG Data Model for Interface Management
[RFC8343]. [RFC8343].
A router running Babel routing protocol can determine the parameters A router running Babel routing protocol can determine the parameters
it needs to use for an interface based on the interface name. For it needs to use for an interface based on the interface name. For
example, it can detect that eth0 is a wired interface, and that wlan0 example, it can detect that eth0 is a wired interface, and that wlan0
is a wireless interface. This is not true for a tunnel interface, is a wireless interface. This is not true for a tunnel interface,
where the link parameters need to be configured explicitly. where the link parameters need to be configured explicitly.
For a wired interface, it will assume 'two-out-of-three' for 'metric- For a wired interface, it will assume 'two-out-of-three' for 'metric-
algorithm', and 'split-horizon' set to true. On other hand, for a algorithm', and 'split-horizon' set to true. On the other hand, for
wireless interface it will assume 'etx' for 'metric-algorithm', and a wireless interface it will assume 'etx' for 'metric-algorithm', and
'split-horizon' set to false. However, if the wired link is 'split-horizon' set to false. However, if the wired link is
connected to a wireless radio, the values can be overriden by setting connected to a wireless radio, the values can be overriden by setting
'metric-algorithm' to 'etx', and 'split-horizon' to false. 'metric-algorithm' to 'etx', and 'split-horizon' to false.
Similarly, an interface that is a metered 3G link, and used for Similarly, an interface that is a metered 3G link, and used for
fallback connectivity needs much higher default time constants, e.g. fallback connectivity needs much higher default time constants, e.g.
'mcast-hello-interval', and 'update-interval', in order to avoid 'mcast-hello-interval', and 'update-interval', in order to avoid
carrying control traffic as much as possible. carrying control traffic as much as possible.
In addition to the modules used above, this module imports In addition to the modules used above, this module imports
definitions from Common YANG Data Types [RFC6991], and references definitions from Common YANG Data Types [RFC6991], and references
HMAC: Keyed-Hashing for Message Authentication [RFC2104], Using HMAC- HMAC: Keyed-Hashing for Message Authentication [RFC2104], Using
SHA-256, HMAC-SHA-384, and HMAC-SHA-512 [RFC4868], Datagram Transport HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512 [RFC4868], Datagram
Layer Security Version 1.2 [RFC6347], The Blake2 Cryptographic Hash Transport Layer Security Version 1.2 [RFC6347], The Blake2
and Message Authentication Code (MAC) [RFC7693], Babel Information Cryptographic Hash and Message Authentication Code (MAC) [RFC7693],
Model [I-D.ietf-babel-information-model], The Babel Routing Protocol Babel Information Model [I-D.ietf-babel-information-model], The Babel
[RFC8966], and MAC Authentication for Babel [RFC8967]. Routing Protocol [RFC8966], and MAC Authentication for Babel
[RFC8967].
<CODE BEGINS> file "ietf-babel@2021-03-12.yang"
module ietf-babel {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-babel";
prefix babel;
import ietf-yang-types {
prefix yt;
reference
"RFC 6991: Common YANG Data Types.";
}
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types.";
}
import ietf-interfaces {
prefix if;
reference
"RFC 8343: A YANG Data Model for Interface Management";
}
import ietf-routing {
prefix "rt";
reference
"RFC 8349: YANG Routing Management";
}
organization
"IETF Babel routing protocol Working Group";
contact
"WG Web: http://tools.ietf.org/wg/babel/
WG List: babel@ietf.org
Editor: Mahesh Jethanandani
mjethanandani@gmail.com
Editor: Barbara Stark
bs7652@att.com";
description
"This YANG module defines a model for the Babel routing
protocol.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.
Copyright (c) 2020 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
for full legal notices.";
revision 2021-03-12 {
description
"Initial version.";
reference
"RFC XXXX: Babel YANG Data Model.";
}
/*
* Features
*/
feature two-out-of-three-supported {
description
"This implementation supports two-out-of-three metric
comp algorithm.";
}
feature etx-supported {
description
"This implementation supports Expected Transmission Count
(ETX) metric comp algorithm.";
}
feature mac-supported {
description
"This implementation supports MAC based security.";
reference
"RFC 8967: MAC authentication for Babel Routing
Protocol.";
}
feature dtls-supported {
description
"This implementation supports DTLS based security.";
reference
"RFC 8968: Babel Routing Protocol over Datagram
Transport Layer Security.";
}
feature hmac-sha256-supported {
description
"This implementation supports hmac-sha256 MAC algorithm.";
reference
"RFC 8967: MAC authentication for Babel Routing
Protocol.";
}
feature blake2s-supported {
description
"This implementation supports blake2s MAC algorithms.
Specifically, BLAKE2-128 is supported.";
reference
"RFC 8967: MAC authentication for Babel Routing
Protocol.";
}
feature x-509-supported {
description
"This implementation supports x-509 certificate type.";
reference
"RFC 8968: Babel Routing Protocol over Datagram
Transport Layer Security.";
}
feature raw-public-key-supported { <CODE BEGINS> file "ietf-babel@2021-05-12.yang"
description module ietf-babel {
"This implementation supports raw-public-key certificate type."; yang-version 1.1;
reference namespace "urn:ietf:params:xml:ns:yang:ietf-babel";
"RFC 8968: Babel Routing Protocol over Datagram prefix babel;
Transport Layer Security.";
}
/* import ietf-yang-types {
* Identities prefix yang;
*/ reference
identity metric-comp-algorithms { "RFC 6991: Common YANG Data Types.";
description }
"Base identity from which all Babel metric comp algorithms import ietf-inet-types {
MUST be derived."; prefix inet;
} reference
"RFC 6991: Common YANG Data Types.";
}
import ietf-interfaces {
prefix if;
reference
"RFC 8343: A YANG Data Model for Interface Management";
}
import ietf-routing {
prefix rt;
reference
"RFC 8349: YANG Routing Management";
}
identity two-out-of-three { organization
if-feature two-out-of-three-supported; "IETF Babel routing protocol Working Group";
base "metric-comp-algorithms";
description
"2-out-of-3 algorithm.";
reference
"RFC 8966: The Babel Routing Protocol, Section A.2.1.";
}
identity etx { contact
if-feature etx-supported; "WG Web: http://tools.ietf.org/wg/babel/
base "metric-comp-algorithms"; WG List: babel@ietf.org
description
"Expected Transmission Count.";
reference
"RFC 8966: The Babel Routing Protocol, Section A.2.2.";
}
/* Editor: Mahesh Jethanandani
* Babel MAC algorithms identities. mjethanandani@gmail.com
*/ Editor: Barbara Stark
identity mac-algorithms { bs7652@att.com";
description
"Base identity for all Babel MAC algorithms.";
}
identity hmac-sha256 {
if-feature mac-supported;
if-feature hmac-sha256-supported;
base mac-algorithms;
description description
"HMAC-SHA256 algorithm supported."; "This YANG module defines a model for the Babel routing
reference protocol.
"RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
with IPsec.";
}
identity blake2s { The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
if-feature mac-supported; NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
if-feature blake2s-supported; 'MAY', and 'OPTIONAL' in this document are to be interpreted as
base mac-algorithms; described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
description they appear in all capitals, as shown here.
"BLAKE2s algorithms supported. Specifically, BLAKE2-128 is
supported.";
reference
"RFC 7693: The BLAKE2 Cryptographic Hash and Message
Authentication Code (MAC).";
}
/* Copyright (c) 2021 IETF Trust and the persons identified as
* Babel Cert Types authors of the code. All rights reserved.
*/
identity dtls-cert-types {
description
"Base identity for Babel DTLS certificate types.";
}
identity x-509 { Redistribution and use in source and binary forms, with or
if-feature dtls-supported; without modification, is permitted pursuant to, and subject to
if-feature x-509-supported; the license terms contained in, the Simplified BSD License set
base dtls-cert-types; forth in Section 4.c of the IETF Trust's Legal Provisions
description Relating to IETF Documents
"X.509 certificate type."; (https://trustee.ietf.org/license-info).
}
identity raw-public-key { This version of this YANG module is part of RFC XXXX
if-feature dtls-supported; (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
if-feature raw-public-key-supported; for full legal notices.";
base dtls-cert-types;
description
"Raw Public Key type.";
}
/* revision 2021-05-12 {
* Babel routing protocol identity. description
*/ "Initial version.";
identity babel { reference
base "rt:routing-protocol"; "RFC XXXX: Babel YANG Data Model.";
description }
"Babel routing protocol";
}
/* /*
* Groupings * Features
*/ */
grouping routes {
list routes {
key "prefix";
config false;
leaf prefix { feature two-out-of-three-supported {
type inet:ip-prefix; description
description "This implementation supports two-out-of-three metric
"Prefix (expressed in ip-address/prefix-length format) for comp algorithm.";
which this route is advertised."; }
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf router-id { feature etx-supported {
type binary; description
description "This implementation supports Expected Transmission Count
"router-id of the source router for which this route is (ETX) metric comp algorithm.";
advertised."; }
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf neighbor { feature mac-supported {
type leafref { description
path "/rt:routing/rt:control-plane-protocols/" + "This implementation supports MAC based security.";
"rt:control-plane-protocol/babel/interfaces/" + reference
"neighbor-objects/neighbor-address"; "RFC 8967: MAC authentication for Babel Routing
} Protocol.";
description }
"Reference to the neighbor-objects entry for the neighbor
that advertised this route.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf received-metric { feature dtls-supported {
type uint16; description
description "This implementation supports DTLS based security.";
"The metric with which this route was advertised by the reference
neighbor, or maximum value (infinity) to indicate the "RFC 8968: Babel Routing Protocol over Datagram
route was recently retracted and is temporarily Transport Layer Security.";
unreachable. This metric will be 0 (zero) if the route }
was not received from a neighbor but was generated
through other means. At least one of
calculated-metric or received-metric MUST be non-NULL.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6,
RFC 8966: The Babel Routing Protocol, Section 2.1.";
}
leaf calculated-metric { feature hmac-sha256-supported {
type uint16; description
description "This implementation supports hmac-sha256 MAC algorithm.";
"A calculated metric for this route. How the metric is reference
calculated is implementation-specific. Maximum value "RFC 8967: MAC authentication for Babel Routing
(infinity) indicates the route was recently retracted Protocol.";
and is temporarily unreachable. At least one of
calculated-metric or received-metric MUST be non-NULL.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6,
RFC 8966: The Babel Routing Protocol, Section 2.1.";
}
leaf seqno { }
type uint16;
description
"The sequence number with which this route was advertised.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf next-hop { feature blake2s-supported {
type inet:ip-address; description
description "This implementation supports blake2s MAC algorithms.
"The next-hop address of this route. This will be empty if Specifically, BLAKE2-128 is supported.";
this route has no next-hop address."; reference
reference "RFC 8967: MAC authentication for Babel Routing
"RFC ZZZZ: Babel Information Model, Section 3.6."; Protocol.";
} }
leaf feasible { feature x-509-supported {
type boolean; description
description "This implementation supports x-509 certificate type.";
"A boolean flag indicating whether this route is feasible."; reference
reference "RFC 8968: Babel Routing Protocol over Datagram
"RFC ZZZZ: Babel Information Model, Section 3.6, Transport Layer Security.";
RFC 8966, The Babel Routing Protocol, Section 3.5.1."; }
}
leaf selected { feature raw-public-key-supported {
type boolean;
description
"A boolean flag indicating whether this route is selected,
i.e., whether it is currently being used for forwarding and
is being advertised.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
description description
"A set of babel-route-obj objects. Includes received and "This implementation supports raw-public-key certificate
routes routes."; type.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.1."; "RFC 8968: Babel Routing Protocol over Datagram
Transport Layer Security.";
} }
description
"Common grouping for routing used in RIB.";
}
/* /*
* Data model * Identities
*/ */
augment "/rt:routing/rt:control-plane-protocols/" + identity metric-comp-algorithms {
"rt:control-plane-protocol" {
when "derived-from-or-self(rt:type, 'babel')" {
description description
"Augmentation is valid only when the instance of routing type "Base identity from which all Babel metric comp algorithms
is of type 'babel'."; MUST be derived.";
} }
description
"Augment the routing module to support a common structure
between routing protocols.";
reference
"YANG Routing Management, RFC 8349, Lhotka & Lindem, March
2018.";
container babel { identity two-out-of-three {
presence "A Babel container."; base metric-comp-algorithms;
if-feature "two-out-of-three-supported";
description description
"Babel Information Objects."; "2-out-of-3 algorithm.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3."; "RFC 8966: The Babel Routing Protocol, Section A.2.1.";
}
leaf version { identity etx {
type string; base metric-comp-algorithms;
config false; if-feature "etx-supported";
description description
"The name and version of this implementation of the Babel "Expected Transmission Count.";
protocol."; reference
reference "RFC 8966: The Babel Routing Protocol, Section A.2.2.";
"RFC ZZZZ: Babel Information Model, Section 3.1."; }
}
leaf enable { /*
type boolean; * Babel MAC algorithms identities.
mandatory true; */
description
"When written, it configures whether the protocol should be
enabled. A read from the <running> or <intended> datastore
therefore indicates the configured administrative value of
whether the protocol is enabled or not.
A read from the <operational> datastore indicates whether identity mac-algorithms {
the protocol is actually running or not, i.e. it indicates description
the operational state of the protocol."; "Base identity for all Babel MAC algorithms.";
reference }
"RFC ZZZZ: Babel Information Model, Section 3.1.";
}
leaf router-id { identity hmac-sha256 {
type binary; base mac-algorithms;
must '../enable = "true"'; if-feature "mac-supported";
config false; if-feature "hmac-sha256-supported";
description description
"Every Babel speaker is assigned a router-id, which is an "HMAC-SHA256 algorithm supported.";
arbitrary string of 8 octets that is assumed to be unique reference
across the routing domain. "RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
with IPsec.";
}
The router-id is valid only if the protocol is enabled, identity blake2s {
at which time a non-zero value is assigned."; base mac-algorithms;
reference if-feature "mac-supported";
"RFC ZZZZ: Babel Information Model, Section 3.1, if-feature "blake2s-supported";
RFC 8966: The Babel Routing Protocol, description
Section 3."; "BLAKE2s algorithms supported. Specifically, BLAKE2-128 is
supported.";
reference
"RFC 7693: The BLAKE2 Cryptographic Hash and Message
Authentication Code (MAC).";
}
} /*
* Babel Cert Types
*/
leaf seqno { identity dtls-cert-types {
type uint16; description
config false; "Base identity for Babel DTLS certificate types.";
description }
"Sequence number included in route updates for routes identity x-509 {
originated by this node."; base dtls-cert-types;
reference if-feature "dtls-supported";
"RFC ZZZZ: Babel Information Model, Section 3.1."; if-feature "x-509-supported";
} description
"X.509 certificate type.";
}
leaf stats-enable { identity raw-public-key {
type boolean; base dtls-cert-types;
description if-feature "dtls-supported";
"Indicates whether statistics collection is enabled (true) if-feature "raw-public-key-supported";
or disabled (false) on all interfaces. When enabled, description
existing statistics values are not cleared and will be "Raw Public Key type.";
incremented as new packets are counted."; }
}
container constants { /*
description * Babel routing protocol identity.
"Babel Constants object."; */
reference
"RFC ZZZZ: Babel Information Model, Section 3.1.";
leaf udp-port { identity babel {
type inet:port-number; base rt:routing-protocol;
default "6696"; description
description "Babel routing protocol";
"UDP port for sending and receiving Babel messages. The }
default port is 6696.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.2.";
}
leaf mcast-group { /*
type inet:ip-address; * Groupings
default "ff02::1:6"; */
description
"Multicast group for sending and receiving multicast
announcements on IPv6.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.2.";
}
}
list interfaces {
key "reference";
description grouping routes {
"A set of Babel Interface objects."; list routes {
reference key "prefix";
"RFC ZZZZ: Babel Information Model, Section 3.3."; config false;
leaf reference { leaf prefix {
type if:interface-ref; type inet:ip-prefix;
description description
"References the name of the interface over which Babel "Prefix (expressed in ip-address/prefix-length format) for
packets are sent and received."; which this route is advertised.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
leaf enable { leaf router-id {
type boolean; type binary;
default "true";
description description
"If true, babel sends and receives messages on this "router-id of the source router for which this route is
interface. If false, babel messages received on this advertised.";
interface are ignored and none are sent.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
leaf metric-algorithm { leaf neighbor {
type identityref { type leafref {
base metric-comp-algorithms; path "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol/babel/interfaces/"
+ "neighbor-objects/neighbor-address";
} }
mandatory true;
description description
"Indicates the metric computation algorithm used on this "Reference to the neighbor-objects entry for the neighbor
interface. The value MUST be one of those identities that advertised this route.";
based on 'metric-comp-algorithms'.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
leaf split-horizon { leaf received-metric {
type boolean; type uint16;
description description
"Indicates whether or not the split horizon optimization "The metric with which this route was advertised by the
is used when calculating metrics on this interface. neighbor, or maximum value (infinity) to indicate the
A value of true indicates split horizon optimization route was recently retracted and is temporarily
is used."; unreachable. This metric will be 0 (zero) if the route
was not received from a neighbor but was generated
through other means. At least one of
calculated-metric or received-metric MUST be non-NULL.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6,
RFC 8966: The Babel Routing Protocol, Section 2.1.";
} }
leaf mcast-hello-seqno { leaf calculated-metric {
type uint16; type uint16;
config false;
description description
"The current sequence number in use for multicast hellos "A calculated metric for this route. How the metric is
sent on this interface."; calculated is implementation-specific. Maximum value
(infinity) indicates the route was recently retracted
and is temporarily unreachable. At least one of
calculated-metric or received-metric MUST be non-NULL.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6,
RFC 8966: The Babel Routing Protocol, Section 2.1.";
} }
leaf mcast-hello-interval { leaf seqno {
type uint16; type uint16;
units centiseconds;
description description
"The current multicast hello interval in use for hellos "The sequence number with which this route was
sent on this interface."; advertised.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
leaf update-interval { leaf next-hop {
type uint16; type inet:ip-address;
units centiseconds;
description description
"The current update interval in use for this interface. "The next-hop address of this route. This will be empty if
Units are centiseconds."; this route has no next-hop address.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
leaf mac-enable { leaf feasible {
type boolean; type boolean;
description description
"Indicates whether the MAC security mechanism is enabled "A boolean flag indicating whether this route is
(true) or disabled (false)."; feasible.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6,
RFC 8966, The Babel Routing Protocol, Section 3.5.1.";
} }
leaf-list mac-key-sets { leaf selected {
type leafref { type boolean;
path "../../mac-key-set/name";
}
description description
"List of references to the mac entries that apply "A boolean flag indicating whether this route is selected,
to this interface. When an interface instance is i.e., whether it is currently being used for forwarding
created, all mac instances with default-apply 'true' and is being advertised.";
will be included in this list.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.6.";
} }
description
"A set of babel-route-obj objects. Includes received and
routes routes.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.1.";
}
description
"Common grouping for routing used in RIB.";
}
leaf mac-verify { /*
type boolean; * Data model
*/
augment "/rt:routing/rt:control-plane-protocols/"
+ "rt:control-plane-protocol" {
when "derived-from-or-self(rt:type, 'babel')" {
description
"Augmentation is valid only when the instance of routing type
is of type 'babel'.";
}
description
"Augment the routing module to support a common structure
between routing protocols.";
reference
"YANG Routing Management, RFC 8349, Lhotka & Lindem, March
2018.";
container babel {
presence "A Babel container.";
description
"Babel Information Objects.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.";
leaf version {
type string;
config false;
description description
"A Boolean flag indicating whether MACs in "The name and version of this implementation of the Babel
incoming Babel packets are required to be present and protocol.";
are verified. If this parameter is 'true', incoming
packets are required to have a valid MAC.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.1.";
} }
leaf dtls-enable { leaf enable {
type boolean; type boolean;
mandatory true;
description description
"Indicates whether the DTLS security mechanism is enabled "When written, it configures whether the protocol should be
(true) or disabled (false)."; enabled. A read from the <running> or <intended> datastore
reference therefore indicates the configured administrative value of
"RFC ZZZZ: Babel Information Model, Section 3.3."; whether the protocol is enabled or not.
}
leaf-list dtls-certs { A read from the <operational> datastore indicates whether
type leafref { the protocol is actually running or not, i.e. it indicates
path "../../dtls/name"; the operational state of the protocol.";
}
description
"List of references to the dtls entries that apply to
this interface. When an interface instance
is created, all dtls instances with default-apply
'true' will be included in this list.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.1.";
} }
leaf dtls-cached-info { leaf router-id {
type boolean; type binary;
must '../enable = "true"';
config false;
description description
"Indicates whether the cached_info extension is included "Every Babel speaker is assigned a router-id, which is an
in ClientHello and ServerHello packets. The extension arbitrary string of 8 octets that is assumed to be unique
is included if the value is 'true'."; across the routing domain.
The router-id is valid only if the protocol is enabled,
at which time a non-zero value is assigned.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3. "RFC ZZZZ: Babel Information Model, Section 3.1,
RFC 8968: Babel Routing Protocol over RFC 8966: The Babel Routing Protocol,
Datagram Transport Layer Security, Appendix A."; Section 3.";
} }
leaf-list dtls-cert-prefer { leaf seqno {
type leafref { type uint16;
path "../../dtls/certs/type"; config false;
}
ordered-by user;
description description
"List of supported certificate types, in order of "Sequence number included in route updates for routes
preference. The values MUST be among those listed in originated by this node.";
dtls-cert-types. This list is used to populate the
server_certificate_type extension in a Client Hello.
Values that are present in at least one instance in the
certs object under dtls of a referenced dtls instance
and that have a non-empty private-key will be used to
populate the client_certificate_type extension in a
Client Hello.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3 "RFC ZZZZ: Babel Information Model, Section 3.1.";
RFC 8968: Babel Routing Protocol over
Datagram Transport Layer Security, Appendix A.";
} }
leaf packet-log-enable { leaf stats-enable {
type boolean; type boolean;
description description
"If true, logging of babel packets received on this "Indicates whether statistics collection is enabled (true)
interface is enabled; if false, babel packets are not or disabled (false) on all interfaces. When enabled,
logged."; existing statistics values are not cleared and will be
reference incremented as new packets are counted.";
"RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf packet-log { container constants {
type inet:uri;
config false;
description description
"A reference or url link to a file that contains a "Babel Constants object.";
timestamped log of packets received and sent on
udp-port on this interface. The [libpcap] file
format with .pcap file extension SHOULD be supported for
packet log files. Logging is enabled / disabled by
packet-log-enable.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.1.";
leaf udp-port {
type inet:port-number;
default "6696";
description
"UDP port for sending and receiving Babel messages. The
default port is 6696.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.2.";
}
leaf mcast-group {
type inet:ip-address;
default "ff02::1:6";
description
"Multicast group for sending and receiving multicast
announcements on IPv6.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.2.";
}
} }
container stats { list interfaces {
config false; key "reference";
description description
"Statistics collection object for this interface."; "A set of Babel Interface objects.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.3."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
leaf sent-mcast-hello { leaf reference {
type yt:counter32; type if:interface-ref;
description description
"A count of the number of multicast Hello packets sent "References the name of the interface over which Babel
on this interface."; packets are sent and received.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.4."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf sent-mcast-update { leaf enable {
type yt:counter32; type boolean;
default "true";
description description
"A count of the number of multicast update packets sent "If true, babel sends and receives messages on this
on this interface."; interface. If false, babel messages received on this
interface are ignored and none are sent.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.4."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf sent-ucast-hello { leaf metric-algorithm {
type yt:counter32; type identityref {
base metric-comp-algorithms;
}
mandatory true;
description description
"A count of the number of unicast Hello packets sent "Indicates the metric computation algorithm used on this
on this interface."; interface. The value MUST be one of those identities
based on 'metric-comp-algorithms'.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.6."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf sent-ucast-update { leaf split-horizon {
type yt:counter32; type boolean;
description description
"A count of the number of unicast update packets sent "Indicates whether or not the split horizon optimization
on this interface."; is used when calculating metrics on this interface.
A value of true indicates split horizon optimization
is used.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.6."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf sent-ihu { leaf mcast-hello-seqno {
type yt:counter32; type uint16;
config false;
description description
"A count of the number of IHU packets sent on this "The current sequence number in use for multicast hellos
interface."; sent on this interface.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.6."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf received-packets { leaf mcast-hello-interval {
type yt:counter32; type uint16;
units "centiseconds";
description description
"A count of the number of Babel packets received on "The current multicast hello interval in use for hellos
this interface."; sent on this interface.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.4."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
action reset {
description
"The information model [RFC ZZZZ] defines reset
action as a system-wide reset of Babel statistics.
In YANG the reset action is associated with the
container where the action is defined. In this case
the action is associated with the stats container
inside an interface. The action will therefore
reset statistics at an interface level.
Implementations that want to support a system-wide leaf update-interval {
reset of Babel statistics need to call this action type uint16;
for every instance of the interface."; units "centiseconds";
description
input { "The current update interval in use for this interface.
leaf reset-at { Units are centiseconds.";
type yt:date-and-time; reference
description "RFC ZZZZ: Babel Information Model, Section 3.3.";
"The time when the reset was issued."; }
} leaf mac-enable {
} type boolean;
output { description
leaf reset-finished-at { "Indicates whether the MAC security mechanism is enabled
type yt:date-and-time; (true) or disabled (false).";
description reference
"The time when the reset finished."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
}
}
} }
}
list neighbor-objects {
key "neighbor-address";
config false;
description
"A set of Babel Neighbor Object.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
leaf neighbor-address { leaf-list mac-key-sets {
type inet:ip-address; type leafref {
path "../../mac-key-set/name";
}
description description
"IPv4 or v6 address the neighbor sends packets from."; "List of references to the mac entries that apply
to this interface. When an interface instance is
created, all mac instances with default-apply 'true'
will be included in this list.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf hello-mcast-history { leaf mac-verify {
type string; type boolean;
description description
"The multicast Hello history of whether or not the "A Boolean flag indicating whether MACs in
multicast Hello packets prior to exp-mcast- incoming Babel packets are required to be present and
hello-seqno were received, with a '1' for the most are verified. If this parameter is 'true', incoming
recent Hello placed in the most significant bit and packets are required to have a valid MAC.";
prior Hellos shifted right (with '0' bits placed
between prior Hellos and most recent Hello for any
not-received Hellos); represented as a string using
utf-8 encoded hex digits where a '1' bit = Hello
received and a '0' bit = Hello not received.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf hello-ucast-history { leaf dtls-enable {
type string; type boolean;
description description
"The unicast Hello history of whether or not the "Indicates whether the DTLS security mechanism is enabled
unicast Hello packets prior to exp-ucast-hello-seqno (true) or disabled (false).";
were received, with a '1' for the most
recent Hello placed in the most significant bit and
prior Hellos shifted right (with '0' bits placed
between prior Hellos and most recent Hello for any
not-received Hellos); represented as a string using
utf-8 encoded hex digits where a '1' bit = Hello
received and a '0' bit = Hello not received.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf txcost { leaf-list dtls-certs {
type int32; type leafref {
default "0"; path "../../dtls/name";
}
description description
"Transmission cost value from the last IHU packet "List of references to the dtls entries that apply to
received from this neighbor, or maximum value this interface. When an interface instance
(infinity) to indicate the IHU hold timer for this is created, all dtls instances with default-apply
neighbor has expired description."; 'true' will be included in this list.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf exp-mcast-hello-seqno { leaf dtls-cached-info {
type uint16; type boolean;
default "0";
description description
"Expected multicast Hello sequence number of next Hello "Indicates whether the cached_info extension is included
to be received from this neighbor; if multicast Hello in ClientHello and ServerHello packets. The extension
packets are not expected, or processing of multicast is included if the value is 'true'.";
packets is not enabled, this MUST be NULL.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.
RFC 8968: Babel Routing Protocol over
Datagram Transport Layer Security, Appendix A.";
} }
leaf exp-ucast-hello-seqno { leaf-list dtls-cert-prefer {
type uint16; type leafref {
default "0"; path "../../dtls/certs/type";
}
ordered-by user;
description description
"Expected unicast Hello sequence number of next Hello to "List of supported certificate types, in order of
be received from this neighbor; if unicast Hello preference. The values MUST be among those listed in
packets are not expected, or processing of unicast dtls-cert-types. This list is used to populate the
packets is not enabled, this MUST be NULL."; server_certificate_type extension in a Client Hello.
Values that are present in at least one instance in the
certs object under dtls of a referenced dtls instance
and that have a non-empty private-key will be used to
populate the client_certificate_type extension in a
Client Hello.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3
RFC 8968: Babel Routing Protocol over
Datagram Transport Layer Security, Appendix A.";
} }
leaf ucast-hello-seqno { leaf packet-log-enable {
type uint16; type boolean;
default "0";
description description
"The current sequence number in use for unicast Hellos "If true, logging of babel packets received on this
sent to this neighbor. If unicast Hellos are not being interface is enabled; if false, babel packets are not
sent, this MUST be NULL."; logged.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf ucast-hello-interval { leaf packet-log {
type uint16; type inet:uri;
units centiseconds; config false;
description description
"The current interval in use for unicast hellos sent to "A reference or url link to a file that contains a
this neighbor. Units are centiseconds."; timestamped log of packets received and sent on
udp-port on this interface. The [libpcap] file
format with .pcap file extension SHOULD be supported for
packet log files. Logging is enabled / disabled by
packet-log-enable.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
} }
leaf rxcost { container stats {
type uint16; config false;
description description
"Reception cost calculated for this neighbor. This value "Statistics collection object for this interface.";
is usually derived from the Hello history, which may be
combined with other data, such as statistics maintained
by the link layer. The rxcost is sent to a neighbor in
each IHU.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.3.";
leaf sent-mcast-hello {
type yang:counter32;
description
"A count of the number of multicast Hello packets sent
on this interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.4.";
}
leaf sent-mcast-update {
type yang:counter32;
description
"A count of the number of multicast update packets sent
on this interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.4.";
}
leaf sent-ucast-hello {
type yang:counter32;
description
"A count of the number of unicast Hello packets sent
on this interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf sent-ucast-update {
type yang:counter32;
description
"A count of the number of unicast update packets sent
on this interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf sent-ihu {
type yang:counter32;
description
"A count of the number of IHU packets sent on this
interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.6.";
}
leaf received-packets {
type yang:counter32;
description
"A count of the number of Babel packets received on
this interface.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.4.";
}
action reset {
description
"The information model [RFC ZZZZ] defines reset
action as a system-wide reset of Babel statistics.
In YANG the reset action is associated with the
container where the action is defined. In this case
the action is associated with the stats container
inside an interface. The action will therefore
reset statistics at an interface level.
Implementations that want to support a system-wide
reset of Babel statistics need to call this action
for every instance of the interface.";
input {
leaf reset-at {
type yang:date-and-time;
description
"The time when the reset was issued.";
}
}
output {
leaf reset-finished-at {
type yang:date-and-time;
description
"The time when the reset finished.";
}
}
}
} }
leaf cost { list neighbor-objects {
type int32; key "neighbor-address";
config false;
description description
"Link cost is computed from the values maintained in "A set of Babel Neighbor Object.";
the neighbor table. The statistics kept in the neighbor
table about the reception of Hellos, and the txcost
computed from received IHU packets.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.5."; "RFC ZZZZ: Babel Information Model, Section 3.5.";
}
}
}
list mac-key-set { leaf neighbor-address {
key "name"; type inet:ip-address;
description
"IPv4 or v6 address the neighbor sends packets from.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
description leaf hello-mcast-history {
"A mac key set object. If this object is implemented, it type string;
provides access to parameters related to the MAC security description
mechanism."; "The multicast Hello history of whether or not the
reference multicast Hello packets prior to exp-mcast-
"RFC ZZZZ: Babel Information Model, Section 3.7."; hello-seqno were received, with a '1' for the most
recent Hello placed in the most significant bit and
prior Hellos shifted right (with '0' bits placed
between prior Hellos and most recent Hello for any
not-received Hellos); represented as a string using
utf-8 encoded hex digits where a '1' bit = Hello
received and a '0' bit = Hello not received.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf name { leaf hello-ucast-history {
type string; type string;
description description
"A string that uniquely identifies the mac object."; "The unicast Hello history of whether or not the
} unicast Hello packets prior to exp-ucast-hello-seqno
leaf default-apply { were received, with a '1' for the most
type boolean; recent Hello placed in the most significant bit and
description prior Hellos shifted right (with '0' bits placed
"A Boolean flag indicating whether this object between prior Hellos and most recent Hello for any
instance is applied to all new interfaces, by default. not-received Hellos); represented as a string using
If 'true', this instance is applied to new babel- utf-8 encoded hex digits where a '1' bit = Hello
interfaces instances at the time they are created, received and a '0' bit = Hello not received.";
by including it in the mac-key-sets list under reference
interfaces. If 'false', this instance is not applied "RFC ZZZZ: Babel Information Model, Section 3.5.";
to new interfaces instances when they are created."; }
reference
"RFC ZZZZ: Babel Information Model, Section 3.7."; leaf txcost {
type int32;
default "0";
description
"Transmission cost value from the last IHU packet
received from this neighbor, or maximum value
(infinity) to indicate the IHU hold timer for this
neighbor has expired description.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf exp-mcast-hello-seqno {
type uint16;
default "0";
description
"Expected multicast Hello sequence number of next Hello
to be received from this neighbor; if multicast Hello
packets are not expected, or processing of multicast
packets is not enabled, this MUST be NULL.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf exp-ucast-hello-seqno {
type uint16;
default "0";
description
"Expected unicast Hello sequence number of next Hello
to be received from this neighbor; if unicast Hello
packets are not expected, or processing of unicast
packets is not enabled, this MUST be NULL.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf ucast-hello-seqno {
type uint16;
default "0";
description
"The current sequence number in use for unicast Hellos
sent to this neighbor. If unicast Hellos are not being
sent, this MUST be NULL.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf ucast-hello-interval {
type uint16;
units "centiseconds";
description
"The current interval in use for unicast hellos sent to
this neighbor. Units are centiseconds.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf rxcost {
type uint16;
description
"Reception cost calculated for this neighbor. This
value is usually derived from the Hello history, which
may be combined with other data, such as statistics
maintained by the link layer. The rxcost is sent to a
neighbor in each IHU.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
leaf cost {
type int32;
description
"Link cost is computed from the values maintained in
the neighbor table. The statistics kept in the
neighbor table about the reception of Hellos, and the
txcost computed from received IHU packets.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.5.";
}
}
} }
list keys { list mac-key-set {
key "name"; key "name";
min-elements "1";
description description
"A set of keys objects."; "A mac key set object. If this object is implemented, it
provides access to parameters related to the MAC security
mechanism.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.8."; "RFC ZZZZ: Babel Information Model, Section 3.7.";
leaf name { leaf name {
type string; type string;
description description
"A unique name for this MAC key that can be used to "A string that uniquely identifies the mac object.";
identify the key in this object instance, since the key
value is not allowed to be read. This value can only be
provided when this instance is created, and is not
subsequently writable.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
} }
leaf use-send { leaf default-apply {
type boolean; type boolean;
mandatory true;
description description
"Indicates whether this key value is used to compute a "A Boolean flag indicating whether this object
MAC and include that MAC in the sent Babel packet. A MAC instance is applied to all new interfaces, by default.
for sent packets is computed using this key if the value If 'true', this instance is applied to new babel-
is 'true'. If the value is 'false', this key is not used interfaces instances at the time they are created,
to compute a MAC to include in sent Babel packets."; by including it in the mac-key-sets list under
interfaces. If 'false', this instance is not applied
to new interfaces instances when they are created.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.8."; "RFC ZZZZ: Babel Information Model, Section 3.7.";
} }
leaf use-verify {
type boolean; list keys {
mandatory true; key "name";
min-elements 1;
description description
"Indicates whether this key value is used to verify "A set of keys objects.";
incoming Babel packets. This key is used to verify
incoming packets if the value is 'true'. If the value
is 'false', no MAC is computed from this key for
comparing an incoming packet.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.8."; "RFC ZZZZ: Babel Information Model, Section 3.8.";
}
leaf value { leaf name {
type binary; type string;
mandatory true; description
description "A unique name for this MAC key that can be used to
"The value of the MAC key. An implementation MUST NOT identify the key in this object instance, since the
allow this parameter to be read. This can be done by key value is not allowed to be read. This value can
always providing an empty string, or through only be provided when this instance is created, and is
permissions, or other means. This value MUST be not subsequently writable.";
provided when this instance is created, and is not reference
subsequently writable. "RFC ZZZZ: Babel Information Model, Section 3.8.";
}
This value is of a length suitable for the associated leaf use-send {
babel-mac-key-algorithm. If the algorithm is based on type boolean;
the HMAC construction [RFC2104], the length MUST be mandatory true;
between 0 and an upper limit that is at least the size description
of the output length (where 'HMAC-SHA256' output length "Indicates whether this key value is used to compute a
is 32 octets as described in [RFC4868]). Longer lengths MAC and include that MAC in the sent Babel packet. A
MAY be supported but are not necessary if the management MAC for sent packets is computed using this key if the
system has the ability to generate a suitably random value is 'true'. If the value is 'false', this key is
value (e.g., by randomly generating a value or by not used to compute a MAC to include in sent Babel
using a key derivation technique as recommended in packets.";
[RFC8967] Security Considerations). If the algorithm reference
is 'BLAKE2s-128', the length MUST be between 0 and 32 "RFC ZZZZ: Babel Information Model, Section 3.8.";
bytes inclusive as specified by [RFC7693].";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8,
RFC 2104: HMAC: Keyed-Hashing for Message
Authentication
RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, and
HMAC-SHA-512 with IPsec,
RFC 7693: The BLAKE2 Cryptographic Hash and Message
Authentication Code (MAC).
RFC 8967: MAC Authentication for Babel.";
}
leaf algorithm {
type identityref {
base mac-algorithms;
} }
mandatory "true";
description
"The name of the MAC algorithm used with this key. The
value MUST be the same as one of the enumerations
listed in the mac-algorithms parameter.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
}
action test { leaf use-verify {
description type boolean;
"An operation that allows the MAC key and MAC mandatory true;
algorithm to be tested to see if they produce an description
expected outcome. Input to this operation are a "Indicates whether this key value is used to verify
binary string and a calculated MAC (also in the incoming Babel packets. This key is used to verify
format of a binary string) for the binary string. incoming packets if the value is 'true'. If the value
The implementation is expected to create a MAC over is 'false', no MAC is computed from this key for
the binary string using the value and algorithm. comparing an incoming packet.";
The output of this operation is a binary indication that reference
the calculated MAC matched the input MAC (true) or the "RFC ZZZZ: Babel Information Model, Section 3.8.";
MACs did not match (false)."; }
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
input { leaf value {
leaf test-string { type binary;
type binary; mandatory true;
mandatory true; description
description "The value of the MAC key. An implementation MUST NOT
"Input to this operation is a binary string. allow this parameter to be read. This can be done by
The implementation is expected to create always providing an empty string, or through
a MAC over this string using the value and permissions, or other means. This value MUST be
the algorithm defined as part of the mac-key-set."; provided when this instance is created, and is not
reference subsequently writable.
"RFC ZZZZ: Babel Information Model, Section 3.8.";
}
leaf mac { This value is of a length suitable for the associated
type binary; babel-mac-key-algorithm. If the algorithm is based on
mandatory true; the HMAC construction [RFC2104], the length MUST be
description between 0 and an upper limit that is at least the size
"Input to this operation includes a MAC. of the output length (where 'HMAC-SHA256' output
The implementation is expected to calculate a MAC length is 32 octets as described in [RFC4868]). Longer
over the string using the value and algorithm of lengths MAY be supported but are not necessary if the
this key object and compare its calculated MAC to management system has the ability to generate a
this input MAC."; suitably random value (e.g., by randomly generating a
reference value or by using a key derivation technique as
"RFC ZZZZ: Babel Information Model, Section 3.8."; recommended in [RFC8967] Security Considerations). If
} the algorithm is 'BLAKE2s-128', the length MUST be
between 0 and 32 bytes inclusive as specified by
[RFC7693].";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8,
RFC 2104: HMAC: Keyed-Hashing for Message
Authentication
RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, and
HMAC-SHA-512 with IPsec,
RFC 7693: The BLAKE2 Cryptographic Hash and Message
Authentication Code (MAC).
RFC 8967: MAC Authentication for Babel.";
} }
output {
leaf indication { leaf algorithm {
type boolean; type identityref {
mandatory true; base mac-algorithms;
description
"The output of this operation is a binary indication
that the calculated MAC matched the input MAC (true)
or the MACs did not match (false).";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
} }
mandatory true;
description
"The name of the MAC algorithm used with this key. The
value MUST be the same as one of the enumerations
listed in the mac-algorithms parameter.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
} }
}
}
}
list dtls { action test {
key "name"; description
"An operation that allows the MAC key and MAC
algorithm to be tested to see if they produce an
expected outcome. Input to this operation are a
binary string and a calculated MAC (also in the
format of a binary string) for the binary string.
The implementation is expected to create a MAC over
the binary string using the value and algorithm.
The output of this operation is a binary indication
that the calculated MAC matched the input MAC (true)
or the MACs did not match (false).";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
description input {
"A dtls object. If this object is implemented, leaf test-string {
it provides access to parameters related to the DTLS type binary;
security mechanism."; mandatory true;
reference description
"RFC ZZZZ: Babel Information Model, Section 3.9"; "Input to this operation is a binary string.
leaf name { The implementation is expected to create
type string; a MAC over this string using the value and
description the algorithm defined as part of the
"A string that uniquely identifies a dtls object."; mac-key-set.";
} reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
}
leaf default-apply { leaf mac {
type boolean; type binary;
mandatory true; mandatory true;
description description
"A Boolean flag indicating whether this object "Input to this operation includes a MAC.
instance is applied to all new interfaces, by default. If The implementation is expected to calculate a MAC
'true', this instance is applied to new interfaces over the string using the value and algorithm of
instances at the time they are created, by including it this key object and compare its calculated MAC to
in the dtls-certs list under interfaces. If 'false', this input MAC.";
this instance is not applied to new interfaces reference
instances when they are created."; "RFC ZZZZ: Babel Information Model, Section 3.8.";
reference }
"RFC ZZZZ: Babel Information Model, Section 3.9."; }
output {
leaf indication {
type boolean;
mandatory true;
description
"The output of this operation is a binary
indication that the calculated MAC matched the
input MAC (true) or the MACs did not match
(false).";
reference
"RFC ZZZZ: Babel Information Model, Section 3.8.";
}
}
}
}
} }
list certs { list dtls {
key "name"; key "name";
min-elements "1";
description description
"A set of cert objects. This contains "A dtls object. If this object is implemented,
both certificates for this implementation to present it provides access to parameters related to the DTLS
for authentication, and to accept from others. security mechanism.";
Certificates with a non-empty private-key
can be presented by this implementation for
authentication.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.10."; "RFC ZZZZ: Babel Information Model, Section 3.9";
leaf name { leaf name {
type string; type string;
description description
"A unique name for this certificate that can be "A string that uniquely identifies a dtls object.";
used to identify the certificate in this object
instance, since the value is too long to be useful
for identification. This value MUST NOT be empty
and can only be provided when this instance is created
(i.e., it is not subsequently writable).";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
} }
leaf value { leaf default-apply {
type string; type boolean;
mandatory true; mandatory true;
description description
"The certificate in PEM format [RFC7468]. This "A Boolean flag indicating whether this object
value can only be provided when this instance is instance is applied to all new interfaces, by default.
created, and is not subsequently writable."; If 'true', this instance is applied to new interfaces
instances at the time they are created, by including it
in the dtls-certs list under interfaces. If 'false',
this instance is not applied to new interfaces
instances when they are created.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.10."; "RFC ZZZZ: Babel Information Model, Section 3.9.";
} }
leaf type { list certs {
type identityref { key "name";
base dtls-cert-types;
}
mandatory true;
description
"The name of the certificate type of this object
instance. The value MUST be the same as one of the
enumerations listed in the dtls-cert-types
parameter. This value can only be provided when this
instance is created, and is not subsequently writable.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
}
leaf private-key { min-elements 1;
type binary;
mandatory true;
description description
"The value of the private key. If this is non-empty, "A set of cert objects. This contains
this certificate can be used by this implementation to both certificates for this implementation to present
provide a certificate during DTLS handshaking. An for authentication, and to accept from others.
implementation MUST NOT allow this parameter to be Certificates with a non-empty private-key
read. This can be done by always providing an empty can be presented by this implementation for
string, or through permissions, or other means. This authentication.";
value can only be provided when this instance is
created, and is not subsequently writable.";
reference reference
"RFC ZZZZ: Babel Information Model, Section 3.10."; "RFC ZZZZ: Babel Information Model, Section 3.10.";
leaf name {
type string;
description
"A unique name for this certificate that can be
used to identify the certificate in this object
instance, since the value is too long to be useful
for identification. This value MUST NOT be empty
and can only be provided when this instance is created
(i.e., it is not subsequently writable).";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
}
leaf value {
type string;
mandatory true;
description
"The certificate in PEM format [RFC7468]. This
value can only be provided when this instance is
created, and is not subsequently writable.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
}
leaf type {
type identityref {
base dtls-cert-types;
}
mandatory true;
description
"The name of the certificate type of this object
instance. The value MUST be the same as one of the
enumerations listed in the dtls-cert-types
parameter. This value can only be provided when this
instance is created, and is not subsequently
writable.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
}
leaf private-key {
type binary;
mandatory true;
description
"The value of the private key. If this is non-empty,
this certificate can be used by this implementation to
provide a certificate during DTLS handshaking. An
implementation MUST NOT allow this parameter to be
read. This can be done by always providing an empty
string, or through permissions, or other means. This
value can only be provided when this instance is
created, and is not subsequently writable.";
reference
"RFC ZZZZ: Babel Information Model, Section 3.10.";
}
} }
} }
uses routes;
} }
uses routes;
} }
} }
} <CODE ENDS>
<CODE ENDS>
3. IANA Considerations 3. IANA Considerations
This document registers one URIs and one YANG module. This document registers one URIs and one YANG module.
3.1. URI Registrations 3.1. URI Registrations
URI: urn:ietf:params:xml:ns:yang:ietf-babel URI: urn:ietf:params:xml:ns:yang:ietf-babel
3.2. YANG Module Name Registration 3.2. YANG Module Name Registration
skipping to change at page 32, line 18 skipping to change at page 32, line 34
[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
Routing Management (NMDA Version)", RFC 8349, Routing Management (NMDA Version)", RFC 8349,
DOI 10.17487/RFC8349, March 2018, DOI 10.17487/RFC8349, March 2018,
<https://www.rfc-editor.org/info/rfc8349>. <https://www.rfc-editor.org/info/rfc8349>.
[RFC8966] Chroboczek, J. and D. Schinazi, "The Babel Routing [RFC8966] Chroboczek, J. and D. Schinazi, "The Babel Routing
Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021, Protocol", RFC 8966, DOI 10.17487/RFC8966, January 2021,
<https://www.rfc-editor.org/info/rfc8966>. <https://www.rfc-editor.org/info/rfc8966>.
[RFC8967] Do, C., Kolodziejak, W., and J. Chroboczek, "MAC [RFC8967] Dรด, C., Kolodziejak, W., and J. Chroboczek, "MAC
Authentication for the Babel Routing Protocol", RFC 8967, Authentication for the Babel Routing Protocol", RFC 8967,
DOI 10.17487/RFC8967, January 2021, DOI 10.17487/RFC8967, January 2021,
<https://www.rfc-editor.org/info/rfc8967>. <https://www.rfc-editor.org/info/rfc8967>.
6.2. Informative References 6.2. Informative References
[I-D.ietf-babel-information-model] [I-D.ietf-babel-information-model]
Stark, B. and M. Jethanandani, "Babel Information Model", Stark, B. and M. Jethanandani, "Babel Information Model",
draft-ietf-babel-information-model-12 (work in progress), Work in Progress, Internet-Draft, draft-ietf-babel-
January 2021. information-model-14, 11 March 2021,
<https://www.ietf.org/archive/id/draft-ietf-babel-
information-model-14.txt>.
[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-
Hashing for Message Authentication", RFC 2104, Hashing for Message Authentication", RFC 2104,
DOI 10.17487/RFC2104, February 1997, DOI 10.17487/RFC2104, February 1997,
<https://www.rfc-editor.org/info/rfc2104>. <https://www.rfc-editor.org/info/rfc2104>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>. <https://www.rfc-editor.org/info/rfc6020>.
skipping to change at page 39, line 4 skipping to change at page 39, line 48
<enable>true</enable> <enable>true</enable>
<mcast-hello-interval>30</mcast-hello-interval> <mcast-hello-interval>30</mcast-hello-interval>
<update-interval>120</update-interval> <update-interval>120</update-interval>
<metric-algorithm>two-out-of-three</metric-algorithm> <metric-algorithm>two-out-of-three</metric-algorithm>
</interfaces> </interfaces>
</babel> </babel>
</control-plane-protocol> </control-plane-protocol>
</control-plane-protocols> </control-plane-protocols>
</routing> </routing>
</config> </config>
Authors' Addresses
Authors' Addresses
Mahesh Jethanandani Mahesh Jethanandani
Kloud Services Kloud Services
California California
USA United States of America
Email: mjethanandani@gmail.com Email: mjethanandani@gmail.com
Barbara Stark Barbara Stark
AT&T AT&T
Atlanta, GA Atlanta, GA
USA United States of America
Email: barbara.stark@att.com Email: barbara.stark@att.com
 End of changes. 210 change blocks. 
955 lines changed or deleted 969 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/