Showing
2 changed files
with
20 additions
and
51 deletions
| ... | @@ -50,6 +50,7 @@ import org.onlab.onos.net.provider.AbstractProviderService; | ... | @@ -50,6 +50,7 @@ import org.onlab.onos.net.provider.AbstractProviderService; |
| 50 | import org.slf4j.Logger; | 50 | import org.slf4j.Logger; |
| 51 | 51 | ||
| 52 | import com.google.common.collect.ArrayListMultimap; | 52 | import com.google.common.collect.ArrayListMultimap; |
| 53 | +import com.google.common.collect.Iterables; | ||
| 53 | import com.google.common.collect.Lists; | 54 | import com.google.common.collect.Lists; |
| 54 | import com.google.common.collect.Maps; | 55 | import com.google.common.collect.Maps; |
| 55 | import com.google.common.collect.Multimap; | 56 | import com.google.common.collect.Multimap; |
| ... | @@ -116,71 +117,38 @@ public class FlowRuleManager | ... | @@ -116,71 +117,38 @@ public class FlowRuleManager |
| 116 | 117 | ||
| 117 | @Override | 118 | @Override |
| 118 | public void applyFlowRules(FlowRule... flowRules) { | 119 | public void applyFlowRules(FlowRule... flowRules) { |
| 120 | + Set<FlowRuleBatchEntry> toAddBatchEntries = Sets.newHashSet(); | ||
| 119 | for (int i = 0; i < flowRules.length; i++) { | 121 | for (int i = 0; i < flowRules.length; i++) { |
| 120 | - FlowRule f = flowRules[i]; | 122 | + toAddBatchEntries.add(new FlowRuleBatchEntry(FlowRuleOperation.ADD, flowRules[i])); |
| 121 | - store.storeFlowRule(f); | ||
| 122 | - } | ||
| 123 | - } | ||
| 124 | - | ||
| 125 | - private void applyFlowRulesToProviders(FlowRule... flowRules) { | ||
| 126 | - DeviceId did = null; | ||
| 127 | - FlowRuleProvider frp = null; | ||
| 128 | - for (FlowRule f : flowRules) { | ||
| 129 | - if (!f.deviceId().equals(did)) { | ||
| 130 | - did = f.deviceId(); | ||
| 131 | - final Device device = deviceService.getDevice(did); | ||
| 132 | - frp = getProvider(device.providerId()); | ||
| 133 | - } | ||
| 134 | - if (frp != null) { | ||
| 135 | - frp.applyFlowRule(f); | ||
| 136 | - } | ||
| 137 | } | 123 | } |
| 124 | + applyBatch(new FlowRuleBatchOperation(toAddBatchEntries)); | ||
| 138 | } | 125 | } |
| 139 | 126 | ||
| 140 | @Override | 127 | @Override |
| 141 | public void removeFlowRules(FlowRule... flowRules) { | 128 | public void removeFlowRules(FlowRule... flowRules) { |
| 142 | - FlowRule f; | 129 | + Set<FlowRuleBatchEntry> toRemoveBatchEntries = Sets.newHashSet(); |
| 143 | for (int i = 0; i < flowRules.length; i++) { | 130 | for (int i = 0; i < flowRules.length; i++) { |
| 144 | - f = flowRules[i]; | 131 | + toRemoveBatchEntries.add(new FlowRuleBatchEntry(FlowRuleOperation.REMOVE, flowRules[i])); |
| 145 | - store.deleteFlowRule(f); | ||
| 146 | - } | ||
| 147 | - } | ||
| 148 | - | ||
| 149 | - private void removeFlowRulesFromProviders(FlowRule... flowRules) { | ||
| 150 | - DeviceId did = null; | ||
| 151 | - FlowRuleProvider frp = null; | ||
| 152 | - for (FlowRule f : flowRules) { | ||
| 153 | - if (!f.deviceId().equals(did)) { | ||
| 154 | - did = f.deviceId(); | ||
| 155 | - final Device device = deviceService.getDevice(did); | ||
| 156 | - frp = getProvider(device.providerId()); | ||
| 157 | - } | ||
| 158 | - if (frp != null) { | ||
| 159 | - frp.removeFlowRule(f); | ||
| 160 | - } | ||
| 161 | } | 132 | } |
| 133 | + applyBatch(new FlowRuleBatchOperation(toRemoveBatchEntries)); | ||
| 162 | } | 134 | } |
| 163 | 135 | ||
| 164 | @Override | 136 | @Override |
| 165 | public void removeFlowRulesById(ApplicationId id) { | 137 | public void removeFlowRulesById(ApplicationId id) { |
| 166 | - Iterable<FlowRule> rules = getFlowRulesById(id); | 138 | + removeFlowRules(Iterables.toArray(getFlowRulesById(id), FlowRule.class)); |
| 167 | - FlowRuleProvider frp; | ||
| 168 | - Device device; | ||
| 169 | - | ||
| 170 | - for (FlowRule f : rules) { | ||
| 171 | - store.deleteFlowRule(f); | ||
| 172 | - // FIXME: only accept request and push to provider on internal event | ||
| 173 | - device = deviceService.getDevice(f.deviceId()); | ||
| 174 | - frp = getProvider(device.providerId()); | ||
| 175 | - // FIXME: flows removed from store and flows removed from might diverge | ||
| 176 | - // get rid of #removeRulesById? | ||
| 177 | - frp.removeRulesById(id, f); | ||
| 178 | - } | ||
| 179 | } | 139 | } |
| 180 | 140 | ||
| 181 | @Override | 141 | @Override |
| 182 | public Iterable<FlowRule> getFlowRulesById(ApplicationId id) { | 142 | public Iterable<FlowRule> getFlowRulesById(ApplicationId id) { |
| 183 | - return store.getFlowRulesByAppId(id); | 143 | + Set<FlowRule> flowEntries = Sets.newHashSet(); |
| 144 | + for (Device d : deviceService.getDevices()) { | ||
| 145 | + for (FlowEntry flowEntry : store.getFlowEntries(d.id())) { | ||
| 146 | + if (flowEntry.appId() == id.id()) { | ||
| 147 | + flowEntries.add(flowEntry); | ||
| 148 | + } | ||
| 149 | + } | ||
| 150 | + } | ||
| 151 | + return flowEntries; | ||
| 184 | } | 152 | } |
| 185 | 153 | ||
| 186 | @Override | 154 | @Override | ... | ... |
| ... | @@ -12,6 +12,7 @@ import static org.onlab.onos.net.flow.FlowRuleEvent.Type.RULE_REMOVE_REQUESTED; | ... | @@ -12,6 +12,7 @@ import static org.onlab.onos.net.flow.FlowRuleEvent.Type.RULE_REMOVE_REQUESTED; |
| 12 | import static org.onlab.onos.net.flow.FlowRuleEvent.Type.RULE_UPDATED; | 12 | import static org.onlab.onos.net.flow.FlowRuleEvent.Type.RULE_UPDATED; |
| 13 | 13 | ||
| 14 | import java.util.ArrayList; | 14 | import java.util.ArrayList; |
| 15 | +import java.util.Arrays; | ||
| 15 | import java.util.Collections; | 16 | import java.util.Collections; |
| 16 | import java.util.HashMap; | 17 | import java.util.HashMap; |
| 17 | import java.util.List; | 18 | import java.util.List; |
| ... | @@ -461,12 +462,12 @@ public class FlowRuleManagerTest { | ... | @@ -461,12 +462,12 @@ public class FlowRuleManagerTest { |
| 461 | 462 | ||
| 462 | @Override | 463 | @Override |
| 463 | public int getDeviceCount() { | 464 | public int getDeviceCount() { |
| 464 | - return 0; | 465 | + return 1; |
| 465 | } | 466 | } |
| 466 | 467 | ||
| 467 | @Override | 468 | @Override |
| 468 | public Iterable<Device> getDevices() { | 469 | public Iterable<Device> getDevices() { |
| 469 | - return null; | 470 | + return Arrays.asList(DEV); |
| 470 | } | 471 | } |
| 471 | 472 | ||
| 472 | @Override | 473 | @Override | ... | ... |
-
Please register or login to post a comment