type inet:as-number;
}
}
+
+ grouping route-distinguisher-grouping {
+ leaf route-distinguisher {
+ type route-distinguisher;
+ mandatory true;
+ }
+ }
+
+ grouping orig-route-ip-grouping {
+ leaf orig-route-ip {
+ type inet:ip-address;
+ mandatory true;
+ }
+ }
}
}
}
- grouping route-distinguisher {
- leaf route-distinguisher {
- type bgp-t:route-distinguisher;
- mandatory true;
- }
- }
-
grouping ethernet-a-d-route {
container ethernet-a-d-route {
reference "https://tools.ietf.org/html/rfc7432#section-7.1";
description "Inclusive Multicast Ethernet Tag route";
uses ethernet-tag-id;
- leaf orig-route-ip {
- type inet:ip-address;
- }
+ uses bgp-t:orig-route-ip-grouping;
}
}
description "Ethernet Segment route";
uses esi;
- leaf orig-route-ip {
- type inet:ip-address;
- mandatory true;
- }
+ uses bgp-t:orig-route-ip-grouping;
}
}
mandatory true;
}
- uses route-distinguisher;
+ uses bgp-t:route-distinguisher-grouping;
}
augment "/bgp-msg:update/bgp-msg:attributes" {
}
}
- grouping flowspec-l3vpn-rd {
- reference "https://tools.ietf.org/html/rfc5575#section-8";
- leaf route-distinguisher {
- type bgp-t:route-distinguisher;
- }
- }
-
grouping flowspec-l3vpn-destination-ipv4 {
container destination-flowspec-l3vpn-ipv4 {
- uses flowspec-l3vpn-rd;
+ uses bgp-t:route-distinguisher-grouping;
uses flowspec-destination-group-ipv4;
uses bgp-msg:path-id-grouping;
}
grouping flowspec-l3vpn-destination-ipv6 {
container destination-flowspec-l3vpn-ipv6 {
- uses flowspec-l3vpn-rd;
+ uses bgp-t:route-distinguisher-grouping;
uses flowspec-destination-group-ipv6;
uses bgp-msg:path-id-grouping;
}
list flowspec-l3vpn-route {
key "route-key path-id";
uses flowspec-ipv4-route-list;
- uses flowspec-l3vpn-rd;
+ uses bgp-t:route-distinguisher-grouping;
}
}
list flowspec-l3vpn-route {
key "route-key path-id";
uses flowspec-ipv6-route-list;
- uses flowspec-l3vpn-rd;
+ uses bgp-t:route-distinguisher-grouping;
}
}
grouping l3vpn {
uses bgp-lu:labeled-unicast;
- leaf route-distinguisher {
- type bgp-t:route-distinguisher;
- }
+ uses bgp-t:route-distinguisher-grouping;
}
grouping l3vpn-ip-destination-type {
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import org.opendaylight.bgp.concepts.RouteDistinguisherUtil;
import org.opendaylight.protocol.bgp.linkstate.spi.AbstractTeLspNlriCodec;
import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleNlriTypeRegistry;
import org.opendaylight.protocol.bgp.parser.BGPParsingException;
import org.opendaylight.protocol.bgp.parser.spi.NlriSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.Identifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.ProtocolId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.RouteDistinguisher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.ObjectType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.destination.CLinkstateDestination;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.destination.CLinkstateDestinationBuilder;
@VisibleForTesting
public static final NodeIdentifier IDENTIFIER_NID = new NodeIdentifier(QName.create(CLinkstateDestination.QNAME, "identifier").intern());
@VisibleForTesting
- private static final NodeIdentifier DISTINGUISHER_NID = new NodeIdentifier(QName.create(CLinkstateDestination.QNAME, "distinguisher").intern());
+ private static final NodeIdentifier DISTINGUISHER_NID = new NodeIdentifier(QName.create(CLinkstateDestination.QNAME, "route-distinguisher").intern());
private final SimpleNlriTypeRegistry nlriTypeReg = SimpleNlriTypeRegistry.getInstance();
private static void serializeNodeDescriptor(final CLinkstateDestinationBuilder builder, final ChoiceNode objectType) {
final NodeCaseBuilder nodeBuilder = new NodeCaseBuilder();
// node descriptors
- nodeBuilder.setNodeDescriptors(NodeNlriParser.serializeNodeDescriptors((ContainerNode) objectType.getChild(NODE_DESCRIPTORS_NID).get()));
+ nodeBuilder.setNodeDescriptors(NodeNlriParser
+ .serializeNodeDescriptors((ContainerNode) objectType.getChild(NODE_DESCRIPTORS_NID).get()));
builder.setObjectType(nodeBuilder.build());
}
// serialize common parts
final Optional<DataContainerChild<? extends PathArgument, ?>> distinguisher = linkstate.getChild(DISTINGUISHER_NID);
if (distinguisher.isPresent()) {
- builder.setDistinguisher(new RouteDistinguisher((BigInteger) distinguisher.get().getValue()));
+ builder.setRouteDistinguisher(RouteDistinguisherUtil.parseRouteDistinguisher(distinguisher.get().getValue()));
}
final Optional<DataContainerChild<? extends PathArgument, ?>> protocolId = linkstate.getChild(PROTOCOL_ID_NID);
// DOM representation contains values as are in the model, not as are in generated enum
}
}
- typedef route-distinguisher {
- type uint64;
- }
-
typedef identifier {
type uint64;
}
}
grouping linkstate {
- leaf distinguisher {
- type route-distinguisher;
+ uses bgp-t:route-distinguisher-grouping {
+ refine route-distinguisher {
+ mandatory false;
+ }
}
leaf protocol-id {
type protocol-id;
setUp(this.nodeNlri);
// test BA form
- assertNull(this.dest.getDistinguisher());
+ assertNull(this.dest.getRouteDistinguisher());
assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());
final NodeCase nCase = ((NodeCase) this.dest.getObjectType());
setUp(this.linkNlri);
// test BA form
- assertNull(this.dest.getDistinguisher());
+ assertNull(this.dest.getRouteDistinguisher());
assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());
setUp(this.prefixNlri);
// test BA form
- assertNull(this.dest.getDistinguisher());
+ assertNull(this.dest.getRouteDistinguisher());
assertEquals(ProtocolId.IsisLevel2, this.dest.getProtocolId());
assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());
public void testTELspNlri() throws BGPParsingException {
setUp(this.teLspNlri);
// test BA form
- assertNull(this.dest.getDistinguisher());
+ assertNull(this.dest.getRouteDistinguisher());
assertEquals(ProtocolId.RsvpTe, this.dest.getProtocolId());
assertEquals(BigInteger.ONE, this.dest.getIdentifier().getValue());
final TeLspCase teCase = (TeLspCase) this.dest.getObjectType();
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.LinkstateAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.LinkstateSubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.ProtocolId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.RouteDistinguisher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.bgp.rib.rib.loc.rib.tables.routes.LinkstateRoutesCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.bgp.rib.rib.loc.rib.tables.routes.LinkstateRoutesCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.isis.lan.identifier.IsIsRouterIdentifierBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RdTwoOctetAs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.QName;
.setIsoSystemId(new IsoSystemIdentifier(new byte[]{0, 0, 0, 0, 0, (byte) 0x39})).build()).setPsn((short) 5).build()).build())
.setDomainId(new DomainIdentifier(28282828L)).build()).build();
- private static final RouteDistinguisher RD = new RouteDistinguisher(BigInteger.ONE);
+ private static final RouteDistinguisher RD = new RouteDistinguisher(new RdTwoOctetAs("0:5:3"));
private static final Identifier ID = new Identifier(BigInteger.ONE);
private static final CLinkstateDestination LINKSTATE_DESTINATION = new CLinkstateDestinationBuilder()
- .setDistinguisher(RD)
+ .setRouteDistinguisher(RD)
.setIdentifier(ID)
.setObjectType(OBJECT_TYPE2)
.setProtocolId(ProtocolId.IsisLevel1).build();
SimpleNlriTypeRegistry.getInstance().serializeNlriType(LINKSTATE_DESTINATION, buffer);
final byte[] arrayKey = ByteArray.readAllBytes(buffer);
ROUTE_KEY = new LinkstateRouteKey(PATH_ID, Arrays.toString(arrayKey));
- ROUTE = new LinkstateRouteBuilder().setKey(ROUTE_KEY).setDistinguisher(RD).setIdentifier(ID).setObjectType(OBJECT_TYPE2)
- .setProtocolId(ProtocolId.IsisLevel1).setAttributes(new AttributesBuilder().build()).build();
+ ROUTE = new LinkstateRouteBuilder().setKey(ROUTE_KEY).setRouteDistinguisher(RD)
+ .setIdentifier(ID).setObjectType(OBJECT_TYPE2)
+ .setProtocolId(ProtocolId.IsisLevel1).setAttributes(new AttributesBuilder().build()).build();
ROUTES = new LinkstateRoutesBuilder().setLinkstateRoute(Collections.singletonList(ROUTE)).build();
}
UriBuilder(final LinkstateRoute route) {
this.sb = new StringBuilder("bgpls://");
- if (route.getDistinguisher() != null) {
- this.sb.append(route.getDistinguisher().getValue().toString()).append(':');
+ if (route.getRouteDistinguisher() != null) {
+ String rd;
+ if (route.getRouteDistinguisher().getRdAs() != null) {
+ rd = route.getRouteDistinguisher().getRdAs().getValue();
+ } else if (route.getRouteDistinguisher().getRdIpv4() != null) {
+ rd = route.getRouteDistinguisher().getRdIpv4().getValue();
+ } else {
+ rd = route.getRouteDistinguisher().getRdTwoOctetAs().getValue();
+ }
+ this.sb.append(rd).append(':');
}
this.sb.append(route.getProtocolId().toString()).append(':')
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.Identifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.Ipv4InterfaceIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.ProtocolId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.RouteDistinguisher;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.TopologyIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.isis.lan.identifier.IsIsRouterIdentifierBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.linkstate.object.type.LinkCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.OspfNodeCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.isis.pseudonode._case.IsisPseudonodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.ospf.node._case.OspfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisherBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
public class UriBuilderTest {
+ private static final RouteDistinguisher DISTINGUISHER
+ = RouteDistinguisherBuilder.getDefaultInstance("1.2.3.4:258");
@Test
public void test() {
final UriBuilder a = new UriBuilder(routeB.build());
assertEquals("bgpls://Direct:10/", a.toString());
- routeB.setDistinguisher(new RouteDistinguisher(BigInteger.ONE));
+ routeB.setRouteDistinguisher(DISTINGUISHER);
final UriBuilder b = new UriBuilder(routeB.build());
- assertEquals("bgpls://1:Direct:10/", b.toString());
+ assertEquals("bgpls://1.2.3.4:258:Direct:10/", b.toString());
final UriBuilder c = new UriBuilder(b, "foo");
- assertEquals("bgpls://1:Direct:10/type=foo", c.toString());
+ assertEquals("bgpls://1.2.3.4:258:Direct:10/type=foo", c.toString());
a.add("foo", 25L);
assertEquals("bgpls://Direct:10/&foo=25", a.toString());
.build()).setPsn((short) 2).build()).build());
linkB.setRemoteNodeDescriptors(nodeR.build());
c.add(linkB.build());
- assertEquals("bgpls://1:Direct:10/type=foo&local-as=12&local-domain=15&local-area=17&local-router=22"
- + "&remote-router=0102.0304.0506.02&ipv4-iface=127.0.0.1&ipv4-neigh=20.20.20.20&mt=55&local-id=1&"
- + "remote-id=2", c.toString());
+ assertEquals("bgpls://1.2.3.4:258:Direct:10/type=foo&local-as=12&local-domain=15&local-area=17&"
+ + "local-router=22&remote-router=0102.0304.0506.02&ipv4-iface=127.0.0.1&ipv4-neigh=20.20.20.20&m"
+ + "t=55&local-id=1&remote-id=2", c.toString());
}
}