Committed by
Gerrit Code Review
Fix [ONOS-4857] and impement [ONOS-5143]
Change-Id: I7159ff9deaacaf10070e1535f4a80f2f846a5784
Showing
3 changed files
with
25 additions
and
41 deletions
core/net/src/main/java/org/onosproject/net/intent/impl/compiler/LinkCollectionCompiler.java
0 → 100644
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
| ... | @@ -16,7 +16,9 @@ | ... | @@ -16,7 +16,9 @@ |
| 16 | package org.onosproject.net.intent.impl.compiler; | 16 | package org.onosproject.net.intent.impl.compiler; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.HashMultimap; | 18 | import com.google.common.collect.HashMultimap; |
| 19 | +import com.google.common.collect.ImmutableSet; | ||
| 19 | import com.google.common.collect.SetMultimap; | 20 | import com.google.common.collect.SetMultimap; |
| 21 | +import com.google.common.collect.Sets; | ||
| 20 | import org.apache.felix.scr.annotations.Activate; | 22 | import org.apache.felix.scr.annotations.Activate; |
| 21 | import org.apache.felix.scr.annotations.Component; | 23 | import org.apache.felix.scr.annotations.Component; |
| 22 | import org.apache.felix.scr.annotations.Deactivate; | 24 | import org.apache.felix.scr.annotations.Deactivate; |
| ... | @@ -24,14 +26,8 @@ import org.apache.felix.scr.annotations.Reference; | ... | @@ -24,14 +26,8 @@ import org.apache.felix.scr.annotations.Reference; |
| 24 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 26 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
| 25 | import org.onosproject.core.ApplicationId; | 27 | import org.onosproject.core.ApplicationId; |
| 26 | import org.onosproject.core.CoreService; | 28 | import org.onosproject.core.CoreService; |
| 27 | -import org.onosproject.net.ConnectPoint; | ||
| 28 | import org.onosproject.net.DeviceId; | 29 | import org.onosproject.net.DeviceId; |
| 29 | -import org.onosproject.net.Link; | ||
| 30 | import org.onosproject.net.PortNumber; | 30 | import org.onosproject.net.PortNumber; |
| 31 | -import org.onosproject.net.flow.DefaultTrafficSelector; | ||
| 32 | -import org.onosproject.net.flow.DefaultTrafficTreatment; | ||
| 33 | -import org.onosproject.net.flow.TrafficSelector; | ||
| 34 | -import org.onosproject.net.flow.TrafficTreatment; | ||
| 35 | import org.onosproject.net.flowobjective.DefaultForwardingObjective; | 31 | import org.onosproject.net.flowobjective.DefaultForwardingObjective; |
| 36 | import org.onosproject.net.flowobjective.DefaultNextObjective; | 32 | import org.onosproject.net.flowobjective.DefaultNextObjective; |
| 37 | import org.onosproject.net.flowobjective.FlowObjectiveService; | 33 | import org.onosproject.net.flowobjective.FlowObjectiveService; |
| ... | @@ -47,13 +43,14 @@ import java.util.ArrayList; | ... | @@ -47,13 +43,14 @@ import java.util.ArrayList; |
| 47 | import java.util.Collections; | 43 | import java.util.Collections; |
| 48 | import java.util.List; | 44 | import java.util.List; |
| 49 | import java.util.Set; | 45 | import java.util.Set; |
| 50 | -import java.util.stream.Collectors; | ||
| 51 | 46 | ||
| 52 | /** | 47 | /** |
| 53 | * Compiler to produce flow objectives from link collections. | 48 | * Compiler to produce flow objectives from link collections. |
| 54 | */ | 49 | */ |
| 55 | @Component(immediate = true) | 50 | @Component(immediate = true) |
| 56 | -public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompiler<LinkCollectionIntent> { | 51 | +public class LinkCollectionIntentFlowObjectiveCompiler |
| 52 | + extends LinkCollectionCompiler<Objective> | ||
| 53 | + implements IntentCompiler<LinkCollectionIntent> { | ||
| 57 | 54 | ||
| 58 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 55 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 59 | protected IntentConfigurableRegistrator registrator; | 56 | protected IntentConfigurableRegistrator registrator; |
| ... | @@ -79,21 +76,11 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile | ... | @@ -79,21 +76,11 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile |
| 79 | 76 | ||
| 80 | @Override | 77 | @Override |
| 81 | public List<Intent> compile(LinkCollectionIntent intent, List<Intent> installable) { | 78 | public List<Intent> compile(LinkCollectionIntent intent, List<Intent> installable) { |
| 79 | + | ||
| 82 | SetMultimap<DeviceId, PortNumber> inputPorts = HashMultimap.create(); | 80 | SetMultimap<DeviceId, PortNumber> inputPorts = HashMultimap.create(); |
| 83 | SetMultimap<DeviceId, PortNumber> outputPorts = HashMultimap.create(); | 81 | SetMultimap<DeviceId, PortNumber> outputPorts = HashMultimap.create(); |
| 84 | 82 | ||
| 85 | - for (Link link : intent.links()) { | 83 | + computePorts(intent, inputPorts, outputPorts); |
| 86 | - inputPorts.put(link.dst().deviceId(), link.dst().port()); | ||
| 87 | - outputPorts.put(link.src().deviceId(), link.src().port()); | ||
| 88 | - } | ||
| 89 | - | ||
| 90 | - for (ConnectPoint ingressPoint : intent.ingressPoints()) { | ||
| 91 | - inputPorts.put(ingressPoint.deviceId(), ingressPoint.port()); | ||
| 92 | - } | ||
| 93 | - | ||
| 94 | - for (ConnectPoint egressPoint : intent.egressPoints()) { | ||
| 95 | - outputPorts.put(egressPoint.deviceId(), egressPoint.port()); | ||
| 96 | - } | ||
| 97 | 84 | ||
| 98 | List<Objective> objectives = new ArrayList<>(); | 85 | List<Objective> objectives = new ArrayList<>(); |
| 99 | List<DeviceId> devices = new ArrayList<>(); | 86 | List<DeviceId> devices = new ArrayList<>(); |
| ... | @@ -112,41 +99,36 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile | ... | @@ -112,41 +99,36 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile |
| 112 | new FlowObjectiveIntent(appId, devices, objectives, intent.resources())); | 99 | new FlowObjectiveIntent(appId, devices, objectives, intent.resources())); |
| 113 | } | 100 | } |
| 114 | 101 | ||
| 115 | - private List<Objective> createRules(LinkCollectionIntent intent, DeviceId deviceId, | 102 | + @Override |
| 103 | + protected List<Objective> createRules(LinkCollectionIntent intent, DeviceId deviceId, | ||
| 116 | Set<PortNumber> inPorts, Set<PortNumber> outPorts) { | 104 | Set<PortNumber> inPorts, Set<PortNumber> outPorts) { |
| 117 | - Set<PortNumber> ingressPorts = intent.ingressPoints().stream() | ||
| 118 | - .filter(point -> point.deviceId().equals(deviceId)) | ||
| 119 | - .map(ConnectPoint::port) | ||
| 120 | - .collect(Collectors.toSet()); | ||
| 121 | 105 | ||
| 122 | - TrafficTreatment.Builder defaultTreatmentBuilder = DefaultTrafficTreatment.builder(); | 106 | + Set<PortNumber> ingressPorts = Sets.newHashSet(); |
| 123 | - outPorts.forEach(defaultTreatmentBuilder::setOutput); | 107 | + Set<PortNumber> egressPorts = Sets.newHashSet(); |
| 124 | - TrafficTreatment defaultTreatment = defaultTreatmentBuilder.build(); | ||
| 125 | 108 | ||
| 126 | - TrafficTreatment.Builder ingressTreatmentBuilder = DefaultTrafficTreatment.builder(intent.treatment()); | 109 | + computePorts(intent, deviceId, ingressPorts, egressPorts); |
| 127 | - outPorts.forEach(ingressTreatmentBuilder::setOutput); | ||
| 128 | - TrafficTreatment ingressTreatment = ingressTreatmentBuilder.build(); | ||
| 129 | 110 | ||
| 130 | List<Objective> objectives = new ArrayList<>(inPorts.size()); | 111 | List<Objective> objectives = new ArrayList<>(inPorts.size()); |
| 131 | - for (PortNumber inPort: inPorts) { | 112 | + Set<PortNumber> copyIngressPorts = ImmutableSet.copyOf(ingressPorts); |
| 132 | - TrafficSelector selector = DefaultTrafficSelector.builder(intent.selector()).matchInPort(inPort).build(); | 113 | + Set<PortNumber> copyEgressPorts = ImmutableSet.copyOf(egressPorts); |
| 133 | - TrafficTreatment treatment; | 114 | + |
| 134 | - if (ingressPorts.contains(inPort)) { | 115 | + inPorts.forEach(inport -> { |
| 135 | - treatment = ingressTreatment; | 116 | + ForwardingInstructions instructions = this.createForwardingInstructions(intent, |
| 136 | - } else { | 117 | + inport, |
| 137 | - treatment = defaultTreatment; | 118 | + outPorts, |
| 138 | - } | 119 | + copyIngressPorts, |
| 120 | + copyEgressPorts); | ||
| 139 | 121 | ||
| 140 | NextObjective nextObjective = DefaultNextObjective.builder() | 122 | NextObjective nextObjective = DefaultNextObjective.builder() |
| 141 | .withId(flowObjectiveService.allocateNextId()) | 123 | .withId(flowObjectiveService.allocateNextId()) |
| 142 | - .addTreatment(treatment) | 124 | + .addTreatment(instructions.treatment()) |
| 143 | .withType(NextObjective.Type.SIMPLE) | 125 | .withType(NextObjective.Type.SIMPLE) |
| 144 | .fromApp(appId) | 126 | .fromApp(appId) |
| 145 | .makePermanent().add(); | 127 | .makePermanent().add(); |
| 146 | objectives.add(nextObjective); | 128 | objectives.add(nextObjective); |
| 147 | 129 | ||
| 148 | objectives.add(DefaultForwardingObjective.builder() | 130 | objectives.add(DefaultForwardingObjective.builder() |
| 149 | - .withSelector(selector) | 131 | + .withSelector(instructions.selector()) |
| 150 | .nextStep(nextObjective.id()) | 132 | .nextStep(nextObjective.id()) |
| 151 | .withPriority(intent.priority()) | 133 | .withPriority(intent.priority()) |
| 152 | .fromApp(appId) | 134 | .fromApp(appId) |
| ... | @@ -154,7 +136,9 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile | ... | @@ -154,7 +136,9 @@ public class LinkCollectionIntentFlowObjectivesCompiler implements IntentCompile |
| 154 | .withFlag(ForwardingObjective.Flag.SPECIFIC) | 136 | .withFlag(ForwardingObjective.Flag.SPECIFIC) |
| 155 | .add()); | 137 | .add()); |
| 156 | } | 138 | } |
| 139 | + ); | ||
| 157 | 140 | ||
| 158 | return objectives; | 141 | return objectives; |
| 159 | } | 142 | } |
| 143 | + | ||
| 160 | } | 144 | } | ... | ... |
-
Please register or login to post a comment