Committed by
Gerrit Code Review
DHCP Config changes + null pointer checks + ONOS-2881
Change-Id: Ice391f539ae816329fde7970d762380a36fd7661
Showing
13 changed files
with
212 additions
and
270 deletions
| ... | @@ -17,6 +17,7 @@ package org.onosproject.dhcp; | ... | @@ -17,6 +17,7 @@ package org.onosproject.dhcp; |
| 17 | 17 | ||
| 18 | import org.onlab.packet.Ip4Address; | 18 | import org.onlab.packet.Ip4Address; |
| 19 | import org.onlab.packet.MacAddress; | 19 | import org.onlab.packet.MacAddress; |
| 20 | +import org.onosproject.net.HostId; | ||
| 20 | 21 | ||
| 21 | import java.util.Map; | 22 | import java.util.Map; |
| 22 | 23 | ||
| ... | @@ -30,7 +31,7 @@ public interface DhcpService { | ... | @@ -30,7 +31,7 @@ public interface DhcpService { |
| 30 | * | 31 | * |
| 31 | * @return collection of mappings. | 32 | * @return collection of mappings. |
| 32 | */ | 33 | */ |
| 33 | - Map<MacAddress, IpAssignment> listMapping(); | 34 | + Map<HostId, IpAssignment> listMapping(); |
| 34 | 35 | ||
| 35 | /** | 36 | /** |
| 36 | * Returns the default lease time granted by the DHCP Server. | 37 | * Returns the default lease time granted by the DHCP Server. | ... | ... |
| ... | @@ -17,6 +17,7 @@ package org.onosproject.dhcp; | ... | @@ -17,6 +17,7 @@ package org.onosproject.dhcp; |
| 17 | 17 | ||
| 18 | import org.onlab.packet.Ip4Address; | 18 | import org.onlab.packet.Ip4Address; |
| 19 | import org.onlab.packet.MacAddress; | 19 | import org.onlab.packet.MacAddress; |
| 20 | +import org.onosproject.net.HostId; | ||
| 20 | 21 | ||
| 21 | import java.util.Map; | 22 | import java.util.Map; |
| 22 | 23 | ||
| ... | @@ -36,21 +37,21 @@ public interface DhcpStore { | ... | @@ -36,21 +37,21 @@ public interface DhcpStore { |
| 36 | /** | 37 | /** |
| 37 | * Returns an IP Address for a Mac ID, in response to a DHCP DISCOVER message. | 38 | * Returns an IP Address for a Mac ID, in response to a DHCP DISCOVER message. |
| 38 | * | 39 | * |
| 39 | - * @param macID Mac ID of the client requesting an IP | 40 | + * @param hostId Host ID of the client requesting an IP |
| 40 | * @param requestedIP requested IP address | 41 | * @param requestedIP requested IP address |
| 41 | * @return IP address assigned to the Mac ID | 42 | * @return IP address assigned to the Mac ID |
| 42 | */ | 43 | */ |
| 43 | - Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP); | 44 | + Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP); |
| 44 | 45 | ||
| 45 | /** | 46 | /** |
| 46 | * Assigns the requested IP to the Mac ID, in response to a DHCP REQUEST message. | 47 | * Assigns the requested IP to the Mac ID, in response to a DHCP REQUEST message. |
| 47 | * | 48 | * |
| 48 | - * @param macID Mac Id of the client requesting an IP | 49 | + * @param hostId Host Id of the client requesting an IP |
| 49 | * @param ipAddr IP Address being requested | 50 | * @param ipAddr IP Address being requested |
| 50 | * @param leaseTime Lease time offered by the server for this mapping | 51 | * @param leaseTime Lease time offered by the server for this mapping |
| 51 | * @return returns true if the assignment was successful, false otherwise | 52 | * @return returns true if the assignment was successful, false otherwise |
| 52 | */ | 53 | */ |
| 53 | - boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime); | 54 | + boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime); |
| 54 | 55 | ||
| 55 | /** | 56 | /** |
| 56 | * Sets the default time for which suggested IP mappings are valid. | 57 | * Sets the default time for which suggested IP mappings are valid. |
| ... | @@ -60,25 +61,18 @@ public interface DhcpStore { | ... | @@ -60,25 +61,18 @@ public interface DhcpStore { |
| 60 | void setDefaultTimeoutForPurge(int timeInSeconds); | 61 | void setDefaultTimeoutForPurge(int timeInSeconds); |
| 61 | 62 | ||
| 62 | /** | 63 | /** |
| 63 | - * Sets the delay after which the dhcp server will purge expired entries. | ||
| 64 | - * | ||
| 65 | - * @param timeInSeconds default time | ||
| 66 | - */ | ||
| 67 | - void setTimerDelay(int timeInSeconds); | ||
| 68 | - | ||
| 69 | - /** | ||
| 70 | * Releases the IP assigned to a Mac ID into the free pool. | 64 | * Releases the IP assigned to a Mac ID into the free pool. |
| 71 | * | 65 | * |
| 72 | - * @param macID the macID for which the mapping needs to be changed | 66 | + * @param hostId the host ID for which the mapping needs to be changed |
| 73 | */ | 67 | */ |
| 74 | - void releaseIP(MacAddress macID); | 68 | + void releaseIP(HostId hostId); |
| 75 | 69 | ||
| 76 | /** | 70 | /** |
| 77 | * Returns a collection of all the MacAddress to IPAddress mapping. | 71 | * Returns a collection of all the MacAddress to IPAddress mapping. |
| 78 | * | 72 | * |
| 79 | * @return the collection of the mappings | 73 | * @return the collection of the mappings |
| 80 | */ | 74 | */ |
| 81 | - Map<MacAddress, IpAssignment> listMapping(); | 75 | + Map<HostId, IpAssignment> listMapping(); |
| 82 | 76 | ||
| 83 | /** | 77 | /** |
| 84 | * Assigns the requested IP to the MAC ID (if available) for an indefinite period of time. | 78 | * Assigns the requested IP to the MAC ID (if available) for an indefinite period of time. | ... | ... |
| ... | @@ -100,10 +100,19 @@ public final class IpAssignment { | ... | @@ -100,10 +100,19 @@ public final class IpAssignment { |
| 100 | /** | 100 | /** |
| 101 | * Returns the lease period of the IP assignment. | 101 | * Returns the lease period of the IP assignment. |
| 102 | * | 102 | * |
| 103 | - * @return the lease period | 103 | + * @return the lease period in seconds |
| 104 | */ | 104 | */ |
| 105 | public int leasePeriod() { | 105 | public int leasePeriod() { |
| 106 | - return (int) this.leasePeriod / 1000; | 106 | + return (int) this.leasePeriod; |
| 107 | + } | ||
| 108 | + | ||
| 109 | + /** | ||
| 110 | + * Returns the lease period of the IP assignment. | ||
| 111 | + * | ||
| 112 | + * @return the lease period in milliseconds | ||
| 113 | + */ | ||
| 114 | + public int leasePeriodMs() { | ||
| 115 | + return (int) this.leasePeriod * 1000; | ||
| 107 | } | 116 | } |
| 108 | 117 | ||
| 109 | @Override | 118 | @Override |
| ... | @@ -155,7 +164,7 @@ public final class IpAssignment { | ... | @@ -155,7 +164,7 @@ public final class IpAssignment { |
| 155 | private Builder(IpAssignment ipAssignment) { | 164 | private Builder(IpAssignment ipAssignment) { |
| 156 | ipAddress = ipAssignment.ipAddress(); | 165 | ipAddress = ipAssignment.ipAddress(); |
| 157 | timeStamp = ipAssignment.timestamp(); | 166 | timeStamp = ipAssignment.timestamp(); |
| 158 | - leasePeriod = ipAssignment.leasePeriod() * 1000; | 167 | + leasePeriod = ipAssignment.leasePeriod(); |
| 159 | assignmentStatus = ipAssignment.assignmentStatus(); | 168 | assignmentStatus = ipAssignment.assignmentStatus(); |
| 160 | } | 169 | } |
| 161 | 170 | ||
| ... | @@ -178,7 +187,7 @@ public final class IpAssignment { | ... | @@ -178,7 +187,7 @@ public final class IpAssignment { |
| 178 | } | 187 | } |
| 179 | 188 | ||
| 180 | public Builder leasePeriod(int leasePeriodinSeconds) { | 189 | public Builder leasePeriod(int leasePeriodinSeconds) { |
| 181 | - leasePeriod = leasePeriodinSeconds * 1000; | 190 | + leasePeriod = leasePeriodinSeconds; |
| 182 | return this; | 191 | return this; |
| 183 | } | 192 | } |
| 184 | 193 | ... | ... |
| ... | @@ -16,10 +16,10 @@ | ... | @@ -16,10 +16,10 @@ |
| 16 | package org.onosproject.dhcp.cli; | 16 | package org.onosproject.dhcp.cli; |
| 17 | 17 | ||
| 18 | import org.apache.karaf.shell.commands.Command; | 18 | import org.apache.karaf.shell.commands.Command; |
| 19 | -import org.onlab.packet.MacAddress; | ||
| 20 | import org.onosproject.cli.AbstractShellCommand; | 19 | import org.onosproject.cli.AbstractShellCommand; |
| 21 | import org.onosproject.dhcp.DhcpService; | 20 | import org.onosproject.dhcp.DhcpService; |
| 22 | import org.onosproject.dhcp.IpAssignment; | 21 | import org.onosproject.dhcp.IpAssignment; |
| 22 | +import org.onosproject.net.HostId; | ||
| 23 | 23 | ||
| 24 | import java.util.Map; | 24 | import java.util.Map; |
| 25 | 25 | ||
| ... | @@ -35,9 +35,9 @@ public class DhcpListAllMappings extends AbstractShellCommand { | ... | @@ -35,9 +35,9 @@ public class DhcpListAllMappings extends AbstractShellCommand { |
| 35 | protected void execute() { | 35 | protected void execute() { |
| 36 | 36 | ||
| 37 | DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class); | 37 | DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class); |
| 38 | - Map<MacAddress, IpAssignment> allocationMap = dhcpService.listMapping(); | 38 | + Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping(); |
| 39 | 39 | ||
| 40 | - for (Map.Entry<MacAddress, IpAssignment> entry : allocationMap.entrySet()) { | 40 | + for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) { |
| 41 | print(DHCP_MAPPING_FORMAT, entry.getKey().toString(), entry.getValue().ipAddress().toString()); | 41 | print(DHCP_MAPPING_FORMAT, entry.getKey().toString(), entry.getValue().ipAddress().toString()); |
| 42 | } | 42 | } |
| 43 | } | 43 | } | ... | ... |
| ... | @@ -15,6 +15,8 @@ | ... | @@ -15,6 +15,8 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.dhcp.impl; | 16 | package org.onosproject.dhcp.impl; |
| 17 | 17 | ||
| 18 | +import org.onlab.packet.Ip4Address; | ||
| 19 | +import org.onlab.packet.MacAddress; | ||
| 18 | import org.onosproject.core.ApplicationId; | 20 | import org.onosproject.core.ApplicationId; |
| 19 | import org.onosproject.net.config.Config; | 21 | import org.onosproject.net.config.Config; |
| 20 | import org.onosproject.net.config.basics.BasicElementConfig; | 22 | import org.onosproject.net.config.basics.BasicElementConfig; |
| ... | @@ -34,14 +36,19 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -34,14 +36,19 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 34 | public static final String LEASE_TIME = "lease"; | 36 | public static final String LEASE_TIME = "lease"; |
| 35 | public static final String RENEW_TIME = "renew"; | 37 | public static final String RENEW_TIME = "renew"; |
| 36 | public static final String REBIND_TIME = "rebind"; | 38 | public static final String REBIND_TIME = "rebind"; |
| 39 | + public static final String TIMER_DELAY = "delay"; | ||
| 40 | + public static final String DEFAULT_TIMEOUT = "timeout"; | ||
| 41 | + public static final String START_IP = "startip"; | ||
| 42 | + public static final String END_IP = "endip"; | ||
| 37 | 43 | ||
| 38 | /** | 44 | /** |
| 39 | * Returns the dhcp server ip. | 45 | * Returns the dhcp server ip. |
| 40 | * | 46 | * |
| 41 | * @return ip address or null if not set | 47 | * @return ip address or null if not set |
| 42 | */ | 48 | */ |
| 43 | - public String ip() { | 49 | + public Ip4Address ip() { |
| 44 | - return get(MY_IP, null); | 50 | + String ip = get(MY_IP, null); |
| 51 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 45 | } | 52 | } |
| 46 | 53 | ||
| 47 | /** | 54 | /** |
| ... | @@ -59,8 +66,9 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -59,8 +66,9 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 59 | * | 66 | * |
| 60 | * @return server mac or null if not set | 67 | * @return server mac or null if not set |
| 61 | */ | 68 | */ |
| 62 | - public String mac() { | 69 | + public MacAddress mac() { |
| 63 | - return get(MY_MAC, null); | 70 | + String mac = get(MY_MAC, null); |
| 71 | + return mac != null ? MacAddress.valueOf(mac) : null; | ||
| 64 | } | 72 | } |
| 65 | 73 | ||
| 66 | /** | 74 | /** |
| ... | @@ -78,8 +86,9 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -78,8 +86,9 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 78 | * | 86 | * |
| 79 | * @return subnet mask or null if not set | 87 | * @return subnet mask or null if not set |
| 80 | */ | 88 | */ |
| 81 | - public String subnetMask() { | 89 | + public Ip4Address subnetMask() { |
| 82 | - return get(SUBNET_MASK, null); | 90 | + String ip = get(SUBNET_MASK, null); |
| 91 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 83 | } | 92 | } |
| 84 | 93 | ||
| 85 | /** | 94 | /** |
| ... | @@ -97,8 +106,9 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -97,8 +106,9 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 97 | * | 106 | * |
| 98 | * @return broadcast address or null if not set | 107 | * @return broadcast address or null if not set |
| 99 | */ | 108 | */ |
| 100 | - public String broadcastAddress() { | 109 | + public Ip4Address broadcastAddress() { |
| 101 | - return get(BROADCAST_ADDRESS, null); | 110 | + String ip = get(BROADCAST_ADDRESS, null); |
| 111 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 102 | } | 112 | } |
| 103 | 113 | ||
| 104 | /** | 114 | /** |
| ... | @@ -116,8 +126,8 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -116,8 +126,8 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 116 | * | 126 | * |
| 117 | * @return ttl or null if not set | 127 | * @return ttl or null if not set |
| 118 | */ | 128 | */ |
| 119 | - public String ttl() { | 129 | + public int ttl() { |
| 120 | - return get(TTL, null); | 130 | + return get(TTL, 0); |
| 121 | } | 131 | } |
| 122 | 132 | ||
| 123 | /** | 133 | /** |
| ... | @@ -126,7 +136,7 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -126,7 +136,7 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 126 | * @param ttl new ttl; null to clear | 136 | * @param ttl new ttl; null to clear |
| 127 | * @return self | 137 | * @return self |
| 128 | */ | 138 | */ |
| 129 | - public BasicElementConfig ttl(String ttl) { | 139 | + public BasicElementConfig ttl(int ttl) { |
| 130 | return (BasicElementConfig) setOrClear(TTL, ttl); | 140 | return (BasicElementConfig) setOrClear(TTL, ttl); |
| 131 | } | 141 | } |
| 132 | 142 | ||
| ... | @@ -135,8 +145,8 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -135,8 +145,8 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 135 | * | 145 | * |
| 136 | * @return lease time or null if not set | 146 | * @return lease time or null if not set |
| 137 | */ | 147 | */ |
| 138 | - public String leaseTime() { | 148 | + public int leaseTime() { |
| 139 | - return get(LEASE_TIME, null); | 149 | + return get(LEASE_TIME, 0); |
| 140 | } | 150 | } |
| 141 | 151 | ||
| 142 | /** | 152 | /** |
| ... | @@ -145,7 +155,7 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -145,7 +155,7 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 145 | * @param lease new lease time; null to clear | 155 | * @param lease new lease time; null to clear |
| 146 | * @return self | 156 | * @return self |
| 147 | */ | 157 | */ |
| 148 | - public BasicElementConfig leaseTime(String lease) { | 158 | + public BasicElementConfig leaseTime(int lease) { |
| 149 | return (BasicElementConfig) setOrClear(LEASE_TIME, lease); | 159 | return (BasicElementConfig) setOrClear(LEASE_TIME, lease); |
| 150 | } | 160 | } |
| 151 | 161 | ||
| ... | @@ -154,8 +164,8 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -154,8 +164,8 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 154 | * | 164 | * |
| 155 | * @return renew time or null if not set | 165 | * @return renew time or null if not set |
| 156 | */ | 166 | */ |
| 157 | - public String renewTime() { | 167 | + public int renewTime() { |
| 158 | - return get(RENEW_TIME, null); | 168 | + return get(RENEW_TIME, 0); |
| 159 | } | 169 | } |
| 160 | 170 | ||
| 161 | /** | 171 | /** |
| ... | @@ -164,7 +174,7 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -164,7 +174,7 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 164 | * @param renew new renew time; null to clear | 174 | * @param renew new renew time; null to clear |
| 165 | * @return self | 175 | * @return self |
| 166 | */ | 176 | */ |
| 167 | - public BasicElementConfig renewTime(String renew) { | 177 | + public BasicElementConfig renewTime(int renew) { |
| 168 | return (BasicElementConfig) setOrClear(RENEW_TIME, renew); | 178 | return (BasicElementConfig) setOrClear(RENEW_TIME, renew); |
| 169 | } | 179 | } |
| 170 | 180 | ||
| ... | @@ -173,8 +183,8 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -173,8 +183,8 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 173 | * | 183 | * |
| 174 | * @return rebind time or null if not set | 184 | * @return rebind time or null if not set |
| 175 | */ | 185 | */ |
| 176 | - public String rebindTime() { | 186 | + public int rebindTime() { |
| 177 | - return get(REBIND_TIME, null); | 187 | + return get(REBIND_TIME, 0); |
| 178 | } | 188 | } |
| 179 | 189 | ||
| 180 | /** | 190 | /** |
| ... | @@ -183,7 +193,7 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -183,7 +193,7 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 183 | * @param rebind new rebind time; null to clear | 193 | * @param rebind new rebind time; null to clear |
| 184 | * @return self | 194 | * @return self |
| 185 | */ | 195 | */ |
| 186 | - public BasicElementConfig rebindTime(String rebind) { | 196 | + public BasicElementConfig rebindTime(int rebind) { |
| 187 | return (BasicElementConfig) setOrClear(REBIND_TIME, rebind); | 197 | return (BasicElementConfig) setOrClear(REBIND_TIME, rebind); |
| 188 | } | 198 | } |
| 189 | 199 | ||
| ... | @@ -192,8 +202,9 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -192,8 +202,9 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 192 | * | 202 | * |
| 193 | * @return router address or null if not set | 203 | * @return router address or null if not set |
| 194 | */ | 204 | */ |
| 195 | - public String routerAddress() { | 205 | + public Ip4Address routerAddress() { |
| 196 | - return get(ROUTER_ADDRESS, null); | 206 | + String ip = get(ROUTER_ADDRESS, null); |
| 207 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 197 | } | 208 | } |
| 198 | 209 | ||
| 199 | /** | 210 | /** |
| ... | @@ -211,8 +222,9 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -211,8 +222,9 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 211 | * | 222 | * |
| 212 | * @return domain server address or null if not set | 223 | * @return domain server address or null if not set |
| 213 | */ | 224 | */ |
| 214 | - public String domainServer() { | 225 | + public Ip4Address domainServer() { |
| 215 | - return get(DOMAIN_SERVER, null); | 226 | + String ip = get(DOMAIN_SERVER, null); |
| 227 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 216 | } | 228 | } |
| 217 | 229 | ||
| 218 | /** | 230 | /** |
| ... | @@ -224,4 +236,82 @@ public class DhcpConfig extends Config<ApplicationId> { | ... | @@ -224,4 +236,82 @@ public class DhcpConfig extends Config<ApplicationId> { |
| 224 | public BasicElementConfig domainServer(String domain) { | 236 | public BasicElementConfig domainServer(String domain) { |
| 225 | return (BasicElementConfig) setOrClear(DOMAIN_SERVER, domain); | 237 | return (BasicElementConfig) setOrClear(DOMAIN_SERVER, domain); |
| 226 | } | 238 | } |
| 239 | + | ||
| 240 | + /** | ||
| 241 | + * Returns the delay after which the dhcp server will purge expired entries. | ||
| 242 | + * | ||
| 243 | + * @return time delay or null if not set | ||
| 244 | + */ | ||
| 245 | + public int timerDelay() { | ||
| 246 | + return get(TIMER_DELAY, 0); | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + /** | ||
| 250 | + * Sets the delay after which the dhcp server will purge expired entries. | ||
| 251 | + * | ||
| 252 | + * @param delay new time delay; null to clear | ||
| 253 | + * @return self | ||
| 254 | + */ | ||
| 255 | + public BasicElementConfig timerDelay(int delay) { | ||
| 256 | + return (BasicElementConfig) setOrClear(TIMER_DELAY, delay); | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + /** | ||
| 260 | + * Returns the default timeout for pending assignments. | ||
| 261 | + * | ||
| 262 | + * @return default timeout or null if not set | ||
| 263 | + */ | ||
| 264 | + public int defaultTimeout() { | ||
| 265 | + return get(DEFAULT_TIMEOUT, 0); | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + /** | ||
| 269 | + * Sets the default timeout for pending assignments. | ||
| 270 | + * | ||
| 271 | + * @param defaultTimeout new default timeout; null to clear | ||
| 272 | + * @return self | ||
| 273 | + */ | ||
| 274 | + public BasicElementConfig defaultTimeout(int defaultTimeout) { | ||
| 275 | + return (BasicElementConfig) setOrClear(DEFAULT_TIMEOUT, defaultTimeout); | ||
| 276 | + } | ||
| 277 | + | ||
| 278 | + /** | ||
| 279 | + * Returns the start IP for the available IP Range. | ||
| 280 | + * | ||
| 281 | + * @return start IP or null if not set | ||
| 282 | + */ | ||
| 283 | + public Ip4Address startIp() { | ||
| 284 | + String ip = get(START_IP, null); | ||
| 285 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 286 | + } | ||
| 287 | + | ||
| 288 | + /** | ||
| 289 | + * Sets the start IP for the available IP Range. | ||
| 290 | + * | ||
| 291 | + * @param startIp new start IP; null to clear | ||
| 292 | + * @return self | ||
| 293 | + */ | ||
| 294 | + public BasicElementConfig startIp(String startIp) { | ||
| 295 | + return (BasicElementConfig) setOrClear(START_IP, startIp); | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + /** | ||
| 299 | + * Returns the end IP for the available IP Range. | ||
| 300 | + * | ||
| 301 | + * @return end IP or null if not set | ||
| 302 | + */ | ||
| 303 | + public Ip4Address endIp() { | ||
| 304 | + String ip = get(END_IP, null); | ||
| 305 | + return ip != null ? Ip4Address.valueOf(ip) : null; | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + /** | ||
| 309 | + * Sets the end IP for the available IP Range. | ||
| 310 | + * | ||
| 311 | + * @param endIp new end IP; null to clear | ||
| 312 | + * @return self | ||
| 313 | + */ | ||
| 314 | + public BasicElementConfig endIp(String endIp) { | ||
| 315 | + return (BasicElementConfig) setOrClear(END_IP, endIp); | ||
| 316 | + } | ||
| 227 | } | 317 | } | ... | ... |
This diff is collapsed. Click to expand it.
| 1 | -/* | ||
| 2 | - * Copyright 2014 Open Networking Laboratory | ||
| 3 | - * | ||
| 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 | -package org.onosproject.dhcp.impl; | ||
| 17 | - | ||
| 18 | -import org.onosproject.core.ApplicationId; | ||
| 19 | -import org.onosproject.net.config.Config; | ||
| 20 | -import org.onosproject.net.config.basics.BasicElementConfig; | ||
| 21 | - | ||
| 22 | -/** | ||
| 23 | - * DHCP Store Config class. | ||
| 24 | - */ | ||
| 25 | -public class DhcpStoreConfig extends Config<ApplicationId> { | ||
| 26 | - | ||
| 27 | - // FIXME: combine with the other config and properly type the values | ||
| 28 | - | ||
| 29 | - public static final String TIMER_DELAY = "delay"; | ||
| 30 | - public static final String DEFAULT_TIMEOUT = "timeout"; | ||
| 31 | - public static final String START_IP = "startip"; | ||
| 32 | - public static final String END_IP = "endip"; | ||
| 33 | - | ||
| 34 | - /** | ||
| 35 | - * Returns the delay after which the dhcp server will purge expired entries. | ||
| 36 | - * | ||
| 37 | - * @return time delay or null if not set | ||
| 38 | - */ | ||
| 39 | - public String timerDelay() { | ||
| 40 | - return get(TIMER_DELAY, null); | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | - /** | ||
| 44 | - * Sets the delay after which the dhcp server will purge expired entries. | ||
| 45 | - * | ||
| 46 | - * @param delay new time delay; null to clear | ||
| 47 | - * @return self | ||
| 48 | - */ | ||
| 49 | - public BasicElementConfig timerDelay(String delay) { | ||
| 50 | - return (BasicElementConfig) setOrClear(TIMER_DELAY, delay); | ||
| 51 | - } | ||
| 52 | - | ||
| 53 | - /** | ||
| 54 | - * Returns the default timeout for pending assignments. | ||
| 55 | - * | ||
| 56 | - * @return default timeout or null if not set | ||
| 57 | - */ | ||
| 58 | - public String defaultTimeout() { | ||
| 59 | - return get(DEFAULT_TIMEOUT, null); | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - /** | ||
| 63 | - * Sets the default timeout for pending assignments. | ||
| 64 | - * | ||
| 65 | - * @param defaultTimeout new default timeout; null to clear | ||
| 66 | - * @return self | ||
| 67 | - */ | ||
| 68 | - public BasicElementConfig defaultTimeout(String defaultTimeout) { | ||
| 69 | - return (BasicElementConfig) setOrClear(DEFAULT_TIMEOUT, defaultTimeout); | ||
| 70 | - } | ||
| 71 | - | ||
| 72 | - /** | ||
| 73 | - * Returns the start IP for the available IP Range. | ||
| 74 | - * | ||
| 75 | - * @return start IP or null if not set | ||
| 76 | - */ | ||
| 77 | - public String startIP() { | ||
| 78 | - return get(START_IP, null); | ||
| 79 | - } | ||
| 80 | - | ||
| 81 | - /** | ||
| 82 | - * Sets the start IP for the available IP Range. | ||
| 83 | - * | ||
| 84 | - * @param startIP new start IP; null to clear | ||
| 85 | - * @return self | ||
| 86 | - */ | ||
| 87 | - public BasicElementConfig startIP(String startIP) { | ||
| 88 | - return (BasicElementConfig) setOrClear(START_IP, startIP); | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - /** | ||
| 92 | - * Returns the end IP for the available IP Range. | ||
| 93 | - * | ||
| 94 | - * @return end IP or null if not set | ||
| 95 | - */ | ||
| 96 | - public String endIP() { | ||
| 97 | - return get(END_IP, null); | ||
| 98 | - } | ||
| 99 | - | ||
| 100 | - /** | ||
| 101 | - * Sets the end IP for the available IP Range. | ||
| 102 | - * | ||
| 103 | - * @param endIP new end IP; null to clear | ||
| 104 | - * @return self | ||
| 105 | - */ | ||
| 106 | - public BasicElementConfig endIP(String endIP) { | ||
| 107 | - return (BasicElementConfig) setOrClear(END_IP, endIP); | ||
| 108 | - } | ||
| 109 | -} |
| ... | @@ -17,10 +17,10 @@ package org.onosproject.dhcp.impl; | ... | @@ -17,10 +17,10 @@ package org.onosproject.dhcp.impl; |
| 17 | 17 | ||
| 18 | import com.fasterxml.jackson.databind.node.ObjectNode; | 18 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 19 | import com.google.common.collect.ImmutableSet; | 19 | import com.google.common.collect.ImmutableSet; |
| 20 | -import org.onlab.packet.MacAddress; | ||
| 21 | import org.onosproject.cli.AbstractShellCommand; | 20 | import org.onosproject.cli.AbstractShellCommand; |
| 22 | import org.onosproject.dhcp.DhcpService; | 21 | import org.onosproject.dhcp.DhcpService; |
| 23 | import org.onosproject.dhcp.IpAssignment; | 22 | import org.onosproject.dhcp.IpAssignment; |
| 23 | +import org.onosproject.net.HostId; | ||
| 24 | import org.onosproject.ui.RequestHandler; | 24 | import org.onosproject.ui.RequestHandler; |
| 25 | import org.onosproject.ui.UiMessageHandler; | 25 | import org.onosproject.ui.UiMessageHandler; |
| 26 | import org.onosproject.ui.table.TableModel; | 26 | import org.onosproject.ui.table.TableModel; |
| ... | @@ -39,12 +39,12 @@ public class DhcpViewMessageHandler extends UiMessageHandler { | ... | @@ -39,12 +39,12 @@ public class DhcpViewMessageHandler extends UiMessageHandler { |
| 39 | private static final String DHCP_DATA_RESP = "dhcpDataResponse"; | 39 | private static final String DHCP_DATA_RESP = "dhcpDataResponse"; |
| 40 | private static final String DHCP = "dhcps"; | 40 | private static final String DHCP = "dhcps"; |
| 41 | 41 | ||
| 42 | - private static final String MAC = "mac"; | 42 | + private static final String HOST = "host"; |
| 43 | private static final String IP = "ip"; | 43 | private static final String IP = "ip"; |
| 44 | private static final String LEASE = "lease"; | 44 | private static final String LEASE = "lease"; |
| 45 | 45 | ||
| 46 | private static final String[] COL_IDS = { | 46 | private static final String[] COL_IDS = { |
| 47 | - MAC, IP, LEASE | 47 | + HOST, IP, LEASE |
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | @Override | 50 | @Override |
| ... | @@ -63,7 +63,7 @@ public class DhcpViewMessageHandler extends UiMessageHandler { | ... | @@ -63,7 +63,7 @@ public class DhcpViewMessageHandler extends UiMessageHandler { |
| 63 | 63 | ||
| 64 | @Override | 64 | @Override |
| 65 | protected String defaultColumnId() { | 65 | protected String defaultColumnId() { |
| 66 | - return MAC; | 66 | + return HOST; |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | @Override | 69 | @Override |
| ... | @@ -74,21 +74,21 @@ public class DhcpViewMessageHandler extends UiMessageHandler { | ... | @@ -74,21 +74,21 @@ public class DhcpViewMessageHandler extends UiMessageHandler { |
| 74 | @Override | 74 | @Override |
| 75 | protected void populateTable(TableModel tm, ObjectNode payload) { | 75 | protected void populateTable(TableModel tm, ObjectNode payload) { |
| 76 | DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class); | 76 | DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class); |
| 77 | - Map<MacAddress, IpAssignment> allocationMap = dhcpService.listMapping(); | 77 | + Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping(); |
| 78 | 78 | ||
| 79 | - for (Map.Entry<MacAddress, IpAssignment> entry : allocationMap.entrySet()) { | 79 | + for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) { |
| 80 | populateRow(tm.addRow(), entry); | 80 | populateRow(tm.addRow(), entry); |
| 81 | } | 81 | } |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | - private void populateRow(TableModel.Row row, Map.Entry<MacAddress, IpAssignment> entry) { | 84 | + private void populateRow(TableModel.Row row, Map.Entry<HostId, IpAssignment> entry) { |
| 85 | if (entry.getValue().leasePeriod() > 0) { | 85 | if (entry.getValue().leasePeriod() > 0) { |
| 86 | Date now = new Date(entry.getValue().timestamp().getTime() + entry.getValue().leasePeriod()); | 86 | Date now = new Date(entry.getValue().timestamp().getTime() + entry.getValue().leasePeriod()); |
| 87 | - row.cell(MAC, entry.getKey()) | 87 | + row.cell(HOST, entry.getKey()) |
| 88 | .cell(IP, entry.getValue().ipAddress()) | 88 | .cell(IP, entry.getValue().ipAddress()) |
| 89 | .cell(LEASE, now.toString()); | 89 | .cell(LEASE, now.toString()); |
| 90 | } else { | 90 | } else { |
| 91 | - row.cell(MAC, entry.getKey()) | 91 | + row.cell(HOST, entry.getKey()) |
| 92 | .cell(IP, entry.getValue().ipAddress()) | 92 | .cell(IP, entry.getValue().ipAddress()) |
| 93 | .cell(LEASE, "Infinite Static Lease"); | 93 | .cell(LEASE, "Infinite Static Lease"); |
| 94 | } | 94 | } | ... | ... |
| ... | @@ -22,14 +22,12 @@ import org.apache.felix.scr.annotations.Deactivate; | ... | @@ -22,14 +22,12 @@ import org.apache.felix.scr.annotations.Deactivate; |
| 22 | import org.apache.felix.scr.annotations.Reference; | 22 | import org.apache.felix.scr.annotations.Reference; |
| 23 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 23 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
| 24 | import org.apache.felix.scr.annotations.Service; | 24 | import org.apache.felix.scr.annotations.Service; |
| 25 | -import org.jboss.netty.util.Timeout; | ||
| 26 | -import org.jboss.netty.util.TimerTask; | ||
| 27 | import org.onlab.packet.Ip4Address; | 25 | import org.onlab.packet.Ip4Address; |
| 28 | import org.onlab.packet.MacAddress; | 26 | import org.onlab.packet.MacAddress; |
| 29 | import org.onlab.util.KryoNamespace; | 27 | import org.onlab.util.KryoNamespace; |
| 30 | -import org.onlab.util.Timer; | ||
| 31 | import org.onosproject.dhcp.DhcpStore; | 28 | import org.onosproject.dhcp.DhcpStore; |
| 32 | import org.onosproject.dhcp.IpAssignment; | 29 | import org.onosproject.dhcp.IpAssignment; |
| 30 | +import org.onosproject.net.HostId; | ||
| 33 | import org.onosproject.store.serializers.KryoNamespaces; | 31 | import org.onosproject.store.serializers.KryoNamespaces; |
| 34 | import org.onosproject.store.service.ConsistentMap; | 32 | import org.onosproject.store.service.ConsistentMap; |
| 35 | import org.onosproject.store.service.DistributedSet; | 33 | import org.onosproject.store.service.DistributedSet; |
| ... | @@ -42,7 +40,6 @@ import org.slf4j.LoggerFactory; | ... | @@ -42,7 +40,6 @@ import org.slf4j.LoggerFactory; |
| 42 | import java.util.Date; | 40 | import java.util.Date; |
| 43 | import java.util.HashMap; | 41 | import java.util.HashMap; |
| 44 | import java.util.Map; | 42 | import java.util.Map; |
| 45 | -import java.util.concurrent.TimeUnit; | ||
| 46 | 43 | ||
| 47 | /** | 44 | /** |
| 48 | * Manages the pool of available IP Addresses in the network and | 45 | * Manages the pool of available IP Addresses in the network and |
| ... | @@ -58,25 +55,21 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -58,25 +55,21 @@ public class DistributedDhcpStore implements DhcpStore { |
| 58 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 55 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 59 | protected StorageService storageService; | 56 | protected StorageService storageService; |
| 60 | 57 | ||
| 61 | - private ConsistentMap<MacAddress, IpAssignment> allocationMap; | 58 | + private ConsistentMap<HostId, IpAssignment> allocationMap; |
| 62 | 59 | ||
| 63 | private DistributedSet<Ip4Address> freeIPPool; | 60 | private DistributedSet<Ip4Address> freeIPPool; |
| 64 | 61 | ||
| 65 | - private Timeout timeout; | ||
| 66 | - | ||
| 67 | private static Ip4Address startIPRange; | 62 | private static Ip4Address startIPRange; |
| 68 | 63 | ||
| 69 | private static Ip4Address endIPRange; | 64 | private static Ip4Address endIPRange; |
| 70 | 65 | ||
| 71 | // Hardcoded values are default values. | 66 | // Hardcoded values are default values. |
| 72 | 67 | ||
| 73 | - private static int timerDelay = 2; | ||
| 74 | - | ||
| 75 | private static int timeoutForPendingAssignments = 60; | 68 | private static int timeoutForPendingAssignments = 60; |
| 76 | 69 | ||
| 77 | @Activate | 70 | @Activate |
| 78 | protected void activate() { | 71 | protected void activate() { |
| 79 | - allocationMap = storageService.<MacAddress, IpAssignment>consistentMapBuilder() | 72 | + allocationMap = storageService.<HostId, IpAssignment>consistentMapBuilder() |
| 80 | .withName("onos-dhcp-assignedIP") | 73 | .withName("onos-dhcp-assignedIP") |
| 81 | .withSerializer(Serializer.using( | 74 | .withSerializer(Serializer.using( |
| 82 | new KryoNamespace.Builder() | 75 | new KryoNamespace.Builder() |
| ... | @@ -94,23 +87,20 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -94,23 +87,20 @@ public class DistributedDhcpStore implements DhcpStore { |
| 94 | .withSerializer(Serializer.using(KryoNamespaces.API)) | 87 | .withSerializer(Serializer.using(KryoNamespaces.API)) |
| 95 | .build(); | 88 | .build(); |
| 96 | 89 | ||
| 97 | - timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES); | ||
| 98 | - | ||
| 99 | log.info("Started"); | 90 | log.info("Started"); |
| 100 | } | 91 | } |
| 101 | 92 | ||
| 102 | @Deactivate | 93 | @Deactivate |
| 103 | protected void deactivate() { | 94 | protected void deactivate() { |
| 104 | - timeout.cancel(); | ||
| 105 | log.info("Stopped"); | 95 | log.info("Stopped"); |
| 106 | } | 96 | } |
| 107 | 97 | ||
| 108 | @Override | 98 | @Override |
| 109 | - public Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP) { | 99 | + public Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP) { |
| 110 | 100 | ||
| 111 | IpAssignment assignmentInfo; | 101 | IpAssignment assignmentInfo; |
| 112 | - if (allocationMap.containsKey(macID)) { | 102 | + if (allocationMap.containsKey(hostId)) { |
| 113 | - assignmentInfo = allocationMap.get(macID).value(); | 103 | + assignmentInfo = allocationMap.get(hostId).value(); |
| 114 | IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus(); | 104 | IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus(); |
| 115 | Ip4Address ipAddr = assignmentInfo.ipAddress(); | 105 | Ip4Address ipAddr = assignmentInfo.ipAddress(); |
| 116 | 106 | ||
| ... | @@ -131,7 +121,7 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -131,7 +121,7 @@ public class DistributedDhcpStore implements DhcpStore { |
| 131 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) | 121 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) |
| 132 | .build(); | 122 | .build(); |
| 133 | if (freeIPPool.remove(ipAddr)) { | 123 | if (freeIPPool.remove(ipAddr)) { |
| 134 | - allocationMap.put(macID, assignmentInfo); | 124 | + allocationMap.put(hostId, assignmentInfo); |
| 135 | return ipAddr; | 125 | return ipAddr; |
| 136 | } | 126 | } |
| 137 | } | 127 | } |
| ... | @@ -148,7 +138,7 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -148,7 +138,7 @@ public class DistributedDhcpStore implements DhcpStore { |
| 148 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) | 138 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) |
| 149 | .build(); | 139 | .build(); |
| 150 | if (freeIPPool.remove(requestedIP)) { | 140 | if (freeIPPool.remove(requestedIP)) { |
| 151 | - allocationMap.put(macID, assignmentInfo); | 141 | + allocationMap.put(hostId, assignmentInfo); |
| 152 | return requestedIP; | 142 | return requestedIP; |
| 153 | } | 143 | } |
| 154 | } | 144 | } |
| ... | @@ -156,24 +146,26 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -156,24 +146,26 @@ public class DistributedDhcpStore implements DhcpStore { |
| 156 | 146 | ||
| 157 | // Allocate a new IP from the server's pool of available IP. | 147 | // Allocate a new IP from the server's pool of available IP. |
| 158 | Ip4Address nextIPAddr = fetchNextIP(); | 148 | Ip4Address nextIPAddr = fetchNextIP(); |
| 159 | - assignmentInfo = IpAssignment.builder() | 149 | + if (nextIPAddr != null) { |
| 160 | - .ipAddress(nextIPAddr) | 150 | + assignmentInfo = IpAssignment.builder() |
| 161 | - .timestamp(new Date()) | 151 | + .ipAddress(nextIPAddr) |
| 162 | - .leasePeriod(timeoutForPendingAssignments) | 152 | + .timestamp(new Date()) |
| 163 | - .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) | 153 | + .leasePeriod(timeoutForPendingAssignments) |
| 164 | - .build(); | 154 | + .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested) |
| 155 | + .build(); | ||
| 165 | 156 | ||
| 166 | - allocationMap.put(macID, assignmentInfo); | 157 | + allocationMap.put(hostId, assignmentInfo); |
| 158 | + } | ||
| 167 | return nextIPAddr; | 159 | return nextIPAddr; |
| 168 | 160 | ||
| 169 | } | 161 | } |
| 170 | 162 | ||
| 171 | @Override | 163 | @Override |
| 172 | - public boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime) { | 164 | + public boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime) { |
| 173 | 165 | ||
| 174 | IpAssignment assignmentInfo; | 166 | IpAssignment assignmentInfo; |
| 175 | - if (allocationMap.containsKey(macID)) { | 167 | + if (allocationMap.containsKey(hostId)) { |
| 176 | - assignmentInfo = allocationMap.get(macID).value(); | 168 | + assignmentInfo = allocationMap.get(hostId).value(); |
| 177 | if ((assignmentInfo.ipAddress().toInt() == ipAddr.toInt()) && | 169 | if ((assignmentInfo.ipAddress().toInt() == ipAddr.toInt()) && |
| 178 | (ipAddr.toInt() >= startIPRange.toInt()) && (ipAddr.toInt() <= endIPRange.toInt())) { | 170 | (ipAddr.toInt() >= startIPRange.toInt()) && (ipAddr.toInt() <= endIPRange.toInt())) { |
| 179 | 171 | ||
| ... | @@ -183,7 +175,7 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -183,7 +175,7 @@ public class DistributedDhcpStore implements DhcpStore { |
| 183 | .leasePeriod(leaseTime) | 175 | .leasePeriod(leaseTime) |
| 184 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) | 176 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) |
| 185 | .build(); | 177 | .build(); |
| 186 | - allocationMap.put(macID, assignmentInfo); | 178 | + allocationMap.put(hostId, assignmentInfo); |
| 187 | return true; | 179 | return true; |
| 188 | } | 180 | } |
| 189 | } else if (freeIPPool.contains(ipAddr)) { | 181 | } else if (freeIPPool.contains(ipAddr)) { |
| ... | @@ -194,7 +186,7 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -194,7 +186,7 @@ public class DistributedDhcpStore implements DhcpStore { |
| 194 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) | 186 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) |
| 195 | .build(); | 187 | .build(); |
| 196 | if (freeIPPool.remove(ipAddr)) { | 188 | if (freeIPPool.remove(ipAddr)) { |
| 197 | - allocationMap.put(macID, assignmentInfo); | 189 | + allocationMap.put(hostId, assignmentInfo); |
| 198 | return true; | 190 | return true; |
| 199 | } | 191 | } |
| 200 | } | 192 | } |
| ... | @@ -202,14 +194,16 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -202,14 +194,16 @@ public class DistributedDhcpStore implements DhcpStore { |
| 202 | } | 194 | } |
| 203 | 195 | ||
| 204 | @Override | 196 | @Override |
| 205 | - public void releaseIP(MacAddress macID) { | 197 | + public void releaseIP(HostId hostId) { |
| 206 | - if (allocationMap.containsKey(macID)) { | 198 | + if (allocationMap.containsKey(hostId)) { |
| 207 | - IpAssignment newAssignment = IpAssignment.builder(allocationMap.get(macID).value()) | 199 | + IpAssignment newAssignment = IpAssignment.builder(allocationMap.get(hostId).value()) |
| 208 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired) | 200 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired) |
| 209 | .build(); | 201 | .build(); |
| 210 | Ip4Address freeIP = newAssignment.ipAddress(); | 202 | Ip4Address freeIP = newAssignment.ipAddress(); |
| 211 | - allocationMap.put(macID, newAssignment); | 203 | + allocationMap.put(hostId, newAssignment); |
| 212 | - freeIPPool.add(freeIP); | 204 | + if ((freeIP.toInt() > startIPRange.toInt()) && (freeIP.toInt() < endIPRange.toInt())) { |
| 205 | + freeIPPool.add(freeIP); | ||
| 206 | + } | ||
| 213 | } | 207 | } |
| 214 | } | 208 | } |
| 215 | 209 | ||
| ... | @@ -219,15 +213,10 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -219,15 +213,10 @@ public class DistributedDhcpStore implements DhcpStore { |
| 219 | } | 213 | } |
| 220 | 214 | ||
| 221 | @Override | 215 | @Override |
| 222 | - public void setTimerDelay(int timeInSeconds) { | 216 | + public Map<HostId, IpAssignment> listMapping() { |
| 223 | - timerDelay = timeInSeconds; | ||
| 224 | - } | ||
| 225 | - | ||
| 226 | - @Override | ||
| 227 | - public Map<MacAddress, IpAssignment> listMapping() { | ||
| 228 | 217 | ||
| 229 | - Map<MacAddress, IpAssignment> allMapping = new HashMap<>(); | 218 | + Map<HostId, IpAssignment> allMapping = new HashMap<>(); |
| 230 | - for (Map.Entry<MacAddress, Versioned<IpAssignment>> entry: allocationMap.entrySet()) { | 219 | + for (Map.Entry<HostId, Versioned<IpAssignment>> entry: allocationMap.entrySet()) { |
| 231 | IpAssignment assignment = entry.getValue().value(); | 220 | IpAssignment assignment = entry.getValue().value(); |
| 232 | if (assignment.assignmentStatus() == IpAssignment.AssignmentStatus.Option_Assigned) { | 221 | if (assignment.assignmentStatus() == IpAssignment.AssignmentStatus.Option_Assigned) { |
| 233 | allMapping.put(entry.getKey(), assignment); | 222 | allMapping.put(entry.getKey(), assignment); |
| ... | @@ -239,17 +228,21 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -239,17 +228,21 @@ public class DistributedDhcpStore implements DhcpStore { |
| 239 | 228 | ||
| 240 | @Override | 229 | @Override |
| 241 | public boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr) { | 230 | public boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr) { |
| 242 | - return assignIP(macID, ipAddr, -1); | 231 | + HostId host = HostId.hostId(macID); |
| 232 | + return assignIP(host, ipAddr, -1); | ||
| 243 | } | 233 | } |
| 244 | 234 | ||
| 245 | @Override | 235 | @Override |
| 246 | public boolean removeStaticIP(MacAddress macID) { | 236 | public boolean removeStaticIP(MacAddress macID) { |
| 247 | - if (allocationMap.containsKey(macID)) { | 237 | + HostId host = HostId.hostId(macID); |
| 248 | - IpAssignment assignment = allocationMap.get(macID).value(); | 238 | + if (allocationMap.containsKey(host)) { |
| 239 | + IpAssignment assignment = allocationMap.get(host).value(); | ||
| 249 | Ip4Address freeIP = assignment.ipAddress(); | 240 | Ip4Address freeIP = assignment.ipAddress(); |
| 250 | if (assignment.leasePeriod() < 0) { | 241 | if (assignment.leasePeriod() < 0) { |
| 251 | - allocationMap.remove(macID); | 242 | + allocationMap.remove(host); |
| 252 | - freeIPPool.add(freeIP); | 243 | + if ((freeIP.toInt() > startIPRange.toInt()) && (freeIP.toInt() < endIPRange.toInt())) { |
| 244 | + freeIPPool.add(freeIP); | ||
| 245 | + } | ||
| 253 | return true; | 246 | return true; |
| 254 | } | 247 | } |
| 255 | } | 248 | } |
| ... | @@ -289,36 +282,4 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -289,36 +282,4 @@ public class DistributedDhcpStore implements DhcpStore { |
| 289 | } | 282 | } |
| 290 | return null; | 283 | return null; |
| 291 | } | 284 | } |
| 292 | - | ||
| 293 | - /** | ||
| 294 | - * Purges the IP allocation map to remove expired entries and returns the freed IPs to the free pool. | ||
| 295 | - */ | ||
| 296 | - private class PurgeListTask implements TimerTask { | ||
| 297 | - | ||
| 298 | - @Override | ||
| 299 | - public void run(Timeout to) { | ||
| 300 | - IpAssignment ipAssignment, newAssignment; | ||
| 301 | - Date dateNow = new Date(); | ||
| 302 | - for (Map.Entry<MacAddress, Versioned<IpAssignment>> entry: allocationMap.entrySet()) { | ||
| 303 | - ipAssignment = entry.getValue().value(); | ||
| 304 | - long timeLapsed = dateNow.getTime() - ipAssignment.timestamp().getTime(); | ||
| 305 | - if ((ipAssignment.assignmentStatus() != IpAssignment.AssignmentStatus.Option_Expired) && | ||
| 306 | - (ipAssignment.leasePeriod() > 0) && (timeLapsed > (ipAssignment.leasePeriod()))) { | ||
| 307 | - Ip4Address freeIP = ipAssignment.ipAddress(); | ||
| 308 | - | ||
| 309 | - newAssignment = IpAssignment.builder(ipAssignment) | ||
| 310 | - .assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired) | ||
| 311 | - .build(); | ||
| 312 | - allocationMap.put(entry.getKey(), newAssignment); | ||
| 313 | - | ||
| 314 | - if ((freeIP.toInt() > startIPRange.toInt()) && (freeIP.toInt() < endIPRange.toInt())) { | ||
| 315 | - freeIPPool.add(freeIP); | ||
| 316 | - } | ||
| 317 | - } | ||
| 318 | - } | ||
| 319 | - timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES); | ||
| 320 | - } | ||
| 321 | - | ||
| 322 | - } | ||
| 323 | - | ||
| 324 | } | 285 | } | ... | ... |
| ... | @@ -22,6 +22,7 @@ import org.onlab.packet.Ip4Address; | ... | @@ -22,6 +22,7 @@ import org.onlab.packet.Ip4Address; |
| 22 | import org.onlab.packet.MacAddress; | 22 | import org.onlab.packet.MacAddress; |
| 23 | import org.onosproject.dhcp.DhcpService; | 23 | import org.onosproject.dhcp.DhcpService; |
| 24 | import org.onosproject.dhcp.IpAssignment; | 24 | import org.onosproject.dhcp.IpAssignment; |
| 25 | +import org.onosproject.net.HostId; | ||
| 25 | import org.onosproject.rest.AbstractWebResource; | 26 | import org.onosproject.rest.AbstractWebResource; |
| 26 | 27 | ||
| 27 | import javax.ws.rs.Consumes; | 28 | import javax.ws.rs.Consumes; |
| ... | @@ -72,10 +73,10 @@ public class DHCPWebResource extends AbstractWebResource { | ... | @@ -72,10 +73,10 @@ public class DHCPWebResource extends AbstractWebResource { |
| 72 | public Response listMappings() { | 73 | public Response listMappings() { |
| 73 | ObjectNode root = mapper().createObjectNode(); | 74 | ObjectNode root = mapper().createObjectNode(); |
| 74 | 75 | ||
| 75 | - final Map<MacAddress, IpAssignment> intents = service.listMapping(); | 76 | + final Map<HostId, IpAssignment> intents = service.listMapping(); |
| 76 | ArrayNode arrayNode = root.putArray("mappings"); | 77 | ArrayNode arrayNode = root.putArray("mappings"); |
| 77 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() | 78 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() |
| 78 | - .put("mac", i.getKey().toString()) | 79 | + .put("host", i.getKey().toString()) |
| 79 | .put("ip", i.getValue().ipAddress().toString()))); | 80 | .put("ip", i.getValue().ipAddress().toString()))); |
| 80 | 81 | ||
| 81 | return ok(root.toString()).build(); | 82 | return ok(root.toString()).build(); |
| ... | @@ -125,10 +126,10 @@ public class DHCPWebResource extends AbstractWebResource { | ... | @@ -125,10 +126,10 @@ public class DHCPWebResource extends AbstractWebResource { |
| 125 | } | 126 | } |
| 126 | } | 127 | } |
| 127 | 128 | ||
| 128 | - final Map<MacAddress, IpAssignment> intents = service.listMapping(); | 129 | + final Map<HostId, IpAssignment> intents = service.listMapping(); |
| 129 | ArrayNode arrayNode = root.putArray("mappings"); | 130 | ArrayNode arrayNode = root.putArray("mappings"); |
| 130 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() | 131 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() |
| 131 | - .put("mac", i.getKey().toString()) | 132 | + .put("host", i.getKey().toString()) |
| 132 | .put("ip", i.getValue().ipAddress().toString()))); | 133 | .put("ip", i.getValue().ipAddress().toString()))); |
| 133 | } catch (IOException e) { | 134 | } catch (IOException e) { |
| 134 | throw new IllegalArgumentException(e.getMessage()); | 135 | throw new IllegalArgumentException(e.getMessage()); |
| ... | @@ -152,10 +153,10 @@ public class DHCPWebResource extends AbstractWebResource { | ... | @@ -152,10 +153,10 @@ public class DHCPWebResource extends AbstractWebResource { |
| 152 | if (!service.removeStaticMapping(MacAddress.valueOf(macID))) { | 153 | if (!service.removeStaticMapping(MacAddress.valueOf(macID))) { |
| 153 | throw new IllegalArgumentException("Static Mapping Removal Failed."); | 154 | throw new IllegalArgumentException("Static Mapping Removal Failed."); |
| 154 | } | 155 | } |
| 155 | - final Map<MacAddress, IpAssignment> intents = service.listMapping(); | 156 | + final Map<HostId, IpAssignment> intents = service.listMapping(); |
| 156 | ArrayNode arrayNode = root.putArray("mappings"); | 157 | ArrayNode arrayNode = root.putArray("mappings"); |
| 157 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() | 158 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() |
| 158 | - .put("mac", i.getKey().toString()) | 159 | + .put("host", i.getKey().toString()) |
| 159 | .put("ip", i.getValue().ipAddress().toString()))); | 160 | .put("ip", i.getValue().ipAddress().toString()))); |
| 160 | 161 | ||
| 161 | return ok(root.toString()).build(); | 162 | return ok(root.toString()).build(); | ... | ... |
| ... | @@ -17,7 +17,7 @@ | ... | @@ -17,7 +17,7 @@ |
| 17 | <div class="table-header" onos-sortable-header> | 17 | <div class="table-header" onos-sortable-header> |
| 18 | <table> | 18 | <table> |
| 19 | <tr> | 19 | <tr> |
| 20 | - <td colId="mac" sortable>MAC Address</td> | 20 | + <td colId="host" sortable>Host ID</td> |
| 21 | <td colId="ip" sortable>IP Address</td> | 21 | <td colId="ip" sortable>IP Address</td> |
| 22 | <td colId="lease" sortable>Lease Expiry</td> | 22 | <td colId="lease" sortable>Lease Expiry</td> |
| 23 | </tr> | 23 | </tr> |
| ... | @@ -25,7 +25,7 @@ | ... | @@ -25,7 +25,7 @@ |
| 25 | </div> | 25 | </div> |
| 26 | 26 | ||
| 27 | <div class="table-body"> | 27 | <div class="table-body"> |
| 28 | - <table onos-flash-changes id-prop="mac"> | 28 | + <table onos-flash-changes id-prop="host"> |
| 29 | <tr ng-if="!tableData.length" class="no-data"> | 29 | <tr ng-if="!tableData.length" class="no-data"> |
| 30 | <td colspan="2"> | 30 | <td colspan="2"> |
| 31 | No mappings found | 31 | No mappings found |
| ... | @@ -34,8 +34,8 @@ | ... | @@ -34,8 +34,8 @@ |
| 34 | 34 | ||
| 35 | <tr ng-repeat="dhcp in tableData track by $index" | 35 | <tr ng-repeat="dhcp in tableData track by $index" |
| 36 | ng-click="selectCallback($event, dhcp)" | 36 | ng-click="selectCallback($event, dhcp)" |
| 37 | - ng-repeat-complete row-id="{{dhcp.mac}}"> | 37 | + ng-repeat-complete row-id="{{dhcp.host}}"> |
| 38 | - <td>{{dhcp.mac}}</td> | 38 | + <td>{{dhcp.host}}</td> |
| 39 | <td>{{dhcp.ip}}</td> | 39 | <td>{{dhcp.ip}}</td> |
| 40 | <td>{{dhcp.lease}}</td> | 40 | <td>{{dhcp.lease}}</td> |
| 41 | </tr> | 41 | </tr> | ... | ... |
| ... | @@ -72,7 +72,7 @@ public class DhcpManagerTest { | ... | @@ -72,7 +72,7 @@ public class DhcpManagerTest { |
| 72 | 72 | ||
| 73 | protected HostProviderService hostProviderService; | 73 | protected HostProviderService hostProviderService; |
| 74 | 74 | ||
| 75 | - private static final MacAddress CLIENT1_MAC = MacAddress.valueOf("1a:1a:1a:1a:1a:1a"); | 75 | + private static final HostId CLIENT1_HOST = HostId.hostId(MacAddress.valueOf("1a:1a:1a:1a:1a:1a")); |
| 76 | 76 | ||
| 77 | private static final String EXPECTED_IP = "10.2.0.2"; | 77 | private static final String EXPECTED_IP = "10.2.0.2"; |
| 78 | 78 | ||
| ... | @@ -141,7 +141,7 @@ public class DhcpManagerTest { | ... | @@ -141,7 +141,7 @@ public class DhcpManagerTest { |
| 141 | 141 | ||
| 142 | // Ethernet Frame. | 142 | // Ethernet Frame. |
| 143 | Ethernet ethReply = new Ethernet(); | 143 | Ethernet ethReply = new Ethernet(); |
| 144 | - ethReply.setSourceMACAddress(CLIENT1_MAC); | 144 | + ethReply.setSourceMACAddress(CLIENT1_HOST.mac()); |
| 145 | ethReply.setDestinationMACAddress(MacAddress.BROADCAST); | 145 | ethReply.setDestinationMACAddress(MacAddress.BROADCAST); |
| 146 | ethReply.setEtherType(Ethernet.TYPE_IPV4); | 146 | ethReply.setEtherType(Ethernet.TYPE_IPV4); |
| 147 | ethReply.setVlanID((short) 2); | 147 | ethReply.setVlanID((short) 2); |
| ... | @@ -165,7 +165,7 @@ public class DhcpManagerTest { | ... | @@ -165,7 +165,7 @@ public class DhcpManagerTest { |
| 165 | dhcpReply.setServerIPAddress(0); | 165 | dhcpReply.setServerIPAddress(0); |
| 166 | 166 | ||
| 167 | dhcpReply.setTransactionId(TRANSACTION_ID); | 167 | dhcpReply.setTransactionId(TRANSACTION_ID); |
| 168 | - dhcpReply.setClientHardwareAddress(CLIENT1_MAC.toBytes()); | 168 | + dhcpReply.setClientHardwareAddress(CLIENT1_HOST.mac().toBytes()); |
| 169 | dhcpReply.setHardwareType(DHCP.HWTYPE_ETHERNET); | 169 | dhcpReply.setHardwareType(DHCP.HWTYPE_ETHERNET); |
| 170 | dhcpReply.setHardwareAddressLength((byte) 6); | 170 | dhcpReply.setHardwareAddressLength((byte) 6); |
| 171 | 171 | ||
| ... | @@ -209,7 +209,7 @@ public class DhcpManagerTest { | ... | @@ -209,7 +209,7 @@ public class DhcpManagerTest { |
| 209 | */ | 209 | */ |
| 210 | private void validatePacket(Ethernet packet) { | 210 | private void validatePacket(Ethernet packet) { |
| 211 | DHCP dhcpPacket = (DHCP) packet.getPayload().getPayload().getPayload(); | 211 | DHCP dhcpPacket = (DHCP) packet.getPayload().getPayload().getPayload(); |
| 212 | - assertEquals(MacAddress.valueOf(dhcpPacket.getClientHardwareAddress()), CLIENT1_MAC); | 212 | + assertEquals(MacAddress.valueOf(dhcpPacket.getClientHardwareAddress()), CLIENT1_HOST.mac()); |
| 213 | assertEquals(Ip4Address.valueOf(dhcpPacket.getYourIPAddress()), Ip4Address.valueOf(EXPECTED_IP)); | 213 | assertEquals(Ip4Address.valueOf(dhcpPacket.getYourIPAddress()), Ip4Address.valueOf(EXPECTED_IP)); |
| 214 | assertEquals(dhcpPacket.getTransactionId(), TRANSACTION_ID); | 214 | assertEquals(dhcpPacket.getTransactionId(), TRANSACTION_ID); |
| 215 | } | 215 | } |
| ... | @@ -223,32 +223,29 @@ public class DhcpManagerTest { | ... | @@ -223,32 +223,29 @@ public class DhcpManagerTest { |
| 223 | public void populateIPPoolfromRange(Ip4Address startIP, Ip4Address endIP) { | 223 | public void populateIPPoolfromRange(Ip4Address startIP, Ip4Address endIP) { |
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | - public Ip4Address suggestIP(MacAddress macID, Ip4Address requestedIP) { | 226 | + public Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP) { |
| 227 | return Ip4Address.valueOf(EXPECTED_IP); | 227 | return Ip4Address.valueOf(EXPECTED_IP); |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | - public boolean assignIP(MacAddress macID, Ip4Address ipAddr, int leaseTime) { | 230 | + public boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime) { |
| 231 | return true; | 231 | return true; |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | public void setDefaultTimeoutForPurge(int timeInSeconds) { | 234 | public void setDefaultTimeoutForPurge(int timeInSeconds) { |
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | - public void setTimerDelay(int timeInSeconds) { | 237 | + public void releaseIP(HostId hostId) { |
| 238 | } | 238 | } |
| 239 | 239 | ||
| 240 | - public void releaseIP(MacAddress macID) { | 240 | + public Map<HostId, IpAssignment> listMapping() { |
| 241 | - } | 241 | + Map<HostId, IpAssignment> map = new HashMap<>(); |
| 242 | - | ||
| 243 | - public Map<MacAddress, IpAssignment> listMapping() { | ||
| 244 | - Map<MacAddress, IpAssignment> map = new HashMap<>(); | ||
| 245 | IpAssignment assignment = IpAssignment.builder() | 242 | IpAssignment assignment = IpAssignment.builder() |
| 246 | .ipAddress(Ip4Address.valueOf(EXPECTED_IP)) | 243 | .ipAddress(Ip4Address.valueOf(EXPECTED_IP)) |
| 247 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) | 244 | .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned) |
| 248 | .leasePeriod(300) | 245 | .leasePeriod(300) |
| 249 | .timestamp(new Date()) | 246 | .timestamp(new Date()) |
| 250 | .build(); | 247 | .build(); |
| 251 | - map.put(CLIENT1_MAC, assignment); | 248 | + map.put(CLIENT1_HOST, assignment); |
| 252 | return map; | 249 | return map; |
| 253 | } | 250 | } |
| 254 | 251 | ... | ... |
| ... | @@ -11,9 +11,7 @@ | ... | @@ -11,9 +11,7 @@ |
| 11 | "ttl": "63", | 11 | "ttl": "63", |
| 12 | "lease": "300", | 12 | "lease": "300", |
| 13 | "renew": "150", | 13 | "renew": "150", |
| 14 | - "rebind": "200" | 14 | + "rebind": "200", |
| 15 | - }, | ||
| 16 | - "dhcpstore" : { | ||
| 17 | "delay": "3", | 15 | "delay": "3", |
| 18 | "timeout": "150", | 16 | "timeout": "150", |
| 19 | "startip": "10.0.0.110", | 17 | "startip": "10.0.0.110", | ... | ... |
-
Please register or login to post a comment