dtoEventBus.register(interfaceManager);
dtoEventBus.register(subnetEventManager);
RoutingManager routingManager = new RoutingManager(dataBroker, mountDataProvider);
- DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker, mountDataProvider);
+ DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker);
bdManager = new BridgeDomainManagerImpl(dataBroker);
ForwardingManager fwManager =
new ForwardingManager(interfaceManager, aclManager, natManager, routingManager, bdManager,
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.dhcp.rev170315.dhcp.attributes.relays.RelayBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.dhcp.rev170315.dhcp.attributes.relays.RelayKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.dhcp.rev170315.relay.attributes.Server;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private IpAddress gatewayIpAddress;
private List<Server> serverIpAddresses;
private Class<? extends AddressFamily> addressType;
+ private NodeId vppNodeId;
private DhcpRelayCommand(DhcpRelayBuilder builder) {
operation = builder.getOperation();
gatewayIpAddress = builder.getGatewayIpAddress();
serverIpAddresses = builder.getServerIpAddresses();
addressType = builder.getAddressType();
+ vppNodeId = builder.getVppNodeId();
}
public static DhcpRelayBuilder builder() {
return VppIidFactory.getDhcpRelayIid(getDhcpBuilder().getKey());
}
+ public NodeId getVppNodeId() {
+ return vppNodeId;
+ }
+
void put(ReadWriteTransaction rwTx) {
rwTx.put(LogicalDatastoreType.CONFIGURATION, getIid(), getDhcpBuilder().build(), true);
}
+ ", operations=" + operation + "]";
}
+ /**
+ * Compares two DhcpRelayCommands without checking operation status.
+ * @param compareTo DhcpRelayCommand to compare with.
+ * @return true if commands match, false otherwise.
+ */
+ @Override public boolean equals(Object compareTo) {
+ if (compareTo == null || !compareTo.getClass().equals(this.getClass())) {
+ return false;
+ }
+
+ DhcpRelayCommand command = (DhcpRelayCommand) compareTo;
+
+ if (!this.getVppNodeId().equals(command.getVppNodeId())) {
+ return false;
+ } else if (!this.getAddressType().equals(command.getAddressType())) {
+ return false;
+ } else if (!this.getGatewayIpAddress().equals(command.getGatewayIpAddress())) {
+ return false;
+ } else if (!this.getIid().equals(command.getIid())) {
+ return false;
+ } else if (!this.getRxVrfId().equals(command.getRxVrfId())) {
+ return false;
+ } else if (this.getServerIpAddresses() != null && !this.getServerIpAddresses()
+ .containsAll(command.getServerIpAddresses())) {
+ return false;
+ } else if (command.getServerIpAddresses() != null && !command.getServerIpAddresses()
+ .containsAll(this.getServerIpAddresses())) {
+ return false;
+ }
+
+ return true;
+ }
+
public RelayBuilder getDhcpBuilder() {
return new RelayBuilder()
.setAddressType(addressType)
private IpAddress gatewayIpAddress;
private List<Server> serverIpAddress;
private Class<? extends AddressFamily> addressType;
+ private NodeId VppNodeId;
public General.Operations getOperation() {
return operation;
return this;
}
+ public NodeId getVppNodeId() {
+ return VppNodeId;
+ }
+
+ public DhcpRelayBuilder setVppNodeId(NodeId vppNodeId) {
+ VppNodeId = vppNodeId;
+ return this;
+ }
+
/**
* RoutingCommand build method.
*
import static org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory.getVppRendererConfig;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.DhcpRelayCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.GbpNetconfTransaction;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
import org.opendaylight.groupbasedpolicy.util.NetUtils;
private static final Logger LOG = LoggerFactory.getLogger(DhcpRelayHandler.class);
private final DataBroker dataBroker;
- // TODO remove argument
- public DhcpRelayHandler(DataBroker dataBroker, MountedDataBrokerProvider mountDataProvider) {
+ public DhcpRelayHandler(DataBroker dataBroker) {
this.dataBroker = dataBroker;
}
- public void createIpv4DhcpRelay(long vni_vrfid, Subnet subnet, SetMultimap<String, NodeId> vppNodesByL2Fd) {
+ public List<DhcpRelayCommand> getCreatedIpv4DhcpRelays(long vni_vrfid, Subnet subnet,
+ SetMultimap<String, NodeId> vppNodesByL2Fd) {
+ List<DhcpRelayCommand> dhcpRelayCommandsCreated = new ArrayList<>();
if (subnet.getDefaultSubnetGatewayIp() == null) {
- LOG.trace("Subnet GW IP is null, skipping processing DhcpRelay for vrfid: {}, subnet: {}, VPP nodes: {}",
- vni_vrfid, subnet, vppNodesByL2Fd);
- return;
+ return dhcpRelayCommandsCreated;
}
for (String bd : vppNodesByL2Fd.keySet()) {
for (NodeId vppNode : vppNodes) {
IpAddress ipAddress = resolveDhcpIpAddress(vppNode, subnet);
if (ipAddress != null) {
- DhcpRelayCommand dhcpRelayCommand =
- getDhcpRelayBuilder(vni_vrfid, subnet, ipAddress, General.Operations.PUT).build();
-
- if (!submitDhcpRelay(dhcpRelayCommand, vppNode)) {
- LOG.warn("DHCP Relay was not configured: {}", dhcpRelayCommand);
- }
- } else {
- LOG.trace("DHCP server IP address was not found for node: {}. Skipping processing", vppNode);
+ dhcpRelayCommandsCreated.add(
+ getDhcpRelayBuilder(vni_vrfid, subnet, ipAddress, General.Operations.PUT, vppNode).build());
}
}
}
+ return dhcpRelayCommandsCreated;
}
private DhcpRelayCommand.DhcpRelayBuilder getDhcpRelayBuilder(long vni_vrfid, Subnet subnet, IpAddress ipAddress,
- General.Operations operations) {
+ General.Operations operations, NodeId nodeId) {
return DhcpRelayCommand.builder()
+ .setVppNodeId(nodeId)
.setRxVrfId(vni_vrfid)
.setOperation(operations)
.setAddressType(Ipv4.class)
return null;
}
- public void deleteIpv4DhcpRelay(long vni_vrfid, Subnet subnet, SetMultimap<String, NodeId> vppNodesByL2Fd) {
+ public List<DhcpRelayCommand> getDeletedIpv4DhcpRelays(long vni_vrfid, Subnet subnet,
+ SetMultimap<String, NodeId> vppNodesByL2Fd) {
if (subnet.getDefaultSubnetGatewayIp() == null) {
- LOG.trace("Subnet GW IP is null, skipping processing DhcpRelay for vrfid: {}, subnet: {}, VPP nodes: {}",
- vni_vrfid, subnet, vppNodesByL2Fd);
- return;
+ return new ArrayList<>();
}
+ List<DhcpRelayCommand> dhcpRelayCommandsDeleted = new ArrayList<>();
+
for (String bd : vppNodesByL2Fd.keySet()) {
Set<NodeId> vppNodes = vppNodesByL2Fd.get(bd);
for (NodeId vppNode : vppNodes) {
IpAddress ipAddress = resolveDhcpIpAddress(vppNode, subnet);
if (ipAddress != null) {
- DhcpRelayCommand dhcpRelayCommand =
- getDhcpRelayBuilder(vni_vrfid, subnet, ipAddress, General.Operations.DELETE).build();
-
- if (!submitDhcpRelay(dhcpRelayCommand, vppNode)) {
- LOG.warn("DHCP Relay was not deleted: {}", dhcpRelayCommand);
- }
- } else {
- LOG.trace("DHCP server IP address was not found for node: {}. Skipping processing.", vppNode);
+ dhcpRelayCommandsDeleted.add(
+ getDhcpRelayBuilder(vni_vrfid, subnet, ipAddress, General.Operations.DELETE, vppNode).build());
}
-
}
}
+ return dhcpRelayCommandsDeleted;
}
- private boolean submitDhcpRelay(DhcpRelayCommand dhcpRelayCommand, NodeId nodeIid) {
- LOG.trace("Submitting DhcpRelay command: {}, nodeId: {}", dhcpRelayCommand, nodeIid);
- if (dhcpRelayCommand.getOperation() == General.Operations.PUT) {
- return GbpNetconfTransaction.netconfSyncedWrite(VppIidFactory.getNetconfNodeIid(nodeIid), dhcpRelayCommand,
+ public boolean submitDhcpRelay(DhcpRelayCommand dhcpRelayCommand) {
+ LOG.trace("Submitting DhcpRelay command: {}, nodeId: {}", dhcpRelayCommand, dhcpRelayCommand.getVppNodeId());
+ switch (dhcpRelayCommand.getOperation()){
+ case PUT:
+ return GbpNetconfTransaction.netconfSyncedWrite(
+ VppIidFactory.getNetconfNodeIid(dhcpRelayCommand.getVppNodeId()), dhcpRelayCommand,
GbpNetconfTransaction.RETRY_COUNT);
- } else if (dhcpRelayCommand.getOperation() == General.Operations.DELETE) {
- return GbpNetconfTransaction.netconfSyncedDelete(VppIidFactory.getNetconfNodeIid(nodeIid), dhcpRelayCommand,
+ case DELETE:
+ return GbpNetconfTransaction.netconfSyncedDelete(
+ VppIidFactory.getNetconfNodeIid(dhcpRelayCommand.getVppNodeId()), dhcpRelayCommand,
GbpNetconfTransaction.RETRY_COUNT);
+ case MERGE:
+ return GbpNetconfTransaction.netconfSyncedMerge(
+ VppIidFactory.getNetconfNodeIid(dhcpRelayCommand.getVppNodeId()), dhcpRelayCommand,
+ GbpNetconfTransaction.RETRY_COUNT);
+ default:
+ LOG.warn("Unknown operation for command, cannot submit command {}.", dhcpRelayCommand);
+ return false;
}
- return false;
}
}
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.DhcpRelayCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.RoutingCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.config.ConfigUtil;
import org.opendaylight.groupbasedpolicy.renderer.vpp.dhcp.DhcpRelayHandler;
private final DataBroker dataBroker;
public ForwardingManager(@Nonnull InterfaceManager ifaceManager, @Nonnull AclManager aclManager,
- @Nonnull NatManager natManager, @Nonnull RoutingManager routingManager, @Nonnull BridgeDomainManager bdManager,
- @Nonnull LispStateManager lispStateManager, @Nonnull LoopbackManager loopbackManager, @Nonnull FlatOverlayManager flatOverlayManager,
+ @Nonnull NatManager natManager, @Nonnull RoutingManager routingManager,
+ @Nonnull BridgeDomainManager bdManager, @Nonnull LispStateManager lispStateManager,
+ @Nonnull LoopbackManager loopbackManager, @Nonnull FlatOverlayManager flatOverlayManager,
@Nonnull DhcpRelayHandler dhcpRelayHandler, @Nonnull DataBroker dataBroker) {
this.ifaceManager = Preconditions.checkNotNull(ifaceManager);
this.bdManager = Preconditions.checkNotNull(bdManager);
this.dhcpRelayHandler = Preconditions.checkNotNull(dhcpRelayHandler);
}
- public Optional<GbpBridgeDomain> readGbpBridgeDomainConfig(String name) {
+ Optional<GbpBridgeDomain> readGbpBridgeDomainConfig(String name) {
InstanceIdentifier<GbpBridgeDomain> bdIid = InstanceIdentifier.builder(Config.class)
.child(GbpBridgeDomain.class, new GbpBridgeDomainKey(name))
.build();
return optBd;
}
- public void createBridgeDomainOnNodes(SetMultimap<String, NodeId> vppNodesByBridgeDomain) {
+ void createBridgeDomainOnNodes(SetMultimap<String, NodeId> vppNodesByBridgeDomain) {
for (String bd : vppNodesByBridgeDomain.keySet()) {
Optional<GbpBridgeDomain> bdConfig = readGbpBridgeDomainConfig(bd);
Set<NodeId> vppNodes = vppNodesByBridgeDomain.get(bd);
}
}
- public void removeBridgeDomainOnNodes(final SetMultimap<String, NodeId> vppNodesByBridgeDomain) {
+ void removeBridgeDomainOnNodes(final SetMultimap<String, NodeId> vppNodesByBridgeDomain) {
for (String bd : vppNodesByBridgeDomain.keySet()) {
Set<NodeId> vppNodes = vppNodesByBridgeDomain.get(bd);
for (NodeId vppNode : vppNodes) {
}
}
- public void createForwardingForEndpoint(RendererEndpointKey rEpKey, PolicyContext policyCtx) {
+ void createForwardingForEndpoint(RendererEndpointKey rEpKey, PolicyContext policyCtx) {
AddressEndpointWithLocation rEp = policyCtx.getAddrEpByKey().get(KeyFactory.addressEndpointKey(rEpKey));
if (ConfigUtil.getInstance().isLispOverlayEnabled()) {
return false;
}
- public void removeForwardingForEndpoint(RendererEndpointKey rEpKey, PolicyContext policyCtx) {
+ void removeForwardingForEndpoint(RendererEndpointKey rEpKey, PolicyContext policyCtx) {
AddressEndpointWithLocation rEp = policyCtx.getAddrEpByKey().get(KeyFactory.addressEndpointKey(rEpKey));
ExternalLocationCase rEpLoc = resolveAndValidateLocation(rEp);
}
}
- public static ExternalLocationCase resolveAndValidateLocation(AddressEndpointWithLocation addrEpWithLoc) {
+ static ExternalLocationCase resolveAndValidateLocation(AddressEndpointWithLocation addrEpWithLoc) {
if (addrEpWithLoc.getAbsoluteLocation() != null
&& addrEpWithLoc.getAbsoluteLocation().getLocationType() != null) {
LocationType locationType = addrEpWithLoc.getAbsoluteLocation().getLocationType();
return null;
}
- public static java.util.Optional<String> resolveL2FloodDomain(@Nonnull AddressEndpointWithLocation ep,
+ static java.util.Optional<String> resolveL2FloodDomain(@Nonnull AddressEndpointWithLocation ep,
@Nonnull PolicyContext policyCtx) {
NetworkContainment netCont = ep.getNetworkContainment();
if (netCont == null) {
}
}
- public void deleteNatEntries(PolicyContext policyCtx) {
+ void deleteNatEntries(PolicyContext policyCtx) {
Configuration cfg = policyCtx.getPolicy().getConfiguration();
if(cfg != null) {
List<MappingEntryBuilder> natEntries = resolveStaticNatTableEntries(cfg.getEndpoints());
}
}
- public List<InstanceIdentifier<PhysicalInterface>> resolvePhysicalInterfacesForNat(
- List<RendererNetworkDomain> rendNetDomains) {
+ private List<InstanceIdentifier<PhysicalInterface>> resolvePhysicalInterfacesForNat(
+ List<RendererNetworkDomain> rendNetDomains) {
List<InstanceIdentifier<PhysicalInterface>> physIfaces = new ArrayList<>();
for (RendererNetworkDomain rendDomain : rendNetDomains) {
Optional<IpPrefix> resolvedIpPrefix = resolveIpPrefix(rendDomain);
WAIT_FOR_BD_PROCESSING = time;
}
- public void syncRouting(PolicyContext policyCtx) {
+ void syncRouting(PolicyContext policyCtx) {
Configuration cfg = policyCtx.getPolicy().getConfiguration();
if (cfg != null && cfg.getRendererForwarding() != null) {
for (RendererForwardingByTenant fwd : cfg.getRendererForwarding().getRendererForwardingByTenant()) {
}
}
- public void deleteRouting(PolicyContext policyCtx) {
+ void deleteRouting(PolicyContext policyCtx) {
Configuration cfg = policyCtx.getPolicy().getConfiguration();
if (cfg != null && cfg.getRendererForwarding() != null) {
for (RendererForwardingByTenant fwd : cfg.getRendererForwarding().getRendererForwardingByTenant()) {
}
}
- public void createDhcpRelay(RendererForwarding rendererForwarding,
+ List<DhcpRelayCommand> createDhcpRelay(RendererForwarding rendererForwarding,
SetMultimap<String, NodeId> vppNodesByL2Fd) {
for (RendererForwardingByTenant forwardingByTenant : rendererForwarding.getRendererForwardingByTenant()) {
long vni_vrfid = NeutronTenantToVniMapper.getInstance().getVni(forwardingByTenant.getTenantId().getValue());
if (subnet.isIsTenant()) {
LOG.trace("Creating Dhcp Relay from subnet: {}, vrfid: {}, vppNodesByL2Fd: {}", subnet, vni_vrfid,
vppNodesByL2Fd);
- dhcpRelayHandler.createIpv4DhcpRelay(vni_vrfid, subnet, vppNodesByL2Fd);
+ return dhcpRelayHandler.getCreatedIpv4DhcpRelays(vni_vrfid, subnet, vppNodesByL2Fd);
}
}
}
+ return new ArrayList<>();
}
- public void deleteDhcpRelay(RendererForwarding rendererForwarding, SetMultimap<String, NodeId> vppNodesByL2Fd) {
+ List<DhcpRelayCommand> deleteDhcpRelay(RendererForwarding rendererForwarding, SetMultimap<String,
+ NodeId> vppNodesByL2Fd) {
for (RendererForwardingByTenant forwardingByTenant : rendererForwarding.getRendererForwardingByTenant()) {
long vni_vrfid = NeutronTenantToVniMapper.getInstance().getVni(forwardingByTenant.getTenantId().getValue());
for (RendererNetworkDomain networkDomain : forwardingByTenant.getRendererNetworkDomain()) {
org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev170511.has.subnet.Subnet
subnet = networkDomain.getAugmentation((SubnetAugmentRenderer.class)).getSubnet();
if (subnet.isIsTenant()) {
- dhcpRelayHandler.deleteIpv4DhcpRelay(vni_vrfid, subnet, vppNodesByL2Fd);
+ return dhcpRelayHandler.getDeletedIpv4DhcpRelays(vni_vrfid, subnet, vppNodesByL2Fd);
}
}
}
+ return new ArrayList<>();
+ }
+
+ void syncDhcpRelay(List<DhcpRelayCommand> createdDhcpRelays, List<DhcpRelayCommand> deletedDhcpRelays) {
+ deletedDhcpRelays.stream().filter(deleteCommand -> !createdDhcpRelays.contains(deleteCommand))
+ .forEach(dhcpRelayHandler::submitDhcpRelay);
+
+ createdDhcpRelays.stream().filter(createCommand -> !deletedDhcpRelays.contains(createCommand))
+ .forEach(dhcpRelayHandler::submitDhcpRelay);
}
}
package org.opendaylight.groupbasedpolicy.renderer.vpp.policy;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.DhcpRelayCommand;
import org.opendaylight.groupbasedpolicy.renderer.vpp.config.ConfigUtil;
import org.opendaylight.groupbasedpolicy.renderer.vpp.event.NodeOperEvent;
import org.opendaylight.groupbasedpolicy.renderer.vpp.event.RendererPolicyConfEvent;
LOG.debug("Creating bridge domains on nodes {}", createdVppNodesByL2Fd);
fwManager.createBridgeDomainOnNodes(createdVppNodesByL2Fd);
} else {
+ List<DhcpRelayCommand> deletedDhcpRelays = new ArrayList<>();
+ List<DhcpRelayCommand> createdDhcpRelays = new ArrayList<>();
if (rPolicyBefore.getConfiguration() != null) {
RendererForwarding rendererForwardingBefore = rPolicyBefore.getConfiguration().getRendererForwarding();
SetMultimap<String, NodeId> vppNodesByL2FdBefore =
resolveVppNodesByL2Fd(policyCtxBefore.getPolicyTable().rowKeySet(), policyCtxBefore);
if (!vppNodesByL2FdBefore.isEmpty()) {
- LOG.debug("Deleting DhcpRelay for forwarding: {}, on VPP nodes: {}", rendererForwardingBefore,
- vppNodesByL2FdBefore);
- fwManager.deleteDhcpRelay(rendererForwardingBefore, vppNodesByL2FdBefore);
+ deletedDhcpRelays = fwManager.deleteDhcpRelay(rendererForwardingBefore, vppNodesByL2FdBefore);
}
}
SetMultimap<String, NodeId> vppNodesByL2FdAfter =
resolveVppNodesByL2Fd(policyCtxAfter.getPolicyTable().rowKeySet(), policyCtxAfter);
if (!vppNodesByL2FdAfter.isEmpty()) {
- LOG.debug("Creating DhcpRelay for forwarding: {}, on VPP nodes: {}", rendererForwardingAfter,
- vppNodesByL2FdAfter);
- fwManager.createDhcpRelay(rendererForwardingAfter, vppNodesByL2FdAfter);
+ createdDhcpRelays = fwManager.createDhcpRelay(rendererForwardingAfter, vppNodesByL2FdAfter);
}
}
+
+ fwManager.syncDhcpRelay(createdDhcpRelays, deletedDhcpRelays);
}
fwManager.syncNatEntries(policyCtxAfter);
fwManager.createBridgeDomainOnNodes(vppNodesByL2Fd);
} else {
RendererForwarding rendererForwarding = rPolicy.getConfiguration().getRendererForwarding();
- fwManager.createDhcpRelay(rendererForwarding, vppNodesByL2Fd);
+ List<DhcpRelayCommand> createdDhcpRelays = fwManager.createDhcpRelay(rendererForwarding, vppNodesByL2Fd);
+ fwManager.syncDhcpRelay(createdDhcpRelays, new ArrayList<>());
}
rEpKeys.forEach(rEpKey -> fwManager.createForwardingForEndpoint(rEpKey, policyCtx));
fwManager.removeBridgeDomainOnNodes(vppNodesByL2Fd);
} else {
RendererForwarding rendererForwarding = rendererPolicy.getConfiguration().getRendererForwarding();
- fwManager.deleteDhcpRelay(rendererForwarding, vppNodesByL2Fd);
+ List<DhcpRelayCommand> deletedDhcpRelays = fwManager.deleteDhcpRelay(rendererForwarding, vppNodesByL2Fd);
+ fwManager.syncDhcpRelay(new ArrayList<>(), deletedDhcpRelays);
}
fwManager.deleteNatEntries(policyCtx);
fwManager.deleteRouting(policyCtx);
return result;
}
+ /***
+ * Netconf wrapper for merge operation on a Netconf Device
+ * @param vppIid destination node
+ * @param command config command that needs to be executed
+ * @param retryCounter retry counter, will repeat the operation for specified amount of times if transaction fails
+ * @return true if transaction is successful, false otherwise
+ */
+ public static boolean netconfSyncedMerge(@Nonnull final InstanceIdentifier<Node> vppIid,
+ @Nonnull final ConfigCommand command, byte retryCounter) {
+ VbdNetconfTransaction.NODE_DATA_BROKER_MAP.get(vppIid).getValue().lock();
+ boolean result =
+ write(VbdNetconfTransaction.NODE_DATA_BROKER_MAP.get(vppIid).getKey(), command, retryCounter);
+ VbdNetconfTransaction.NODE_DATA_BROKER_MAP.get(vppIid).getValue().unlock();
+ return result;
+ }
+
/***
* Netconf wrapper method for synced requests for write operation on a Netconf Device
* @param vppIid destination node
@Test
public void createIpv4DhcpRelayTest() throws ExecutionException, InterruptedException {
- DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker, mountedDataProviderMock);
+ DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker);
+
+ List<DhcpRelayCommand> createdIpv4DhcpRelays =
+ dhcpRelayHandler.getCreatedIpv4DhcpRelays(RX_VRF_ID, subnet, vppNodesByL2Fd);
+ createdIpv4DhcpRelays.forEach(dhcpRelayHandler::submitDhcpRelay);
- dhcpRelayHandler.createIpv4DhcpRelay(RX_VRF_ID, subnet, vppNodesByL2Fd);
Optional<Relay> relayOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
VppIidFactory.getDhcpRelayIid(DHCP_RELAY_COMMAND.getDhcpBuilder().getKey()),
dataBroker.newReadOnlyTransaction());
@Test
public void createIpv4DhcpRelayTestWithNullServerIp() throws ExecutionException, InterruptedException {
- DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker, mountedDataProviderMock);
+ DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker);
Subnet subnet1 = new SubnetBuilder(subnet).setDefaultSubnetGatewayIp(null).build();
- dhcpRelayHandler.createIpv4DhcpRelay(RX_VRF_ID, subnet1, vppNodesByL2Fd);
+ List<DhcpRelayCommand> createdIpv4DhcpRelays =
+ dhcpRelayHandler.getCreatedIpv4DhcpRelays(RX_VRF_ID, subnet1, vppNodesByL2Fd);
+ createdIpv4DhcpRelays.forEach(dhcpRelayHandler::submitDhcpRelay);
+
Optional<Relay> relayOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
VppIidFactory.getDhcpRelayIid(DHCP_RELAY_COMMAND.getDhcpBuilder().getKey()),
dataBroker.newReadOnlyTransaction());
@Test
public void deleteIpv4DhcpRelayTest() throws ExecutionException, InterruptedException {
- DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker, mountedDataProviderMock);
+ DhcpRelayHandler dhcpRelayHandler = new DhcpRelayHandler(dataBroker);
writeBasicRelay();
Optional<Relay> relayOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
Assert.assertTrue(relayOptional.isPresent());
Assert.assertEquals(RELAY, relayOptional.get());
- dhcpRelayHandler.deleteIpv4DhcpRelay(RX_VRF_ID, subnet, vppNodesByL2Fd);
+ List<DhcpRelayCommand> deletedIpv4DhcpRelays =
+ dhcpRelayHandler.getDeletedIpv4DhcpRelays(RX_VRF_ID, subnet, vppNodesByL2Fd);
+ deletedIpv4DhcpRelays.forEach(dhcpRelayHandler::submitDhcpRelay);
+
relayOptional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
VppIidFactory.getDhcpRelayIid(DHCP_RELAY_COMMAND.getDhcpBuilder().getKey()),
dataBroker.newReadOnlyTransaction());
natManager = new NatManager(dataBroker, mountedDataProviderMock);
routingManager = new RoutingManager(dataBroker, mountedDataProviderMock);
bdManager = new BridgeDomainManagerImpl(mountPointDataBroker);
- dhcpRelayHandler = new DhcpRelayHandler(dataBroker, mountedDataProviderMock);
+ dhcpRelayHandler = new DhcpRelayHandler(dataBroker);
fwManager = new ForwardingManager(ifaceManager, aclManager, natManager, routingManager, bdManager,
lispStateManager, loopbackManager, flatOverlayManager, dhcpRelayHandler, dataBroker);
vppRendererPolicyManager = new VppRendererPolicyManager(fwManager, aclManager, dataBroker);