summaryrefslogtreecommitdiffstats
path: root/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl
diff options
context:
space:
mode:
Diffstat (limited to 'acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl')
-rw-r--r--acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclDataExtractor.java39
-rw-r--r--acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclWriter.java134
2 files changed, 18 insertions, 155 deletions
diff --git a/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclDataExtractor.java b/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclDataExtractor.java
index 5f75ae306..977dd4062 100644
--- a/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclDataExtractor.java
+++ b/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclDataExtractor.java
@@ -16,16 +16,19 @@
package io.fd.hc2vpp.acl.util.acl;
+import com.google.common.base.Preconditions;
+import io.fd.hc2vpp.acl.write.AclValidator;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.Ace;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.ace.Matches;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev170615.VppAclAugmentation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev170615.access.lists.acl.access.list.entries.ace.matches.ace.type.VppAce;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.rev170615.access.lists.acl.access.list.entries.ace.matches.ace.type.VppMacipAce;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.acl.rev181022.VppAcl;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.acl.rev181022.VppAclAugmentation;
+import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.acl.rev181022.VppMacipAcl;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev181001.AclBase;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev181001.Ipv4AclType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev181001.acls.Acl;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev181001.acls.acl.aces.Ace;
/**
* Extracts data from Acls.
@@ -34,31 +37,25 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.acl.
public interface AclDataExtractor {
/**
- * Checks if provided {@link Acl} has aces of type {@link VppAce}
+ * Checks if provided {@link Acl} has aces of type {@link Ipv4AclType} or {@link VppAcl}
*/
default boolean isStandardAcl(@Nonnull final Acl acl) {
- return acl.getAccessListEntries().getAce().stream()
- .map(Ace::getMatches)
- .map(Matches::getAceType)
- .filter(aceType -> aceType instanceof VppAce)
- .findAny()
- .isPresent();
+ Class<? extends AclBase> type =
+ Preconditions.checkNotNull(acl.getType(), "Type is not set for ACL:{}", acl);
+ return type.equals(VppAcl.class);
}
/**
- * Checks if provided {@link Acl} has aces of type {@link VppMacipAce}
+ * Checks if provided {@link Acl} has aces of type {@link VppMacipAcl}
*/
default boolean isMacIpAcl(@Nonnull final Acl acl) {
- return acl.getAccessListEntries().getAce().stream()
- .map(Ace::getMatches)
- .map(Matches::getAceType)
- .filter(aceType -> aceType instanceof VppMacipAce)
- .findAny()
- .isPresent();
+ Class<? extends AclBase> type =
+ Preconditions.checkNotNull(acl.getType(), "Type is not set for ACL:{}", acl);
+ return type.equals(VppMacipAcl.class);
}
default List<Ace> getAces(@Nonnull final Acl acl) {
- return Optional.ofNullable(acl.getAccessListEntries()).orElseThrow(() ->
+ return Optional.ofNullable(acl.getAces()).orElseThrow(() ->
new IllegalArgumentException(String.format("Unable to extract aces from %s", acl))).getAce();
}
diff --git a/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclWriter.java b/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclWriter.java
deleted file mode 100644
index 32e20ebac..000000000
--- a/acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclWriter.java
+++ /dev/null
@@ -1,134 +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.hc2vpp.acl.util.acl;
-
-import io.fd.hc2vpp.acl.util.AclContextManager;
-import io.fd.hc2vpp.acl.util.ace.AceConverter;
-import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.write.WriteFailedException;
-import io.fd.vpp.jvpp.acl.dto.AclAddReplace;
-import io.fd.vpp.jvpp.acl.dto.AclAddReplaceReply;
-import io.fd.vpp.jvpp.acl.dto.AclDel;
-import io.fd.vpp.jvpp.acl.dto.MacipAclAdd;
-import io.fd.vpp.jvpp.acl.dto.MacipAclAddReply;
-import io.fd.vpp.jvpp.acl.dto.MacipAclDel;
-import io.fd.vpp.jvpp.acl.future.FutureJVppAclFacade;
-import java.util.List;
-import javax.annotation.Nonnull;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.acl.access.list.entries.Ace;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-/**
- * Write standard and mac-ip acls
- */
-public interface AclWriter extends AclDataExtractor, AceConverter, JvppReplyConsumer {
-
- int ACL_INDEX_CREATE_NEW = -1;
-
- default void addStandardAcl(@Nonnull final FutureJVppAclFacade futureFacade,
- @Nonnull final InstanceIdentifier<Acl> id, @Nonnull final Acl acl,
- @Nonnull final AclContextManager standardAclContext,
- @Nonnull final MappingContext mappingContext) throws WriteFailedException {
-
- final AclAddReplace request = new AclAddReplace();
-
- request.tag = getAclTag(acl);
- request.aclIndex = ACL_INDEX_CREATE_NEW;
-
- final List<Ace> aces = getAces(acl);
- request.r = toStandardAclRules(aces);
- request.count = request.r.length;
-
- final AclAddReplaceReply reply =
- getReplyForWrite(futureFacade.aclAddReplace(request).toCompletableFuture(), id);
-
- // maps new acl to returned index
- standardAclContext.addAcl(reply.aclIndex, acl.getAclName(), aces, mappingContext);
- }
-
- // according to vpp team, this was tested extensively, and should work
- default void updateStandardAcl(@Nonnull final FutureJVppAclFacade futureFacade,
- @Nonnull final InstanceIdentifier<Acl> id, @Nonnull final Acl acl,
- @Nonnull final AclContextManager standardAclContext,
- @Nonnull final MappingContext mappingContext) throws WriteFailedException {
-
- final AclAddReplace request = new AclAddReplace();
-
- request.tag = getAclTag(acl);
- // by setting existing index, request is resolved as update
- request.aclIndex = standardAclContext.getAclIndex(acl.getAclName(), mappingContext);
-
- final List<Ace> aces = getAces(acl);
- request.r = toStandardAclRules(aces);
- request.count = request.r.length;
-
- final AclAddReplaceReply reply = getReplyForWrite(futureFacade.aclAddReplace(request).toCompletableFuture(), id);
-
- // overwrites existing acl metadata (aces might have been changed):
- standardAclContext.addAcl(reply.aclIndex, acl.getAclName(), aces, mappingContext);
- }
-
- default void deleteStandardAcl(@Nonnull final FutureJVppAclFacade futureFacade,
- @Nonnull final InstanceIdentifier<Acl> id, @Nonnull final Acl acl,
- @Nonnull final AclContextManager standardAclContext,
- @Nonnull final MappingContext mappingContext) throws WriteFailedException {
-
- final AclDel request = new AclDel();
- final String aclName = acl.getAclName();
- request.aclIndex = standardAclContext.getAclIndex(aclName, mappingContext);
-
- getReplyForDelete(futureFacade.aclDel(request).toCompletableFuture(), id);
-
- // removes mapping after successful delete
- standardAclContext.removeAcl(aclName, mappingContext);
- }
-
- default void addMacIpAcl(@Nonnull final FutureJVppAclFacade futureFacade,
- @Nonnull final InstanceIdentifier<Acl> id, @Nonnull final Acl acl,
- @Nonnull final AclContextManager macIpAclContext,
- @Nonnull final MappingContext mappingContext) throws WriteFailedException {
- final MacipAclAdd request = new MacipAclAdd();
-
- request.tag = getAclTag(acl);
-
- final List<Ace> aces = getAces(acl);
- request.r = toMacIpAclRules(aces);
- request.count = request.r.length;
-
- final MacipAclAddReply reply = getReplyForWrite(futureFacade.macipAclAdd(request).toCompletableFuture(), id);
-
- // map mac-ip acl to returned index
- macIpAclContext.addAcl(reply.aclIndex, acl.getAclName(), aces, mappingContext);
- }
-
- default void deleteMacIpAcl(@Nonnull final FutureJVppAclFacade futureFacade,
- @Nonnull final InstanceIdentifier<Acl> id, @Nonnull final Acl acl,
- @Nonnull final AclContextManager macIpAclContext,
- @Nonnull final MappingContext mappingContext) throws WriteFailedException {
- final MacipAclDel request = new MacipAclDel();
- final String aclName = acl.getAclName();
- request.aclIndex = macIpAclContext.getAclIndex(aclName, mappingContext);
-
- getReplyForDelete(futureFacade.macipAclDel(request).toCompletableFuture(), id);
-
- macIpAclContext.removeAcl(aclName, mappingContext);
- }
-
-
-}