diff options
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl')
2 files changed, 16 insertions, 14 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/AbstractAceWriter.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/AbstractAceWriter.java index eeabff4ce..97c1bc031 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/AbstractAceWriter.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/AbstractAceWriter.java @@ -43,14 +43,14 @@ import org.openvpp.jvpp.core.future.FutureJVppCore; /** * Base writer for translation of ietf-acl model ACEs to VPP's classify tables and sessions. - * + * <p/> * Creates one classify table with single session per ACE. * * @param <T> type of access control list entry */ abstract class AbstractAceWriter<T extends AceType> implements AceWriter { - // TODO: minimise memory used by classify tables (we create a lot of them to make ietf-acl model + // TODO: HONEYCOMB-181 minimise memory used by classify tables (we create a lot of them to make ietf-acl model // mapping more convenient): // according to https://wiki.fd.io/view/VPP/Introduction_To_N-tuple_Classifiers#Creating_a_classifier_table, // classify table needs 16*(1 + match_n_vectors) bytes, but this does not quite work, so setting 8K for now diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/IetfAClWriter.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/IetfAClWriter.java index a25ddac6c..9c1098286 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/IetfAClWriter.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/interfaces/acl/IetfAClWriter.java @@ -132,9 +132,6 @@ public final class IetfAClWriter { // filter ACE entries and group by AceType final Map<AclType, List<Ace>> acesByType = acls.stream() .flatMap(acl -> aclToAceStream(acl, writeContext)) - // TODO we should not tolerate nulls, but throw some meaningful exceptions instead - .filter(ace -> ace != null && ace.getMatches() != null && ace.getMatches().getAceType() != null && - ace.getActions() != null && ace.getActions().getPacketHandling() != null) .collect(Collectors.groupingBy(AclType::fromAce)); final InputAclSetInterface request = new InputAclSetInterface(); @@ -170,16 +167,21 @@ public final class IetfAClWriter { @Nonnull private static AclType fromAce(final Ace ace) { AclType result = null; - final AceType aceType = ace.getMatches().getAceType(); - if (aceType instanceof AceEth) { - result = ETH; - } else if (aceType instanceof AceIp) { - final AceIpVersion aceIpVersion = ((AceIp) aceType).getAceIpVersion(); - if (aceIpVersion instanceof AceIpv4) { - result = IP4; - } else { - result = IP6; + final AceType aceType; + try { + aceType = ace.getMatches().getAceType(); + if (aceType instanceof AceEth) { + result = ETH; + } else if (aceType instanceof AceIp) { + final AceIpVersion aceIpVersion = ((AceIp) aceType).getAceIpVersion(); + if (aceIpVersion instanceof AceIpv4) { + result = IP4; + } else { + result = IP6; + } } + } catch (NullPointerException e) { + throw new IllegalArgumentException("Incomplete ACE: " + ace, e); } if (result == null) { throw new IllegalArgumentException(String.format("Not supported ace type %s", aceType)); |