\r
package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow;\r
\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Objects;\r
-\r
+import com.google.common.collect.ImmutableList;\r
+import com.google.common.collect.ImmutableMap;\r
import org.junit.Before;\r
import org.junit.Test;\r
import org.opendaylight.groupbasedpolicy.renderer.ofoverlay.PolicyManager.FlowMap;\r
import org.opendaylight.groupbasedpolicy.resolver.PolicyInfo;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.contract.subject.RuleBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg2;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg3;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg7;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.GeneralAugMatchNodesNodeTableFlow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.list.grouping.ExtensionList;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg0Key;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg2Key;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.overlay.rev150105.TunnelTypeVxlan;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
-import com.google.common.collect.ImmutableList;\r
-import com.google.common.collect.ImmutableMap;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Objects;\r
\r
-import static org.junit.Assert.*;\r
-import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.*;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotEquals;\r
+import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.applyActionIns;\r
+import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.instructions;\r
+import static org.opendaylight.groupbasedpolicy.renderer.ofoverlay.flow.FlowUtils.nxOutputRegAction;\r
\r
public class PolicyEnforcerTest extends FlowTableTest {\r
protected static final Logger LOG =\r
HashMap<String, Flow> flowMap = new HashMap<>();\r
for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER()).getFlow()) {\r
flowMap.put(f.getId().getValue(), f);\r
- if (f.getId().getValue().indexOf("intraallow") == 0)\r
+ if (isAllowSameEpg(f)) {\r
count += 1;\r
+ }\r
}\r
assertEquals(1, count);\r
assertEquals(3, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER()).getFlow().size());\r
HashMap<String, Flow> flowMap = new HashMap<>();\r
for (Flow f : fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER()).getFlow()) {\r
flowMap.put(f.getId().getValue(), f);\r
- if (f.getId().getValue().indexOf("intraallow") == 0) {\r
+ if (isAllowSameEpg(f)) {\r
count += 1;\r
} else if (f.getMatch() != null &&\r
Objects.equals(tunnelId, f.getMatch().getInPort())) {\r
fm = dosync(flowMap);\r
assertEquals(numberOfFlows, fm.getTableForNode(nodeId, ctx.getPolicyManager().getTABLEID_POLICY_ENFORCER()).getFlow().size());\r
}\r
+\r
+ private boolean isAllowSameEpg(Flow flow) {\r
+ // flow has to have exactly 2 registers set, namely NxmNxReg0 and NxmNxReg2\r
+ // (these register values don't have to be equal)\r
+ boolean res = false;\r
+ if (flow != null && flow.getMatch() != null) {\r
+ GeneralAugMatchNodesNodeTableFlow genAug =\r
+ flow.getMatch().getAugmentation(GeneralAugMatchNodesNodeTableFlow.class);\r
+ if (genAug != null) {\r
+ List<ExtensionList> extensions = genAug.getExtensionList();\r
+ if (extensions != null && extensions.size() == 2) {\r
+ Long reg0 = null;\r
+ Long reg2 = null;\r
+ for (ExtensionList extensionList : extensions) {\r
+ Class<? extends ExtensionKey> extensionKey = extensionList.getExtensionKey();\r
+ Extension extension = extensionList.getExtension();\r
+ if (extensionKey != null && extension != null) {\r
+ NxAugMatchNodesNodeTableFlow nxAugMatch =\r
+ extension.getAugmentation(NxAugMatchNodesNodeTableFlow.class);\r
+ if (nxAugMatch != null && nxAugMatch.getNxmNxReg() != null) {\r
+ if (extensionKey.equals(NxmNxReg0Key.class)) {\r
+ reg0 = nxAugMatch.getNxmNxReg().getValue();\r
+ } else if (extensionKey.equals(NxmNxReg2Key.class)) {\r
+ reg2 = nxAugMatch.getNxmNxReg().getValue();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (reg0 != null && reg2 != null) {\r
+ res = true;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return res;\r
+ }\r
}\r