summaryrefslogtreecommitdiffstats
path: root/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier
diff options
context:
space:
mode:
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier')
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionReader.java207
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionWriter.java165
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableReader.java171
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableWriter.java149
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManager.java106
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImpl.java181
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeReader.java45
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeWriter.java79
8 files changed, 0 insertions, 1103 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionReader.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionReader.java
deleted file mode 100644
index 9f4cd7e77..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionReader.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.base.Optional;
-import com.google.common.primitives.UnsignedInts;
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.read.ReadContext;
-import io.fd.honeycomb.translate.read.ReadFailedException;
-import io.fd.honeycomb.translate.spi.read.ListReaderCustomizer;
-import io.fd.honeycomb.translate.v3po.interfacesstate.InterfaceDataTranslator;
-import io.fd.honeycomb.translate.vpp.util.FutureJVppCustomizer;
-import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
-import io.fd.vpp.jvpp.core.dto.ClassifySessionDetails;
-import io.fd.vpp.jvpp.core.dto.ClassifySessionDetailsReplyDump;
-import io.fd.vpp.jvpp.core.dto.ClassifySessionDump;
-import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.xml.bind.DatatypeConverter;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.HexString;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.OpaqueIndex;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.table.base.attributes.ClassifySession;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.table.base.attributes.ClassifySessionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.table.base.attributes.ClassifySessionKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTableBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTableKey;
-import org.opendaylight.yangtools.concepts.Builder;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Reader customizer responsible for classify session read.<br> to VPP.<br> Equivalent to invoking {@code vppctl show
- * class table verbose} command.
- */
-public class ClassifySessionReader extends FutureJVppCustomizer
- implements ListReaderCustomizer<ClassifySession, ClassifySessionKey, ClassifySessionBuilder>,
- InterfaceDataTranslator, VppNodeReader, JvppReplyConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(ClassifySessionReader.class);
- static final String CACHE_KEY = ClassifySessionReader.class.getName();
-
- private final VppClassifierContextManager classifyTableContext;
-
- public ClassifySessionReader(@Nonnull final FutureJVppCore futureJVppCore,
- @Nonnull final VppClassifierContextManager classifyTableContext) {
- super(futureJVppCore);
- this.classifyTableContext = checkNotNull(classifyTableContext, "classifyTableContext should not be null");
- }
-
- @Override
- public void merge(@Nonnull final Builder<? extends DataObject> builder,
- @Nonnull final List<ClassifySession> readData) {
- ((ClassifyTableBuilder) builder).setClassifySession(readData);
- }
-
- @Nonnull
- @Override
- public ClassifySessionBuilder getBuilder(@Nonnull final InstanceIdentifier<ClassifySession> id) {
- return new ClassifySessionBuilder();
- }
-
- @Override
- public void readCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ClassifySessionBuilder builder, @Nonnull final ReadContext ctx)
- throws ReadFailedException {
- LOG.debug("Reading attributes for classify session: {}", id);
-
- final ClassifySessionKey key = id.firstKeyOf(ClassifySession.class);
- checkArgument(key != null, "could not find ClassifySession key in {}", id);
-
- final ClassifySessionDetailsReplyDump classifySessionDump = dumpClassifySessions(id, ctx);
- final byte[] match = DatatypeConverter.parseHexBinary(key.getMatch().getValue().replace(":", ""));
- final Optional<ClassifySessionDetails> classifySession =
- findClassifySessionDetailsByMatch(classifySessionDump, match);
-
- if (classifySession.isPresent()) {
- final ClassifySessionDetails detail = classifySession.get();
- builder.setHitNext(
- readVppNode(detail.tableId, detail.hitNextIndex, classifyTableContext, ctx.getMappingContext(), LOG)
- .get());
- if (detail.opaqueIndex != ~0) {
- // value is specified:
- builder.setOpaqueIndex(readOpaqueIndex(detail.tableId, detail.opaqueIndex, ctx.getMappingContext()));
- }
- builder.setAdvance(detail.advance);
- builder.setMatch(key.getMatch());
-
- if (LOG.isTraceEnabled()) {
- LOG.trace("Attributes for classify session {} successfully read: {}", id, builder.build());
- }
- }
- }
-
- private OpaqueIndex readOpaqueIndex(final int tableIndex, final int opaqueIndex, final MappingContext ctx) {
- // We first try to map the value to a vpp node, if that fails, simply wrap the u32 value
- // TODO: HONEYCOMB-118 the approach might fail if the opaqueIndex contains small value that collides
- // with some of the adjacent nodes
-
- final Optional<VppNode> node = readVppNode(tableIndex, opaqueIndex, classifyTableContext, ctx, LOG);
- if (node.isPresent()) {
- return new OpaqueIndex(node.get());
- } else {
- return new OpaqueIndex(UnsignedInts.toLong(opaqueIndex));
- }
- }
-
- @Nullable
- private ClassifySessionDetailsReplyDump dumpClassifySessions(@Nonnull final InstanceIdentifier<?> id,
- @Nonnull final ReadContext ctx)
- throws ReadFailedException {
- final ClassifyTableKey tableKey = id.firstKeyOf(ClassifyTable.class);
- checkArgument(tableKey != null, "could not find ClassifyTable key in {}", id);
-
- final String cacheKey = CACHE_KEY + tableKey;
-
- ClassifySessionDetailsReplyDump classifySessionDump =
- (ClassifySessionDetailsReplyDump) ctx.getModificationCache().get(cacheKey);
- if (classifySessionDump != null) {
- LOG.debug("Classify sessions is present in cache: {}", cacheKey);
- return classifySessionDump;
- }
-
- final String tableName = tableKey.getName();
- checkState(classifyTableContext.containsTable(tableName, ctx.getMappingContext()),
- "Reading classify sessions for table {}, but table index could not be found in the classify table context",
- tableName);
- final int tableId = classifyTableContext.getTableIndex(tableName, ctx.getMappingContext());
- LOG.debug("Dumping classify sessions for classify table id={}", tableId);
-
-
- final ClassifySessionDump dumpRequest = new ClassifySessionDump();
- dumpRequest.tableId = tableId;
- final int timeOut = 30; // there can be many session with current ietf-acl implementation (could be probably
- // removed after fixing HONEYCOMB-247)
- classifySessionDump =
- getReplyForRead(getFutureJVpp().classifySessionDump(dumpRequest).toCompletableFuture(), id, timeOut);
-
- if (classifySessionDump != null) {
- // update the cache:
- ctx.getModificationCache().put(cacheKey, classifySessionDump);
- }
-
- return classifySessionDump;
- }
-
- private static Optional<ClassifySessionDetails> findClassifySessionDetailsByMatch(
- @Nullable final ClassifySessionDetailsReplyDump classifySessionDump, @Nonnull final byte[] match) {
- if (classifySessionDump != null && classifySessionDump.classifySessionDetails != null) {
- final List<ClassifySessionDetails> details = classifySessionDump.classifySessionDetails;
- final List<ClassifySessionDetails> filteredSessions = details.stream()
- .filter(singleDetail -> Arrays.equals(singleDetail.match, match)).collect(Collectors.toList());
- if (filteredSessions.isEmpty()) {
- return Optional.absent();
- } else if (filteredSessions.size() == 1) {
- return Optional.of(filteredSessions.get(0));
- } else {
- throw new IllegalStateException(String.format(
- "Found %d classify sessions witch given match. Single session expected.",
- filteredSessions.size()));
- }
- }
- return Optional.absent();
- }
-
- @Nonnull
- @Override
- public List<ClassifySessionKey> getAllIds(@Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ReadContext ctx) throws ReadFailedException {
- LOG.debug("Reading list of keys for classify sessions: {}", id);
-
- final ClassifySessionDetailsReplyDump classifySessionDump = dumpClassifySessions(id, ctx);
- if (classifySessionDump != null && classifySessionDump.classifySessionDetails != null) {
- return classifySessionDump.classifySessionDetails.stream()
- .map(detail -> new ClassifySessionKey(new HexString(printHexBinary(detail.match))))
- .collect(Collectors.toList());
- } else {
- return Collections.emptyList();
- }
- }
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionWriter.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionWriter.java
deleted file mode 100644
index 996e76eca..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifySessionWriter.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.base.Optional;
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
-import io.fd.honeycomb.translate.vpp.util.ByteDataTranslator;
-import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
-import io.fd.honeycomb.translate.write.WriteContext;
-import io.fd.honeycomb.translate.write.WriteFailedException;
-import java.util.concurrent.CompletionStage;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.xml.bind.DatatypeConverter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.OpaqueIndex;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.table.base.attributes.ClassifySession;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.table.base.attributes.ClassifySessionKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTableKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import io.fd.vpp.jvpp.VppBaseCallException;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSession;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelSessionReply;
-import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Writer customizer responsible for classify session create/delete.<br> Sends {@code classify_add_del_session} message
- * to VPP.<br> Equivalent to invoking {@code vppctl classify table} command.
- */
-public class ClassifySessionWriter extends VppNodeWriter
- implements ListWriterCustomizer<ClassifySession, ClassifySessionKey>, ByteDataTranslator, JvppReplyConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(ClassifySessionWriter.class);
- private final VppClassifierContextManager classifyTableContext;
-
- public ClassifySessionWriter(@Nonnull final FutureJVppCore futureJVppCore,
- @Nonnull final VppClassifierContextManager classifyTableContext) {
- super(futureJVppCore);
- this.classifyTableContext = checkNotNull(classifyTableContext, "classifyTableContext should not be null");
- }
-
- @Override
- public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ClassifySession dataAfter,
- @Nonnull final WriteContext writeContext) throws WriteFailedException {
- LOG.debug("Creating classify session: iid={} dataAfter={}", id, dataAfter);
- try {
- classifyAddDelSession(true, id, dataAfter, writeContext);
- LOG.debug("Successfully created classify session: iid={} dataAfter={}", id, dataAfter);
- } catch (VppBaseCallException e) {
- throw new WriteFailedException.CreateFailedException(id, dataAfter, e);
- }
- }
-
- @Override
- public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ClassifySession dataBefore,
- @Nonnull final ClassifySession dataAfter,
- @Nonnull final WriteContext writeContext) throws WriteFailedException {
- throw new UnsupportedOperationException("Classify session update is not supported");
- }
-
- @Override
- public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ClassifySession dataBefore,
- @Nonnull final WriteContext writeContext) throws WriteFailedException {
- LOG.debug("Removing classify session: iid={} dataBefore={}", id, dataBefore);
- try {
- classifyAddDelSession(false, id, dataBefore, writeContext);
- LOG.debug("Successfully removed classify session: iid={} dataBefore={}", id, dataBefore);
- } catch (VppBaseCallException e) {
- throw new WriteFailedException.DeleteFailedException(id, e);
- }
- }
-
- private void classifyAddDelSession(final boolean isAdd, @Nonnull final InstanceIdentifier<ClassifySession> id,
- @Nonnull final ClassifySession classifySession,
- @Nonnull final WriteContext writeContext)
- throws VppBaseCallException, WriteFailedException {
- final ClassifyTableKey tableKey = id.firstKeyOf(ClassifyTable.class);
- checkArgument(tableKey != null, "could not find classify table key in {}", id);
-
- final String tableName = tableKey.getName();
- checkState(classifyTableContext.containsTable(tableName, writeContext.getMappingContext()),
- "Could not find classify table index for {} in the classify table context", tableName);
- final int tableIndex = classifyTableContext.getTableIndex(tableName, writeContext.getMappingContext());
-
- final ClassifyTable classifyTable =
- getClassifyTable(writeContext, id.firstIdentifierOf(ClassifyTable.class), isAdd);
- final int hitNextIndex = getNodeIndex(classifySession.getHitNext(), classifyTable, classifyTableContext,
- writeContext.getMappingContext(), id);
- final int opaqueIndex =
- getOpaqueIndex(classifySession.getOpaqueIndex(), classifyTable, writeContext.getMappingContext(), id);
-
- final CompletionStage<ClassifyAddDelSessionReply> createClassifyTableReplyCompletionStage = getFutureJVpp()
- .classifyAddDelSession(
- getClassifyAddDelSessionRequest(isAdd, classifySession, tableIndex, hitNextIndex, opaqueIndex));
-
- getReplyForWrite(createClassifyTableReplyCompletionStage.toCompletableFuture(), id);
- }
-
- private ClassifyTable getClassifyTable(final WriteContext writeContext,
- @Nonnull final InstanceIdentifier<ClassifyTable> id,
- final boolean isAdd) {
- final Optional<ClassifyTable> classifyTable;
- if (isAdd) {
- classifyTable = writeContext.readAfter(id);
- } else {
- classifyTable = writeContext.readBefore(id);
- }
- return classifyTable.get();
- }
-
- private ClassifyAddDelSession getClassifyAddDelSessionRequest(final boolean isAdd,
- @Nonnull final ClassifySession classifySession,
- final int tableIndex,
- final int hitNextIndex,
- final int opaqueIndex) {
- ClassifyAddDelSession request = new ClassifyAddDelSession();
- request.isAdd = booleanToByte(isAdd);
- request.tableIndex = tableIndex;
- request.hitNextIndex = hitNextIndex;
- request.opaqueIndex = opaqueIndex;
-
- // default 0:
- request.advance = classifySession.getAdvance();
-
- request.match = DatatypeConverter.parseHexBinary(classifySession.getMatch().getValue().replace(":", ""));
- return request;
- }
-
- private int getOpaqueIndex(@Nullable final OpaqueIndex opaqueIndex, final ClassifyTable classifyTable,
- final MappingContext ctx, final InstanceIdentifier<ClassifySession> id)
- throws VppBaseCallException, WriteFailedException {
- if (opaqueIndex == null) {
- return ~0; // value not specified
- }
- if (opaqueIndex.getUint32() != null) {
- return opaqueIndex.getUint32().intValue();
- } else {
- return getNodeIndex(opaqueIndex.getVppNode(), classifyTable, classifyTableContext, ctx, id);
- }
- }
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableReader.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableReader.java
deleted file mode 100644
index 745168635..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableReader.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.base.Optional;
-import com.google.common.primitives.UnsignedInts;
-import io.fd.honeycomb.translate.read.ReadContext;
-import io.fd.honeycomb.translate.read.ReadFailedException;
-import io.fd.honeycomb.translate.spi.read.Initialized;
-import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer;
-import io.fd.honeycomb.translate.v3po.interfacesstate.InterfaceDataTranslator;
-import io.fd.honeycomb.translate.vpp.util.FutureJVppCustomizer;
-import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
-import io.fd.honeycomb.translate.vpp.util.MacTranslator;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableIds;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableIdsReply;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableInfo;
-import io.fd.vpp.jvpp.core.dto.ClassifyTableInfoReply;
-import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.HexString;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppClassifier;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppClassifierStateBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNodeName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTableBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.state.ClassifyTableKey;
-import org.opendaylight.yangtools.concepts.Builder;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Reader customizer responsible for classify table read.<br> to VPP.<br> Equivalent to invoking {@code vppctl show
- * class table} command.
- */
-public class ClassifyTableReader extends FutureJVppCustomizer
- implements InitializingListReaderCustomizer<ClassifyTable, ClassifyTableKey, ClassifyTableBuilder>, VppNodeReader,
- MacTranslator, InterfaceDataTranslator, JvppReplyConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(ClassifyTableReader.class);
- private final VppClassifierContextManager classifyTableContext;
-
- public ClassifyTableReader(@Nonnull final FutureJVppCore futureJVppCore,
- @Nonnull final VppClassifierContextManager classifyTableContext) {
- super(futureJVppCore);
- this.classifyTableContext = checkNotNull(classifyTableContext, "classifyTableContext should not be null");
- }
-
-
- @Override
- public void merge(@Nonnull final Builder<? extends DataObject> builder,
- @Nonnull final List<ClassifyTable> readData) {
- ((VppClassifierStateBuilder) builder).setClassifyTable(readData);
- }
-
- @Nonnull
- @Override
- public ClassifyTableBuilder getBuilder(@Nonnull final InstanceIdentifier<ClassifyTable> id) {
- return new ClassifyTableBuilder();
- }
-
- @Override
- public void readCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ClassifyTableBuilder builder, @Nonnull final ReadContext ctx)
- throws ReadFailedException {
- LOG.debug("Reading attributes for classify table: {}", id);
-
- final ClassifyTableKey key = id.firstKeyOf(ClassifyTable.class);
- checkArgument(key != null, "could not find ClassifyTable key in {}", id);
- final ClassifyTableInfo request = new ClassifyTableInfo();
-
- final String tableName = key.getName();
- if (!classifyTableContext.containsTable(tableName, ctx.getMappingContext())) {
- LOG.debug("Could not find classify table {} in the naming context", tableName);
- return;
- }
- request.tableId = classifyTableContext.getTableIndex(tableName, ctx.getMappingContext());
-
-
- final ClassifyTableInfoReply reply =
- getReplyForRead(getFutureJVpp().classifyTableInfo(request).toCompletableFuture(), id);
-
- // mandatory values:
- builder.setName(tableName);
- builder.setKey(key);
- builder.setNbuckets(UnsignedInts.toLong(reply.nbuckets));
- builder.setSkipNVectors(UnsignedInts.toLong(reply.skipNVectors));
-
- // optional value read from context
- final Optional<String> tableBaseNode =
- classifyTableContext.getTableBaseNode(tableName, ctx.getMappingContext());
- if (tableBaseNode.isPresent()) {
- builder.setClassifierNode(new VppNodeName(tableBaseNode.get()));
- }
-
- builder.setMissNext(
- readVppNode(reply.tableId, reply.missNextIndex, classifyTableContext, ctx.getMappingContext(), LOG)
- .get());
- builder.setMask(new HexString(printHexBinary(reply.mask)));
- builder.setActiveSessions(UnsignedInts.toLong(reply.activeSessions));
-
- if (reply.nextTableIndex != ~0) {
- // next table index is present:
- builder.setNextTable(classifyTableContext.getTableName(reply.nextTableIndex, ctx.getMappingContext()));
- }
-
- if (LOG.isTraceEnabled()) {
- LOG.trace("Attributes for classify table {} successfully read: {}", id, builder.build());
- }
- }
-
- @Nonnull
- @Override
- public List<ClassifyTableKey> getAllIds(@Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ReadContext context) throws ReadFailedException {
- LOG.debug("Reading list of keys for classify tables: {}", id);
-
- final ClassifyTableIdsReply classifyTableIdsReply =
- getReplyForRead(getFutureJVpp().classifyTableIds(new ClassifyTableIds()).toCompletableFuture(),
- id);
- if (classifyTableIdsReply.ids != null) {
- return Arrays.stream(classifyTableIdsReply.ids).mapToObj(i -> {
- final String tableName = classifyTableContext.getTableName(i, context.getMappingContext());
- LOG.trace("Classify table with name: {} and index: {} found in VPP", tableName, i);
- return new ClassifyTableKey(tableName);
- }).collect(Collectors.toList());
- } else {
- return Collections.emptyList();
- }
- }
-
- @Override
- public Initialized<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable> init(
- @Nonnull final InstanceIdentifier<ClassifyTable> id, @Nonnull final ClassifyTable readValue,
- @Nonnull final ReadContext ctx) {
- return Initialized.create(getCfgId(id),
- new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTableBuilder(readValue)
- .setName(readValue.getName())
- .build());
- }
-
- static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable> getCfgId(
- final InstanceIdentifier<ClassifyTable> id) {
- return InstanceIdentifier.create(VppClassifier.class)
- .child(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable.class,
- new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTableKey(id.firstKeyOf(ClassifyTable.class).getName()));
- }
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableWriter.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableWriter.java
deleted file mode 100644
index 33dc64103..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/ClassifyTableWriter.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
-import io.fd.honeycomb.translate.vpp.util.ByteDataTranslator;
-import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
-import io.fd.honeycomb.translate.write.WriteContext;
-import io.fd.honeycomb.translate.write.WriteFailedException;
-import java.util.concurrent.CompletionStage;
-import javax.annotation.Nonnull;
-import javax.xml.bind.DatatypeConverter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTableKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import io.fd.vpp.jvpp.VppBaseCallException;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTable;
-import io.fd.vpp.jvpp.core.dto.ClassifyAddDelTableReply;
-import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Writer customizer responsible for classify table create/delete. <br> Sends {@code classify_add_del_table} message to
- * VPP.<br> Equivalent to invoking {@code vppctl classify table} command.
- */
-public class ClassifyTableWriter extends VppNodeWriter
- implements ListWriterCustomizer<ClassifyTable, ClassifyTableKey>, ByteDataTranslator, JvppReplyConsumer {
-
- private static final Logger LOG = LoggerFactory.getLogger(ClassifyTableWriter.class);
- private final VppClassifierContextManager classifyTableContext;
-
- public ClassifyTableWriter(@Nonnull final FutureJVppCore futureJVppCore,
- @Nonnull final VppClassifierContextManager classifyTableContext) {
- super(futureJVppCore);
- this.classifyTableContext = checkNotNull(classifyTableContext, "classifyTableContext should not be null");
- }
-
- @Override
- public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ClassifyTable dataAfter, @Nonnull final WriteContext writeContext)
- throws WriteFailedException {
- LOG.debug("Creating classify table: iid={} dataAfter={}", id, dataAfter);
- try {
- final int newTableIndex =
- classifyAddDelTable(true, id, dataAfter, ~0 /* value not present */,
- writeContext.getMappingContext());
-
- // Add classify table name <-> vpp index mapping to the naming context:
- classifyTableContext.addTable(newTableIndex, dataAfter.getName(), dataAfter.getClassifierNode(),
- writeContext.getMappingContext());
- LOG.debug("Successfully created classify table(id={]): iid={} dataAfter={}", newTableIndex, id, dataAfter);
- } catch (VppBaseCallException e) {
- throw new WriteFailedException.CreateFailedException(id, dataAfter, e);
- }
- }
-
- @Override
- public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ClassifyTable dataBefore, @Nonnull final ClassifyTable dataAfter,
- @Nonnull final WriteContext writeContext) throws WriteFailedException {
- throw new UnsupportedOperationException("Classify table update is not supported");
- }
-
- @Override
- public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ClassifyTable dataBefore,
- @Nonnull final WriteContext writeContext) throws WriteFailedException {
- LOG.debug("Removing classify table: iid={} dataBefore={}", id, dataBefore);
- final String tableName = dataBefore.getName();
- checkState(classifyTableContext.containsTable(tableName, writeContext.getMappingContext()),
- "Removing classify table {}, but index could not be found in the classify table context", tableName);
-
- final int tableIndex = classifyTableContext.getTableIndex(tableName, writeContext.getMappingContext());
- try {
- classifyAddDelTable(false, id, dataBefore, tableIndex, writeContext.getMappingContext());
-
- // Remove deleted interface from interface context:
- classifyTableContext.removeTable(dataBefore.getName(), writeContext.getMappingContext());
- LOG.debug("Successfully removed classify table(id={]): iid={} dataAfter={}", tableIndex, id, dataBefore);
- } catch (VppBaseCallException e) {
- throw new WriteFailedException.DeleteFailedException(id, e);
- }
- }
-
- private int classifyAddDelTable(final boolean isAdd, @Nonnull final InstanceIdentifier<ClassifyTable> id,
- @Nonnull final ClassifyTable table, final int tableId, final MappingContext ctx)
- throws VppBaseCallException, WriteFailedException {
-
- final int missNextIndex =
- getNodeIndex(table.getMissNext(), table, classifyTableContext, ctx, id);
-
- final CompletionStage<ClassifyAddDelTableReply> createClassifyTableReplyCompletionStage =
- getFutureJVpp()
- .classifyAddDelTable(getClassifyAddDelTableRequest(isAdd, tableId, table, missNextIndex, ctx));
-
- final ClassifyAddDelTableReply reply =
- getReplyForWrite(createClassifyTableReplyCompletionStage.toCompletableFuture(), id);
- return reply.newTableIndex;
- }
-
- private ClassifyAddDelTable getClassifyAddDelTableRequest(final boolean isAdd, final int tableIndex,
- @Nonnull final ClassifyTable table,
- final int missNextIndex,
- @Nonnull final MappingContext ctx) {
- final ClassifyAddDelTable request = new ClassifyAddDelTable();
- request.isAdd = booleanToByte(isAdd);
- request.tableIndex = tableIndex;
-
- // mandatory, all u32 values are permitted:
- request.nbuckets = table.getNbuckets().intValue();
- request.memorySize = table.getMemorySize().intValue();
- request.skipNVectors = table.getSkipNVectors().intValue();
-
- // mandatory
- request.missNextIndex = missNextIndex;
-
- final String nextTable = table.getNextTable();
- if (isAdd && nextTable != null) {
- request.nextTableIndex = classifyTableContext.getTableIndex(nextTable, ctx);
- } else {
- request.nextTableIndex = ~0; // value not specified
- }
- request.mask = DatatypeConverter.parseHexBinary(table.getMask().getValue().replace(":", ""));
- checkArgument(request.mask.length % 16 == 0, "Number of mask bytes must be multiple of 16.");
- request.matchNVectors = request.mask.length / 16;
-
- return request;
- }
-} \ No newline at end of file
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManager.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManager.java
deleted file mode 100644
index 69dfb644a..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManager.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import com.google.common.base.Optional;
-import io.fd.honeycomb.translate.MappingContext;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNodeName;
-
-/**
- * Manages metadata for vpp-classifier
- */
-public interface VppClassifierContextManager {
-
- /**
- * Creates metadata for classify table.
- *
- * @param id classify table index
- * @param name classify table name
- * @param classifierNode name of VPP node the table is defined for
- * @param ctx mapping context providing context data for current transaction
- */
- void addTable(final int id, @Nonnull final String name, @Nullable final VppNodeName classifierNode,
- @Nonnull final MappingContext ctx);
-
- /**
- * Check whether metadata for given classify table metadata is present.
- *
- * @param name classify table name
- * @param ctx mapping context providing context data for current transaction
- * @return true if present, false otherwise
- */
- boolean containsTable(@Nonnull String name, @Nonnull final MappingContext ctx);
-
- /**
- * Returns classify table index associated with the given name.
- *
- * @param name classify table name
- * @param ctx mapping context providing context data for current transaction
- * @return integer index value matching supplied classify table name
- * @throws IllegalArgumentException if classify table was not found
- */
- int getTableIndex(@Nonnull final String name, @Nonnull final MappingContext ctx);
-
- /**
- * Retrieves classify table name for given id. If not present, artificial name will be generated.
- *
- * @param id classify table index
- * @param ctx mapping context providing context data for current transaction
- * @return classify table name matching supplied index
- */
- String getTableName(final int id, @Nonnull final MappingContext ctx);
-
- /**
- * Returns name of the base vpp node associated with the classify table.
- *
- * @param name classify table name
- * @param ctx mapping context providing context data for current transaction
- * @return name of VPP node the table is defined for
- */
- Optional<String> getTableBaseNode(final String name, @Nonnull final MappingContext ctx);
-
- /**
- * Removes classify table metadata from current context.
- *
- * @param name classify table name
- * @param ctx mapping context providing context data for current transaction
- */
- void removeTable(@Nonnull final String name, @Nonnull final MappingContext ctx);
-
- /**
- * Adds relative node index to node name mapping for given classify table.
- *
- * @param tableName classify table name
- * @param nodeIndex index of a vpp node, relative to table's base node
- * @param nodeName name of a vpp node
- * @param ctx mapping context providing context data for current transaction
- */
- void addNodeName(@Nonnull String tableName, final int nodeIndex, @Nonnull final String nodeName,
- @Nonnull final MappingContext ctx);
-
- /**
- * Retrieves node name associated with the given classify table and node index.
- *
- * @param tableIndex classify table index
- * @param nodeIndex relative index of a vpp node
- * @param ctx mapping context providing context data for current transaction
- * @return name of vpp node
- */
- Optional<String> getNodeName(final int tableIndex, final int nodeIndex, @Nonnull final MappingContext ctx);
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImpl.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImpl.java
deleted file mode 100644
index 13931ae47..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.read.ReaderFactory;
-import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder;
-import io.fd.honeycomb.translate.util.RWUtils;
-import io.fd.honeycomb.translate.util.read.BindingBrokerReader;
-import java.util.List;
-import java.util.stream.Collector;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.inject.Named;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNodeName;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.VppClassifierContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.VppClassifierContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContextKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContext;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContextKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-
-/**
- * Facade on top of {@link MappingContext} that manages {@link ClassifyTableContext}.
- */
-public final class VppClassifierContextManagerImpl implements VppClassifierContextManager {
- private static final Collector<ClassifyTableContext, ?, ClassifyTableContext> SINGLE_ITEM_COLLECTOR =
- RWUtils.singleItemCollector();
-
- @VisibleForTesting
- static final InstanceIdentifier<VppClassifierContext>
- VPP_CLASSIFIER_CONTEXT_IID = KeyedInstanceIdentifier.create(VppClassifierContext.class);
- private final String artificialNamePrefix;
-
- /**
- * Creates new VppClassifierContextManagerImpl.
- *
- * @param artificialNamePrefix artificial name to be used to generate names for classify tables without existing
- * metadata
- */
- public VppClassifierContextManagerImpl(@Nonnull final String artificialNamePrefix) {
- this.artificialNamePrefix =
- Preconditions.checkNotNull(artificialNamePrefix, "artificialNamePrefix should not be null");
- }
-
- private KeyedInstanceIdentifier<ClassifyTableContext, ClassifyTableContextKey> getMappingIid(final String name) {
- return VPP_CLASSIFIER_CONTEXT_IID.child(ClassifyTableContext.class, new ClassifyTableContextKey(name));
- }
-
- @Override
- public void addTable(final int id, @Nonnull final String name, @Nullable final VppNodeName classifierNode,
- @Nonnull final MappingContext ctx) {
- final KeyedInstanceIdentifier<ClassifyTableContext, ClassifyTableContextKey> mappingIid = getMappingIid(name);
- final ClassifyTableContextBuilder tableCtx = new ClassifyTableContextBuilder().setIndex(id).setName(name);
- if (classifierNode != null) {
- tableCtx.setClassifierNodeName(classifierNode.getValue());
- }
- ctx.put(mappingIid, tableCtx.build());
- }
-
- @Override
- public boolean containsTable(@Nonnull final String name, @Nonnull final MappingContext ctx) {
- final Optional<ClassifyTableContext> read = ctx.read(getMappingIid(name));
- return read.isPresent();
- }
-
- @Override
- public int getTableIndex(@Nonnull final String name, @Nonnull final MappingContext ctx) {
- final Optional<ClassifyTableContext> read = ctx.read(getMappingIid(name));
- checkArgument(read.isPresent(), "No mapping stored for name: %s", name);
- return read.get().getIndex();
- }
-
- @Override
- public String getTableName(final int id, @Nonnull final MappingContext ctx) {
- if (!containsName(id, ctx)) {
- final String artificialName = getArtificialName(id);
- addTable(id, artificialName, null, ctx);
- }
-
- final Optional<VppClassifierContext> read = ctx.read(VPP_CLASSIFIER_CONTEXT_IID);
- checkState(read.isPresent(), "VppClassifierContext for index: %s is not present. But should be", id);
-
- return read.get().getClassifyTableContext().stream()
- .filter(t -> t.getIndex().equals(id))
- .collect(SINGLE_ITEM_COLLECTOR).getName();
- }
-
- private boolean containsName(final int index, @Nonnull final MappingContext mappingContext) {
- final Optional<VppClassifierContext> read = mappingContext.read(VPP_CLASSIFIER_CONTEXT_IID);
- return read.isPresent()
- ? read.get().getClassifyTableContext().stream().anyMatch(t -> t.getIndex().equals(index))
- : false;
- }
-
- @Override
- public Optional<String> getTableBaseNode(@Nonnull final String name, @Nonnull final MappingContext ctx) {
- final Optional<ClassifyTableContext> read = ctx.read(getMappingIid(name));
- if (read.isPresent()) {
- return Optional.fromNullable(read.get().getClassifierNodeName());
- }
- return Optional.absent();
- }
-
- @Override
- public void removeTable(@Nonnull final String name, @Nonnull final MappingContext ctx) {
- ctx.delete(getMappingIid(name));
- }
-
- @Override
- public void addNodeName(@Nonnull final String tableName, final int nodeIndex,
- @Nonnull final String nodeName,
- @Nonnull final MappingContext ctx) {
- final KeyedInstanceIdentifier<NodeContext, NodeContextKey> iid =
- getMappingIid(tableName).child(NodeContext.class, new NodeContextKey(nodeName));
- ctx.put(iid, new NodeContextBuilder().setName(nodeName).setIndex(nodeIndex).build());
- }
-
- @Override
- public Optional<String> getNodeName(final int tableIndex, final int nodeIndex, @Nonnull final MappingContext ctx) {
- if (!containsName(tableIndex, ctx)) {
- return Optional.absent();
- }
- final String tableName = getTableName(tableIndex, ctx);
- final Optional<ClassifyTableContext> tableCtx = ctx.read(getMappingIid(tableName));
- final List<NodeContext> nodeContext = tableCtx.get().getNodeContext();
- if (nodeContext == null) {
- return Optional.absent();
- }
- return Optional.fromNullable(nodeContext.stream()
- .filter(n -> n.getIndex().equals(nodeIndex))
- .findFirst()
- .map(nodes -> nodes.getName())
- .orElse(null));
- }
-
- private String getArtificialName(final int index) {
- return artificialNamePrefix + index;
- }
-
- public static final class ContextsReaderFactory implements ReaderFactory {
-
- @Inject
- @Named("honeycomb-context")
- private DataBroker contextBindingBrokerDependency;
-
- @Override
- public void init(final ModifiableReaderRegistryBuilder registry) {
- registry.add(new BindingBrokerReader<>(VPP_CLASSIFIER_CONTEXT_IID,
- contextBindingBrokerDependency,
- LogicalDatastoreType.OPERATIONAL, VppClassifierContextBuilder.class));
- }
- }
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeReader.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeReader.java
deleted file mode 100644
index 23ce094c1..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeReader.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import com.google.common.base.Optional;
-import io.fd.honeycomb.translate.MappingContext;
-import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.PacketHandlingAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNodeName;
-import org.slf4j.Logger;
-
-interface VppNodeReader {
-
- /**
- * Converts vpp node index to YANG representation of vpp node.
- *
- * @param nodeIndex index of vpp node treated as signed integer.
- * @return vpp node representation
- */
- default Optional<VppNode> readVppNode(final int tableIndex, final int nodeIndex,
- @Nonnull final VppClassifierContextManager vppClassifierContextManager,
- @Nonnull final MappingContext ctx, @Nonnull final Logger log) {
- final PacketHandlingAction action = PacketHandlingAction.forValue(nodeIndex);
- if (action == null) {
- return vppClassifierContextManager.getNodeName(tableIndex, nodeIndex, ctx)
- .transform(nodeName -> new VppNode(new VppNodeName(nodeName)));
- }
- return Optional.of(new VppNode(action));
- }
-}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeWriter.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeWriter.java
deleted file mode 100644
index 308c2496e..000000000
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppNodeWriter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2016 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.honeycomb.translate.v3po.vppclassifier;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.read.ReadFailedException;
-import io.fd.honeycomb.translate.vpp.util.FutureJVppCustomizer;
-import io.fd.honeycomb.translate.vpp.util.JvppReplyConsumer;
-import io.fd.honeycomb.translate.write.WriteFailedException;
-import io.fd.vpp.jvpp.VppBaseCallException;
-import io.fd.vpp.jvpp.core.dto.GetNextIndex;
-import io.fd.vpp.jvpp.core.dto.GetNextIndexReply;
-import io.fd.vpp.jvpp.core.future.FutureJVppCore;
-import java.util.concurrent.CompletionStage;
-import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.vpp.classifier.ClassifyTable;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-abstract class VppNodeWriter extends FutureJVppCustomizer implements JvppReplyConsumer {
-
- protected VppNodeWriter(@Nonnull final FutureJVppCore futureJvpp) {
- super(futureJvpp);
- }
-
- protected int getNodeIndex(@Nonnull final VppNode node, @Nonnull final ClassifyTable classifyTable,
- @Nonnull final VppClassifierContextManager vppClassifierContextManager,
- @Nonnull final MappingContext ctx, @Nonnull final InstanceIdentifier<?> id)
- throws VppBaseCallException, WriteFailedException {
- if (node.getPacketHandlingAction() != null) {
- return node.getPacketHandlingAction().getIntValue();
- } else {
- return nodeNameToIndex(classifyTable, node.getVppNodeName().getValue(), vppClassifierContextManager, ctx,
- id);
- }
- }
-
- private int nodeNameToIndex(@Nonnull final ClassifyTable classifyTable, @Nonnull final String nextNodeName,
- @Nonnull final VppClassifierContextManager vppClassifierContextManager,
- @Nonnull final MappingContext ctx, @Nonnull final InstanceIdentifier<?> id)
- throws WriteFailedException {
- checkArgument(classifyTable != null && classifyTable.getClassifierNode() != null,
- "to use relative node names, table classifier node needs to be provided");
- final GetNextIndex request = new GetNextIndex();
- request.nodeName = classifyTable.getClassifierNode().getValue().getBytes();
- request.nextName = nextNodeName.getBytes();
- final CompletionStage<GetNextIndexReply> getNextIndexCompletionStage =
- getFutureJVpp().getNextIndex(request);
-
- final GetNextIndexReply reply;
- try {
- reply = getReplyForRead(getNextIndexCompletionStage.toCompletableFuture(), id);
-
- // vpp does not provide relative node index to node name conversion (https://jira.fd.io/browse/VPP-219)
- // as a workaround we need to add mapping to vpp-classfier-context
- vppClassifierContextManager.addNodeName(classifyTable.getName(), reply.nextIndex, nextNodeName, ctx);
- } catch (ReadFailedException e) {
- throw new WriteFailedException(id, String.format("Failed to get node index for %s relative to %s",
- nextNodeName, classifyTable.getClassifierNode()), e);
- }
- return reply.nextIndex;
- }
-}