diff options
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.java | 39 | ||||
-rw-r--r-- | acl/acl-impl/src/main/java/io/fd/hc2vpp/acl/util/acl/AclWriter.java | 134 |
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); - } - - -} |