From 4616f0300655582153362a21910bd1f0b14937ae Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Fri, 10 Mar 2017 12:50:53 +0100 Subject: HC2VPP-55: policer&policer assignment CRUD support Change-Id: I627d2a56ab2a282744ea0172b4a0c72240b0032f Signed-off-by: Marek Gradzki --- .../hc2vpp/vpp/classifier/VppClassifierModule.java | 9 ++++- .../write/VppClassifierHoneycombWriterFactory.java | 8 +++- .../classifier/write/ClassifySessionWriter.java | 45 +++++++++++++++------- 3 files changed, 44 insertions(+), 18 deletions(-) (limited to 'vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp') diff --git a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/VppClassifierModule.java b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/VppClassifierModule.java index 088df72c2..8a1515ca4 100644 --- a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/VppClassifierModule.java +++ b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/VppClassifierModule.java @@ -19,6 +19,7 @@ package io.fd.hc2vpp.vpp.classifier; import com.google.inject.AbstractModule; import com.google.inject.multibindings.Multibinder; import com.google.inject.name.Names; +import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManager; import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManagerImpl; import io.fd.hc2vpp.vpp.classifier.factory.read.VppClassifierReaderFactory; @@ -39,8 +40,12 @@ public class VppClassifierModule extends AbstractModule { install(ConfigurationModule.create()); bind(VppClassifierContextManager.class) - .annotatedWith(Names.named("classify-table-context")) - .toInstance(new VppClassifierContextManagerImpl("classify-table-")); + .annotatedWith(Names.named("classify-table-context")) + .toInstance(new VppClassifierContextManagerImpl("classify-table-")); + + bind(NamingContext.class) + .annotatedWith(Names.named("policer-context")) + .toInstance(new NamingContext("policer-", "policer-context")); // Writers final Multibinder writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class); diff --git a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/factory/write/VppClassifierHoneycombWriterFactory.java b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/factory/write/VppClassifierHoneycombWriterFactory.java index cf34e910c..7f5d46471 100644 --- a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/factory/write/VppClassifierHoneycombWriterFactory.java +++ b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/factory/write/VppClassifierHoneycombWriterFactory.java @@ -18,6 +18,7 @@ package io.fd.hc2vpp.vpp.classifier.factory.write; import com.google.inject.Inject; import com.google.inject.name.Named; +import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManager; import io.fd.hc2vpp.vpp.classifier.write.ClassifySessionWriter; import io.fd.hc2vpp.vpp.classifier.write.ClassifyTableWriter; @@ -41,12 +42,15 @@ public final class VppClassifierHoneycombWriterFactory implements WriterFactory private final FutureJVppCore jvpp; private final VppClassifierContextManager classifyTableContext; + private NamingContext policerContext; @Inject public VppClassifierHoneycombWriterFactory(@Nonnull final FutureJVppCore jvpp, - @Named("classify-table-context") @Nonnull final VppClassifierContextManager classifyTableContext) { + @Named("classify-table-context") @Nonnull final VppClassifierContextManager classifyTableContext, + @Named("policer-context") @Nonnull final NamingContext policerContext) { this.jvpp = jvpp; this.classifyTableContext = classifyTableContext; + this.policerContext = policerContext; } @Override @@ -58,7 +62,7 @@ public final class VppClassifierHoneycombWriterFactory implements WriterFactory CLASSIFY_SESSION_ID); // ClassifyTableSession registry.addBefore( - new GenericListWriter<>(CLASSIFY_SESSION_ID, new ClassifySessionWriter(jvpp, classifyTableContext)), + new GenericListWriter<>(CLASSIFY_SESSION_ID, new ClassifySessionWriter(jvpp, classifyTableContext, policerContext)), InterfaceAclWriterFactory.ACL_ID); } } diff --git a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriter.java b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriter.java index 8b1db57b7..be9d944c6 100644 --- a/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriter.java +++ b/vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriter.java @@ -22,6 +22,7 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.ByteDataTranslator; import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer; +import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManager; import io.fd.honeycomb.translate.MappingContext; import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer; @@ -36,6 +37,8 @@ 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.session.attributes.NextNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.session.attributes.next_node.Policer; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.classify.session.attributes.next_node.Standard; 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; @@ -54,11 +57,14 @@ public class ClassifySessionWriter extends VppNodeWriter private static final Logger LOG = LoggerFactory.getLogger(ClassifySessionWriter.class); private final VppClassifierContextManager classifyTableContext; + private final NamingContext policerContext; public ClassifySessionWriter(@Nonnull final FutureJVppCore futureJVppCore, - @Nonnull final VppClassifierContextManager classifyTableContext) { + @Nonnull final VppClassifierContextManager classifyTableContext, + @Nonnull final NamingContext policerContext) { super(futureJVppCore); this.classifyTableContext = checkNotNull(classifyTableContext, "classifyTableContext should not be null"); + this.policerContext = checkNotNull(policerContext, "policerContext should not be null"); } @Override @@ -109,19 +115,34 @@ public class ClassifySessionWriter extends VppNodeWriter final ClassifyTable classifyTable = getClassifyTable(writeContext, id.firstIdentifierOf(ClassifyTable.class), isAdd); - final int hitNextIndex = getNodeIndex(((Standard)classifySession.getNextNode()).getHitNext(), - classifyTable, classifyTableContext, - writeContext.getMappingContext(), id); - final int opaqueIndex = - getOpaqueIndex(((Standard)classifySession.getNextNode()).getOpaqueIndex(), classifyTable, writeContext.getMappingContext(), id); - + final ClassifyAddDelSession request = getClassifyAddDelSessionRequest(isAdd, classifySession, tableIndex); + + // TODO(HC2VPP-9): registry of next_node translators would allow to weaken dependency between policer + // and vpp-classifier models + final NextNode nextNode = classifySession.getNextNode(); + if (nextNode instanceof Standard) { + translateNode(request, id, (Standard)nextNode, classifyTable, writeContext.getMappingContext()); + } else if (nextNode instanceof Policer) { + translateNode(request, (Policer)nextNode, writeContext.getMappingContext()); + } final CompletionStage createClassifyTableReplyCompletionStage = getFutureJVpp() - .classifyAddDelSession( - getClassifyAddDelSessionRequest(isAdd, classifySession, tableIndex, hitNextIndex, opaqueIndex)); + .classifyAddDelSession(request); getReplyForWrite(createClassifyTableReplyCompletionStage.toCompletableFuture(), id); } + private void translateNode(final ClassifyAddDelSession request, final InstanceIdentifier id, + final Standard nextNode, final ClassifyTable classifyTable, final MappingContext ctx) + throws VppBaseCallException, WriteFailedException { + request.hitNextIndex = getNodeIndex(nextNode.getHitNext(), classifyTable, classifyTableContext, ctx, id); + request.opaqueIndex = getOpaqueIndex(nextNode.getOpaqueIndex(), classifyTable, ctx, id); + } + + private void translateNode(final ClassifyAddDelSession request, final Policer policer, final MappingContext ctx) { + request.hitNextIndex = policerContext.getIndex(policer.getPolicerHitNext(), ctx); + request.opaqueIndex = policer.getColorClassfier().getIntValue(); + } + private ClassifyTable getClassifyTable(final WriteContext writeContext, @Nonnull final InstanceIdentifier id, final boolean isAdd) { @@ -136,14 +157,10 @@ public class ClassifySessionWriter extends VppNodeWriter private ClassifyAddDelSession getClassifyAddDelSessionRequest(final boolean isAdd, @Nonnull final ClassifySession classifySession, - final int tableIndex, - final int hitNextIndex, - final int opaqueIndex) { + final int tableIndex) { ClassifyAddDelSession request = new ClassifyAddDelSession(); request.isAdd = booleanToByte(isAdd); request.tableIndex = tableIndex; - request.hitNextIndex = hitNextIndex; - request.opaqueIndex = opaqueIndex; // default 0: request.advance = classifySession.getAdvance(); -- cgit 1.2.3-korg