mirror of
https://github.com/FRRouting/frr.git
synced 2025-04-30 13:37:17 +02:00

The staticd YANG conversion completely f*cked up dst-src routes.
Stupidly enough, the correct thing is much simpler as seen by the amount
of deletes in this commit.
This does, unfortunately, involve a rather annoying YANG edge case with
what should reasonably be an optional leaf as part of a list key, which
is not possible. It uses `::/0` as unconditional filler instead, since
that is semantically correct.
The `test_yang_mgmt` topotest needed to be adjusted after this to add
`src-prefix='::/0'`.
Fixes: 88fa5104a0
("staticd : Configuration northbound implementation")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
249 lines
7 KiB
YANG
249 lines
7 KiB
YANG
// SPDX-License-Identifier: BSD-2-Clause
|
|
module frr-staticd {
|
|
yang-version 1.1;
|
|
namespace "http://frrouting.org/yang/staticd";
|
|
prefix frr-staticd;
|
|
|
|
import frr-routing {
|
|
prefix frr-rt;
|
|
}
|
|
|
|
import frr-nexthop {
|
|
prefix frr-nexthop;
|
|
}
|
|
|
|
import ietf-inet-types {
|
|
prefix inet;
|
|
}
|
|
|
|
import frr-bfdd {
|
|
prefix frr-bfdd;
|
|
}
|
|
|
|
import frr-vrf {
|
|
prefix frr-vrf;
|
|
}
|
|
|
|
organization
|
|
"FRRouting";
|
|
contact
|
|
"FRR Users List: <mailto:frog@lists.frrouting.org>
|
|
FRR Development List: <mailto:dev@lists.frrouting.org>";
|
|
description
|
|
"This module defines a model for managing FRR staticd information.
|
|
This YANG module augments the ietf-routing with additional
|
|
nexthop information
|
|
|
|
Copyright 2020 FRRouting
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
|
|
|
|
revision 2019-12-03 {
|
|
description
|
|
"Initial revision.";
|
|
}
|
|
|
|
identity staticd {
|
|
base frr-rt:routing-protocol;
|
|
description
|
|
"'Staticd' routing pseudo-protocol.";
|
|
}
|
|
|
|
grouping staticd-prefix-attributes {
|
|
list path-list {
|
|
key "table-id distance";
|
|
leaf table-id {
|
|
type uint32;
|
|
description
|
|
"Table-id";
|
|
}
|
|
|
|
leaf distance {
|
|
type frr-rt:administrative-distance;
|
|
description
|
|
"Admin distance associated with this route.";
|
|
}
|
|
|
|
leaf tag {
|
|
type uint32;
|
|
default "0";
|
|
description
|
|
"Route tag";
|
|
}
|
|
|
|
uses frr-nexthop:frr-nexthop;
|
|
}
|
|
}
|
|
|
|
typedef srv6-behavior-codepoint {
|
|
description
|
|
"SRv6 Endpoint Behaviors Codepoints as per
|
|
https://www.iana.org/assignments/segment-routing/segment-routing.xhtml.";
|
|
type enumeration {
|
|
enum End {
|
|
value 1;
|
|
description
|
|
"This enum indicates End endpoint behavior.";
|
|
}
|
|
enum End.X {
|
|
value 5;
|
|
description
|
|
"This enum indicates End.X endpoint behavior.";
|
|
}
|
|
enum End.DT6 {
|
|
value 18;
|
|
description
|
|
"This enum indicates End.DT6 endpoint behavior.";
|
|
}
|
|
enum End.DT4 {
|
|
value 19;
|
|
description
|
|
"This enum indicates End.DT4 endpoint behavior.";
|
|
}
|
|
enum End.DT46 {
|
|
value 20;
|
|
description
|
|
"This enum indicates End.DT46 endpoint behavior.";
|
|
}
|
|
enum uN {
|
|
value 43;
|
|
description
|
|
"This enum indicates End with NEXT-CSID endpoint behavior.";
|
|
}
|
|
enum uA {
|
|
value 52;
|
|
description
|
|
"This enum indicates End.X with NEXT-CSID endpoint behavior.";
|
|
}
|
|
enum uDT6 {
|
|
value 62;
|
|
description
|
|
"This enum indicates End.DT6 with NEXT-CSID endpoint behavior.";
|
|
}
|
|
enum uDT4 {
|
|
value 63;
|
|
description
|
|
"This enum indicates End.DT4 with NEXT-CSID endpoint behavior.";
|
|
}
|
|
enum uDT46 {
|
|
value 64;
|
|
description
|
|
"This enum indicates End.DT46 with NEXT-CSID endpoint behavior.";
|
|
}
|
|
}
|
|
}
|
|
|
|
augment "/frr-rt:routing/frr-rt:control-plane-protocols/frr-rt:control-plane-protocol" {
|
|
container staticd {
|
|
when "../frr-rt:type = 'frr-staticd:staticd'" {
|
|
description
|
|
"This container is only valid for the 'staticd' routing
|
|
protocol.";
|
|
}
|
|
description
|
|
"Support for a 'staticd' pseudo-protocol instance
|
|
consists of a list of routes.";
|
|
list route-list {
|
|
key "prefix src-prefix afi-safi";
|
|
description
|
|
"List of staticd IP routes.";
|
|
leaf prefix {
|
|
type inet:ip-prefix;
|
|
description
|
|
"IP prefix.";
|
|
}
|
|
leaf src-prefix {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"IPv6 source prefix for dst-src routes";
|
|
}
|
|
leaf afi-safi {
|
|
type identityref {
|
|
base frr-rt:afi-safi-type;
|
|
}
|
|
description
|
|
"AFI-SAFI type.";
|
|
}
|
|
/* note dst-src routes are semantically invalid in MRIB */
|
|
must "afi-safi = 'frr-rt:ipv6-unicast'
|
|
or afi-safi = 'frr-rt:ipv6-labeled-unicast'
|
|
or afi-safi = 'frr-rt:l3vpn-ipv6-unicast'
|
|
or src-prefix = '::/0'
|
|
";
|
|
|
|
uses staticd-prefix-attributes {
|
|
augment "path-list/frr-nexthops/nexthop" {
|
|
container bfd-monitoring {
|
|
description "BFD monitoring options.";
|
|
presence
|
|
"Present if BFD configuration is available.";
|
|
|
|
when "../nh-type = 'ip4' or ../nh-type = 'ip4-ifindex' or
|
|
../nh-type = 'ip6' or ../nh-type = 'ip6-ifindex'";
|
|
uses frr-bfdd:bfd-monitoring;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
container segment-routing {
|
|
description
|
|
"Segment Routing configuration.";
|
|
container srv6 {
|
|
description
|
|
"Segment Routing over IPv6 (SRv6) configuration.";
|
|
container static-sids {
|
|
description
|
|
"This container lists the SRv6 Static SIDs instantiated on the local node.";
|
|
list sid {
|
|
description
|
|
"List of SRv6 Static SIDs.";
|
|
key "sid";
|
|
leaf sid {
|
|
type inet:ipv6-prefix;
|
|
description
|
|
"Value of the SRv6 SID.";
|
|
}
|
|
leaf behavior {
|
|
type srv6-behavior-codepoint;
|
|
description
|
|
"Behavior bound to the SRv6 SID.";
|
|
}
|
|
leaf locator-name {
|
|
type string;
|
|
description
|
|
"SRv6 locator name.";
|
|
}
|
|
leaf vrf-name {
|
|
type frr-vrf:vrf-ref;
|
|
description
|
|
"The VRF name.";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |