import java.util.List;
import java.util.Objects;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.OpenConfigComparator;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.Neighbor1;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config;
return false;
}
}
- if (!Objects.equals(neighbor1.getKey(), neighbor2.getKey())) {
+ if (!Objects.equals(OpenConfigUtil.getNeighborKey(neighbor1), OpenConfigUtil.getNeighborKey(neighbor2))) {
return false;
}
- if (!Objects.equals(neighbor1.getNeighborAddress(), neighbor2.getNeighborAddress())) {
+ if (!Objects.equals(OpenConfigUtil.getNeighborAddress(neighbor1), OpenConfigUtil.getNeighborAddress(neighbor2))) {
return false;
}
if (!Objects.equals(neighbor1.getRouteReflector(), neighbor2.getRouteReflector())) {
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
import org.opendaylight.protocol.bgp.openconfig.impl.util.GlobalIdentifier;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
}
public void onNeighborRemoved(final Neighbor removedNeighbor) {
- final ModuleKey moduleKey = neighborState.getModuleKey(removedNeighbor.getKey());
+ final ModuleKey moduleKey = neighborState.getModuleKey(OpenConfigUtil.getNeighborKey(removedNeighbor));
if (moduleKey != null) {
try {
final ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
}
public void onNeighborModified(final Neighbor modifiedAppNeighbor) {
- final ModuleKey moduleKey = neighborState.getModuleKey(modifiedAppNeighbor.getKey());
+ final ModuleKey moduleKey = neighborState.getModuleKey(OpenConfigUtil.getNeighborKey(modifiedAppNeighbor));
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
if (moduleKey != null) {
//update an existing peer configuration
try {
- if (neighborState.addOrUpdate(moduleKey, modifiedAppNeighbor.getKey(), modifiedAppNeighbor)) {
+ if (neighborState.addOrUpdate(moduleKey, OpenConfigUtil.getNeighborKey(modifiedAppNeighbor), modifiedAppNeighbor)) {
final Optional<Module> maybeModule = configModuleOp.readModuleConfiguration(moduleKey, rTx);
if (maybeModule.isPresent()) {
final Module peerConfigModule = toPeerConfigModule(modifiedAppNeighbor, maybeModule.get());
final Module peerConfigModule = toPeerConfigModule(modifiedAppNeighbor, rib, moduleDataBroker);
configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
- neighborState.addOrUpdate(peerConfigModule.getKey(), modifiedAppNeighbor.getKey(), modifiedAppNeighbor);
+ neighborState.addOrUpdate(peerConfigModule.getKey(), OpenConfigUtil.getNeighborKey(modifiedAppNeighbor), modifiedAppNeighbor);
} catch (final Exception e) {
LOG.error("Failed to create a configuration module: {}", moduleKey, e);
throw new IllegalStateException(e);
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
import org.opendaylight.protocol.bgp.openconfig.impl.util.GlobalIdentifier;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.RouteReflector;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Timers;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport;
}
public void onNeighborRemoved(final Neighbor removedNeighbor) {
- final ModuleKey moduleKey = neighborState.getModuleKey(removedNeighbor.getKey());
+ final ModuleKey moduleKey = neighborState.getModuleKey(OpenConfigUtil.getNeighborKey(removedNeighbor));
if (moduleKey != null) {
try {
final ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
}
public void onNeighborModified(final Neighbor modifiedNeighbor) {
- final ModuleKey moduleKey = neighborState.getModuleKey(modifiedNeighbor.getKey());
+ final ModuleKey moduleKey = neighborState.getModuleKey(OpenConfigUtil.getNeighborKey(modifiedNeighbor));
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
final List<AdvertizedTable> advertizedTables = getAdvertizedTables(modifiedNeighbor, rTx);
if (moduleKey != null) {
private void updateExistingPeerConfiguration(final ModuleKey moduleKey, final Neighbor modifiedNeighbor, final List<AdvertizedTable>
advertizedTables, final ReadOnlyTransaction rTx) {
- if (neighborState.addOrUpdate(moduleKey, modifiedNeighbor.getKey(), modifiedNeighbor)) {
+ if (neighborState.addOrUpdate(moduleKey, OpenConfigUtil.getNeighborKey(modifiedNeighbor), modifiedNeighbor)) {
final Optional<Module> maybeModule = getOldModuleConfiguration(moduleKey, rTx);
if (maybeModule.isPresent()) {
final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, maybeModule.get(), advertizedTables);
final Rib rib = RibInstanceFunction.getRibInstance(this.configModuleOp, this.TO_RIB_FUNCTION, ribImplKey.getName(), rTx);
final Module peerConfigModule = toPeerConfigModule(modifiedNeighbor, advertizedTables, rib);
configModuleOp.putModuleConfiguration(peerConfigModule, dataBroker.newWriteOnlyTransaction());
- neighborState.addOrUpdate(peerConfigModule.getKey(), modifiedNeighbor.getKey(), modifiedNeighbor);
+ neighborState.addOrUpdate(peerConfigModule.getKey(), OpenConfigUtil.getNeighborKey(modifiedNeighbor), modifiedNeighbor);
} catch (final Exception e) {
LOG.error("Failed to create a configuration module: {}", moduleKey, e);
throw new IllegalStateException(e);
private static Module toPeerConfigModule(final Neighbor neighbor, final List<AdvertizedTable> tableTypes, final Rib rib) {
final ModuleBuilder mBuilder = new ModuleBuilder();
- mBuilder.setName(createPeerName(neighbor.getNeighborAddress()));
+ mBuilder.setName(createPeerName(OpenConfigUtil.getNeighborAddress(neighbor)));
mBuilder.setType(BgpPeer.class);
mBuilder.setConfiguration(toBgpPeerConfig(neighbor, tableTypes, rib).build());
mBuilder.setKey(new ModuleKey(mBuilder.getName(), mBuilder.getType()));
.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(neighbor.getNeighborAddress().getIpv4Address().getValue()));
} else {
ipAdress = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress(new org.opendaylight.yang
- .gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(neighbor.getNeighborAddress().getIpv6Address().getValue()));
+ .gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(OpenConfigUtil.getNeighborAddress(neighbor).getIpv6Address().getValue()));
}
bgpPeerBuilder.setHost(ipAdress);
final Timers timers = neighbor.getTimers();
}
private static String createPeerName(final IpAddress ipAddress) {
- final String address = ipAddress.getIpv4Address() != null ? ipAddress.getIpv4Address().getValue() : ipAddress.getIpv6Address().getValue();
+ final String address = ipAddress.getIpv4Address() != null ? ipAddress.getIpv4Address().getValue() : ipAddress.getIpv6Address().getValue().replace(':', '-');
return PEER + address;
}
return PeerRole.Ebgp;
}
}
- LOG.info("Unknown peer role, setting peer {} role to iBGP", neighbor.getKey());
+ LOG.info("Unknown peer role, setting peer {} role to iBGP", OpenConfigUtil.getNeighborKey(neighbor));
return PeerRole.Ibgp;
}
import com.google.common.base.Preconditions;
import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
import org.opendaylight.protocol.bgp.openconfig.spi.InstanceConfiguration;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
@Override
public final NeighborKey keyForConfiguration(final Neighbor neighbor) {
- return neighbor.getKey();
+ return OpenConfigUtil.getNeighborKey(neighbor);
}
}
import java.util.List;
import java.util.Map;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
+import org.opendaylight.protocol.util.Ipv6Util;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4LABELLEDUNICAST;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6LABELLEDUNICAST;
import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV6UNICAST;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150807.FlowspecSubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.labeled.unicast.rev150525.LabeledUnicastSubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkstateAddressFamily;
public static String getModuleName(final String provider) {
return provider.substring(provider.lastIndexOf('=') + 2, provider.length() - 2);
}
+
+ public static NeighborKey getNeighborKey(final Neighbor neighbor) {
+ if (neighbor.getKey() == null || neighbor.getKey().getNeighborAddress() == null) {
+ return null;
+ }
+ return new NeighborKey(getNormalizedNeighborAddress(neighbor.getKey().getNeighborAddress()));
+ }
+
+ public static IpAddress getNeighborAddress(final Neighbor neighbor) {
+ return getNormalizedNeighborAddress(neighbor.getNeighborAddress());
+
+ }
+
+ private static IpAddress getNormalizedNeighborAddress(final IpAddress address) {
+ if (address != null && address.getIpv6Address() != null) {
+ final Ipv6Address ipv6Address = Ipv6Util.getFullForm(address.getIpv6Address());
+ return new IpAddress(ipv6Address);
+ } else {
+ return address;
+ }
+ }
}
private Option pcepModules() {
return new DefaultCompositeOption(
mavenBundle("org.opendaylight.mdsal.model", "ietf-topology").versionAsInProject(), //
+ mavenBundle("org.opendaylight.mdsal.model", "ietf-inet-types-2013-07-15").versionAsInProject(), //
mavenBundle("org.opendaylight.yangtools", "object-cache-api").versionAsInProject(), //
mavenBundle("org.opendaylight.bgpcep", "pcep-topology-api").versionAsInProject(), //
mavenBundle("org.opendaylight.bgpcep", "pcep-tunnel-api").versionAsInProject(), //
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>ietf-inet-types</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-inet-types-2013-07-15</artifactId>
+ </dependency>
<!-- Testing dependencies -->
<dependency>
<groupId>junit</groupId>
return new Ipv6Address(InetAddresses.forString(ip.getValue()).getHostAddress());
}
+ /**
+ * Creates uncompressed IP Address
+ *
+ * @param ip to be uncompressed
+ * @return Ipv6Address with same, but uncompressed, value
+ */
+ public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address getFullForm(final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address ip) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address(InetAddresses.forString(ip.getValue()).getHostAddress());
+ }
+
/**
* Reads from ByteBuf buffer and converts bytes to Ipv6Address.
*