import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
final class EvpnRibSupport extends AbstractRIBSupport<EvpnRoute, EvpnRouteKey> {
private static final EvpnRibSupport SINGLETON = new EvpnRibSupport();
private static final Logger LOG = LoggerFactory.getLogger(EvpnRibSupport.class);
- private static final QName ROUTE_KEY_QNAME = QName.create(EvpnRoute.QNAME, ROUTE_KEY).intern();
private static final NodeIdentifier NLRI_ROUTES_LIST = NodeIdentifier.create(EvpnDestination.QNAME);
private EvpnRibSupport() {
EvpnNlriParser.serializeNlri(Collections.singletonList(dest), buffer);
final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
evpn.getChild(routePathIdNid());
- return PathIdUtil.createNidKey(routeQName(), ROUTE_KEY_QNAME,
+ return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
pathIdQName(), ByteArray.encodeBase64(buffer), maybePathIdLeaf);
}
*/
package org.opendaylight.protocol.bgp.flowspec.l3vpn;
-import static org.opendaylight.bgp.concepts.RouteDistinguisherUtil.extractRouteDistinguisher;
-
import com.google.common.collect.Iterables;
import java.util.Collection;
-import javax.annotation.Nonnull;
-
import org.opendaylight.protocol.bgp.flowspec.AbstractFlowspecRIBSupport;
import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.FlowspecL3vpnSubsequentAddressFamily;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.Identifier;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
public abstract class AbstractFlowspecL3vpnRIBSupport
<T extends AbstractFlowspecL3vpnNlriParser, R extends Route, S extends Identifier>
extends AbstractFlowspecRIBSupport<T, R, S> {
- private final NodeIdentifier routeDistinguisherNID;
protected AbstractFlowspecL3vpnRIBSupport(
- final Class<? extends Routes> cazeClass,
- final Class<? extends DataObject> containerClass,
- final Class<? extends Route> listClass,
- final QName dstContainerClassQName,
- final Class<? extends AddressFamily> afiClass,
- final T flowspecNlriParser
+ final Class<? extends Routes> cazeClass,
+ final Class<? extends DataObject> containerClass,
+ final Class<? extends Route> listClass,
+ final QName dstContainerClassQName,
+ final Class<? extends AddressFamily> afiClass,
+ final T flowspecNlriParser
) {
super(cazeClass, containerClass, listClass, afiClass, FlowspecL3vpnSubsequentAddressFamily.class,
dstContainerClassQName, flowspecNlriParser);
- this.routeDistinguisherNID
- = new NodeIdentifier(QName.create(routeQName(), "route-distinguisher").intern());
}
- @Nonnull
@Override
- protected DestinationType buildDestination(@Nonnull final Collection<MapEntryNode> routes) {
+ protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
final MapEntryNode routesCont = Iterables.getOnlyElement(routes);
final PathId pathId = PathIdUtil.buildPathId(routesCont, routePathIdNid());
- final RouteDistinguisher rd = extractRouteDistinguisher(routesCont, this.routeDistinguisherNID);
+ final RouteDistinguisher rd = extractRouteDistinguisher(routesCont);
return this.nlriParser.createAdvertizedRoutesDestinationType(
- new Object[] {rd, this.nlriParser.extractFlowspec(routesCont)},
- pathId
+ new Object[]{rd, this.nlriParser.extractFlowspec(routesCont)},
+ pathId
);
}
- @Nonnull
@Override
- protected DestinationType buildWithdrawnDestination(@Nonnull final Collection<MapEntryNode> routes) {
+ protected DestinationType buildWithdrawnDestination(final Collection<MapEntryNode> routes) {
final MapEntryNode routesCont = Iterables.getOnlyElement(routes);
final PathId pathId = PathIdUtil.buildPathId(routesCont, routePathIdNid());
- final RouteDistinguisher rd = extractRouteDistinguisher(routesCont, this.routeDistinguisherNID);
+ final RouteDistinguisher rd = extractRouteDistinguisher(routesCont);
return this.nlriParser.createWithdrawnDestinationType(
- new Object[] {rd, this.nlriParser.extractFlowspec(Iterables.getOnlyElement(routes))},
- pathId
+ new Object[]{rd, this.nlriParser.extractFlowspec(Iterables.getOnlyElement(routes))},
+ pathId
);
}
}
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.AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.MplsLabeledVpnSubsequentAddressFamily;
-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.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestinationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
public abstract class AbstractVpnRIBSupport extends AbstractRIBSupport<VpnRoute, VpnRouteKey> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractVpnRIBSupport.class);
private final NodeIdentifier nlriRoutesListNid;
- private final NodeIdentifier prefixTypeNid;
private final NodeIdentifier labelStackNid;
private final NodeIdentifier lvNid;
- private final NodeIdentifier rdNid;
- private final QName routeKey;
/**
* Default constructor. Requires the QName of the container augmented under the routes choice
super(cazeClass, containerClass, listClass, afiClass,
MplsLabeledVpnSubsequentAddressFamily.class, vpnDstContainerClassQname);
final QName classQname = BindingReflections.findQName(containerClass).intern();
- this.routeKey = QName.create(routeQName(), ROUTE_KEY).intern();
final QName vpnDstClassQname = QName.create(classQname, VpnDestination.QNAME.getLocalName());
this.nlriRoutesListNid = NodeIdentifier.create(vpnDstClassQname);
- this.prefixTypeNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "prefix").intern());
this.labelStackNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "label-stack").intern());
this.lvNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "label-value").intern());
- this.rdNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "route-distinguisher").intern());
}
private VpnDestination extractVpnDestination(final DataContainerNode<? extends PathArgument> route) {
final VpnDestination dst = new VpnDestinationBuilder()
- .setPrefix(extractPrefix(route, this.prefixTypeNid))
+ .setPrefix(createPrefix(extractPrefix(route)))
.setLabelStack(LabeledUnicastIpv4RIBSupport.extractLabel(route, this.labelStackNid, this.lvNid))
.setRouteDistinguisher(extractRouteDistinguisher(route))
.build();
return dst;
}
- protected abstract IpPrefix extractPrefix(DataContainerNode<? extends PathArgument> route,
- NodeIdentifier prefixTypeNid);
-
- private RouteDistinguisher extractRouteDistinguisher(
- final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route) {
- if (route.getChild(this.rdNid).isPresent()) {
- return RouteDistinguisherBuilder.getDefaultInstance((String) route.getChild(this.rdNid).get().getValue());
- }
- return null;
- }
+ protected abstract IpPrefix createPrefix(String prefix);
protected abstract DestinationType getAdvertisedDestinationType(List<VpnDestination> dests);
private NodeIdentifierWithPredicates createRouteKey(final UnkeyedListEntryNode l3vpn) {
final ByteBuf buffer = Unpooled.buffer();
- final VpnDestination dests = new VpnDestinationBuilder().setPrefix(extractPrefix(l3vpn, this.prefixTypeNid))
+ final VpnDestination dests = new VpnDestinationBuilder().setPrefix(createPrefix(extractPrefix(l3vpn)))
.setRouteDistinguisher(extractRouteDistinguisher(l3vpn)).build();
final ByteBuf nlriByteBuf = Unpooled.buffer();
final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
l3vpn.getChild(routePathIdNid());
- return PathIdUtil.createNidKey(routeQName(), this.routeKey,
+ return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
pathIdQName(), ByteArray.encodeBase64(buffer), maybePathIdLeaf);
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv4.rev180329.l3vpn.ipv4.routes.VpnIpv4RoutesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport {
/**
}
@Override
- protected IpPrefix extractPrefix(final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route,
- final YangInstanceIdentifier.NodeIdentifier prefixTypeNid) {
- if (route.getChild(prefixTypeNid).isPresent()) {
- final String prefixType = (String) route.getChild(prefixTypeNid).get().getValue();
- return new IpPrefix(new Ipv4Prefix(prefixType));
- }
- return null;
+ protected IpPrefix createPrefix(final String prefix) {
+ return new IpPrefix(new Ipv4Prefix(prefix));
}
@Override
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv6.rev180329.l3vpn.ipv6.routes.VpnIpv6RoutesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport {
}
@Override
- protected IpPrefix extractPrefix(final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route,
- final YangInstanceIdentifier.NodeIdentifier prefixTypeNid) {
- if (route.getChild(prefixTypeNid).isPresent()) {
- final String prefixType = (String) route.getChild(prefixTypeNid).get().getValue();
- return new IpPrefix(new Ipv6Prefix(prefixType));
- }
- return null;
+ protected IpPrefix createPrefix(final String prefix) {
+ return new IpPrefix(new Ipv6Prefix(prefix));
}
@Override
abstract class AbstractLabeledUnicastRIBSupport
extends AbstractRIBSupport<LabeledUnicastRoute, LabeledUnicastRouteKey> {
- private static final NodeIdentifier PREFIX_TYPE_NID
- = NodeIdentifier.create(QName.create(CLabeledUnicastDestination.QNAME, "prefix").intern());
private static final NodeIdentifier LABEL_STACK_NID
= NodeIdentifier.create(QName.create(CLabeledUnicastDestination.QNAME, "label-stack").intern());
private static final NodeIdentifier LV_NID
protected void processDestination(final DOMDataWriteTransaction tx, final YangInstanceIdentifier routesPath,
final ContainerNode destination, final ContainerNode attributes, final ApplyRoute function) {
if (destination != null) {
- final Optional<DataContainerChild<? extends PathArgument, ?>> maybeRoutes = destination.getChild(NLRI_ROUTES_LIST);
+ final Optional<DataContainerChild<? extends PathArgument, ?>> maybeRoutes
+ = destination.getChild(NLRI_ROUTES_LIST);
if (maybeRoutes.isPresent()) {
final DataContainerChild<? extends PathArgument, ?> routes = maybeRoutes.get();
if (routes instanceof UnkeyedListNode) {
private CLabeledUnicastDestination extractCLabeledUnicastDestination(
final DataContainerNode<? extends PathArgument> route) {
final CLabeledUnicastDestinationBuilder builder = new CLabeledUnicastDestinationBuilder();
- builder.setPrefix(extractPrefix(route, PREFIX_TYPE_NID));
+ builder.setPrefix(extractPrefix(route, prefixNid()));
builder.setLabelStack(extractLabel(route, LABEL_STACK_NID, LV_NID));
builder.setPathId(PathIdUtil.buildPathId(route, routePathIdNid()));
return builder.build();
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
public final class LinkstateRIBSupport extends AbstractRIBSupport<LinkstateRoute, LinkstateRouteKey> {
private static final Logger LOG = LoggerFactory.getLogger(LinkstateRIBSupport.class);
- private static final QName ROUTE_KEY_QNAME = QName.create(LinkstateRoute.QNAME, ROUTE_KEY).intern();
private static final LinkstateRIBSupport SINGLETON = new LinkstateRIBSupport();
- private final NodeIdentifier route = new NodeIdentifier(LinkstateRoute.QNAME);
- private final NodeIdentifier nlriRoutesList = new NodeIdentifier(CLinkstateDestination.QNAME);
+ private final YangInstanceIdentifier.NodeIdentifier nlriRoutesList
+ = new YangInstanceIdentifier.NodeIdentifier(CLinkstateDestination.QNAME);
private LinkstateRIBSupport() {
super(LinkstateRoutesCase.class, LinkstateRoutes.class, LinkstateRoute.class, LinkstateAddressFamily.class,
SimpleNlriTypeRegistry.getInstance().serializeNlriType(cLinkstateDestination, buffer);
final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
linkstate.getChild(routePathIdNid());
- return PathIdUtil.createNidKey(LinkstateRoute.QNAME, ROUTE_KEY_QNAME,
+ return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
pathIdQName(), Arrays.toString(ByteArray.readAllBytes(buffer)), maybePathIdLeaf);
}
if (maybeRoutes.isPresent()) {
final DataContainerChild<? extends PathArgument, ?> routes = maybeRoutes.get();
if (routes instanceof UnkeyedListNode) {
- final YangInstanceIdentifier base = routesPath.node(routesContainerIdentifier()).node(this.route);
+ final YangInstanceIdentifier base = routesPath.node(routesContainerIdentifier()).node(routeNid());
for (final UnkeyedListEntryNode e : ((UnkeyedListNode) routes).getValue()) {
final NodeIdentifierWithPredicates routeKey = createRouteKey(e);
function.apply(tx, base, routeKey, e, attributes);
import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
organization "AT&T Services, Inc.";
- contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech.com>";
+ contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech>";
description
"This module contains odl bgp policy model
return (Long) NormalizedNodes.findNode(data, pathNii).map(NormalizedNode::getValue).orElse(null);
}
- /**
- * Get route key object ( prefgit stat ix / key-value/ .. ).
- *
- * @param routeId PathArgument containing the key
- * @param routeKeyQname routeKey Qname
- * @return key
- */
- public static Object getObjectKey(final NodeIdentifierWithPredicates routeId, final QName routeKeyQname) {
- return routeId.getKeyValues().get(routeKeyQname);
- }
-
public static NodeIdentifierWithPredicates createNodeIdentifierWithPredicates(final QName routeQname,
final QName pathidQname, final Object pathId,
final QName routeKeyQname, final Object keyObject) {
<modules>
<module>bgp-artifacts</module>
<module>concepts</module>
- <module>inet</module>
- <module>linkstate</module>
- <module>flowspec</module>
- <module>l3vpn</module>
- <module>labeled-unicast</module>
<module>parser-api</module>
<module>parser-spi</module>
<module>parser-impl</module>
<module>openconfig-spi</module>
<module>path-selection-mode</module>
<module>benchmark-app</module>
- <module>evpn</module>
<module>cli</module>
<module>peer-acceptor</module>
<module>openconfig-state</module>
<module>openconfig-rp-spi</module>
<module>openconfig-rp-impl</module>
<module>openconfig-rp-statement</module>
+ <!--Extensions-->
+ <module>inet</module>
+ <module>linkstate</module>
+ <module>flowspec</module>
+ <module>l3vpn</module>
+ <module>labeled-unicast</module>
+ <module>evpn</module>
</modules>
</project>
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
-import javax.annotation.Nonnull;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Update;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
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.AddressFamily;
+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.bgp.types.rev180329.SubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.CNextHop;
import org.opendaylight.yangtools.yang.binding.DataObject;
private final QName pathIdQname;
private final NodeIdentifier pathIdNid;
private final QName routeKeyQname;
- private final NodeIdentifier routeKeyNodeId;
+ private final NodeIdentifier prefixTypeNid;
+ private final NodeIdentifier rdNid;
/**
* Default constructor. Requires the QName of the container augmented under the routes choice
this.pathIdQname = QName.create(routeQName(), "path-id").intern();
this.pathIdNid = new NodeIdentifier(this.pathIdQname);
this.routeKeyQname = QName.create(routeQName(), ROUTE_KEY).intern();
- this.routeKeyNodeId = new NodeIdentifier(this.routeKeyQname);
+ this.prefixTypeNid = NodeIdentifier.create(QName.create(destinationQname, "prefix").intern());
+ this.rdNid = NodeIdentifier.create(QName.create(destinationQname, "route-distinguisher").intern());
}
@Override
return this.routeQname;
}
+ protected final NodeIdentifier prefixNid() {
+ return this.prefixTypeNid;
+ }
+
protected final NodeIdentifier routeNid() {
return this.routesListIdentifier;
}
- @Nonnull
@Override
public final Class<? extends AddressFamily> getAfi() {
return this.afiClass;
}
- @Nonnull
@Override
public final Class<? extends SubsequentAddressFamily> getSafi() {
return this.safiClass;
return mb.build();
}
- @Nonnull
- protected abstract DestinationType buildDestination(@Nonnull Collection<MapEntryNode> routes);
+ protected abstract DestinationType buildDestination(Collection<MapEntryNode> routes);
- @Nonnull
- protected abstract DestinationType buildWithdrawnDestination(@Nonnull Collection<MapEntryNode> routes);
+ protected abstract DestinationType buildWithdrawnDestination(Collection<MapEntryNode> routes);
/**
* Return the {@link NodeIdentifier} of the AFI/SAFI-specific container under
putRoutes(tx, tablePath, nlri, attributes, ROUTES);
}
- @Nonnull
@Override
public final Update buildUpdate(final Collection<MapEntryNode> advertised, final Collection<MapEntryNode> withdrawn,
final Attributes attr) {
return this.routeKeyQname;
}
- protected final NodeIdentifier routeKeyNodeIdentifier() {
- return this.routeKeyNodeId;
+ protected final String extractPrefix(final DataContainerNode<? extends PathArgument> route) {
+ return (String) route.getChild(prefixTypeNid).get().getValue();
+ }
+
+ protected final RouteDistinguisher extractRouteDistinguisher(
+ final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route) {
+ if (route.getChild(this.rdNid).isPresent()) {
+ return RouteDistinguisherBuilder.getDefaultInstance((String) route.getChild(this.rdNid).get().getValue());
+ }
+ return null;
}
}
package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.ipv4.routes;
-import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
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.Ipv4AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
-import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.Identifier;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;