<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>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-yang-types-20130715</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>yang-ext</artifactId>
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.groupbasedpolicy.util;
+
+import javax.annotation.Nullable;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
+
+/**
+ * This is temporary solution for conversion between entities from
+ * ietf-{inet,yang}-types 2013 to ietf-{inet,yang}-types 2010 and vice versa.
+ * This conversion should be removed after GBP and all other projects migrate to version 2013.
+ */
+public final class IetfModelCodec {
+
+ private IetfModelCodec() {}
+
+ public static @Nullable IpPrefix ipPrefix2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ if (ip.getIpv4Prefix() != null) {
+ return new IpPrefix(ipv4Prefix2010(ip.getIpv4Prefix()));
+ } else if (ip.getIpv6Prefix() != null) {
+ return new IpPrefix(ipv6Prefix2010(ip.getIpv6Prefix()));
+ }
+ throw new IllegalArgumentException("IP prefix is not ipv4 nor ipv6. " + ip);
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix ipPrefix2013(
+ @Nullable IpPrefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ if (ip.getIpv4Prefix() != null) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix(
+ ipv4Prefix2013(ip.getIpv4Prefix()));
+ } else if (ip.getIpv6Prefix() != null) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix(
+ ipv6Prefix2013(ip.getIpv6Prefix()));
+ }
+ throw new IllegalArgumentException("IP prefix is not ipv4 nor ipv6. " + ip);
+ }
+
+ public static @Nullable Ipv4Prefix ipv4Prefix2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new Ipv4Prefix(ip.getValue());
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix ipv4Prefix2013(
+ @Nullable Ipv4Prefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix(
+ ip.getValue());
+ }
+
+ public static @Nullable Ipv6Prefix ipv6Prefix2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new Ipv6Prefix(ip.getValue());
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix ipv6Prefix2013(
+ @Nullable Ipv6Prefix ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix(
+ ip.getValue());
+ }
+
+ public static @Nullable MacAddress macAddress2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress mac) {
+ if (mac == null) {
+ return null;
+ }
+ return new MacAddress(mac.getValue());
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress macAddress2013(
+ @Nullable MacAddress mac) {
+ if (mac == null) {
+ return null;
+ }
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress(
+ mac.getValue());
+ }
+
+ public static @Nullable IpAddress ipAddress2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ip) {
+ if (ip == null) {
+ return null;
+ }
+ if (ip.getIpv4Address() != null) {
+ return new IpAddress(ipv4Address2010(ip.getIpv4Address()));
+ } else if (ip.getIpv6Address() != null) {
+ return new IpAddress(ipv6Address2010(ip.getIpv6Address()));
+ }
+ throw new IllegalArgumentException("IP address is not ipv4 nor ipv6. " + ip);
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress ipAddress2013(
+ @Nullable IpAddress ip) {
+ if (ip == null) {
+ return null;
+ }
+ if (ip.getIpv4Address() != null) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(
+ ipv4Address2013(ip.getIpv4Address()));
+ } else if (ip.getIpv6Address() != null) {
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress(
+ ipv6Address2013(ip.getIpv6Address()));
+ }
+ throw new IllegalArgumentException("IP address is not ipv4 nor ipv6. " + ip);
+ }
+
+ public static @Nullable Ipv4Address ipv4Address2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new Ipv4Address(ip.getValue());
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address ipv4Address2013(
+ @Nullable Ipv4Address ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address(
+ ip.getValue());
+ }
+
+ public static @Nullable Ipv6Address ipv6Address2010(
+ @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new Ipv6Address(ip.getValue());
+ }
+
+ public static @Nullable org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address ipv6Address2013(
+ @Nullable Ipv6Address ip) {
+ if (ip == null) {
+ return null;
+ }
+ return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address(
+ ip.getValue());
+ }
+
+ public static @Nullable PortNumber portNumber2010(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber pn) {
+ if (pn == null) {
+ return null;
+ }
+ return new PortNumber(pn.getValue());
+ }
+}
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
-import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.faas.uln.datastore.api.UlnDatastoreApi;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.groupbasedpolicy.util.IidFactory;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.faas.faas.endpoint.rev151009.FaasEndpointContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
public class FaasEndpointManagerListener implements DataChangeListener, AutoCloseable {
List<PrivateIps> privateIpAddresses = new ArrayList<>();
for (L3Address ip : endpoint.getL3Address()) {
PrivateIpsBuilder ipBuilder = new PrivateIpsBuilder();
- ipBuilder.setIpAddress(ip.getIpAddress());
+ ipBuilder.setIpAddress(IetfModelCodec.ipAddress2013(ip.getIpAddress()));
ipBuilder.setSubnetId(faasSubnetId);
privateIpAddresses.add(ipBuilder.build());
}
- if (!UlnDatastoreApi.attachEndpointToSubnet(epLocBuilder, faasSubnetId, endpoint.getMacAddress(),
+ if (!UlnDatastoreApi.attachEndpointToSubnet(epLocBuilder, faasSubnetId, IetfModelCodec.macAddress2013(endpoint.getMacAddress()),
privateIpAddresses, null)) {
LOG.error("Failed Endpoint Registration. Failed to Attach Endpoint to Faas Logical Network. Endpoint {}",
endpoint);
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
-import com.google.common.annotations.VisibleForTesting;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.faas.uln.datastore.api.UlnDatastoreApi;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.yang.gen.v1.urn.opendaylight.faas.logical.faas.common.rev151013.Text;
import org.opendaylight.yang.gen.v1.urn.opendaylight.faas.logical.faas.common.rev151013.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.faas.logical.faas.subnets.rev151013.subnets.container.subnets.SubnetBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
public class FaasSubnetManagerListener implements DataChangeListener {
List<ExternalGateways> gateways = new ArrayList<>();
for (Gateways gw : gbpSubnet.getGateways()) {
ExternalGatewaysBuilder eb = new ExternalGatewaysBuilder();
- eb.setExternalGateway(gw.getGateway());
+ eb.setExternalGateway(IetfModelCodec.ipAddress2013(gw.getGateway()));
if (gw.getPrefixes() != null) {
- List<IpPrefix> ipPrefixes = new ArrayList<>();
+ List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix> ipPrefixes = new ArrayList<>();
for (Prefixes px : gw.getPrefixes()) {
- ipPrefixes.add(px.getPrefix());
+ ipPrefixes.add(IetfModelCodec.ipPrefix2013(px.getPrefix()));
}
eb.setPrefixes(ipPrefixes);
}
builder.setExternalGateways(gateways);
}
- builder.setIpPrefix(gbpSubnet.getIpPrefix());
+ builder.setIpPrefix(IetfModelCodec.ipPrefix2013(gbpSubnet.getIpPrefix()));
builder.setUuid(getFaasSubnetId(gbpSubnet.getId()));
builder.setName(new Text(gbpSubnet.getId().getValue()));
if (gbpSubnet.getDescription() != null)
else
builder.setDescription(new Text("gbp-subnet"));
builder.setTenantId(faasTenantId);
- builder.setVirtualRouterIp(gbpSubnet.getVirtualRouterIp());
+ builder.setVirtualRouterIp(IetfModelCodec.ipAddress2013(gbpSubnet.getVirtualRouterIp()));
// TODO DNS servers
builder.setDnsNameservers(null);
// TODO DHCP server
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.NetconfTransactionCreator;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriter;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
final java.util.Optional<ServiceFunctionForwarder> serviceFunctionForwarder = java.util.Optional.ofNullable(
SfcProviderServiceForwarderAPI.readServiceFunctionForwarder(sffName));
- return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(sff.getIpMgmtAddress())
+ return serviceFunctionForwarder.map(sff -> java.util.Optional.ofNullable(IetfModelCodec.ipAddress2010(sff.getIpMgmtAddress()))
.map(IpAddress::getIpv4Address)
.map((ipv4Address) -> ipv4Address.getValue())
.map(addressValue -> {
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.RendererPolicyUtil;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.ServiceChainingUtil;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName;
ServiceFunctionForwarderBuilder serviceFunctionForwarderBuilder = new ServiceFunctionForwarderBuilder();
serviceFunctionForwarderBuilder.setName(new SffName(forwarderName))
.setKey(new ServiceFunctionForwarderKey(new SffName(forwarderName)))
- .setIpMgmtAddress(new IpAddress(new Ipv4Address(ipAddress)));
+ .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address(ipAddress))));
return serviceFunctionForwarderBuilder.build();
}
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.NetconfTransactionCreator;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriter;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceForwarderAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder
sff = new ServiceFunctionForwarderBuilder()
.setName(new SffName("unit-sff-03"))
- .setIpMgmtAddress(new IpAddress(new Ipv4Address("1.2.3.4")))
+ .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))))
.build();
final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
sfpBuilder.setSymmetric(false);
final org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sff.rev140701.service.function.forwarders.ServiceFunctionForwarder
sff = new ServiceFunctionForwarderBuilder()
.setName(new SffName("unit-sff-03"))
- .setIpMgmtAddress(new IpAddress(new Ipv4Address("1.2.3.4")))
+ .setIpMgmtAddress(IetfModelCodec.ipAddress2013(new IpAddress(new Ipv4Address("1.2.3.4"))))
.build();
final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
sfpBuilder.setSymmetric(false);
final RenderedServicePath rsp = createRsp("unit-rsp-03");
final ServiceFunctionForwarderBuilder sffBuilder = new ServiceFunctionForwarderBuilder()
.setName(new SffName("unit-sff-03"))
- .setIpMgmtAddress(new IpAddress((Ipv4Address) null));
+ .setIpMgmtAddress(null);
final ServiceFunctionPathBuilder sfpBuilder = new ServiceFunctionPathBuilder();
sfpBuilder.setSymmetric(false);
final ServiceFunctionPath sfp = sfpBuilder.build();
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.api.sf.ChainActionDefinition;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.sfc.provider.SfcProviderRpc;
import org.opendaylight.sfc.provider.api.SfcProviderServiceChainAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
Set<IpAddress> ipAddresses = new HashSet<IpAddress>();
for (RenderedServicePathFirstHop rsp: rspMap.values()) {
if (rsp.getIp() != null) {
- ipAddresses.add(rsp.getIp());
+ ipAddresses.add(IetfModelCodec.ipAddress2010(rsp.getIp()));
}
}
if (ipAddresses.isEmpty()) return null;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader;
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sfcutils.SfcNshHeader.SfcNshHeaderBuilder;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.groupbasedpolicy.util.IetfModelCodec;
import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceChainAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
RenderedServicePathHop firstRspHop = renderedServicePath.getRenderedServicePathHop().get(0);
RenderedServicePathHop lastRspHop = Iterables.getLast(renderedServicePath.getRenderedServicePathHop());
- SfcNshHeader sfcNshHeader = new SfcNshHeaderBuilder().setNshTunIpDst(rspFirstHop.getIp().getIpv4Address())
- .setNshTunUdpPort(rspFirstHop.getPort())
+ SfcNshHeader sfcNshHeader = new SfcNshHeaderBuilder().setNshTunIpDst(IetfModelCodec.ipv4Address2010(rspFirstHop.getIp().getIpv4Address()))
+ .setNshTunUdpPort(IetfModelCodec.portNumber2010(rspFirstHop.getPort()))
.setNshNsiToChain(firstRspHop.getServiceIndex())
.setNshNspToChain(renderedServicePath.getPathId())
.setNshNsiFromChain((short) (lastRspHop.getServiceIndex().intValue() - 1))