[ONOS-3643] Update VTNRSC's bug: when delete vm, the sfc'data is error.
Change-Id: Ib9357c2792b51270e935c2f1205c2311e9988793
Showing
4 changed files
with
50 additions
and
0 deletions
... | @@ -20,6 +20,7 @@ import java.util.Iterator; | ... | @@ -20,6 +20,7 @@ import java.util.Iterator; |
20 | import org.onlab.packet.MacAddress; | 20 | import org.onlab.packet.MacAddress; |
21 | import org.onosproject.net.Device; | 21 | import org.onosproject.net.Device; |
22 | import org.onosproject.net.DeviceId; | 22 | import org.onosproject.net.DeviceId; |
23 | +import org.onosproject.net.Host; | ||
23 | import org.onosproject.net.HostId; | 24 | import org.onosproject.net.HostId; |
24 | import org.onosproject.vtnrsc.SegmentationId; | 25 | import org.onosproject.vtnrsc.SegmentationId; |
25 | import org.onosproject.vtnrsc.TenantId; | 26 | import org.onosproject.vtnrsc.TenantId; |
... | @@ -69,4 +70,14 @@ public class VtnRscManagerTestImpl implements VtnRscService { | ... | @@ -69,4 +70,14 @@ public class VtnRscManagerTestImpl implements VtnRscService { |
69 | public DeviceId getSFToSFFMaping(VirtualPortId portId) { | 70 | public DeviceId getSFToSFFMaping(VirtualPortId portId) { |
70 | return DeviceId.deviceId("www.google.com"); | 71 | return DeviceId.deviceId("www.google.com"); |
71 | } | 72 | } |
73 | + | ||
74 | + @Override | ||
75 | + public void addDeviceIdOfOvsMap(VirtualPortId virtualPortId, | ||
76 | + TenantId tenantId, DeviceId deviceId) { | ||
77 | + } | ||
78 | + | ||
79 | + @Override | ||
80 | + public void removeDeviceIdOfOvsMap(Host host, TenantId tenantId, | ||
81 | + DeviceId deviceId) { | ||
82 | + } | ||
72 | } | 83 | } | ... | ... |
... | @@ -372,6 +372,7 @@ public class VTNManager implements VTNService { | ... | @@ -372,6 +372,7 @@ public class VTNManager implements VTNService { |
372 | log.error("The ifaceId of Host is null"); | 372 | log.error("The ifaceId of Host is null"); |
373 | return; | 373 | return; |
374 | } | 374 | } |
375 | + programSffAndClassifierHost(host, Objective.Operation.ADD); | ||
375 | // apply L2 openflow rules | 376 | // apply L2 openflow rules |
376 | applyHostMonitoredL2Rules(host, Objective.Operation.ADD); | 377 | applyHostMonitoredL2Rules(host, Objective.Operation.ADD); |
377 | // apply L3 openflow rules | 378 | // apply L3 openflow rules |
... | @@ -389,6 +390,7 @@ public class VTNManager implements VTNService { | ... | @@ -389,6 +390,7 @@ public class VTNManager implements VTNService { |
389 | log.error("The ifaceId of Host is null"); | 390 | log.error("The ifaceId of Host is null"); |
390 | return; | 391 | return; |
391 | } | 392 | } |
393 | + programSffAndClassifierHost(host, Objective.Operation.REMOVE); | ||
392 | // apply L2 openflow rules | 394 | // apply L2 openflow rules |
393 | applyHostMonitoredL2Rules(host, Objective.Operation.REMOVE); | 395 | applyHostMonitoredL2Rules(host, Objective.Operation.REMOVE); |
394 | // apply L3 openflow rules | 396 | // apply L3 openflow rules |
... | @@ -478,6 +480,22 @@ public class VTNManager implements VTNService { | ... | @@ -478,6 +480,22 @@ public class VTNManager implements VTNService { |
478 | } | 480 | } |
479 | } | 481 | } |
480 | 482 | ||
483 | + private void programSffAndClassifierHost(Host host, Objective.Operation type) { | ||
484 | + DeviceId deviceId = host.location().deviceId(); | ||
485 | + String ifaceId = host.annotations().value(IFACEID); | ||
486 | + VirtualPortId virtualPortId = VirtualPortId.portId(ifaceId); | ||
487 | + VirtualPort virtualPort = virtualPortService.getPort(virtualPortId); | ||
488 | + if (virtualPort == null) { | ||
489 | + virtualPort = VtnData.getPort(vPortStore, virtualPortId); | ||
490 | + } | ||
491 | + TenantId tenantId = virtualPort.tenantId(); | ||
492 | + if (Objective.Operation.ADD == type) { | ||
493 | + vtnRscService.addDeviceIdOfOvsMap(virtualPortId, tenantId, deviceId); | ||
494 | + } else if (Objective.Operation.REMOVE == type) { | ||
495 | + vtnRscService.removeDeviceIdOfOvsMap(host, tenantId, deviceId); | ||
496 | + } | ||
497 | + } | ||
498 | + | ||
481 | private void applyHostMonitoredL2Rules(Host host, Objective.Operation type) { | 499 | private void applyHostMonitoredL2Rules(Host host, Objective.Operation type) { |
482 | DeviceId deviceId = host.location().deviceId(); | 500 | DeviceId deviceId = host.location().deviceId(); |
483 | if (!mastershipService.isLocalMaster(deviceId)) { | 501 | if (!mastershipService.isLocalMaster(deviceId)) { | ... | ... |
... | @@ -21,6 +21,7 @@ import org.onlab.packet.MacAddress; | ... | @@ -21,6 +21,7 @@ import org.onlab.packet.MacAddress; |
21 | import org.onosproject.event.ListenerService; | 21 | import org.onosproject.event.ListenerService; |
22 | import org.onosproject.net.Device; | 22 | import org.onosproject.net.Device; |
23 | import org.onosproject.net.DeviceId; | 23 | import org.onosproject.net.DeviceId; |
24 | +import org.onosproject.net.Host; | ||
24 | import org.onosproject.net.HostId; | 25 | import org.onosproject.net.HostId; |
25 | import org.onosproject.vtnrsc.SegmentationId; | 26 | import org.onosproject.vtnrsc.SegmentationId; |
26 | import org.onosproject.vtnrsc.TenantId; | 27 | import org.onosproject.vtnrsc.TenantId; |
... | @@ -79,4 +80,24 @@ public interface VtnRscService extends ListenerService<VtnRscEvent, VtnRscListen | ... | @@ -79,4 +80,24 @@ public interface VtnRscService extends ListenerService<VtnRscEvent, VtnRscListen |
79 | * @return device identifier | 80 | * @return device identifier |
80 | */ | 81 | */ |
81 | DeviceId getSFToSFFMaping(VirtualPortId portId); | 82 | DeviceId getSFToSFFMaping(VirtualPortId portId); |
83 | + | ||
84 | + /** | ||
85 | + * Adds specify Device identifier to Service Function Forward OvsMap | ||
86 | + * or Classifier OvsMap. | ||
87 | + * | ||
88 | + * @param virtualPortId the VirtualPort identifier | ||
89 | + * @param tenantId the tenant identifier | ||
90 | + * @param deviceId the device identifier | ||
91 | + */ | ||
92 | + void addDeviceIdOfOvsMap(VirtualPortId virtualPortId, TenantId tenantId, DeviceId deviceId); | ||
93 | + | ||
94 | + /** | ||
95 | + * Removes specify Device identifier from Service Function Forward OvsMap | ||
96 | + * or Classifier OvsMap. | ||
97 | + * | ||
98 | + * @param host Host | ||
99 | + * @param tenantId the tenant identifier | ||
100 | + * @param deviceId the device identifier | ||
101 | + */ | ||
102 | + void removeDeviceIdOfOvsMap(Host host, TenantId tenantId, DeviceId deviceId); | ||
82 | } | 103 | } | ... | ... |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment