summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java')
-rw-r--r--framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java271
1 files changed, 0 insertions, 271 deletions
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java b/framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java
deleted file mode 100644
index 152622b2..00000000
--- a/framework/src/onos/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionTree.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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 org.onosproject.net.flowobjective.impl.composition;
-
-import org.onosproject.net.flowobjective.FilteringObjective;
-import org.onosproject.net.flowobjective.ForwardingObjective;
-import org.onosproject.net.flowobjective.NextObjective;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Provides a policy tree to store all flow tables for each device.
- *
- * Note: This class uses in-memory structures and is not yet distributed.
- */
-public class FlowObjectiveCompositionTree {
-
- public FlowObjectiveCompositionManager.PolicyOperator operator;
- public FlowObjectiveCompositionTree leftChild;
- public FlowObjectiveCompositionTree rightChild;
- public short applicationId;
- protected FilterTable filterTable;
- protected ForwardTable forwardTable;
- protected NextTable nextTable;
-
- protected int priorityMultiplier;
- protected int priorityAddend;
-
- public FlowObjectiveCompositionTree(short applicationId) {
- this.operator = FlowObjectiveCompositionManager.PolicyOperator.Application;
- this.leftChild = null;
- this.rightChild = null;
- this.applicationId = applicationId;
- this.filterTable = new FilterTable();
- this.forwardTable = new ForwardTable();
- this.nextTable = new NextTable();
- this.priorityMultiplier = 10;
- this.priorityAddend = 10;
- }
-
- public FlowObjectiveCompositionTree(Character ch) {
- switch (ch) {
- case '+':
- this.operator = FlowObjectiveCompositionManager.PolicyOperator.Parallel;
- break;
- case '>':
- this.operator = FlowObjectiveCompositionManager.PolicyOperator.Sequential;
- break;
- case '/':
- this.operator = FlowObjectiveCompositionManager.PolicyOperator.Override;
- break;
- default:
- this.operator = FlowObjectiveCompositionManager.PolicyOperator.Application;
- break;
- }
- this.leftChild = null;
- this.rightChild = null;
- this.applicationId = (short) -1;
- this.filterTable = new FilterTable();
- this.forwardTable = new ForwardTable();
- this.nextTable = new NextTable();
- this.priorityMultiplier = 10;
- this.priorityAddend = 10;
- }
-
- protected List<FilteringObjective> updateFilter(FilteringObjective filteringObjective) {
- switch (this.operator) {
- case Parallel:
- return updateFilterParallel(filteringObjective);
- case Sequential:
- return updateFilterSequential(filteringObjective);
- case Override:
- return updateFilterOverride(filteringObjective);
- case Application:
- if (filteringObjective.appId().id() == this.applicationId) {
- return this.filterTable.updateFilter(filteringObjective);
- } else {
- return new ArrayList<>();
- }
- default:
- return new ArrayList<>();
- }
- }
-
- // Parallel composition: the filter set is the union of the children
- protected List<FilteringObjective> updateFilterParallel(FilteringObjective filteringObjective) {
- List<FilteringObjective> leftUpdates = this.leftChild.updateFilter(filteringObjective);
- List<FilteringObjective> rightUpdates = this.rightChild.updateFilter(filteringObjective);
-
- List<FilteringObjective> updates = new ArrayList<>();
- updates.addAll(leftUpdates);
- updates.addAll(rightUpdates);
-
- return this.filterTable.updateFilter(updates);
- }
-
- // Sequential composition: the filter set is the filter set of the left child
- protected List<FilteringObjective> updateFilterSequential(FilteringObjective filteringObjective) {
- List<FilteringObjective> leftUpdates = this.leftChild.updateFilter(filteringObjective);
- List<FilteringObjective> rightUpdates = this.rightChild.updateFilter(filteringObjective);
- return this.filterTable.updateFilter(leftUpdates);
- }
-
- // Override composition: the filter set is the filter set of the left child
- protected List<FilteringObjective> updateFilterOverride(FilteringObjective filteringObjective) {
- List<FilteringObjective> leftUpdates = this.leftChild.updateFilter(filteringObjective);
- List<FilteringObjective> rightUpdates = this.rightChild.updateFilter(filteringObjective);
- return this.filterTable.updateFilter(leftUpdates);
- }
-
- public List<ForwardingObjective> updateForward(ForwardingObjective forwardingObjective) {
- return this.updateForwardNode(forwardingObjective).toForwardingObjectiveList();
- }
-
- public ForwardUpdateTable updateForwardNode(ForwardingObjective forwardingObjective) {
- switch (this.operator) {
- case Parallel:
- case Sequential:
- case Override:
- return updateForwardComposition(forwardingObjective);
- case Application:
- if (forwardingObjective.appId().id() == this.applicationId) {
- return this.forwardTable.updateForward(forwardingObjective);
- } else {
- return (new ForwardUpdateTable());
- }
- default:
- return (new ForwardUpdateTable());
- }
- }
-
- protected ForwardUpdateTable updateForwardComposition(ForwardingObjective forwardingObjective) {
- ForwardUpdateTable leftUpdates = this.leftChild.updateForwardNode(forwardingObjective);
- ForwardUpdateTable rightUpdates = this.rightChild.updateForwardNode(forwardingObjective);
-
- List<ForwardingObjective> addUpdates = new ArrayList<>();
- List<ForwardingObjective> removeUpdates = new ArrayList<>();
- // Handle ADD
- if (this.operator == FlowObjectiveCompositionManager.PolicyOperator.Parallel
- || this.operator == FlowObjectiveCompositionManager.PolicyOperator.Sequential) {
- for (ForwardingObjective fo1 : leftUpdates.addObjectives) {
- for (ForwardingObjective fo2 : this.rightChild.forwardTable.getForwardingObjectives()) {
- ForwardingObjective composedFo = null;
- if (this.operator == FlowObjectiveCompositionManager.PolicyOperator.Parallel) {
- composedFo = FlowObjectiveCompositionUtil.composeParallel(fo1, fo2);
- } else {
- composedFo = FlowObjectiveCompositionUtil.composeSequential(fo1, fo2, this.priorityMultiplier);
- }
- if (composedFo != null) {
- addUpdates.add(composedFo);
- this.leftChild.forwardTable.addGeneratedParentForwardingObjective(fo1, composedFo);
- this.rightChild.forwardTable.addGeneratedParentForwardingObjective(fo2, composedFo);
- }
- }
- }
- Collection<ForwardingObjective> leftTableWithoutAdd = FlowObjectiveCompositionUtil
- .minusForwardingObjectives(this.leftChild.forwardTable.getForwardingObjectives(),
- leftUpdates.addObjectives);
- for (ForwardingObjective fo1 : leftTableWithoutAdd) {
- for (ForwardingObjective fo2 : rightUpdates.addObjectives) {
- ForwardingObjective composedFo = null;
- if (this.operator == FlowObjectiveCompositionManager.PolicyOperator.Parallel) {
- composedFo = FlowObjectiveCompositionUtil.composeParallel(fo1, fo2);
- } else {
- composedFo = FlowObjectiveCompositionUtil.composeSequential(fo1, fo2, this.priorityMultiplier);
- }
- if (composedFo != null) {
- addUpdates.add(composedFo);
- this.leftChild.forwardTable.addGeneratedParentForwardingObjective(fo1, composedFo);
- this.rightChild.forwardTable.addGeneratedParentForwardingObjective(fo2, composedFo);
- }
- }
- }
- } else {
- for (ForwardingObjective fo : leftUpdates.addObjectives) {
- ForwardingObjective composedFo = FlowObjectiveCompositionUtil.composeOverride(fo, this.priorityAddend);
- addUpdates.add(composedFo);
- this.leftChild.forwardTable.addGeneratedParentForwardingObjective(fo, composedFo);
- }
- for (ForwardingObjective fo : rightUpdates.addObjectives) {
- ForwardingObjective composedFo = FlowObjectiveCompositionUtil.composeOverride(fo, 0);
- addUpdates.add(composedFo);
- this.rightChild.forwardTable.addGeneratedParentForwardingObjective(fo, composedFo);
- }
- }
-
- // Handle REMOVE
- for (ForwardingObjective fo : leftUpdates.removeObjectives) {
- List<ForwardingObjective> fos = this.leftChild.forwardTable
- .getGeneratedParentForwardingObjectiveForRemove(fo);
- removeUpdates.addAll(fos);
- }
- this.leftChild.forwardTable.deleteGeneratedParentForwardingObjective(leftUpdates.removeObjectives);
- for (ForwardingObjective fo : rightUpdates.removeObjectives) {
- List<ForwardingObjective> fos = this.rightChild.forwardTable
- .getGeneratedParentForwardingObjectiveForRemove(fo);
- removeUpdates.addAll(fos);
- }
- this.rightChild.forwardTable.deleteGeneratedParentForwardingObjective(rightUpdates.removeObjectives);
-
- ForwardUpdateTable updates = new ForwardUpdateTable();
- updates.addUpdateTable(this.forwardTable.updateForward(addUpdates));
- updates.addUpdateTable(this.forwardTable.updateForward(removeUpdates));
- return updates;
- }
-
- public List<NextObjective> updateNext(NextObjective nextObjective) {
- switch (this.operator) {
- case Parallel:
- case Sequential:
- case Override:
- return updateNextComposition(nextObjective);
- case Application:
- if (nextObjective.appId().id() == this.applicationId) {
- return this.nextTable.updateNext(nextObjective);
- } else {
- return new ArrayList<>();
- }
- default:
- return new ArrayList<>();
- }
- }
-
- // Next: the union of the children
- protected List<NextObjective> updateNextComposition(NextObjective nextObjective) {
- List<NextObjective> leftUpdates = this.leftChild.updateNext(nextObjective);
- List<NextObjective> rightUpdates = this.rightChild.updateNext(nextObjective);
-
- List<NextObjective> updates = new ArrayList<>();
- updates.addAll(leftUpdates);
- updates.addAll(rightUpdates);
-
- return this.nextTable.updateNext(updates);
- }
-
- @Override
- public String toString() {
- String str = null;
- switch (this.operator) {
- case Parallel:
- str = "(" + this.leftChild + "+" + this.rightChild + ")";
- break;
- case Sequential:
- str = "(" + this.leftChild + ">" + this.rightChild + ")";
- break;
- case Override:
- str = "(" + this.leftChild + "/" + this.rightChild + ")";
- break;
- default:
- str = " " + applicationId + " ";
- break;
- }
- return str;
- }
-
-}