package io.fd.hc2vpp.lisp.translate.write;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
import io.fd.hc2vpp.lisp.translate.service.LispStateCheckService;
import io.fd.hc2vpp.lisp.translate.util.CheckedLispCustomizer;
import io.fd.vpp.jvpp.core.dto.OneMapRequestMode;
import io.fd.vpp.jvpp.core.dto.OneMapRequestModeReply;
import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.concurrent.CompletableFuture;
-import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.map.request.mode.grouping.MapRequestMode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.map.request.mode.grouping.MapRequestModeBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nonnull;
+import java.util.concurrent.CompletableFuture;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.MapRequestMode.DestinationOnly;
public class MapRequestModeCustomizer extends CheckedLispCustomizer
implements WriterCustomizer<MapRequestMode>, JvppReplyConsumer {
+ private static final Logger LOG = LoggerFactory.getLogger(MapRequestModeCustomizer.class);
+ private static final MapRequestMode DEFAULT_MODE = new MapRequestModeBuilder().setMode(DestinationOnly).build();
+
public MapRequestModeCustomizer(@Nonnull final FutureJVppCore futureJVppCore,
@Nonnull final LispStateCheckService lispStateCheckService) {
super(futureJVppCore, lispStateCheckService);
public void writeCurrentAttributes(@Nonnull InstanceIdentifier<MapRequestMode> instanceIdentifier,
@Nonnull MapRequestMode mapRequestMode,
@Nonnull WriteContext writeContext) throws WriteFailedException {
+ LOG.debug("Setting map request mode to [{}]", mapRequestMode);
lispStateCheckService.checkLispEnabledAfter(writeContext);
getReplyForWrite(mapRequestModeRequestFuture(mapRequestMode), instanceIdentifier);
}
@Nonnull MapRequestMode mapRequestModeAfter, @Nonnull WriteContext writeContext)
throws WriteFailedException {
lispStateCheckService.checkLispEnabledAfter(writeContext);
+ LOG.debug("Setting map request mode to [{}]", mapRequestModeAfter);
getReplyForUpdate(mapRequestModeRequestFuture(mapRequestModeAfter), instanceIdentifier,
mapRequestModeBefore, mapRequestModeAfter);
}
public void deleteCurrentAttributes(@Nonnull InstanceIdentifier<MapRequestMode> instanceIdentifier,
@Nonnull MapRequestMode mapRequestMode,
@Nonnull WriteContext writeContext) throws WriteFailedException {
- throw new UnsupportedOperationException("Map request mode cannot be deleted");
+ LOG.debug("Setting map request mode to default[{}]", DEFAULT_MODE);
+ // there is no delete, just set to default. also prevents failing on delete of parent node
+ lispStateCheckService.checkLispEnabledBefore(writeContext);
+ getReplyForWrite(mapRequestModeRequestFuture(DEFAULT_MODE), instanceIdentifier);
}
private CompletableFuture<OneMapRequestModeReply> mapRequestModeRequestFuture(
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.Lisp;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.itr.remote.locator.sets.grouping.ItrRemoteLocatorSet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.lisp.feature.data.grouping.LispFeatureData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.locator.sets.grouping.LocatorSets;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.locator.sets.grouping.locator.sets.LocatorSet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.map.register.grouping.MapRegister;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.map.request.mode.grouping.MapRequestMode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.pitr.cfg.grouping.PitrCfg;
registry.add(writer(LISP_FEATURE_IDENTIFIER.child(RlocProbe.class),
new RlocProbeCustomizer(vppApi, lispStateCheckService)));
- registry.add(writer(LISP_FEATURE_IDENTIFIER.child(ItrRemoteLocatorSet.class),
- new ItrRemoteLocatorSetCustomizer(vppApi, lispStateCheckService)));
+ // itr remote locator set has reference to locator set, so must be deleted before locator set
+ registry.addAfter(writer(LISP_FEATURE_IDENTIFIER.child(ItrRemoteLocatorSet.class),
+ new ItrRemoteLocatorSetCustomizer(vppApi, lispStateCheckService)),
+ LISP_FEATURE_IDENTIFIER.child(LocatorSets.class).child(LocatorSet.class));
}
}
@Test
public void deleteCurrentAttributes() throws Exception {
- verify(api, times(0)).lispMapRequestMode(any());
+ customizer.deleteCurrentAttributes(ID, sourceDestinationMode, writeContext);
+ verifyModeRequest(DestinationOnly);// always should be destination only - its default
}
@Test
public void testUpdateLispDisabled() throws WriteFailedException {
mockLispDisabledAfter();
try {
- customizer.updateCurrentAttributes(EMPTY_ID, EMPTY_DATA,EMPTY_DATA, writeContext);
+ customizer.updateCurrentAttributes(EMPTY_ID, EMPTY_DATA, EMPTY_DATA, writeContext);
} catch (IllegalArgumentException e) {
verifyZeroInteractions(api);
return;