summaryrefslogtreecommitdiffstats
path: root/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java
diff options
context:
space:
mode:
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java')
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java118
1 files changed, 118 insertions, 0 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java
new file mode 100644
index 000000000..31b129537
--- /dev/null
+++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/write/span/MirroredInterfaceCustomizer.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2017 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.hc2vpp.v3po.write.span;
+
+import static io.fd.honeycomb.translate.util.RWUtils.cutId;
+
+import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
+import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
+import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
+import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.honeycomb.translate.write.WriteFailedException;
+import io.fd.jvpp.core.dto.SwInterfaceSpanEnableDisable;
+import io.fd.jvpp.core.future.FutureJVppCore;
+import java.util.function.Function;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.v3po.rev190502.SpanState;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.v3po.rev190502.span.attributes.MirroredInterfaces;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.v3po.rev190502.span.attributes.mirrored.interfaces.MirroredInterface;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.v3po.rev190502.span.attributes.mirrored.interfaces.MirroredInterfaceKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class MirroredInterfaceCustomizer extends FutureJVppCustomizer
+ implements ListWriterCustomizer<MirroredInterface, MirroredInterfaceKey>, JvppReplyConsumer {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MirroredInterfaceCustomizer.class);
+
+ private final NamingContext ifcContext;
+ private final Function<InstanceIdentifier<MirroredInterfaces>, String> destinationInterfaceNameExtractor;
+
+ public MirroredInterfaceCustomizer(@Nonnull final FutureJVppCore futureJVppCore,
+ @Nonnull final NamingContext ifcContext,
+ @Nonnull final Function<InstanceIdentifier<MirroredInterfaces>, String> destinationInterfaceNameExtractor) {
+ super(futureJVppCore);
+ this.ifcContext = ifcContext;
+ this.destinationInterfaceNameExtractor = destinationInterfaceNameExtractor;
+ }
+
+
+ @Override
+ public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> id,
+ @Nonnull final MirroredInterface mirroredInterface,
+ @Nonnull final WriteContext writeContext)
+ throws WriteFailedException {
+ final String destinationInterfaceName =
+ destinationInterfaceNameExtractor.apply(cutId(id, MirroredInterfaces.class));
+ final String sourceInterfaceName = mirroredInterface.getIfaceRef();
+ final SpanState spanState = mirroredInterface.getState();
+
+ LOG.debug("Enabling span for source interface {} | destination interface {} | state {}", sourceInterfaceName,
+ destinationInterfaceName, spanState);
+
+ getReplyForWrite(getFutureJVpp().swInterfaceSpanEnableDisable(
+ getSpanAddDelRequest(
+ interfaceId(writeContext, ifcContext, destinationInterfaceName),
+ interfaceId(writeContext, ifcContext, sourceInterfaceName),
+ true,
+ spanState))
+ .toCompletableFuture(), id);
+ LOG.debug("Span for source interface {} | destination interface {} | state {} successfully enabled",
+ sourceInterfaceName, destinationInterfaceName, spanState);
+ }
+
+ @Override
+ public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> id,
+ @Nonnull final MirroredInterface mirroredInterface,
+ @Nonnull final WriteContext writeContext) throws WriteFailedException {
+ final String destinationInterfaceName =
+ destinationInterfaceNameExtractor.apply(cutId(id, MirroredInterfaces.class));
+ final String sourceInterfaceName = mirroredInterface.getIfaceRef();
+ LOG.debug("Disabling span for source interface {} | destination interface {} ", sourceInterfaceName,
+ destinationInterfaceName);
+
+ getReplyForWrite(getFutureJVpp().swInterfaceSpanEnableDisable(
+ getSpanAddDelRequest(
+ interfaceId(writeContext, ifcContext, destinationInterfaceName),
+ interfaceId(writeContext, ifcContext, sourceInterfaceName),
+ false,
+ null))
+ .toCompletableFuture(), id);
+ LOG.debug("Span for source interface {} | destination interface {} successfully disabled",
+ sourceInterfaceName, destinationInterfaceName);
+ }
+
+ private SwInterfaceSpanEnableDisable getSpanAddDelRequest(final int dstId, final Integer srcId, final boolean isAdd,
+ @Nullable final SpanState state) {
+ final SwInterfaceSpanEnableDisable spanAddDel = new SwInterfaceSpanEnableDisable();
+ spanAddDel.state = (byte) (isAdd
+ ? state != null
+ ? state.getIntValue()
+ : 0
+ : 0);// either one of 1(rx),2(tx),3(both) or 0 for disable/delete
+ spanAddDel.swIfIndexFrom = srcId;
+ spanAddDel.swIfIndexTo = dstId;
+ return spanAddDel;
+ }
+
+ private static int interfaceId(final WriteContext writeContext, final NamingContext ifcContext, final String name) {
+ return ifcContext.getIndex(name, writeContext.getMappingContext());
+ }
+}