Fixed a dual-level NPE involving flow-rule payload. We need more unit tests and …
…automated system tests!!! Change-Id: I821214cc274377dc22cb5ab88c48567eaab778cb
Showing
1 changed file
with
17 additions
and
8 deletions
... | @@ -37,6 +37,7 @@ import org.onosproject.net.flow.FlowEntry; | ... | @@ -37,6 +37,7 @@ import org.onosproject.net.flow.FlowEntry; |
37 | import org.onosproject.net.flow.FlowRule; | 37 | import org.onosproject.net.flow.FlowRule; |
38 | import org.onosproject.net.flow.FlowRuleBatchEntry; | 38 | import org.onosproject.net.flow.FlowRuleBatchEntry; |
39 | import org.onosproject.net.flow.FlowRuleBatchOperation; | 39 | import org.onosproject.net.flow.FlowRuleBatchOperation; |
40 | +import org.onosproject.net.flow.FlowRuleExtPayLoad; | ||
40 | import org.onosproject.net.flow.FlowRuleProvider; | 41 | import org.onosproject.net.flow.FlowRuleProvider; |
41 | import org.onosproject.net.flow.FlowRuleProviderRegistry; | 42 | import org.onosproject.net.flow.FlowRuleProviderRegistry; |
42 | import org.onosproject.net.flow.FlowRuleProviderService; | 43 | import org.onosproject.net.flow.FlowRuleProviderService; |
... | @@ -147,8 +148,9 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -147,8 +148,9 @@ public class OpenFlowRuleProvider extends AbstractProvider |
147 | private void applyRule(FlowRule flowRule) { | 148 | private void applyRule(FlowRule flowRule) { |
148 | OpenFlowSwitch sw = controller.getSwitch(Dpid.dpid(flowRule.deviceId() | 149 | OpenFlowSwitch sw = controller.getSwitch(Dpid.dpid(flowRule.deviceId() |
149 | .uri())); | 150 | .uri())); |
150 | - if (flowRule.payLoad().payLoad().length > 0) { | 151 | + FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); |
151 | - OFMessage msg = new ThirdPartyMessage(flowRule.payLoad().payLoad()); | 152 | + if (hasPayload(flowRuleExtPayLoad)) { |
153 | + OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad()); | ||
152 | sw.sendMsg(msg); | 154 | sw.sendMsg(msg); |
153 | return; | 155 | return; |
154 | } | 156 | } |
... | @@ -161,14 +163,14 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -161,14 +163,14 @@ public class OpenFlowRuleProvider extends AbstractProvider |
161 | for (FlowRule flowRule : flowRules) { | 163 | for (FlowRule flowRule : flowRules) { |
162 | removeRule(flowRule); | 164 | removeRule(flowRule); |
163 | } | 165 | } |
164 | - | ||
165 | } | 166 | } |
166 | 167 | ||
167 | private void removeRule(FlowRule flowRule) { | 168 | private void removeRule(FlowRule flowRule) { |
168 | OpenFlowSwitch sw = controller.getSwitch(Dpid.dpid(flowRule.deviceId() | 169 | OpenFlowSwitch sw = controller.getSwitch(Dpid.dpid(flowRule.deviceId() |
169 | .uri())); | 170 | .uri())); |
170 | - if (flowRule.payLoad().payLoad().length > 0) { | 171 | + FlowRuleExtPayLoad flowRuleExtPayLoad = flowRule.payLoad(); |
171 | - OFMessage msg = new ThirdPartyMessage(flowRule.payLoad().payLoad()); | 172 | + if (hasPayload(flowRuleExtPayLoad)) { |
173 | + OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad()); | ||
172 | sw.sendMsg(msg); | 174 | sw.sendMsg(msg); |
173 | return; | 175 | return; |
174 | } | 176 | } |
... | @@ -192,9 +194,10 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -192,9 +194,10 @@ public class OpenFlowRuleProvider extends AbstractProvider |
192 | OFFlowMod mod; | 194 | OFFlowMod mod; |
193 | for (FlowRuleBatchEntry fbe : batch.getOperations()) { | 195 | for (FlowRuleBatchEntry fbe : batch.getOperations()) { |
194 | // flow is the third party privacy flow | 196 | // flow is the third party privacy flow |
195 | - if (fbe.target().payLoad().payLoad().length > 0) { | 197 | + |
196 | - OFMessage msg = new ThirdPartyMessage(fbe.target().payLoad() | 198 | + FlowRuleExtPayLoad flowRuleExtPayLoad = fbe.target().payLoad(); |
197 | - .payLoad()); | 199 | + if (hasPayload(flowRuleExtPayLoad)) { |
200 | + OFMessage msg = new ThirdPartyMessage(flowRuleExtPayLoad.payLoad()); | ||
198 | sw.sendMsg(msg); | 201 | sw.sendMsg(msg); |
199 | continue; | 202 | continue; |
200 | } | 203 | } |
... | @@ -222,6 +225,12 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -222,6 +225,12 @@ public class OpenFlowRuleProvider extends AbstractProvider |
222 | sw.sendMsg(builder.build()); | 225 | sw.sendMsg(builder.build()); |
223 | } | 226 | } |
224 | 227 | ||
228 | + private boolean hasPayload(FlowRuleExtPayLoad flowRuleExtPayLoad) { | ||
229 | + return flowRuleExtPayLoad != null && | ||
230 | + flowRuleExtPayLoad.payLoad() != null && | ||
231 | + flowRuleExtPayLoad.payLoad().length > 0; | ||
232 | + } | ||
233 | + | ||
225 | private class InternalFlowProvider | 234 | private class InternalFlowProvider |
226 | implements OpenFlowSwitchListener, OpenFlowEventListener { | 235 | implements OpenFlowSwitchListener, OpenFlowEventListener { |
227 | 236 | ... | ... |
-
Please register or login to post a comment