--- /dev/null
+/*
+ * Copyright (c) 2017 Cisco Systems. 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.renderer.vpp.commands.lisp;
+
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.GpeEnableDom;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureData;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Created by Shakib Ahmed on 6/1/17.
+ */
+public class ConfigureGpeCommand extends AbstractLispCommand<GpeFeatureData> {
+
+ private GpeEnableDom gpeEnableDom;
+
+ public ConfigureGpeCommand(GpeEnableDom gpeEnableDom) {
+ this.gpeEnableDom = gpeEnableDom;
+ }
+
+ @Override
+ public InstanceIdentifier<GpeFeatureData> getIid() {
+ return VppIidFactory.getGpeFeatureDataIid();
+ }
+
+ @Override
+ public GpeFeatureData getData() {
+ return gpeEnableDom.getSALObject();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Cisco Systems. 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.renderer.vpp.commands.lisp;
+
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.GbpGpeEntryDom;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntryKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Created by Shakib Ahmed on 6/1/17.
+ */
+public class ConfigureGpeEntryCommand extends AbstractLispCommand<GpeEntry> {
+
+ private GbpGpeEntryDom gpeEntryDom;
+
+ public ConfigureGpeEntryCommand(GbpGpeEntryDom gpeEntryDom) {
+ this.gpeEntryDom = gpeEntryDom;
+ }
+
+ @Override
+ public InstanceIdentifier<GpeEntry> getIid() {
+ return VppIidFactory.getGpeEntryIid(new GpeEntryKey(gpeEntryDom.getId()));
+ }
+
+ @Override
+ public GpeEntry getData() {
+ return gpeEntryDom.getSALObject();
+ }
+}
package org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.GbpGpeEntryDom;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.GpeEnableDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.InterfaceDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.LispDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.LocalMappingDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.VniTableDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.VrfSubtableDom;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.RemoteEid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.Lisp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.MapReplyAction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.MappingId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.LocalMapping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.local.mapping.Eid;
public static AbstractLispCommand<LispFeatureData> deleteLispFeatureData() {
return new DeleteLispFeatureDataCommand();
}
+
+ public static AbstractLispCommand<GpeFeatureData> enableGpe() {
+ GpeEnableDom gpeEnableDom = new GpeEnableDom();
+ gpeEnableDom.setEnabled(true);
+
+ return new ConfigureGpeCommand(gpeEnableDom);
+ }
+
+ public static AbstractLispCommand<GpeEntry> addGpeSendMapregisterAction(String entryName,
+ RemoteEid rEid,
+ long vni,
+ long vrf) {
+ GbpGpeEntryDom gpeEntryDom = new GbpGpeEntryDom();
+ gpeEntryDom.setId(entryName);
+ gpeEntryDom.setRemoteEid(rEid);
+ gpeEntryDom.setVni(vni);
+ gpeEntryDom.setVrf(vrf);
+ gpeEntryDom.setAction(MapReplyAction.SendMapRequest);
+
+ return new ConfigureGpeEntryCommand(gpeEntryDom);
+ }
+
+ public static AbstractLispCommand<GpeEntry> deleteGpeEntry(String entryName) {
+ GbpGpeEntryDom gpeEntryDom = new GbpGpeEntryDom();
+ gpeEntryDom.setId(entryName);
+
+ return new ConfigureGpeEntryCommand(gpeEntryDom);
+ }
}
--- /dev/null
+/*
+ * Copyright (c) 2017 Cisco Systems. 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.renderer.vpp.commands.lisp.dom;
+
+import com.google.common.base.Preconditions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntryKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.LocalEid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.RemoteEid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.MapReplyAction;
+
+/**
+ * Created by Shakib Ahmed on 6/1/17.
+ */
+public class GbpGpeEntryDom implements CommandModel{
+ private String id;
+ private Long vrf;
+ private Long vni;
+ private LocalEid localEid;
+ private RemoteEid remoteEid;
+ private MapReplyAction action;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public Long getVrf() {
+ return vrf;
+ }
+
+ public void setVrf(Long vrf) {
+ this.vrf = vrf;
+ }
+
+ public Long getVni() {
+ return vni;
+ }
+
+ public void setVni(Long vni) {
+ this.vni = vni;
+ }
+
+ public RemoteEid getRemoteEid() {
+ return remoteEid;
+ }
+
+ public void setRemoteEid(RemoteEid remoteEid) {
+ this.remoteEid = remoteEid;
+ }
+
+ public MapReplyAction getAction() {
+ return action;
+ }
+
+ public LocalEid getLocalEid() {
+ return localEid;
+ }
+
+ public void setLocalEid(LocalEid localEid) {
+ this.localEid = localEid;
+ }
+
+ public void setAction(MapReplyAction action) {
+ this.action = action;
+ }
+
+ @Override
+ public GpeEntry getSALObject() {
+ Preconditions.checkNotNull(id, "Gpe Entry Id need to be set!");
+ return new GpeEntryBuilder()
+ .setKey(new GpeEntryKey(id))
+ .setId(id)
+ .setDpTable(vrf)
+ .setVni(vni)
+ .setRemoteEid(remoteEid)
+ .setLocalEid(localEid)
+ .setAction(action).build();
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Cisco Systems. 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.renderer.vpp.commands.lisp.dom;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureDataBuilder;
+
+/**
+ * Created by Shakib Ahmed on 6/1/17.
+ */
+public class GpeEnableDom implements CommandModel {
+ private boolean enabled;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ @Override
+ public GpeFeatureData getSALObject() {
+ return new GpeFeatureDataBuilder().setEnable(enabled).build();
+ }
+}
public class LispState {
private String hostName;
private boolean lispEnabled;
+ private boolean gpeEnabled;
private HashMap<String, String> locIntfToLocSetNameMapping;
private Set<IpAddress> mapServerIpAddressSet;
private Set<IpAddress> mapResolverIpAddressSet;
this.lispEnabled = lispEnabled;
}
+ public boolean isGpeEnabled() {
+ return gpeEnabled;
+ }
+
+ public void setGpeEnabled(boolean gpeEnabled) {
+ this.gpeEnabled = gpeEnabled;
+ }
+
public String getLocIntfToLocSetNameMapping(String locatorIntf) {
return locIntfToLocSetNameMapping.get(locatorIntf);
}
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.Lisp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.LocalMapping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.local.mapping.Eid;
lispStateOfNode = new LispState(hostName);
try {
enableLispForNode(vppDataBroker, lispStateOfNode);
+
+ if (ConfigUtil.getInstance().isL3FlatEnabled()) {
+ enableGpeForNode(vppDataBroker, lispStateOfNode);
+ }
+
addLocatorSet(vppDataBroker, lispStateOfNode);
addMapResolver(vppDataBroker, lispStateOfNode);
if (ConfigUtil.getInstance().isLispMapRegisterEnabled()) {
}
}
+ private void enableGpeForNode(DataBroker vppDataBroker, LispState lispState) throws LispConfigCommandFailedException {
+ AbstractLispCommand<GpeFeatureData>
+ gpeEnableCommand = LispCommandWrapper.enableGpe();
+ if (LispStateCommandExecutor.executePutCommand(vppDataBroker, gpeEnableCommand)) {
+ lispState.setGpeEnabled(true);
+ } else {
+ throw new LispConfigCommandFailedException("GPE Enable Command failed execution!");
+ }
+ }
+
private void addLocatorSet(DataBroker vppDataBroker, LispState lispState) throws LispNotFoundException, LispConfigCommandFailedException {
try {
String locatorSetName = lispStateHelper.constructLocatorSetName(lispState.getLocatorCount());
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.LoopbackCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.LoopbackCommandWrapper;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.ProxyRangeCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.AbstractLispCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.LispCommandWrapper;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.LispStateCommandExecutor;
import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.exception.LispConfigCommandFailedException;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.exception.LispHelperArgumentException;
import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.mappers.LoopbackHostSpecificInfoMapper;
import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.mappers.NeutronTenantToVniMapper;
import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.mappers.SubnetUuidToGbpSubnetMapper;
import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.util.IpAddressUtil;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.LispUtil;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425.config.GbpSubnet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.RemoteEid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unnumbered.interfaces.rev170510.InterfaceUnnumberedAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unnumbered.interfaces.rev170510.InterfaceUnnumberedAugmentationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unnumbered.interfaces.rev170510.unnumbered.config.attributes.UnnumberedBuilder;
private SubnetUuidToGbpSubnetMapper subnetUuidToGbpSubnetMapper;
private static final String LOOP_NAME_PREFIX = "loop-";
+ private static final String GPE_ENTRY_PREFIX = "gpe-entry-";
public LoopbackManager(@Nonnull MountedDataBrokerProvider mountedDataBrokerProvider) {
this.loopbackManagerHelper = new ConfigManagerHelper(mountedDataBrokerProvider);
createLoopbackInterface(hostName, subnetUuid, vppDataBroker, simpleLoopbackCommand);
addProxyArpRange(vppDataBroker, vrf, gbpSubnetInfo, hostName);
+ addGpeEntry(vppDataBroker, gbpSubnetInfo, vni);
addUnnumberedInterface(addressEp, interfaceName);
} catch (LispConfigCommandFailedException e) {
LOG.warn("LISP couldn't be configured: {}", e.getMessage());
try {
deleteSpecificLoopback(vppDataBroker, interfaceName);
deleteProxyArpRange(vppDataBroker, vni, gbpSubnetInfo, hostId);
+ deleteGpeEntry(vppDataBroker, GPE_ENTRY_PREFIX + gbpSubnetInfo.getId() + "_1");
+ deleteGpeEntry(vppDataBroker, GPE_ENTRY_PREFIX + gbpSubnetInfo.getId() + "_2");
} catch (LispConfigCommandFailedException e) {
LOG.warn("Loopback not deleted properly: {}", e.getMessage());
}
GbpNetconfTransaction.RETRY_COUNT);
}
+ private void addGpeEntry(DataBroker vppDataBroker, GbpSubnet gbpSubnetInfo, long vni) {
+ try {
+ Pair<Ipv4Prefix, Ipv4Prefix> delegatingSubnets = IpAddressUtil
+ .getSmallerSubnet(gbpSubnetInfo.getCidr().getIpv4Prefix());
+
+ RemoteEid firstREid = LispUtil.toRemoteEid(LispUtil.toLispIpv4Prefix(delegatingSubnets.getLeft()),
+ vni,
+ Ipv4PrefixAfi.class);
+ putGpeEntry(vppDataBroker, GPE_ENTRY_PREFIX + gbpSubnetInfo.getId() + "_1", firstREid, vni, vni);
+
+ if (delegatingSubnets.getLeft().equals(delegatingSubnets.getRight())) {
+ return;
+ }
+
+ RemoteEid secondREid = LispUtil.toRemoteEid(LispUtil.toLispIpv4Prefix(delegatingSubnets.getRight()),
+ vni,
+ Ipv4PrefixAfi.class);
+
+ putGpeEntry(vppDataBroker, GPE_ENTRY_PREFIX + gbpSubnetInfo.getId() + "_2", secondREid, vni, vni);
+ } catch (LispHelperArgumentException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private boolean putGpeEntry(DataBroker vppDataBroker, String id, RemoteEid rEid, long vni, long vrf) {
+ AbstractLispCommand<GpeEntry> gpeEntryCommand = LispCommandWrapper
+ .addGpeSendMapregisterAction(id, rEid, vni, vrf);
+ return LispStateCommandExecutor.executePutCommand(vppDataBroker, gpeEntryCommand);
+ }
+
+ private boolean deleteGpeEntry(DataBroker vppDataBroker, String id) {
+ AbstractLispCommand<GpeEntry> gpeEntryDeletionCommand = LispCommandWrapper
+ .deleteGpeEntry(id);
+ return LispStateCommandExecutor.executeDeleteCommand(vppDataBroker, gpeEntryDeletionCommand);
+ }
+
private long getVni(String tenantUuid) {
return neutronTenantToVniMapper.getVni(tenantUuid);
}
package org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.util;
+import com.google.common.net.InetAddresses;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.net.util.SubnetUtils;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.exception.LispHelperArgumentException;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
/**
* Created by Shakib Ahmed on 5/3/17.
*/
public class IpAddressUtil {
+ private static final Logger LOG = LoggerFactory.getLogger(IpAddressUtil.class);
public static Pair<Ipv4Address, Ipv4Address> getStartAndEndIp(Ipv4Prefix ipv4Prefix) {
SubnetUtils subnetUtils = new SubnetUtils(ipv4Prefix.getValue());
Ipv4Address highIp = new Ipv4Address(prefixSubnetInfo.getHighAddress());
return new ImmutablePair<>(lowIp, highIp);
}
+
+ public static Pair<Ipv4Prefix, Ipv4Prefix> getSmallerSubnet(Ipv4Prefix ipv4Prefix) throws LispHelperArgumentException {
+ String cidrNotion = ipv4Prefix.getValue();
+
+ SubnetUtils subnetUtils = new SubnetUtils(cidrNotion);
+ String firstSubnet;
+ String secondSubnet;
+ int maskLen = Integer.valueOf(cidrNotion.split("/")[1]) + 1;
+
+ if (maskLen > 32) {
+ return new ImmutablePair<>(ipv4Prefix, ipv4Prefix);
+ }
+
+ SubnetUtils.SubnetInfo subnetInfo = subnetUtils.getInfo();
+ try {
+ int lowValue = InetAddresses.coerceToInteger(InetAddress.getByName(subnetInfo.getNetworkAddress()));
+ int highValue = InetAddresses.coerceToInteger(InetAddress.getByName(subnetInfo.getHighAddress())) + 1;
+ InetAddress middleAddress = InetAddresses.fromInteger(lowValue + (highValue - lowValue + 1) / 2);
+ String firstAddress = subnetInfo.getNetworkAddress();
+ String secondAddress = middleAddress.getHostAddress();
+ firstSubnet = firstAddress + "/" + maskLen;
+ secondSubnet = secondAddress + "/" + maskLen;
+ } catch (UnknownHostException e) {
+ LOG.warn("Failed to translate IP address " + cidrNotion+ " to smaller subnet");
+ throw new LispHelperArgumentException("Invalid argument for subnet " + cidrNotion);
+ }
+ return new ImmutablePair<>(new Ipv4Prefix(firstSubnet), new Ipv4Prefix(secondSubnet));
+ }
}
\ No newline at end of file
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.EidDom;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.lisp.dom.HmacKeyDom;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.LocalEid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.LocalEidBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.RemoteEid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.gpe.entry.RemoteEidBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.HmacKeyType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.local.mapping.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.hmac.key.grouping.HmacKey;
return eidDom.getSALObject();
}
+ public static RemoteEid toRemoteEid(Address address, long vni, Class<? extends LispAddressFamily> addressType) {
+ RemoteEidBuilder remoteEidBuilder = new RemoteEidBuilder();
+ remoteEidBuilder.setAddress(address);
+ remoteEidBuilder.setVirtualNetworkId(new InstanceIdType(vni));
+ remoteEidBuilder.setAddressType(addressType);
+ return remoteEidBuilder.build();
+ }
+
+ public static LocalEid toLocalEid(Address address, long vni, Class<? extends LispAddressFamily> addressType) {
+ LocalEidBuilder localEidBuilder = new LocalEidBuilder();
+ localEidBuilder.setAddress(address);
+ localEidBuilder.setVirtualNetworkId(new InstanceIdType(vni));
+ localEidBuilder.setAddressType(addressType);
+ return localEidBuilder.build();
+ }
+
public static HmacKey toHmacKey(HmacKeyType keyType, String key) {
HmacKeyDom hmacKeyDom = new HmacKeyDom();
hmacKeyDom.setKey(key);
return new Ipv4Builder().setIpv4(new Ipv4Address(strArray[0])).build();
}
+
+ public static Ipv4Prefix toLispIpv4Prefix(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+ .inet.types.rev130715.Ipv4Prefix ipv4Prefix) {
+ return new Ipv4PrefixBuilder().setIpv4Prefix(ipv4Prefix).build();
+ }
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.nodes.RendererNodeKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang._interface.acl.rev161214.VppAclInterfaceAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.Gpe;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.GpeEntryTable;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.entry.table.grouping.gpe.entry.table.GpeEntryKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.gpe.rev170518.gpe.feature.data.grouping.GpeFeatureData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.Lisp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.LocalMappings;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.LocalMapping;
.augmentation(InterfaceUnnumberedAugmentation.class)
.child(Unnumbered.class);
}
+
+ public static InstanceIdentifier<GpeFeatureData> getGpeFeatureDataIid() {
+ return InstanceIdentifier.builder(Gpe.class)
+ .child(GpeFeatureData.class).build();
+ }
+
+ public static InstanceIdentifier<GpeEntry> getGpeEntryIid(GpeEntryKey gpeEntryKey) {
+ return InstanceIdentifier.builder(Gpe.class)
+ .child(GpeFeatureData.class)
+ .child(GpeEntryTable.class)
+ .child(GpeEntry.class, gpeEntryKey)
+ .build();
+ }
}