public AclBuilder(Acl base) { if (base.getKey() == null) { this._key = new AclKey( base.getAclName(), base.getAclType() ); this._aclName = base.getAclName(); this._aclType = base.getAclType(); } else { this._key = base.getKey(); this._aclName = _key.getAclName(); this._aclType = _key.getAclType(); } this._accessListEntries = base.getAccessListEntries(); this._aclOperData = base.getAclOperData(); if (base instanceof AclImpl) { AclImpl impl = (AclImpl) base; if (!impl.augmentation.isEmpty()) { this.augmentation = new HashMap<>(impl.augmentation); } } else if (base instanceof AugmentationHolder) { @SuppressWarnings("unchecked") AugmentationHolder<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl> casted =(AugmentationHolder<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl>) base; if (!casted.augmentations().isEmpty()) { this.augmentation = new HashMap<>(casted.augmentations()); } } }
private static void isSupportedAclType(final Acl acl) { checkArgument(SUPPORTED_ACL_TYPES.contains(acl.getAclType()), "Unsupported Acl type %s detected for acl %s, allowed types are %s", acl.getAclType(), acl.getAclName(), SUPPORTED_ACL_TYPES); }
private static void hasConsistentAceTypeForAclType(final Acl acl) { checkTypesSame(acl.getAccessListEntries().getAce(), acl.getAclName(), checkNotNull(ACL_ACE_PAIRS.get(acl.getAclType()), "Unsupported ACL type %s for ACL %s", acl.getAclType(), acl.getAclName())); }
public AclBuilder(Acl base) { if (base.key() == null) { this.key = new AclKey( base.getAclName(), base.getAclType() ); this._aclName = base.getAclName(); this._aclType = base.getAclType(); } else { this.key = base.key(); this._aclName = key.getAclName(); this._aclType = key.getAclType(); } this._accessListEntries = base.getAccessListEntries(); this._aclOperData = base.getAclOperData(); if (base instanceof AclImpl) { AclImpl impl = (AclImpl) base; if (!impl.augmentation.isEmpty()) { this.augmentation = new HashMap<>(impl.augmentation); } } else if (base instanceof AugmentationHolder) { @SuppressWarnings("unchecked") AugmentationHolder<Acl> casted =(AugmentationHolder<Acl>) base; if (!casted.augmentations().isEmpty()) { this.augmentation = new HashMap<>(casted.augmentations()); } } }
if (!Objects.equals(_accessListEntries, other.getAccessListEntries())) { return false; if (!Objects.equals(_aclName, other.getAclName())) { return false; if (!Objects.equals(_aclOperData, other.getAclOperData())) { return false; if (!Objects.equals(_aclType, other.getAclType())) { return false; if (!e.getValue().equals(other.augmentation(e.getKey()))) { return false;
/** * Checks if provided {@link Acl} has aces of type {@link VppAce} */ 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(); }
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); }
/** * Convert {@link Acl} tag to byte array in US_ASCII */ default byte[] getAclTag(@Nonnull final Acl acl) { final VppAclAugmentation augmentation = acl.augmentation(VppAclAugmentation.class); if (augmentation != null && augmentation.getTag() != null) { return augmentation.getTag().getBytes(StandardCharsets.US_ASCII); } return new byte[0]; } }
private static boolean isAssigned(@Nonnull final Acl acl, @Nonnull final WriteContext writeContext) { final String aclName = acl.getAclName(); final Class<? extends AclBase> aclType = acl.getAclType(); final Interfaces interfaces = writeContext.readAfter(InstanceIdentifier.create(Interfaces.class)).get(); return interfaces.getInterface().stream() .map(i -> Optional.ofNullable(i.getAugmentation(VppInterfaceAugmentation.class)) .map(aug -> aug.getIetfAcl()) .map(ietfAcl -> ietfAcl.getAccessLists()) .map(accessLists -> accessLists.getAcl()) ) .flatMap(iacl -> iacl.isPresent() ? iacl.get().stream() : Stream.empty()) .filter(assignedAcl -> aclName.equals(assignedAcl.getName()) && aclType.equals(assignedAcl.getType())) .findFirst().isPresent(); } }
/** * Checks if provided {@link Acl} has aces of type {@link VppMacipAce} */ 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(); }
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); }
if (!Objects.equals(_accessListEntries, other.getAccessListEntries())) { return false; if (!Objects.equals(_aclName, other.getAclName())) { return false; if (!Objects.equals(_aclOperData, other.getAclOperData())) { return false; if (!Objects.equals(_aclType, other.getAclType())) { return false; if (!Objects.equals(_key, other.getKey())) { return false; if (!e.getValue().equals(other.getAugmentation(e.getKey()))) { return false;
final Class<? extends AclBase> aclType = acl.getAclType(); final String aclName = acl.getAclName();
default List<Ace> getAces(@Nonnull final Acl acl) { return Optional.ofNullable(acl.getAccessListEntries()).orElseThrow(() -> new IllegalArgumentException(String.format("Unable to extract aces from %s", acl))).getAce(); }
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); }
private static void hasAceList(final Acl acl) { final AccessListEntries accessListEntries = acl.getAccessListEntries(); checkArgument(accessListEntries != null, "The access-list-entries container is not defined."); final List<Ace> ace = accessListEntries.getAce(); checkArgument(ace != null, "The ace list is not defined."); checkArgument(!ace.isEmpty(), "The ace list is empty."); }
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); }
private static Stream<Ace> aclToAceStream(@Nonnull final Acl assignedAcl, @Nonnull final WriteContext writeContext) { final String aclName = assignedAcl.getName(); final Class<? extends AclBase> aclType = assignedAcl.getType(); // ietf-acl updates are handled first, so we use writeContext.readAfter final Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl> aclOptional = writeContext.readAfter(AclWriter.ACL_ID.child( org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl.class, new AclKey(aclName, aclType))); checkArgument(aclOptional.isPresent(), "Acl lists not configured"); final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160708.access.lists.Acl acl = aclOptional.get(); final AccessListEntries accessListEntries = acl.getAccessListEntries(); checkArgument(accessListEntries != null, "access list entries not configured"); return accessListEntries.getAce().stream(); }
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); }