blob: 2e40769b1b4718f930184b23c5423739bd9c54a9 [file] [log] [blame]
Hyunsun Moon44aac662017-02-18 02:07:01 +09001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002* Copyright 2016-present Open Networking Foundation
Hyunsun Moon44aac662017-02-18 02:07:01 +09003*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17package org.onosproject.openstacknetworking.impl;
18
19import com.google.common.base.Strings;
20import org.apache.felix.scr.annotations.Activate;
21import org.apache.felix.scr.annotations.Component;
22import org.apache.felix.scr.annotations.Deactivate;
23import org.apache.felix.scr.annotations.Reference;
24import org.apache.felix.scr.annotations.ReferenceCardinality;
25import org.onlab.packet.Ethernet;
Frank Wangf9571662017-06-06 18:01:29 +080026import org.onlab.packet.MacAddress;
daniel parka792cf72017-04-14 16:25:35 +090027import org.onlab.packet.VlanId;
Hyunsun Moon44aac662017-02-18 02:07:01 +090028import org.onosproject.core.ApplicationId;
29import org.onosproject.core.CoreService;
30import org.onosproject.mastership.MastershipService;
31import org.onosproject.net.device.DeviceService;
sangho1aaa7882017-05-31 13:22:47 +090032import org.onosproject.net.driver.DriverService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090033import org.onosproject.net.flow.DefaultTrafficSelector;
34import org.onosproject.net.flow.DefaultTrafficTreatment;
35import org.onosproject.net.flow.TrafficSelector;
36import org.onosproject.net.flow.TrafficTreatment;
sangho1aaa7882017-05-31 13:22:47 +090037import org.onosproject.net.flow.instructions.ExtensionTreatment;
Hyunsun Moon44aac662017-02-18 02:07:01 +090038import org.onosproject.openstacknetworking.api.InstancePort;
39import org.onosproject.openstacknetworking.api.InstancePortEvent;
40import org.onosproject.openstacknetworking.api.InstancePortListener;
41import org.onosproject.openstacknetworking.api.InstancePortService;
sanghodc375372017-06-08 10:41:30 +090042import org.onosproject.openstacknetworking.api.OpenstackFlowRuleService;
Frank Wangf9571662017-06-06 18:01:29 +080043import org.onosproject.openstacknetworking.api.OpenstackNetworkEvent;
44import org.onosproject.openstacknetworking.api.OpenstackNetworkListener;
Hyunsun Moon44aac662017-02-18 02:07:01 +090045import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
sanghoe6457a32017-08-24 14:31:19 +090046import org.onosproject.openstacknetworking.api.OpenstackSecurityGroupService;
Hyunsun Moon0d457362017-06-27 17:19:41 +090047import org.onosproject.openstacknode.api.OpenstackNode;
48import org.onosproject.openstacknode.api.OpenstackNodeService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090049import org.openstack4j.model.network.Network;
Frank Wangf9571662017-06-06 18:01:29 +080050import org.openstack4j.model.network.NetworkType;
51import org.openstack4j.model.network.Port;
Hyunsun Moon44aac662017-02-18 02:07:01 +090052import org.slf4j.Logger;
53
54import java.util.concurrent.ExecutorService;
55
56import static java.util.concurrent.Executors.newSingleThreadExecutor;
57import static org.onlab.util.Tools.groupedThreads;
sanghodc375372017-06-08 10:41:30 +090058import static org.onosproject.openstacknetworking.api.Constants.ACL_TABLE;
59import static org.onosproject.openstacknetworking.api.Constants.FORWARDING_TABLE;
60import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
Frank Wangf9571662017-06-06 18:01:29 +080061import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_ADMIN_RULE;
sanghodc375372017-06-08 10:41:30 +090062import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_SWITCHING_RULE;
63import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_TUNNEL_TAG_RULE;
64import static org.onosproject.openstacknetworking.api.Constants.SRC_VNI_TABLE;
Frank Wangf9571662017-06-06 18:01:29 +080065import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_CREATED;
66import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_REMOVED;
67import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_UPDATED;
68import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_CREATED;
69import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_REMOVED;
70import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_UPDATED;
Hyunsun Moon44aac662017-02-18 02:07:01 +090071import static org.onosproject.openstacknetworking.impl.RulePopulatorUtil.buildExtension;
Hyunsun Moon0d457362017-06-27 17:19:41 +090072import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
Hyunsun Moon44aac662017-02-18 02:07:01 +090073import static org.slf4j.LoggerFactory.getLogger;
74
75
76/**
77 * Populates switching flow rules on OVS for the basic connectivity among the
78 * virtual instances in the same network.
79 */
80@Component(immediate = true)
81public final class OpenstackSwitchingHandler {
82
83 private final Logger log = getLogger(getClass());
84
85 private static final String ERR_SET_FLOWS = "Failed to set flows for %s: ";
86
87 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -080088 CoreService coreService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090089
90 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -080091 MastershipService mastershipService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090092
93 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -080094 DeviceService deviceService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090095
96 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -080097 OpenstackFlowRuleService osFlowRuleService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090098
99 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -0800100 InstancePortService instancePortService;
Hyunsun Moon44aac662017-02-18 02:07:01 +0900101
102 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -0800103 OpenstackNetworkService osNetworkService;
Hyunsun Moon44aac662017-02-18 02:07:01 +0900104
105 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -0800106 OpenstackNodeService osNodeService;
Hyunsun Moon44aac662017-02-18 02:07:01 +0900107
sangho1aaa7882017-05-31 13:22:47 +0900108 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -0800109 DriverService driverService;
sangho1aaa7882017-05-31 13:22:47 +0900110
sanghoe6457a32017-08-24 14:31:19 +0900111 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
Ray Milkey9c9cde42018-01-12 14:22:06 -0800112 OpenstackSecurityGroupService securityGroupService;
sanghoe6457a32017-08-24 14:31:19 +0900113
Hyunsun Moon44aac662017-02-18 02:07:01 +0900114 private final ExecutorService eventExecutor = newSingleThreadExecutor(
115 groupedThreads(this.getClass().getSimpleName(), "event-handler"));
116 private final InstancePortListener instancePortListener = new InternalInstancePortListener();
Frank Wangf9571662017-06-06 18:01:29 +0800117 private final InternalOpenstackNetworkListener osNetworkListener =
118 new InternalOpenstackNetworkListener();
Hyunsun Moon44aac662017-02-18 02:07:01 +0900119 private ApplicationId appId;
120
121 @Activate
Ray Milkey9c9cde42018-01-12 14:22:06 -0800122 void activate() {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900123 appId = coreService.registerApplication(OPENSTACK_NETWORKING_APP_ID);
124 instancePortService.addListener(instancePortListener);
Frank Wangf9571662017-06-06 18:01:29 +0800125 osNetworkService.addListener(osNetworkListener);
Hyunsun Moon44aac662017-02-18 02:07:01 +0900126
127 log.info("Started");
128 }
129
130 @Deactivate
Ray Milkey9c9cde42018-01-12 14:22:06 -0800131 void deactivate() {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900132 instancePortService.removeListener(instancePortListener);
Frank Wangf9571662017-06-06 18:01:29 +0800133 osNetworkService.removeListener(osNetworkListener);
Hyunsun Moon44aac662017-02-18 02:07:01 +0900134 eventExecutor.shutdown();
135
136 log.info("Stopped");
137 }
138
139 private void setNetworkRules(InstancePort instPort, boolean install) {
daniel parka792cf72017-04-14 16:25:35 +0900140 switch (osNetworkService.network(instPort.networkId()).getNetworkType()) {
141 case VXLAN:
142 setTunnelTagFlowRules(instPort, install);
143 setForwardingRules(instPort, install);
144 break;
145 case VLAN:
146 setVlanTagFlowRules(instPort, install);
147 setForwardingRulesForVlan(instPort, install);
148 break;
149 default:
150 break;
151 }
Hyunsun Moon44aac662017-02-18 02:07:01 +0900152 }
153
154 private void setForwardingRules(InstancePort instPort, boolean install) {
155 // switching rules for the instPorts in the same node
156 TrafficSelector selector = DefaultTrafficSelector.builder()
157 .matchEthType(Ethernet.TYPE_IPV4)
158 .matchIPDst(instPort.ipAddress().toIpPrefix())
159 .matchTunnelId(getVni(instPort))
160 .build();
161
162 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
163 .setEthDst(instPort.macAddress())
164 .setOutput(instPort.portNumber())
165 .build();
166
sanghodc375372017-06-08 10:41:30 +0900167 osFlowRuleService.setRule(
Hyunsun Moon44aac662017-02-18 02:07:01 +0900168 appId,
169 instPort.deviceId(),
170 selector,
171 treatment,
Hyunsun Moon44aac662017-02-18 02:07:01 +0900172 PRIORITY_SWITCHING_RULE,
sanghodc375372017-06-08 10:41:30 +0900173 FORWARDING_TABLE,
Hyunsun Moon44aac662017-02-18 02:07:01 +0900174 install);
175
176 // switching rules for the instPorts in the remote node
Hyunsun Moon0d457362017-06-27 17:19:41 +0900177 OpenstackNode localNode = osNodeService.node(instPort.deviceId());
178 if (localNode == null) {
179 final String error = String.format("Cannot find openstack node for %s",
180 instPort.deviceId());
181 throw new IllegalStateException(error);
182 }
183 osNodeService.completeNodes(COMPUTE).stream()
184 .filter(remoteNode -> !remoteNode.intgBridge().equals(localNode.intgBridge()))
185 .forEach(remoteNode -> {
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900186 TrafficTreatment treatmentToRemote = DefaultTrafficTreatment.builder()
187 .extension(buildExtension(
188 deviceService,
Hyunsun Moon0d457362017-06-27 17:19:41 +0900189 remoteNode.intgBridge(),
190 localNode.dataIp().getIp4Address()),
191 remoteNode.intgBridge())
192 .setOutput(remoteNode.tunnelPortNum())
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900193 .build();
Hyunsun Moon44aac662017-02-18 02:07:01 +0900194
sanghodc375372017-06-08 10:41:30 +0900195 osFlowRuleService.setRule(
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900196 appId,
Hyunsun Moon0d457362017-06-27 17:19:41 +0900197 remoteNode.intgBridge(),
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900198 selector,
199 treatmentToRemote,
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900200 PRIORITY_SWITCHING_RULE,
sanghodc375372017-06-08 10:41:30 +0900201 FORWARDING_TABLE,
Hyunsun Moonacde3f52017-02-23 17:57:35 +0900202 install);
203 });
Hyunsun Moon44aac662017-02-18 02:07:01 +0900204 }
205
daniel parka792cf72017-04-14 16:25:35 +0900206 private void setForwardingRulesForVlan(InstancePort instPort, boolean install) {
207 // switching rules for the instPorts in the same node
208 TrafficSelector selector = DefaultTrafficSelector.builder()
209 .matchEthType(Ethernet.TYPE_IPV4)
210 .matchIPDst(instPort.ipAddress().toIpPrefix())
211 .matchVlanId(getVlanId(instPort))
212 .build();
213
214 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
215 .popVlan()
216 .setEthDst(instPort.macAddress())
217 .setOutput(instPort.portNumber())
218 .build();
219
sanghodc375372017-06-08 10:41:30 +0900220 osFlowRuleService.setRule(
daniel parka792cf72017-04-14 16:25:35 +0900221 appId,
222 instPort.deviceId(),
223 selector,
224 treatment,
daniel parka792cf72017-04-14 16:25:35 +0900225 PRIORITY_SWITCHING_RULE,
sanghodc375372017-06-08 10:41:30 +0900226 FORWARDING_TABLE,
daniel parka792cf72017-04-14 16:25:35 +0900227 install);
228
229 // switching rules for the instPorts in the remote node
Hyunsun Moon0d457362017-06-27 17:19:41 +0900230 osNodeService.completeNodes(COMPUTE).stream()
231 .filter(remoteNode -> !remoteNode.intgBridge().equals(instPort.deviceId()) &&
232 remoteNode.vlanIntf() != null)
233 .forEach(remoteNode -> {
daniel parka792cf72017-04-14 16:25:35 +0900234 TrafficTreatment treatmentToRemote = DefaultTrafficTreatment.builder()
Hyunsun Moon0d457362017-06-27 17:19:41 +0900235 .setOutput(remoteNode.vlanPortNum())
daniel parka792cf72017-04-14 16:25:35 +0900236 .build();
237
sanghodc375372017-06-08 10:41:30 +0900238 osFlowRuleService.setRule(
daniel parka792cf72017-04-14 16:25:35 +0900239 appId,
Hyunsun Moon0d457362017-06-27 17:19:41 +0900240 remoteNode.intgBridge(),
daniel parka792cf72017-04-14 16:25:35 +0900241 selector,
242 treatmentToRemote,
daniel parka792cf72017-04-14 16:25:35 +0900243 PRIORITY_SWITCHING_RULE,
sanghodc375372017-06-08 10:41:30 +0900244 FORWARDING_TABLE,
daniel parka792cf72017-04-14 16:25:35 +0900245 install);
246 });
daniel parka792cf72017-04-14 16:25:35 +0900247 }
248
Hyunsun Moon44aac662017-02-18 02:07:01 +0900249 private void setTunnelTagFlowRules(InstancePort instPort, boolean install) {
250 TrafficSelector selector = DefaultTrafficSelector.builder()
251 .matchEthType(Ethernet.TYPE_IPV4)
252 .matchInPort(instPort.portNumber())
253 .build();
254
sangho1aaa7882017-05-31 13:22:47 +0900255 // XXX All egress traffic needs to go through connection tracking module, which might hurt its performance.
256 ExtensionTreatment ctTreatment =
257 RulePopulatorUtil.niciraConnTrackTreatmentBuilder(driverService, instPort.deviceId())
258 .commit(true).build();
259
sanghoe6457a32017-08-24 14:31:19 +0900260 TrafficTreatment.Builder tb = DefaultTrafficTreatment.builder()
Hyunsun Moon44aac662017-02-18 02:07:01 +0900261 .setTunnelId(getVni(instPort))
sanghoe6457a32017-08-24 14:31:19 +0900262 .transition(ACL_TABLE);
263
264 if (securityGroupService.isSecurityGroupEnabled()) {
265 tb.extension(ctTreatment, instPort.deviceId());
266 }
Hyunsun Moon44aac662017-02-18 02:07:01 +0900267
sanghodc375372017-06-08 10:41:30 +0900268 osFlowRuleService.setRule(
Hyunsun Moon44aac662017-02-18 02:07:01 +0900269 appId,
270 instPort.deviceId(),
271 selector,
sanghoe6457a32017-08-24 14:31:19 +0900272 tb.build(),
Hyunsun Moon44aac662017-02-18 02:07:01 +0900273 PRIORITY_TUNNEL_TAG_RULE,
sanghodc375372017-06-08 10:41:30 +0900274 SRC_VNI_TABLE,
Hyunsun Moon44aac662017-02-18 02:07:01 +0900275 install);
276 }
277
daniel parka792cf72017-04-14 16:25:35 +0900278 private void setVlanTagFlowRules(InstancePort instPort, boolean install) {
279 TrafficSelector selector = DefaultTrafficSelector.builder()
280 .matchEthType(Ethernet.TYPE_IPV4)
281 .matchInPort(instPort.portNumber())
282 .build();
283
284 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
285 .pushVlan()
286 .setVlanId(getVlanId(instPort))
sanghodc375372017-06-08 10:41:30 +0900287 .transition(ACL_TABLE)
daniel parka792cf72017-04-14 16:25:35 +0900288 .build();
289
sanghodc375372017-06-08 10:41:30 +0900290 osFlowRuleService.setRule(
daniel parka792cf72017-04-14 16:25:35 +0900291 appId,
292 instPort.deviceId(),
293 selector,
294 treatment,
daniel parka792cf72017-04-14 16:25:35 +0900295 PRIORITY_TUNNEL_TAG_RULE,
sanghodc375372017-06-08 10:41:30 +0900296 SRC_VNI_TABLE,
daniel parka792cf72017-04-14 16:25:35 +0900297 install);
298
299 }
300
Frank Wangf9571662017-06-06 18:01:29 +0800301 private void setNetworkAdminRules(Network network, boolean install) {
302 TrafficSelector selector;
303 if (network.getNetworkType() == NetworkType.VXLAN) {
304
305 selector = DefaultTrafficSelector.builder()
306 .matchTunnelId(Long.valueOf(network.getProviderSegID()))
307 .build();
308 } else {
309 selector = DefaultTrafficSelector.builder()
310 .matchVlanId(VlanId.vlanId(network.getProviderSegID()))
311 .build();
312 }
313
314 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
315 .drop()
316 .build();
317
318 osNodeService.completeNodes().stream()
319 .filter(osNode -> osNode.type() == COMPUTE)
320 .forEach(osNode -> {
321 osFlowRuleService.setRule(
322 appId,
323 osNode.intgBridge(),
324 selector,
325 treatment,
326 PRIORITY_ADMIN_RULE,
327 ACL_TABLE,
328 install);
329 });
330 }
331
332 private void setPortAdminRules(Port port, boolean install) {
333 InstancePort instancePort = instancePortService.instancePort(MacAddress.valueOf(port.getMacAddress()));
334 TrafficSelector selector = DefaultTrafficSelector.builder()
335 .matchInPort(instancePort.portNumber())
336 .build();
337
338 TrafficTreatment treatment = DefaultTrafficTreatment.builder()
339 .drop()
340 .build();
341
342 osFlowRuleService.setRule(
343 appId,
344 instancePort.deviceId(),
345 selector,
346 treatment,
347 PRIORITY_ADMIN_RULE,
348 SRC_VNI_TABLE,
349 install);
350 }
351
daniel parka792cf72017-04-14 16:25:35 +0900352 private VlanId getVlanId(InstancePort instPort) {
353 Network osNet = osNetworkService.network(instPort.networkId());
354
355 if (osNet == null || Strings.isNullOrEmpty(osNet.getProviderSegID())) {
356 final String error = String.format(
357 ERR_SET_FLOWS + "Failed to get VNI for %s",
358 instPort, osNet == null ? "<none>" : osNet.getName());
359 throw new IllegalStateException(error);
360 }
361
362 return VlanId.vlanId(osNet.getProviderSegID());
363 }
364
365
Hyunsun Moon44aac662017-02-18 02:07:01 +0900366 private Long getVni(InstancePort instPort) {
367 Network osNet = osNetworkService.network(instPort.networkId());
368 if (osNet == null || Strings.isNullOrEmpty(osNet.getProviderSegID())) {
369 final String error = String.format(
370 ERR_SET_FLOWS + "Failed to get VNI for %s",
rohit8e5c8992017-03-29 19:15:30 +0530371 instPort, osNet == null ? "<none>" : osNet.getName());
Hyunsun Moon44aac662017-02-18 02:07:01 +0900372 throw new IllegalStateException(error);
373 }
374 return Long.valueOf(osNet.getProviderSegID());
375 }
376
377 private class InternalInstancePortListener implements InstancePortListener {
378
379 @Override
380 public boolean isRelevant(InstancePortEvent event) {
381 InstancePort instPort = event.subject();
382 return mastershipService.isLocalMaster(instPort.deviceId());
383 }
384
385 @Override
386 public void event(InstancePortEvent event) {
387 InstancePort instPort = event.subject();
388 switch (event.type()) {
389 case OPENSTACK_INSTANCE_PORT_UPDATED:
390 case OPENSTACK_INSTANCE_PORT_DETECTED:
391 eventExecutor.execute(() -> {
392 log.info("Instance port detected MAC:{} IP:{}",
393 instPort.macAddress(),
394 instPort.ipAddress());
395 instPortDetected(event.subject());
396 });
397 break;
398 case OPENSTACK_INSTANCE_PORT_VANISHED:
399 eventExecutor.execute(() -> {
400 log.info("Instance port vanished MAC:{} IP:{}",
401 instPort.macAddress(),
402 instPort.ipAddress());
403 instPortRemoved(event.subject());
404 });
405 break;
406 default:
407 break;
408 }
409 }
410
411 private void instPortDetected(InstancePort instPort) {
412 setNetworkRules(instPort, true);
413 // TODO add something else if needed
414 }
415
416 private void instPortRemoved(InstancePort instPort) {
417 setNetworkRules(instPort, false);
418 // TODO add something else if needed
419 }
420 }
Frank Wangf9571662017-06-06 18:01:29 +0800421
422 private class InternalOpenstackNetworkListener implements OpenstackNetworkListener {
423
424 @Override
425 public boolean isRelevant(OpenstackNetworkEvent event) {
426 return !(event.subject() == null && event.port() == null);
427 }
428
429 @Override
430 public void event(OpenstackNetworkEvent event) {
daniel park6ed460a2018-01-05 10:29:10 +0900431 try {
432 if ((event.type() == OPENSTACK_NETWORK_CREATED ||
433 event.type() == OPENSTACK_NETWORK_UPDATED) && !event.subject().isAdminStateUp()) {
434 setNetworkAdminRules(event.subject(), true);
435 } else if ((event.type() == OPENSTACK_NETWORK_UPDATED && event.subject().isAdminStateUp()) ||
436 (event.type() == OPENSTACK_NETWORK_REMOVED && !event.subject().isAdminStateUp())) {
437 setNetworkAdminRules(event.subject(), false);
438 }
Frank Wangf9571662017-06-06 18:01:29 +0800439
daniel park6ed460a2018-01-05 10:29:10 +0900440 if ((event.type() == OPENSTACK_PORT_CREATED ||
441 event.type() == OPENSTACK_PORT_UPDATED) && !event.port().isAdminStateUp()) {
442 setPortAdminRules(event.port(), true);
443 } else if ((event.type() == OPENSTACK_PORT_UPDATED && event.port().isAdminStateUp()) ||
444 (event.type() == OPENSTACK_PORT_REMOVED && !event.port().isAdminStateUp())) {
445 setPortAdminRules(event.port(), false);
446 }
447 } catch (Exception e) {
448 log.error("Exception occurred while processing OpenstackNetworkEvent because of {}", e.toString());
Frank Wangf9571662017-06-06 18:01:29 +0800449 }
450 }
451 }
Hyunsun Moon44aac662017-02-18 02:07:01 +0900452}