diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-05-12 13:15:50 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-05-15 05:24:48 +0000 |
commit | 9f3503ac117d485d75e604364647d7f59401f24a (patch) | |
tree | ab1d757f46b46180db19f1d012fef2e7a03729d7 /v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java | |
parent | 31bad643f16b6986434571b46158e6c662a240be (diff) |
HC2VPP-144 - Sub-interface span
Provides option to define port mirroring from
interface to subinterface
Change-Id: I8c04e8eb6b980c830e77e1ef2b75ddff3d59364c
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Signed-off-by: jsrnicek <jsrnicek@cisco.com>
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java')
-rw-r--r-- | v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java index 993120b68..4d6ea9864 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfaces/span/MirroredInterfaceCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco and/or its affiliates. + * 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. @@ -16,6 +16,8 @@ package io.fd.hc2vpp.v3po.interfaces.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; @@ -24,48 +26,41 @@ import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.vpp.jvpp.core.dto.SwInterfaceSpanEnableDisable; import io.fd.vpp.jvpp.core.future.FutureJVppCore; +import java.util.function.Function; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.SpanState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.span.attributes.MirroredInterfaces; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.span.attributes.mirrored.interfaces.MirroredInterface; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.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 +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, final NamingContext ifcContext) { + 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; } - 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; - } @Override - public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> instanceIdentifier, + public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> id, @Nonnull final MirroredInterface mirroredInterface, @Nonnull final WriteContext writeContext) throws WriteFailedException { - final String destinationInterfaceName = instanceIdentifier.firstKeyOf(Interface.class).getName(); + final String destinationInterfaceName = + destinationInterfaceNameExtractor.apply(cutId(id, MirroredInterfaces.class)); final String sourceInterfaceName = mirroredInterface.getIfaceRef(); final SpanState spanState = mirroredInterface.getState(); @@ -78,7 +73,7 @@ public final class MirroredInterfaceCustomizer interfaceId(writeContext, ifcContext, sourceInterfaceName), true, spanState)) - .toCompletableFuture(), instanceIdentifier); + .toCompletableFuture(), id); LOG.debug("Span for source interface {} | destination interface {} | state {} successfully enabled", sourceInterfaceName, destinationInterfaceName, spanState); } @@ -94,10 +89,11 @@ public final class MirroredInterfaceCustomizer } @Override - public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> instanceIdentifier, + public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<MirroredInterface> id, @Nonnull final MirroredInterface mirroredInterface, @Nonnull final WriteContext writeContext) throws WriteFailedException { - final String destinationInterfaceName = instanceIdentifier.firstKeyOf(Interface.class).getName(); + 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); @@ -108,11 +104,24 @@ public final class MirroredInterfaceCustomizer interfaceId(writeContext, ifcContext, sourceInterfaceName), false, null)) - .toCompletableFuture(), instanceIdentifier); + .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()); } |