Intent treatments need to be passed down to the flows
Change-Id: I4569536cb62188f711ce005af1c3501dc31f7e74
Showing
2 changed files
with
31 additions
and
12 deletions
| ... | @@ -44,6 +44,16 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { | ... | @@ -44,6 +44,16 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { |
| 44 | return new Builder(); | 44 | return new Builder(); |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | + /** | ||
| 48 | + * Returns a new traffic treatment builder primed to produce entities | ||
| 49 | + * patterned after the supplied treatment. | ||
| 50 | + * | ||
| 51 | + * @return traffic treatment builder | ||
| 52 | + */ | ||
| 53 | + public static TrafficTreatment.Builder builder(TrafficTreatment treatment) { | ||
| 54 | + return new Builder(treatment); | ||
| 55 | + } | ||
| 56 | + | ||
| 47 | //FIXME: Order of instructions may affect hashcode | 57 | //FIXME: Order of instructions may affect hashcode |
| 48 | @Override | 58 | @Override |
| 49 | public int hashCode() { | 59 | public int hashCode() { |
| ... | @@ -90,6 +100,13 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { | ... | @@ -90,6 +100,13 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { |
| 90 | private Builder() { | 100 | private Builder() { |
| 91 | } | 101 | } |
| 92 | 102 | ||
| 103 | + // Creates a new builder based off an existing treatment | ||
| 104 | + private Builder(TrafficTreatment treatment) { | ||
| 105 | + for (Instruction instruction : treatment.instructions()) { | ||
| 106 | + add(instruction); | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 93 | @Override | 110 | @Override |
| 94 | public Builder add(Instruction instruction) { | 111 | public Builder add(Instruction instruction) { |
| 95 | if (drop) { | 112 | if (drop) { | ... | ... |
| 1 | package org.onlab.onos.net.intent.impl; | 1 | package org.onlab.onos.net.intent.impl; |
| 2 | 2 | ||
| 3 | -import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder; | ||
| 4 | import static org.slf4j.LoggerFactory.getLogger; | 3 | import static org.slf4j.LoggerFactory.getLogger; |
| 5 | 4 | ||
| 6 | import java.util.List; | 5 | import java.util.List; |
| ... | @@ -17,6 +16,7 @@ import org.onlab.onos.net.Link; | ... | @@ -17,6 +16,7 @@ import org.onlab.onos.net.Link; |
| 17 | import org.onlab.onos.net.PortNumber; | 16 | import org.onlab.onos.net.PortNumber; |
| 18 | import org.onlab.onos.net.flow.DefaultFlowRule; | 17 | import org.onlab.onos.net.flow.DefaultFlowRule; |
| 19 | import org.onlab.onos.net.flow.DefaultTrafficSelector; | 18 | import org.onlab.onos.net.flow.DefaultTrafficSelector; |
| 19 | +import org.onlab.onos.net.flow.DefaultTrafficTreatment; | ||
| 20 | import org.onlab.onos.net.flow.FlowRule; | 20 | import org.onlab.onos.net.flow.FlowRule; |
| 21 | import org.onlab.onos.net.flow.FlowRuleBatchEntry; | 21 | import org.onlab.onos.net.flow.FlowRuleBatchEntry; |
| 22 | import org.onlab.onos.net.flow.FlowRuleBatchEntry.FlowRuleOperation; | 22 | import org.onlab.onos.net.flow.FlowRuleBatchEntry.FlowRuleOperation; |
| ... | @@ -61,18 +61,16 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec | ... | @@ -61,18 +61,16 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec |
| 61 | 61 | ||
| 62 | @Override | 62 | @Override |
| 63 | public List<FlowRuleBatchOperation> install(LinkCollectionIntent intent) { | 63 | public List<FlowRuleBatchOperation> install(LinkCollectionIntent intent) { |
| 64 | - TrafficSelector.Builder builder = | ||
| 65 | - DefaultTrafficSelector.builder(intent.selector()); | ||
| 66 | List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); | 64 | List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); |
| 67 | for (Link link : intent.links()) { | 65 | for (Link link : intent.links()) { |
| 68 | rules.add(createBatchEntry(FlowRuleOperation.ADD, | 66 | rules.add(createBatchEntry(FlowRuleOperation.ADD, |
| 69 | - builder.build(), | 67 | + intent, |
| 70 | link.src().deviceId(), | 68 | link.src().deviceId(), |
| 71 | link.src().port())); | 69 | link.src().port())); |
| 72 | } | 70 | } |
| 73 | 71 | ||
| 74 | rules.add(createBatchEntry(FlowRuleOperation.ADD, | 72 | rules.add(createBatchEntry(FlowRuleOperation.ADD, |
| 75 | - builder.build(), | 73 | + intent, |
| 76 | intent.egressPoint().deviceId(), | 74 | intent.egressPoint().deviceId(), |
| 77 | intent.egressPoint().port())); | 75 | intent.egressPoint().port())); |
| 78 | 76 | ||
| ... | @@ -81,19 +79,17 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec | ... | @@ -81,19 +79,17 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec |
| 81 | 79 | ||
| 82 | @Override | 80 | @Override |
| 83 | public List<FlowRuleBatchOperation> uninstall(LinkCollectionIntent intent) { | 81 | public List<FlowRuleBatchOperation> uninstall(LinkCollectionIntent intent) { |
| 84 | - TrafficSelector.Builder builder = | ||
| 85 | - DefaultTrafficSelector.builder(intent.selector()); | ||
| 86 | List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); | 82 | List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); |
| 87 | 83 | ||
| 88 | for (Link link : intent.links()) { | 84 | for (Link link : intent.links()) { |
| 89 | rules.add(createBatchEntry(FlowRuleOperation.REMOVE, | 85 | rules.add(createBatchEntry(FlowRuleOperation.REMOVE, |
| 90 | - builder.build(), | 86 | + intent, |
| 91 | link.src().deviceId(), | 87 | link.src().deviceId(), |
| 92 | link.src().port())); | 88 | link.src().port())); |
| 93 | } | 89 | } |
| 94 | 90 | ||
| 95 | rules.add(createBatchEntry(FlowRuleOperation.REMOVE, | 91 | rules.add(createBatchEntry(FlowRuleOperation.REMOVE, |
| 96 | - builder.build(), | 92 | + intent, |
| 97 | intent.egressPoint().deviceId(), | 93 | intent.egressPoint().deviceId(), |
| 98 | intent.egressPoint().port())); | 94 | intent.egressPoint().port())); |
| 99 | 95 | ||
| ... | @@ -104,17 +100,23 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec | ... | @@ -104,17 +100,23 @@ public class LinkCollectionIntentInstaller implements IntentInstaller<LinkCollec |
| 104 | * Creates a FlowRuleBatchEntry based on the provided parameters. | 100 | * Creates a FlowRuleBatchEntry based on the provided parameters. |
| 105 | * | 101 | * |
| 106 | * @param operation the FlowRuleOperation to use | 102 | * @param operation the FlowRuleOperation to use |
| 107 | - * @param selector the traffic selector | 103 | + * @param intent the link collection intent |
| 108 | * @param deviceId the device ID for the flow rule | 104 | * @param deviceId the device ID for the flow rule |
| 109 | * @param outPort the output port of the flow rule | 105 | * @param outPort the output port of the flow rule |
| 110 | * @return the new flow rule batch entry | 106 | * @return the new flow rule batch entry |
| 111 | */ | 107 | */ |
| 112 | private FlowRuleBatchEntry createBatchEntry(FlowRuleOperation operation, | 108 | private FlowRuleBatchEntry createBatchEntry(FlowRuleOperation operation, |
| 113 | - TrafficSelector selector, | 109 | + LinkCollectionIntent intent, |
| 114 | DeviceId deviceId, | 110 | DeviceId deviceId, |
| 115 | PortNumber outPort) { | 111 | PortNumber outPort) { |
| 116 | 112 | ||
| 117 | - TrafficTreatment treatment = builder().setOutput(outPort).build(); | 113 | + TrafficTreatment.Builder treatmentBuilder = |
| 114 | + DefaultTrafficTreatment.builder(intent.treatment()); | ||
| 115 | + | ||
| 116 | + TrafficTreatment treatment = treatmentBuilder.setOutput(outPort).build(); | ||
| 117 | + | ||
| 118 | + TrafficSelector selector = DefaultTrafficSelector.builder(intent.selector()) | ||
| 119 | + .build(); | ||
| 118 | 120 | ||
| 119 | FlowRule rule = new DefaultFlowRule(deviceId, | 121 | FlowRule rule = new DefaultFlowRule(deviceId, |
| 120 | selector, treatment, 123, appId, 0, true); | 122 | selector, treatment, 123, appId, 0, true); | ... | ... |
-
Please register or login to post a comment