Committed by
Ray Milkey
LinkCollectionIntentInstaller - reuse same code for install and uninstall
+ cosmetic changes Change-Id: Ie8dbeab8b3b3fafcebc6e48306660533dd0af4e3
Showing
3 changed files
with
38 additions
and
58 deletions
| ... | @@ -54,7 +54,7 @@ public final class LinkCollectionIntent extends ConnectivityIntent { | ... | @@ -54,7 +54,7 @@ public final class LinkCollectionIntent extends ConnectivityIntent { |
| 54 | TrafficTreatment treatment, | 54 | TrafficTreatment treatment, |
| 55 | Set<Link> links, | 55 | Set<Link> links, |
| 56 | ConnectPoint egressPoint) { | 56 | ConnectPoint egressPoint) { |
| 57 | - this(appId, selector , treatment, links, egressPoint, Collections.emptyList()); | 57 | + this(appId, selector, treatment, links, egressPoint, Collections.emptyList()); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | /** | 60 | /** | ... | ... |
| ... | @@ -15,13 +15,8 @@ | ... | @@ -15,13 +15,8 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.net.intent.impl; | 16 | package org.onosproject.net.intent.impl; |
| 17 | 17 | ||
| 18 | -import java.util.HashMap; | 18 | +import com.google.common.collect.HashMultimap; |
| 19 | -import java.util.HashSet; | 19 | +import com.google.common.collect.SetMultimap; |
| 20 | -import java.util.List; | ||
| 21 | -import java.util.Map; | ||
| 22 | -import java.util.Map.Entry; | ||
| 23 | -import java.util.Set; | ||
| 24 | - | ||
| 25 | import org.apache.felix.scr.annotations.Activate; | 20 | import org.apache.felix.scr.annotations.Activate; |
| 26 | import org.apache.felix.scr.annotations.Component; | 21 | import org.apache.felix.scr.annotations.Component; |
| 27 | import org.apache.felix.scr.annotations.Deactivate; | 22 | import org.apache.felix.scr.annotations.Deactivate; |
| ... | @@ -48,7 +43,10 @@ import org.onosproject.net.intent.IntentInstaller; | ... | @@ -48,7 +43,10 @@ import org.onosproject.net.intent.IntentInstaller; |
| 48 | import org.onosproject.net.intent.LinkCollectionIntent; | 43 | import org.onosproject.net.intent.LinkCollectionIntent; |
| 49 | import org.onosproject.net.intent.PathIntent; | 44 | import org.onosproject.net.intent.PathIntent; |
| 50 | 45 | ||
| 51 | -import com.google.common.collect.Lists; | 46 | +import java.util.Collections; |
| 47 | +import java.util.List; | ||
| 48 | +import java.util.Set; | ||
| 49 | +import java.util.stream.Collectors; | ||
| 52 | 50 | ||
| 53 | /** | 51 | /** |
| 54 | * Installer for {@link org.onosproject.net.intent.LinkCollectionIntent} path | 52 | * Installer for {@link org.onosproject.net.intent.LinkCollectionIntent} path |
| ... | @@ -79,60 +77,37 @@ public class LinkCollectionIntentInstaller | ... | @@ -79,60 +77,37 @@ public class LinkCollectionIntentInstaller |
| 79 | 77 | ||
| 80 | @Override | 78 | @Override |
| 81 | public List<FlowRuleBatchOperation> install(LinkCollectionIntent intent) { | 79 | public List<FlowRuleBatchOperation> install(LinkCollectionIntent intent) { |
| 82 | - Map<DeviceId, Set<PortNumber>> outputMap = new HashMap<DeviceId, Set<PortNumber>>(); | 80 | + return generateBatchOperations(intent, FlowRuleOperation.ADD); |
| 83 | - List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); | ||
| 84 | - | ||
| 85 | - for (Link link : intent.links()) { | ||
| 86 | - if (outputMap.get(link.src().deviceId()) == null) { | ||
| 87 | - outputMap.put(link.src().deviceId(), new HashSet<PortNumber>()); | ||
| 88 | - } | ||
| 89 | - outputMap.get(link.src().deviceId()).add(link.src().port()); | ||
| 90 | - | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - for (ConnectPoint egressPoint : intent.egressPoints()) { | ||
| 94 | - if (outputMap.get(egressPoint.deviceId()) == null) { | ||
| 95 | - outputMap | ||
| 96 | - .put(egressPoint.deviceId(), new HashSet<PortNumber>()); | ||
| 97 | } | 81 | } |
| 98 | - outputMap.get(egressPoint.deviceId()).add(egressPoint.port()); | ||
| 99 | 82 | ||
| 83 | + @Override | ||
| 84 | + public List<FlowRuleBatchOperation> uninstall(LinkCollectionIntent intent) { | ||
| 85 | + return generateBatchOperations(intent, FlowRuleOperation.REMOVE); | ||
| 100 | } | 86 | } |
| 101 | 87 | ||
| 102 | - for (Entry<DeviceId, Set<PortNumber>> entry : outputMap.entrySet()) { | 88 | + private List<FlowRuleBatchOperation> generateBatchOperations( |
| 103 | - rules.add(createBatchEntry(FlowRuleOperation.ADD, intent, | 89 | + LinkCollectionIntent intent, FlowRuleOperation operation) { |
| 104 | - entry.getKey(), entry.getValue())); | ||
| 105 | - } | ||
| 106 | 90 | ||
| 107 | - return Lists.newArrayList(new FlowRuleBatchOperation(rules)); | 91 | + SetMultimap<DeviceId, PortNumber> outputPorts = HashMultimap.create(); |
| 108 | - } | ||
| 109 | - | ||
| 110 | - @Override | ||
| 111 | - public List<FlowRuleBatchOperation> uninstall(LinkCollectionIntent intent) { | ||
| 112 | - Map<DeviceId, Set<PortNumber>> outputMap = new HashMap<DeviceId, Set<PortNumber>>(); | ||
| 113 | - List<FlowRuleBatchEntry> rules = Lists.newLinkedList(); | ||
| 114 | 92 | ||
| 115 | for (Link link : intent.links()) { | 93 | for (Link link : intent.links()) { |
| 116 | - if (outputMap.get(link.src().deviceId()) == null) { | 94 | + outputPorts.put(link.src().deviceId(), link.src().port()); |
| 117 | - outputMap.put(link.src().deviceId(), new HashSet<PortNumber>()); | ||
| 118 | - } | ||
| 119 | - outputMap.get(link.src().deviceId()).add(link.src().port()); | ||
| 120 | } | 95 | } |
| 121 | 96 | ||
| 122 | for (ConnectPoint egressPoint : intent.egressPoints()) { | 97 | for (ConnectPoint egressPoint : intent.egressPoints()) { |
| 123 | - if (outputMap.get(egressPoint.deviceId()) == null) { | 98 | + outputPorts.put(egressPoint.deviceId(), egressPoint.port()); |
| 124 | - outputMap | ||
| 125 | - .put(egressPoint.deviceId(), new HashSet<PortNumber>()); | ||
| 126 | - } | ||
| 127 | - outputMap.get(egressPoint.deviceId()).add(egressPoint.port()); | ||
| 128 | } | 99 | } |
| 129 | 100 | ||
| 130 | - for (Entry<DeviceId, Set<PortNumber>> entry : outputMap.entrySet()) { | 101 | + FlowRuleBatchOperation batchOperation = |
| 131 | - rules.add(createBatchEntry(FlowRuleOperation.REMOVE, intent, | 102 | + new FlowRuleBatchOperation(outputPorts |
| 132 | - entry.getKey(), entry.getValue())); | 103 | + .keys() |
| 133 | - } | 104 | + .stream() |
| 105 | + .map(deviceId -> createBatchEntry(operation, | ||
| 106 | + intent, deviceId, | ||
| 107 | + outputPorts.get(deviceId))) | ||
| 108 | + .collect(Collectors.toList())); | ||
| 134 | 109 | ||
| 135 | - return Lists.newArrayList(new FlowRuleBatchOperation(rules)); | 110 | + return Collections.singletonList(batchOperation); |
| 136 | } | 111 | } |
| 137 | 112 | ||
| 138 | @Override | 113 | @Override |
| ... | @@ -148,7 +123,7 @@ public class LinkCollectionIntentInstaller | ... | @@ -148,7 +123,7 @@ public class LinkCollectionIntentInstaller |
| 148 | * @param operation the FlowRuleOperation to use | 123 | * @param operation the FlowRuleOperation to use |
| 149 | * @param intent the link collection intent | 124 | * @param intent the link collection intent |
| 150 | * @param deviceId the device ID for the flow rule | 125 | * @param deviceId the device ID for the flow rule |
| 151 | - * @param outPort the output port of the flow rule | 126 | + * @param outPorts the set of output ports for the flow rule |
| 152 | * @return the new flow rule batch entry | 127 | * @return the new flow rule batch entry |
| 153 | */ | 128 | */ |
| 154 | private FlowRuleBatchEntry createBatchEntry(FlowRuleOperation operation, | 129 | private FlowRuleBatchEntry createBatchEntry(FlowRuleOperation operation, |
| ... | @@ -168,8 +143,9 @@ public class LinkCollectionIntentInstaller | ... | @@ -168,8 +143,9 @@ public class LinkCollectionIntentInstaller |
| 168 | .builder(intent.selector()).build(); | 143 | .builder(intent.selector()).build(); |
| 169 | 144 | ||
| 170 | FlowRule rule = new DefaultFlowRule(deviceId, | 145 | FlowRule rule = new DefaultFlowRule(deviceId, |
| 171 | - selector, treatment, 123, | 146 | + selector, treatment, 123, appId, |
| 172 | - appId, new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), 0, true); | 147 | + new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), |
| 148 | + 0, true); | ||
| 173 | 149 | ||
| 174 | return new FlowRuleBatchEntry(operation, rule); | 150 | return new FlowRuleBatchEntry(operation, rule); |
| 175 | } | 151 | } | ... | ... |
| ... | @@ -94,14 +94,16 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { | ... | @@ -94,14 +94,16 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { |
| 94 | while (links.hasNext()) { | 94 | while (links.hasNext()) { |
| 95 | builder.matchInport(prev.port()); | 95 | builder.matchInport(prev.port()); |
| 96 | Link link = links.next(); | 96 | Link link = links.next(); |
| 97 | - TrafficTreatment treatment = | ||
| 98 | // if this is the last flow rule, apply the intent's treatments | 97 | // if this is the last flow rule, apply the intent's treatments |
| 98 | + TrafficTreatment treatment = | ||
| 99 | (links.hasNext() ? builder() : builder(intent.treatment())) | 99 | (links.hasNext() ? builder() : builder(intent.treatment())) |
| 100 | .setOutput(link.src().port()).build(); | 100 | .setOutput(link.src().port()).build(); |
| 101 | 101 | ||
| 102 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), | 102 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), |
| 103 | builder.build(), treatment, 123, //FIXME 123 | 103 | builder.build(), treatment, 123, //FIXME 123 |
| 104 | - appId, new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), 0, true); | 104 | + appId, |
| 105 | + new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), | ||
| 106 | + 0, true); | ||
| 105 | rules.add(new FlowRuleBatchEntry(FlowRuleOperation.ADD, rule, | 107 | rules.add(new FlowRuleBatchEntry(FlowRuleOperation.ADD, rule, |
| 106 | intent.id().fingerprint())); | 108 | intent.id().fingerprint())); |
| 107 | prev = link.dst(); | 109 | prev = link.dst(); |
| ... | @@ -124,12 +126,14 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { | ... | @@ -124,12 +126,14 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { |
| 124 | while (links.hasNext()) { | 126 | while (links.hasNext()) { |
| 125 | builder.matchInport(prev.port()); | 127 | builder.matchInport(prev.port()); |
| 126 | Link link = links.next(); | 128 | Link link = links.next(); |
| 127 | - TrafficTreatment treatment = // if this is the last flow rule, apply the intent's treatments | 129 | + // if this is the last flow rule, apply the intent's treatments |
| 130 | + TrafficTreatment treatment = | ||
| 128 | (links.hasNext() ? builder() : builder(intent.treatment())) | 131 | (links.hasNext() ? builder() : builder(intent.treatment())) |
| 129 | .setOutput(link.src().port()).build(); | 132 | .setOutput(link.src().port()).build(); |
| 130 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), | 133 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), |
| 131 | - builder.build(), treatment, | 134 | + builder.build(), treatment, 123, appId, |
| 132 | - 123, appId, new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), 0, true); | 135 | + new DefaultGroupId((short) (intent.id().fingerprint() & 0xffff)), |
| 136 | + 0, true); | ||
| 133 | rules.add(new FlowRuleBatchEntry(FlowRuleOperation.REMOVE, rule, | 137 | rules.add(new FlowRuleBatchEntry(FlowRuleOperation.REMOVE, rule, |
| 134 | intent.id().fingerprint())); | 138 | intent.id().fingerprint())); |
| 135 | prev = link.dst(); | 139 | prev = link.dst(); | ... | ... |
-
Please register or login to post a comment