ACL: Support for non-conntrack supported traffic. 58/65158/30
authorSomashekar Byrappa <somashekar.b@altencalsoftlabs.com>
Mon, 6 Nov 2017 10:16:11 +0000 (15:46 +0530)
committerSam Hague <shague@redhat.com>
Thu, 15 Feb 2018 13:08:28 +0000 (13:08 +0000)
commit2fb2ed59e65d70d801bad72f4a0f8d110c972597
treee3bda7fc1f3a388813339026faa892c859788412
parent1be1d5152b7f758530b2259eaeb586f22324a0f4
ACL: Support for non-conntrack supported traffic.

+ This is implementation for spec "Support for protocols that are not
supported by conntrack".
+ This involves redesign of entire ACL pipeline.
+ UT is disabled in this patch. It will be handled separately as part of https://git.opendaylight.org/gerrit/#/c/66553/.

This patch currently addresses (a) and (c) of below three issues as
mentioned in the spec:
a. Enhance ACL to support protocols like OSPF, VRRP etc that are not
supported by conntrack in stateful mode.
b. Handle overlapping IP addresses while processing remote ACLs.
c. Optimization for Remote ACL by reducing number of flows even for ports
having multiple ACLs.

Patch-1:
+ ACL default flows are changed as per the new pipeline.

Patch-2:
+ Updated bind service to exclude writing ELAN/VPN ID into metadata.
+ Removed dependency on vpnmanager and it is not required anymore.

Patch-3:
+ Rebased

Patch-4:
+ Fixed compilation issues. Removed VPN-ID related code.

Patch-5:
+ Handled programming general fixed flows.
+ Handled programming port specific fixed flows.

Patch-6:
+ Rebased

Patch-7:
+ Handled programming ACL commit flows.
+ Refactored: Moved programAceSpecificFlow() logic from
Stateful***AclServiceImpl to AbstractAclServiceImpl class.

Patch-8:
+ Handled programming ACL dispatcher table.

Patch-9:
+ Updated programming ACL dispatcher table.
+ Handled programming Remote ACL table.

Patch-10:
+ Rebased

Patch-11:
+ Code-cleanup

Patch-12:
+ Rebased

Patch-13:
+ Handled port update. Update for port-security-enabled, AAP and SG
changes.

Patch-14:
+ Rebased

Patch-15:
+ Handle port-update with allowed-address-pair change.

Patch-16:
+ Used DJC to program ACL node default flows.
+ Used single transaction for programming ACL node default flows.
+ Refactored AclNodeListener.

Patch-17:
+ Refactored to keep single level of abstraction as no other
security-group modes are supported except stateful.
+ Updated to display cache aclTagMap.

Patch-18:
+ This patch was mistakenly uploaded by Nishchya.

Patch-19:
+ Rebased.

Patch-20:
+ Changed references from METADATA_MASK_REMOTE_ACL_ID to
METADATA_MASK_REMOTE_ACL_TAG.

Patch-21:
+ Rebased.

Patch-22:
+ Rebased.

Patch-23:
+ Rebased.

Patch-24:
+ Rebased. Aligned [0] with the latest ACL pipeline.
[0] https://git.opendaylight.org/gerrit/#/c/66788/

Patch-25:
+ Rebased.

Depends-On: I95df598428f6351e2abb0b173a4318253c9e20bc

Change-Id: Ie82fa8bf1eb139039247adb2321a53babe8fdc83
Signed-off-by: Somashekar Byrappa <somashekar.b@altencalsoftlabs.com>
29 files changed:
vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclDataCache.java
vpnservice/aclservice/api/src/main/java/org/opendaylight/netvirt/aclservice/api/utils/AclInterface.java
vpnservice/aclservice/impl/pom.xml
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/AbstractAclServiceImpl.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/AbstractEgressAclServiceImpl.java [deleted file]
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/AbstractIngressAclServiceImpl.java [deleted file]
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/AclServiceImplFactory.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/StatefulEgressAclServiceImpl.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/StatefulIngressAclServiceImpl.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/listeners/AclElanInterfaceListener.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/listeners/AclEventListener.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/listeners/AclInterfaceListener.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/listeners/AclNodeListener.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/listeners/AclVpnChangeListener.java [deleted file]
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/stats/AclLiveStatisticsHelper.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclConntrackClassifierType.java [new file with mode: 0644]
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclConstants.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclDataUtil.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclNodeDefaultFlowsTxBuilder.java [new file with mode: 0644]
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclServiceOFFlowBuilder.java
vpnservice/aclservice/impl/src/main/java/org/opendaylight/netvirt/aclservice/utils/AclServiceUtils.java
vpnservice/aclservice/impl/src/main/resources/org/opendaylight/blueprint/aclservice.xml
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/stats/AclLiveStatisticsRpcServiceTest.java
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/stats/TestOdlDirectStatisticsService.java
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/tests/AclServiceStatefulTest.java
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/tests/AclServiceTestBase.java
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/tests/FlowEntryObjectsStateful.xtend
vpnservice/aclservice/impl/src/test/java/org/opendaylight/netvirt/aclservice/tests/StateInterfaceBuilderHelper.xtend
vpnservice/aclservice/shell/src/main/java/org/opendaylight/netvirt/aclservice/shell/DisplayAclDataCaches.java