Committed by
Gerrit Code Review
Added static DHCP lease for a new host
Change-Id: Ib3c614bb008d65accec3570ff526f541b1332382
Showing
2 changed files
with
46 additions
and
2 deletions
... | @@ -45,7 +45,8 @@ | ... | @@ -45,7 +45,8 @@ |
45 | <api.package>org.onosproject.cordvtn.rest</api.package> | 45 | <api.package>org.onosproject.cordvtn.rest</api.package> |
46 | <onos.app.requires> | 46 | <onos.app.requires> |
47 | org.onosproject.ovsdb-base, | 47 | org.onosproject.ovsdb-base, |
48 | - org.onosproject.openstackswitching | 48 | + org.onosproject.openstackswitching, |
49 | + org.onosproject.dhcp | ||
49 | </onos.app.requires> | 50 | </onos.app.requires> |
50 | </properties> | 51 | </properties> |
51 | 52 | ||
... | @@ -110,6 +111,11 @@ | ... | @@ -110,6 +111,11 @@ |
110 | <artifactId>onos-app-openstackswitching-api</artifactId> | 111 | <artifactId>onos-app-openstackswitching-api</artifactId> |
111 | <version>${project.version}</version> | 112 | <version>${project.version}</version> |
112 | </dependency> | 113 | </dependency> |
114 | + <dependency> | ||
115 | + <groupId>org.onosproject</groupId> | ||
116 | + <artifactId>onos-app-dhcp-api</artifactId> | ||
117 | + <version>${project.version}</version> | ||
118 | + </dependency> | ||
113 | </dependencies> | 119 | </dependencies> |
114 | 120 | ||
115 | <build> | 121 | <build> | ... | ... |
... | @@ -15,6 +15,7 @@ | ... | @@ -15,6 +15,7 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.cordvtn; | 16 | package org.onosproject.cordvtn; |
17 | 17 | ||
18 | +import com.google.common.collect.Lists; | ||
18 | import com.google.common.collect.Sets; | 19 | import com.google.common.collect.Sets; |
19 | import org.apache.felix.scr.annotations.Activate; | 20 | import org.apache.felix.scr.annotations.Activate; |
20 | import org.apache.felix.scr.annotations.Component; | 21 | import org.apache.felix.scr.annotations.Component; |
... | @@ -23,11 +24,13 @@ import org.apache.felix.scr.annotations.Reference; | ... | @@ -23,11 +24,13 @@ import org.apache.felix.scr.annotations.Reference; |
23 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 24 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
24 | import org.apache.felix.scr.annotations.Service; | 25 | import org.apache.felix.scr.annotations.Service; |
25 | import org.onlab.packet.Ethernet; | 26 | import org.onlab.packet.Ethernet; |
27 | +import org.onlab.packet.Ip4Address; | ||
26 | import org.onlab.packet.IpAddress; | 28 | import org.onlab.packet.IpAddress; |
27 | import org.onlab.packet.MacAddress; | 29 | import org.onlab.packet.MacAddress; |
28 | import org.onlab.packet.VlanId; | 30 | import org.onlab.packet.VlanId; |
29 | import org.onosproject.core.ApplicationId; | 31 | import org.onosproject.core.ApplicationId; |
30 | import org.onosproject.core.CoreService; | 32 | import org.onosproject.core.CoreService; |
33 | +import org.onosproject.dhcp.DhcpService; | ||
31 | import org.onosproject.mastership.MastershipService; | 34 | import org.onosproject.mastership.MastershipService; |
32 | import org.onosproject.net.ConnectPoint; | 35 | import org.onosproject.net.ConnectPoint; |
33 | import org.onosproject.net.DefaultAnnotations; | 36 | import org.onosproject.net.DefaultAnnotations; |
... | @@ -65,6 +68,7 @@ import org.onosproject.openstackswitching.OpenstackSubnet; | ... | @@ -65,6 +68,7 @@ import org.onosproject.openstackswitching.OpenstackSubnet; |
65 | import org.onosproject.openstackswitching.OpenstackSwitchingService; | 68 | import org.onosproject.openstackswitching.OpenstackSwitchingService; |
66 | import org.slf4j.Logger; | 69 | import org.slf4j.Logger; |
67 | 70 | ||
71 | +import java.util.List; | ||
68 | import java.util.Map; | 72 | import java.util.Map; |
69 | import java.util.Set; | 73 | import java.util.Set; |
70 | import java.util.concurrent.ExecutorService; | 74 | import java.util.concurrent.ExecutorService; |
... | @@ -121,6 +125,9 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -121,6 +125,9 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
121 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 125 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
122 | protected OpenstackSwitchingService openstackService; | 126 | protected OpenstackSwitchingService openstackService; |
123 | 127 | ||
128 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
129 | + protected DhcpService dhcpService; | ||
130 | + | ||
124 | private final ConfigFactory configFactory = | 131 | private final ConfigFactory configFactory = |
125 | new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, CordVtnConfig.class, "cordvtn") { | 132 | new ConfigFactory(SubjectFactories.APP_SUBJECT_FACTORY, CordVtnConfig.class, "cordvtn") { |
126 | @Override | 133 | @Override |
... | @@ -130,6 +137,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -130,6 +137,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
130 | }; | 137 | }; |
131 | 138 | ||
132 | private static final String DEFAULT_TUNNEL = "vxlan"; | 139 | private static final String DEFAULT_TUNNEL = "vxlan"; |
140 | + private static final Ip4Address DEFAULT_DNS = Ip4Address.valueOf("8.8.8.8"); | ||
133 | private static final String SERVICE_ID = "serviceId"; | 141 | private static final String SERVICE_ID = "serviceId"; |
134 | private static final String LOCATION_IP = "locationIp"; | 142 | private static final String LOCATION_IP = "locationIp"; |
135 | private static final String OPENSTACK_VM_ID = "openstackVmId"; | 143 | private static final String OPENSTACK_VM_ID = "openstackVmId"; |
... | @@ -244,9 +252,13 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -244,9 +252,13 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
244 | if (host != null) { | 252 | if (host != null) { |
245 | // Host is already known to the system, no HOST_ADDED event is triggered in this case. | 253 | // Host is already known to the system, no HOST_ADDED event is triggered in this case. |
246 | // It happens when the application is restarted. | 254 | // It happens when the application is restarted. |
247 | - // TODO check host description if it has all the information | 255 | + String vmId = host.annotations().value(OPENSTACK_VM_ID); |
256 | + if (vmId != null && vmId.equals(vPort.deviceId())) { | ||
248 | serviceVmAdded(host); | 257 | serviceVmAdded(host); |
249 | return; | 258 | return; |
259 | + } else { | ||
260 | + hostProvider.hostVanished(host.id()); | ||
261 | + } | ||
250 | } | 262 | } |
251 | 263 | ||
252 | Set<IpAddress> ip = Sets.newHashSet(vPort.fixedIps().values()); | 264 | Set<IpAddress> ip = Sets.newHashSet(vPort.fixedIps().values()); |
... | @@ -382,6 +394,26 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -382,6 +394,26 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
382 | } | 394 | } |
383 | 395 | ||
384 | /** | 396 | /** |
397 | + * Registers static DHCP lease for a given host. | ||
398 | + * | ||
399 | + * @param host host | ||
400 | + * @param service cord service | ||
401 | + */ | ||
402 | + private void registerDhcpLease(Host host, CordService service) { | ||
403 | + List<Ip4Address> options = Lists.newArrayList(); | ||
404 | + options.add(Ip4Address.makeMaskPrefix(service.serviceIpRange().prefixLength())); | ||
405 | + options.add(service.serviceIp().getIp4Address()); | ||
406 | + options.add(service.serviceIp().getIp4Address()); | ||
407 | + options.add(DEFAULT_DNS); | ||
408 | + | ||
409 | + log.debug("Set static DHCP mapping for {}", host.mac()); | ||
410 | + dhcpService.setStaticMapping(host.mac(), | ||
411 | + host.ipAddresses().stream().findFirst().get().getIp4Address(), | ||
412 | + true, | ||
413 | + options); | ||
414 | + } | ||
415 | + | ||
416 | + /** | ||
385 | * Handles VM detected situation. | 417 | * Handles VM detected situation. |
386 | * | 418 | * |
387 | * @param host host | 419 | * @param host host |
... | @@ -420,6 +452,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -420,6 +452,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
420 | } | 452 | } |
421 | 453 | ||
422 | ruleInstaller.populateBasicConnectionRules(host, getTunnelIp(host), vNet); | 454 | ruleInstaller.populateBasicConnectionRules(host, getTunnelIp(host), vNet); |
455 | + registerDhcpLease(host, service); | ||
423 | } | 456 | } |
424 | 457 | ||
425 | /** | 458 | /** |
... | @@ -428,6 +461,11 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro | ... | @@ -428,6 +461,11 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro |
428 | * @param host host | 461 | * @param host host |
429 | */ | 462 | */ |
430 | private void serviceVmRemoved(Host host) { | 463 | private void serviceVmRemoved(Host host) { |
464 | + if (host.annotations().value(OPENSTACK_VM_ID) == null) { | ||
465 | + // this host was not injected from CordVtn, just return | ||
466 | + return; | ||
467 | + } | ||
468 | + | ||
431 | String vNetId = host.annotations().value(SERVICE_ID); | 469 | String vNetId = host.annotations().value(SERVICE_ID); |
432 | OpenstackNetwork vNet = openstackService.network(host.annotations().value(SERVICE_ID)); | 470 | OpenstackNetwork vNet = openstackService.network(host.annotations().value(SERVICE_ID)); |
433 | if (vNet == null) { | 471 | if (vNet == null) { | ... | ... |
-
Please register or login to post a comment