summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/dhcp/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/apps/dhcp/app/src/main')
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpLeaseDetails.java41
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java44
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpRemoveStaticMapping.java56
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpSetStaticMapping.java62
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/FreeIpCompleter.java48
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/MacIdCompleter.java48
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java336
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java731
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpUi.java74
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java97
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java364
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java169
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/package-info.java20
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml43
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.css27
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.html47
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.js51
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGet.json26
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetAvailable.json16
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetMappings.json16
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigPut.json17
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/gui/css.html1
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/resources/gui/js.html1
-rw-r--r--framework/src/onos/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml43
26 files changed, 0 insertions, 2418 deletions
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpLeaseDetails.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpLeaseDetails.java
deleted file mode 100644
index 95f49e69..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpLeaseDetails.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import org.apache.karaf.shell.commands.Command;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-
-/**
- * Lists all the default lease parameters offered by the DHCP Server.
- */
-@Command(scope = "onos", name = "dhcp-lease",
- description = "Lists all the default lease parameters offered by the DHCP Server")
-public class DhcpLeaseDetails extends AbstractShellCommand {
-
- private static final String DHCP_LEASE_FORMAT = "Lease Time: %ds\nRenewal Time: %ds\nRebinding Time: %ds";
-
- @Override
- protected void execute() {
-
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- int leaseTime = dhcpService.getLeaseTime();
- int renewTime = dhcpService.getRenewalTime();
- int rebindTime = dhcpService.getRebindingTime();
-
- print(DHCP_LEASE_FORMAT, leaseTime, renewTime, rebindTime);
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java
deleted file mode 100644
index 209ba683..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpListAllMappings.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import org.apache.karaf.shell.commands.Command;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.HostId;
-
-import java.util.Map;
-
-/**
- * Lists all the MacAddress to IP Address mappings held by the DHCP Server.
- */
-@Command(scope = "onos", name = "dhcp-list",
- description = "Lists all the MAC to IP mappings held by the DHCP Server")
-public class DhcpListAllMappings extends AbstractShellCommand {
-
- private static final String DHCP_MAPPING_FORMAT = "MAC ID: %s -> IP ASSIGNED %s";
- @Override
- protected void execute() {
-
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping();
-
- for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) {
- print(DHCP_MAPPING_FORMAT, entry.getKey().toString(), entry.getValue().ipAddress().toString());
- }
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpRemoveStaticMapping.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpRemoveStaticMapping.java
deleted file mode 100644
index a92cd250..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpRemoveStaticMapping.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.onlab.packet.MacAddress;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-
-/**
- * Removes a static MAC Address to IP Mapping from the DHCP Server.
- */
-@Command(scope = "onos", name = "dhcp-remove-static-mapping",
- description = "Removes a static MAC Address to IP Mapping from the DHCP Server")
-public class DhcpRemoveStaticMapping extends AbstractShellCommand {
-
- @Argument(index = 0, name = "macAddr",
- description = "MAC Address of the client",
- required = true, multiValued = false)
- String macAddr = null;
-
- private static final String DHCP_SUCCESS = "Static Mapping Successfully Removed.";
- private static final String DHCP_FAILURE = "Static Mapping Removal Failed. " +
- "Either the mapping does not exist or it is not static.";
-
- @Override
- protected void execute() {
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
-
- try {
- MacAddress macID = MacAddress.valueOf(macAddr);
- if (dhcpService.removeStaticMapping(macID)) {
- print(DHCP_SUCCESS);
- } else {
- print(DHCP_FAILURE);
- }
-
- } catch (IllegalArgumentException e) {
- print(e.getMessage());
- }
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpSetStaticMapping.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpSetStaticMapping.java
deleted file mode 100644
index e1ce8904..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/DhcpSetStaticMapping.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import com.google.common.collect.Lists;
-import org.apache.karaf.shell.commands.Argument;
-import org.apache.karaf.shell.commands.Command;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.MacAddress;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-
-/**
- * Registers a static MAC Address to IP Mapping with the DHCP Server.
- */
-@Command(scope = "onos", name = "dhcp-set-static-mapping",
- description = "Registers a static MAC Address to IP Mapping with the DHCP Server")
-public class DhcpSetStaticMapping extends AbstractShellCommand {
-
- @Argument(index = 0, name = "macAddr",
- description = "MAC Address of the client",
- required = true, multiValued = false)
- String macAddr = null;
-
- @Argument(index = 1, name = "ipAddr",
- description = "IP Address requested for static mapping",
- required = true, multiValued = false)
- String ipAddr = null;
-
- private static final String DHCP_SUCCESS = "Static Mapping Successfully Added.";
- private static final String DHCP_FAILURE = "Static Mapping Failed. The IP maybe unavailable.";
- @Override
- protected void execute() {
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
-
- try {
- MacAddress macID = MacAddress.valueOf(macAddr);
- Ip4Address ipAddress = Ip4Address.valueOf(ipAddr);
- if (dhcpService.setStaticMapping(macID, ipAddress, false, Lists.newArrayList())) {
- print(DHCP_SUCCESS);
- } else {
- print(DHCP_FAILURE);
- }
-
- } catch (IllegalArgumentException e) {
- print(e.getMessage());
- }
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/FreeIpCompleter.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/FreeIpCompleter.java
deleted file mode 100644
index 228d70fd..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/FreeIpCompleter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-
-/**
- * Free IP Completer.
- */
-public class FreeIpCompleter implements Completer {
-
- @Override
- public int complete(String buffer, int cursor, List<String> candidates) {
- // Delegate string completer
- StringsCompleter delegate = new StringsCompleter();
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- Iterator<Ip4Address> it = dhcpService.getAvailableIPs().iterator();
- SortedSet<String> strings = delegate.getStrings();
-
- while (it.hasNext()) {
- strings.add(it.next().toString());
- }
-
- // Now let the completer do the work for figuring out what to offer.
- return delegate.complete(buffer, cursor, candidates);
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/MacIdCompleter.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/MacIdCompleter.java
deleted file mode 100644
index d6cd73a7..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/MacIdCompleter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.cli;
-
-import org.apache.karaf.shell.console.Completer;
-import org.apache.karaf.shell.console.completer.StringsCompleter;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.net.Host;
-import org.onosproject.net.host.HostService;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-
-/**
- * MAC ID Completer.
- */
-public class MacIdCompleter implements Completer {
-
- @Override
- public int complete(String buffer, int cursor, List<String> candidates) {
- // Delegate string completer
- StringsCompleter delegate = new StringsCompleter();
- HostService service = AbstractShellCommand.get(HostService.class);
- Iterator<Host> it = service.getHosts().iterator();
- SortedSet<String> strings = delegate.getStrings();
-
- while (it.hasNext()) {
- strings.add(it.next().mac().toString());
- }
-
- // Now let the completer do the work for figuring out what to offer.
- return delegate.complete(buffer, cursor, candidates);
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/package-info.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/package-info.java
deleted file mode 100644
index f8780195..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/cli/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * CLI implementation for sample application that assigns and manages DHCP leases.
- */
-package org.onosproject.dhcp.cli; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java
deleted file mode 100644
index 1efdd082..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpConfig.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.impl;
-
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.MacAddress;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.config.Config;
-import org.onosproject.net.config.basics.BasicElementConfig;
-
-import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
-import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL;
-
-/**
- * DHCP Config class.
- */
-public class DhcpConfig extends Config<ApplicationId> {
-
- public static final String MY_IP = "ip";
- public static final String MY_MAC = "mac";
- public static final String SUBNET_MASK = "subnet";
- public static final String BROADCAST_ADDRESS = "broadcast";
- public static final String ROUTER_ADDRESS = "router";
- public static final String DOMAIN_SERVER = "domain";
- public static final String TTL = "ttl";
- public static final String LEASE_TIME = "lease";
- public static final String RENEW_TIME = "renew";
- public static final String REBIND_TIME = "rebind";
- public static final String TIMER_DELAY = "delay";
- public static final String DEFAULT_TIMEOUT = "timeout";
- public static final String START_IP = "startip";
- public static final String END_IP = "endip";
-
- public static final int DEFAULT = -1;
-
- @Override
- public boolean isValid() {
- // FIXME: Sweep through and revisit the validation assertions
- // For now, this is just a demonstration of potential uses
- return hasOnlyFields(MY_IP, MY_MAC, SUBNET_MASK, BROADCAST_ADDRESS,
- ROUTER_ADDRESS, DOMAIN_SERVER, TTL, LEASE_TIME,
- RENEW_TIME, REBIND_TIME, TIMER_DELAY, DEFAULT_TIMEOUT,
- START_IP, END_IP) &&
- isIpAddress(MY_IP, MANDATORY) && isMacAddress(MY_MAC, MANDATORY) &&
- isIpAddress(START_IP, MANDATORY) && isIpAddress(END_IP, MANDATORY) &&
- isNumber(LEASE_TIME, OPTIONAL, 1) && isNumber(REBIND_TIME, OPTIONAL, 1) &&
- isNumber(DEFAULT_TIMEOUT, OPTIONAL, 1, 3600);
- }
-
- /**
- * Returns the dhcp server ip.
- *
- * @return ip address or null if not set
- */
- public Ip4Address ip() {
- String ip = get(MY_IP, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the dhcp server ip.
- *
- * @param ip new ip address; null to clear
- * @return self
- */
- public BasicElementConfig ip(String ip) {
- return (BasicElementConfig) setOrClear(MY_IP, ip);
- }
-
- /**
- * Returns the dhcp server mac.
- *
- * @return server mac or null if not set
- */
- public MacAddress mac() {
- String mac = get(MY_MAC, null);
- return mac != null ? MacAddress.valueOf(mac) : null;
- }
-
- /**
- * Sets the dhcp server mac.
- *
- * @param mac new mac address; null to clear
- * @return self
- */
- public BasicElementConfig mac(String mac) {
- return (BasicElementConfig) setOrClear(MY_MAC, mac);
- }
-
- /**
- * Returns the subnet mask.
- *
- * @return subnet mask or null if not set
- */
- public Ip4Address subnetMask() {
- String ip = get(SUBNET_MASK, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the subnet mask.
- *
- * @param subnet new subnet mask; null to clear
- * @return self
- */
- public BasicElementConfig subnetMask(String subnet) {
- return (BasicElementConfig) setOrClear(SUBNET_MASK, subnet);
- }
-
- /**
- * Returns the broadcast address.
- *
- * @return broadcast address or null if not set
- */
- public Ip4Address broadcastAddress() {
- String ip = get(BROADCAST_ADDRESS, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the broadcast address.
- *
- * @param broadcast new broadcast address; null to clear
- * @return self
- */
- public BasicElementConfig broadcastAddress(String broadcast) {
- return (BasicElementConfig) setOrClear(BROADCAST_ADDRESS, broadcast);
- }
-
- /**
- * Returns the Time To Live for the reply packets.
- *
- * @return ttl or -1 if not set
- */
- public int ttl() {
- return get(TTL, DEFAULT);
- }
-
- /**
- * Sets the Time To Live for the reply packets.
- *
- * @param ttl new ttl; null to clear
- * @return self
- */
- public BasicElementConfig ttl(int ttl) {
- return (BasicElementConfig) setOrClear(TTL, ttl);
- }
-
- /**
- * Returns the Lease Time offered by the DHCP Server.
- *
- * @return lease time or -1 if not set
- */
- public int leaseTime() {
- return get(LEASE_TIME, DEFAULT);
- }
-
- /**
- * Sets the Lease Time offered by the DHCP Server.
- *
- * @param lease new lease time; null to clear
- * @return self
- */
- public BasicElementConfig leaseTime(int lease) {
- return (BasicElementConfig) setOrClear(LEASE_TIME, lease);
- }
-
- /**
- * Returns the Renew Time offered by the DHCP Server.
- *
- * @return renew time or -1 if not set
- */
- public int renewTime() {
- return get(RENEW_TIME, DEFAULT);
- }
-
- /**
- * Sets the Renew Time offered by the DHCP Server.
- *
- * @param renew new renew time; null to clear
- * @return self
- */
- public BasicElementConfig renewTime(int renew) {
- return (BasicElementConfig) setOrClear(RENEW_TIME, renew);
- }
-
- /**
- * Returns the Rebind Time offered by the DHCP Server.
- *
- * @return rebind time or -1 if not set
- */
- public int rebindTime() {
- return get(REBIND_TIME, DEFAULT);
- }
-
- /**
- * Sets the Rebind Time offered by the DHCP Server.
- *
- * @param rebind new rebind time; null to clear
- * @return self
- */
- public BasicElementConfig rebindTime(int rebind) {
- return (BasicElementConfig) setOrClear(REBIND_TIME, rebind);
- }
-
- /**
- * Returns the Router Address.
- *
- * @return router address or null if not set
- */
- public Ip4Address routerAddress() {
- String ip = get(ROUTER_ADDRESS, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the Router Address.
- *
- * @param router new router address; null to clear
- * @return self
- */
- public BasicElementConfig routerAddress(String router) {
- return (BasicElementConfig) setOrClear(ROUTER_ADDRESS, router);
- }
-
- /**
- * Returns the Domain Server Address.
- *
- * @return domain server address or null if not set
- */
- public Ip4Address domainServer() {
- String ip = get(DOMAIN_SERVER, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the Domain Server Address.
- *
- * @param domain new domain server address; null to clear
- * @return self
- */
- public BasicElementConfig domainServer(String domain) {
- return (BasicElementConfig) setOrClear(DOMAIN_SERVER, domain);
- }
-
- /**
- * Returns the delay in minutes after which the dhcp server will purge expired entries.
- *
- * @return time delay or -1 if not set
- */
- public int timerDelay() {
- return get(TIMER_DELAY, DEFAULT);
- }
-
- /**
- * Sets the delay after which the dhcp server will purge expired entries.
- *
- * @param delay new time delay; null to clear
- * @return self
- */
- public BasicElementConfig timerDelay(int delay) {
- return (BasicElementConfig) setOrClear(TIMER_DELAY, delay);
- }
-
- /**
- * Returns the default timeout for pending assignments.
- *
- * @return default timeout or -1 if not set
- */
- public int defaultTimeout() {
- return get(DEFAULT_TIMEOUT, DEFAULT);
- }
-
- /**
- * Sets the default timeout for pending assignments.
- *
- * @param defaultTimeout new default timeout; null to clear
- * @return self
- */
- public BasicElementConfig defaultTimeout(int defaultTimeout) {
- return (BasicElementConfig) setOrClear(DEFAULT_TIMEOUT, defaultTimeout);
- }
-
- /**
- * Returns the start IP for the available IP Range.
- *
- * @return start IP or null if not set
- */
- public Ip4Address startIp() {
- String ip = get(START_IP, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the start IP for the available IP Range.
- *
- * @param startIp new start IP; null to clear
- * @return self
- */
- public BasicElementConfig startIp(String startIp) {
- return (BasicElementConfig) setOrClear(START_IP, startIp);
- }
-
- /**
- * Returns the end IP for the available IP Range.
- *
- * @return end IP or null if not set
- */
- public Ip4Address endIp() {
- String ip = get(END_IP, null);
- return ip != null ? Ip4Address.valueOf(ip) : null;
- }
-
- /**
- * Sets the end IP for the available IP Range.
- *
- * @param endIp new end IP; null to clear
- * @return self
- */
- public BasicElementConfig endIp(String endIp) {
- return (BasicElementConfig) setOrClear(END_IP, endIp);
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
deleted file mode 100644
index a1707e0b..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpManager.java
+++ /dev/null
@@ -1,731 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.impl;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
-import org.onlab.packet.ARP;
-import org.onlab.packet.DHCP;
-import org.onlab.packet.DHCPOption;
-import org.onlab.packet.DHCPPacketType;
-import org.onlab.packet.Ethernet;
-import org.onlab.packet.IPv4;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.TpPort;
-import org.onlab.packet.UDP;
-import org.onlab.packet.VlanId;
-import org.onlab.util.Timer;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.dhcp.DhcpService;
-import org.onosproject.dhcp.DhcpStore;
-import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.config.ConfigFactory;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.host.DefaultHostDescription;
-import org.onosproject.net.host.HostProvider;
-import org.onosproject.net.host.HostProviderRegistry;
-import org.onosproject.net.host.HostProviderService;
-import org.onosproject.net.packet.DefaultOutboundPacket;
-import org.onosproject.net.packet.PacketContext;
-import org.onosproject.net.packet.PacketPriority;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import static org.onlab.packet.MacAddress.valueOf;
-import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
-
-/**
- * Skeletal ONOS DHCP Server application.
- */
-@Component(immediate = true)
-@Service
-public class DhcpManager implements DhcpService {
-
- private static final ProviderId PID = new ProviderId("of", "org.onosproject.dhcp", true);
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- private final InternalConfigListener cfgListener = new InternalConfigListener();
-
- private final Set<ConfigFactory> factories = ImmutableSet.of(
- new ConfigFactory<ApplicationId, DhcpConfig>(APP_SUBJECT_FACTORY,
- DhcpConfig.class,
- "dhcp") {
- @Override
- public DhcpConfig createConfig() {
- return new DhcpConfig();
- }
- }
- );
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetworkConfigRegistry cfgService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected PacketService packetService;
-
- private DhcpPacketProcessor processor = new DhcpPacketProcessor();
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected CoreService coreService;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected DhcpStore dhcpStore;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected HostProviderRegistry hostProviderRegistry;
-
- protected HostProviderService hostProviderService;
-
- private final HostProvider hostProvider = new InternalHostProvider();
-
- private ApplicationId appId;
-
- // Hardcoded values are default values.
-
- private static Ip4Address myIP = Ip4Address.valueOf("10.0.0.2");
-
- private static MacAddress myMAC = valueOf("4f:4f:4f:4f:4f:4f");
-
- /**
- * leaseTime - 10 mins or 600s.
- * renewalTime - 5 mins or 300s.
- * rebindingTime - 6 mins or 360s.
- */
-
- private static int leaseTime = 600;
-
- private static int renewalTime = 300;
-
- private static int rebindingTime = 360;
-
- private static byte packetTTL = (byte) 127;
-
- private static Ip4Address subnetMask = Ip4Address.valueOf("255.0.0.0");
-
- private static Ip4Address broadcastAddress = Ip4Address.valueOf("10.255.255.255");
-
- private static Ip4Address routerAddress = Ip4Address.valueOf("10.0.0.2");
-
- private static Ip4Address domainServer = Ip4Address.valueOf("10.0.0.2");
-
- private static final Ip4Address IP_BROADCAST = Ip4Address.valueOf("255.255.255.255");
-
- protected Timeout timeout;
-
- protected static int timerDelay = 2;
-
- @Activate
- protected void activate() {
- // start the dhcp server
- appId = coreService.registerApplication("org.onosproject.dhcp");
-
- cfgService.addListener(cfgListener);
- factories.forEach(cfgService::registerConfigFactory);
- cfgListener.reconfigureNetwork(cfgService.getConfig(appId, DhcpConfig.class));
- hostProviderService = hostProviderRegistry.register(hostProvider);
- packetService.addProcessor(processor, PacketProcessor.director(0));
- requestPackets();
- timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
- log.info("Started");
- }
-
- @Deactivate
- protected void deactivate() {
- cfgService.removeListener(cfgListener);
- factories.forEach(cfgService::unregisterConfigFactory);
- packetService.removeProcessor(processor);
- hostProviderRegistry.unregister(hostProvider);
- hostProviderService = null;
- cancelPackets();
- timeout.cancel();
- log.info("Stopped");
- }
-
- /**
- * Request packet in via PacketService.
- */
- private void requestPackets() {
-
- TrafficSelector.Builder selectorServer = DefaultTrafficSelector.builder()
- .matchEthType(Ethernet.TYPE_IPV4)
- .matchIPProtocol(IPv4.PROTOCOL_UDP)
- .matchUdpDst(TpPort.tpPort(UDP.DHCP_SERVER_PORT))
- .matchUdpSrc(TpPort.tpPort(UDP.DHCP_CLIENT_PORT));
- packetService.requestPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
-
- selectorServer = DefaultTrafficSelector.builder()
- .matchEthType(Ethernet.TYPE_ARP);
- packetService.requestPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
- }
-
- /**
- * Cancel requested packets in via packet service.
- */
- private void cancelPackets() {
- TrafficSelector.Builder selectorServer = DefaultTrafficSelector.builder()
- .matchEthType(Ethernet.TYPE_IPV4)
- .matchIPProtocol(IPv4.PROTOCOL_UDP)
- .matchUdpDst(TpPort.tpPort(UDP.DHCP_SERVER_PORT))
- .matchUdpSrc(TpPort.tpPort(UDP.DHCP_CLIENT_PORT));
- packetService.cancelPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
-
- selectorServer = DefaultTrafficSelector.builder()
- .matchEthType(Ethernet.TYPE_ARP);
- packetService.cancelPackets(selectorServer.build(), PacketPriority.CONTROL, appId);
- }
-
- @Override
- public Map<HostId, IpAssignment> listMapping() {
- return dhcpStore.listAssignedMapping();
- }
-
- @Override
- public int getLeaseTime() {
- return leaseTime;
- }
-
- @Override
- public int getRenewalTime() {
- return renewalTime;
- }
-
- @Override
- public int getRebindingTime() {
- return rebindingTime;
- }
-
- @Override
- public boolean setStaticMapping(MacAddress macID, Ip4Address ipAddress, boolean rangeNotEnforced,
- List<Ip4Address> addressList) {
- log.debug("setStaticMapping is called with Mac: {}, Ip: {} addressList: {}",
- macID.toString(), ipAddress.toString(), addressList.toString());
-
- return dhcpStore.assignStaticIP(macID, ipAddress, rangeNotEnforced, addressList);
- }
-
- @Override
- public boolean removeStaticMapping(MacAddress macID) {
- return dhcpStore.removeStaticIP(macID);
- }
-
- @Override
- public Iterable<Ip4Address> getAvailableIPs() {
- return dhcpStore.getAvailableIPs();
- }
-
- private class DhcpPacketProcessor implements PacketProcessor {
-
- /**
- * Builds the DHCP Reply packet.
- *
- * @param packet the incoming Ethernet frame
- * @param ipOffered the IP offered by the DHCP Server
- * @param outgoingMessageType the message type of the outgoing packet
- * @return the Ethernet reply frame
- */
- private Ethernet buildReply(Ethernet packet, Ip4Address ipOffered, byte outgoingMessageType) {
-
- Ip4Address subnetMaskReply;
- Ip4Address dhcpServerReply;
- Ip4Address routerAddressReply;
- Ip4Address domainServerReply;
- IpAssignment ipAssignment;
-
- ipAssignment = dhcpStore.getIpAssignmentFromAllocationMap(HostId.hostId(packet.getSourceMAC()));
-
- if (ipAssignment != null && ipAssignment.rangeNotEnforced()) {
- subnetMaskReply = ipAssignment.subnetMask();
- dhcpServerReply = ipAssignment.dhcpServer();
- domainServerReply = ipAssignment.domainServer();
- routerAddressReply = ipAssignment.routerAddress();
- } else {
- subnetMaskReply = subnetMask;
- dhcpServerReply = myIP;
- routerAddressReply = routerAddress;
- domainServerReply = domainServer;
- }
-
- // Ethernet Frame.
- Ethernet ethReply = new Ethernet();
- ethReply.setSourceMACAddress(myMAC);
- ethReply.setDestinationMACAddress(packet.getSourceMAC());
- ethReply.setEtherType(Ethernet.TYPE_IPV4);
- ethReply.setVlanID(packet.getVlanID());
-
- // IP Packet
- IPv4 ipv4Packet = (IPv4) packet.getPayload();
- IPv4 ipv4Reply = new IPv4();
- ipv4Reply.setSourceAddress(dhcpServerReply.toInt());
- ipv4Reply.setDestinationAddress(ipOffered.toInt());
- ipv4Reply.setTtl(packetTTL);
-
- // UDP Datagram.
- UDP udpPacket = (UDP) ipv4Packet.getPayload();
- UDP udpReply = new UDP();
- udpReply.setSourcePort((byte) UDP.DHCP_SERVER_PORT);
- udpReply.setDestinationPort((byte) UDP.DHCP_CLIENT_PORT);
-
- // DHCP Payload.
- DHCP dhcpPacket = (DHCP) udpPacket.getPayload();
- DHCP dhcpReply = new DHCP();
- dhcpReply.setOpCode(DHCP.OPCODE_REPLY);
- dhcpReply.setFlags(dhcpPacket.getFlags());
- dhcpReply.setGatewayIPAddress(dhcpPacket.getGatewayIPAddress());
- dhcpReply.setClientHardwareAddress(dhcpPacket.getClientHardwareAddress());
- dhcpReply.setTransactionId(dhcpPacket.getTransactionId());
-
- if (outgoingMessageType != DHCPPacketType.DHCPNAK.getValue()) {
- dhcpReply.setYourIPAddress(ipOffered.toInt());
- dhcpReply.setServerIPAddress(dhcpServerReply.toInt());
- if (dhcpPacket.getGatewayIPAddress() == 0) {
- ipv4Reply.setDestinationAddress(IP_BROADCAST.toInt());
- }
- }
- dhcpReply.setHardwareType(DHCP.HWTYPE_ETHERNET);
- dhcpReply.setHardwareAddressLength((byte) 6);
-
- // DHCP Options.
- DHCPOption option = new DHCPOption();
- List<DHCPOption> optionList = new ArrayList<>();
-
- // DHCP Message Type.
- option.setCode(DHCP.DHCPOptionCode.OptionCode_MessageType.getValue());
- option.setLength((byte) 1);
- byte[] optionData = {outgoingMessageType};
- option.setData(optionData);
- optionList.add(option);
-
- // DHCP Server Identifier.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_DHCPServerIp.getValue());
- option.setLength((byte) 4);
- option.setData(dhcpServerReply.toOctets());
- optionList.add(option);
-
- if (outgoingMessageType != DHCPPacketType.DHCPNAK.getValue()) {
-
- // IP Address Lease Time.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_LeaseTime.getValue());
- option.setLength((byte) 4);
- option.setData(ByteBuffer.allocate(4).putInt(leaseTime).array());
- optionList.add(option);
-
- // IP Address Renewal Time.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_RenewalTime.getValue());
- option.setLength((byte) 4);
- option.setData(ByteBuffer.allocate(4).putInt(renewalTime).array());
- optionList.add(option);
-
- // IP Address Rebinding Time.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OPtionCode_RebindingTime.getValue());
- option.setLength((byte) 4);
- option.setData(ByteBuffer.allocate(4).putInt(rebindingTime).array());
- optionList.add(option);
-
- // Subnet Mask.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_SubnetMask.getValue());
- option.setLength((byte) 4);
- option.setData(subnetMaskReply.toOctets());
- optionList.add(option);
-
- // Broadcast Address.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_BroadcastAddress.getValue());
- option.setLength((byte) 4);
- option.setData(broadcastAddress.toOctets());
- optionList.add(option);
-
- // Router Address.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_RouterAddress.getValue());
- option.setLength((byte) 4);
- option.setData(routerAddressReply.toOctets());
- optionList.add(option);
-
- // DNS Server Address.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_DomainServer.getValue());
- option.setLength((byte) 4);
- option.setData(domainServerReply.toOctets());
- optionList.add(option);
- }
-
- // End Option.
- option = new DHCPOption();
- option.setCode(DHCP.DHCPOptionCode.OptionCode_END.getValue());
- option.setLength((byte) 1);
- optionList.add(option);
-
- dhcpReply.setOptions(optionList);
- udpReply.setPayload(dhcpReply);
- ipv4Reply.setPayload(udpReply);
- ethReply.setPayload(ipv4Reply);
-
- return ethReply;
- }
-
- /**
- * Sends the Ethernet reply frame via the Packet Service.
- *
- * @param context the context of the incoming frame
- * @param reply the Ethernet reply frame
- */
- private void sendReply(PacketContext context, Ethernet reply) {
- if (reply != null) {
- TrafficTreatment.Builder builder = DefaultTrafficTreatment.builder();
- ConnectPoint sourcePoint = context.inPacket().receivedFrom();
- builder.setOutput(sourcePoint.port());
- context.block();
- packetService.emit(new DefaultOutboundPacket(sourcePoint.deviceId(),
- builder.build(), ByteBuffer.wrap(reply.serialize())));
- }
- }
-
- /**
- * Processes the DHCP Payload and initiates a reply to the client.
- *
- * @param context context of the incoming message
- * @param dhcpPayload the extracted DHCP payload
- */
- private void processDhcpPacket(PacketContext context, DHCP dhcpPayload) {
- Ethernet packet = context.inPacket().parsed();
- boolean flagIfRequestedIP = false;
- boolean flagIfServerIP = false;
- Ip4Address requestedIP = Ip4Address.valueOf("0.0.0.0");
- Ip4Address serverIP = Ip4Address.valueOf("0.0.0.0");
-
- if (dhcpPayload != null) {
-
- DHCPPacketType incomingPacketType = DHCPPacketType.getType(0);
- for (DHCPOption option : dhcpPayload.getOptions()) {
- if (option.getCode() == DHCP.DHCPOptionCode.OptionCode_MessageType.getValue()) {
- byte[] data = option.getData();
- incomingPacketType = DHCPPacketType.getType(data[0]);
- }
- if (option.getCode() == DHCP.DHCPOptionCode.OptionCode_RequestedIP.getValue()) {
- byte[] data = option.getData();
- requestedIP = Ip4Address.valueOf(data);
- flagIfRequestedIP = true;
- }
- if (option.getCode() == DHCP.DHCPOptionCode.OptionCode_DHCPServerIp.getValue()) {
- byte[] data = option.getData();
- serverIP = Ip4Address.valueOf(data);
- flagIfServerIP = true;
- }
- }
- DHCPPacketType outgoingPacketType;
- MacAddress clientMac = new MacAddress(dhcpPayload.getClientHardwareAddress());
- VlanId vlanId = VlanId.vlanId(packet.getVlanID());
- HostId hostId = HostId.hostId(clientMac, vlanId);
-
- if (incomingPacketType.getValue() == DHCPPacketType.DHCPDISCOVER.getValue()) {
-
- outgoingPacketType = DHCPPacketType.DHCPOFFER;
- Ip4Address ipOffered = null;
- ipOffered = dhcpStore.suggestIP(hostId, requestedIP);
-
- if (ipOffered != null) {
- Ethernet ethReply = buildReply(packet, ipOffered,
- (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
- }
- } else if (incomingPacketType.getValue() == DHCPPacketType.DHCPREQUEST.getValue()) {
-
- if (flagIfServerIP && flagIfRequestedIP) {
- // SELECTING state
-
-
- if (dhcpStore.getIpAssignmentFromAllocationMap(HostId.hostId(clientMac))
- .rangeNotEnforced()) {
- outgoingPacketType = DHCPPacketType.DHCPACK;
- Ethernet ethReply = buildReply(packet, requestedIP, (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
- } else {
- if (myIP.equals(serverIP)) {
- if (dhcpStore.assignIP(hostId, requestedIP, leaseTime, false, Lists.newArrayList())) {
- outgoingPacketType = DHCPPacketType.DHCPACK;
- discoverHost(context, requestedIP);
- } else {
- outgoingPacketType = DHCPPacketType.DHCPNAK;
- }
- Ethernet ethReply = buildReply(packet, requestedIP,
- (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
- }
- }
- } else if (flagIfRequestedIP) {
- // INIT-REBOOT state
- if (dhcpStore.assignIP(hostId, requestedIP, leaseTime, false, Lists.newArrayList())) {
- outgoingPacketType = DHCPPacketType.DHCPACK;
- Ethernet ethReply = buildReply(packet, requestedIP, (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
- discoverHost(context, requestedIP);
- }
-
- } else {
- // RENEWING and REBINDING state
- int ciaadr = dhcpPayload.getClientIPAddress();
- if (ciaadr != 0) {
- Ip4Address clientIaddr = Ip4Address.valueOf(ciaadr);
- if (dhcpStore.assignIP(hostId, clientIaddr, leaseTime, false, Lists.newArrayList())) {
- outgoingPacketType = DHCPPacketType.DHCPACK;
- discoverHost(context, clientIaddr);
- } else if (packet.getEtherType() == Ethernet.TYPE_IPV4 &&
- ((IPv4) packet.getPayload()).getDestinationAddress() == myIP.toInt()) {
- outgoingPacketType = DHCPPacketType.DHCPNAK;
- } else {
- return;
- }
- Ethernet ethReply = buildReply(packet, clientIaddr, (byte) outgoingPacketType.getValue());
- sendReply(context, ethReply);
- }
- }
- } else if (incomingPacketType.getValue() == DHCPPacketType.DHCPRELEASE.getValue()) {
- Ip4Address ip4Address = dhcpStore.releaseIP(hostId);
- if (ip4Address != null) {
- hostProviderService.removeIpFromHost(hostId, ip4Address);
- }
- }
- }
- }
-
- /**
- * Processes the ARP Payload and initiates a reply to the client.
- *
- * @param context context of the incoming message
- * @param packet the ethernet payload
- */
- private void processArpPacket(PacketContext context, Ethernet packet) {
-
- ARP arpPacket = (ARP) packet.getPayload();
-
- ARP arpReply = (ARP) arpPacket.clone();
- arpReply.setOpCode(ARP.OP_REPLY);
-
- arpReply.setTargetProtocolAddress(arpPacket.getSenderProtocolAddress());
- arpReply.setTargetHardwareAddress(arpPacket.getSenderHardwareAddress());
- arpReply.setSenderProtocolAddress(arpPacket.getTargetProtocolAddress());
- arpReply.setSenderHardwareAddress(myMAC.toBytes());
-
- // Ethernet Frame.
- Ethernet ethReply = new Ethernet();
- ethReply.setSourceMACAddress(myMAC);
- ethReply.setDestinationMACAddress(packet.getSourceMAC());
- ethReply.setEtherType(Ethernet.TYPE_ARP);
- ethReply.setVlanID(packet.getVlanID());
-
- ethReply.setPayload(arpReply);
- sendReply(context, ethReply);
- }
-
- /**
- * Integrates hosts learned through DHCP into topology.
- * @param context context of the incoming message
- * @param ipAssigned IP Address assigned to the host by DHCP Manager
- */
- private void discoverHost(PacketContext context, Ip4Address ipAssigned) {
- Ethernet packet = context.inPacket().parsed();
- MacAddress mac = packet.getSourceMAC();
- VlanId vlanId = VlanId.vlanId(packet.getVlanID());
- HostLocation hostLocation = new HostLocation(context.inPacket().receivedFrom(), 0);
-
- Set<IpAddress> ips = new HashSet<>();
- ips.add(ipAssigned);
-
- HostId hostId = HostId.hostId(mac, vlanId);
- DefaultHostDescription desc = new DefaultHostDescription(mac, vlanId, hostLocation, ips);
- hostProviderService.hostDetected(hostId, desc);
- }
-
-
- @Override
- public void process(PacketContext context) {
- Ethernet packet = context.inPacket().parsed();
- if (packet == null) {
- return;
- }
-
- if (packet.getEtherType() == Ethernet.TYPE_IPV4) {
- IPv4 ipv4Packet = (IPv4) packet.getPayload();
-
- if (ipv4Packet.getProtocol() == IPv4.PROTOCOL_UDP) {
- UDP udpPacket = (UDP) ipv4Packet.getPayload();
-
- if (udpPacket.getDestinationPort() == UDP.DHCP_SERVER_PORT &&
- udpPacket.getSourcePort() == UDP.DHCP_CLIENT_PORT) {
- // This is meant for the dhcp server so process the packet here.
-
- DHCP dhcpPayload = (DHCP) udpPacket.getPayload();
- processDhcpPacket(context, dhcpPayload);
- }
- }
- } else if (packet.getEtherType() == Ethernet.TYPE_ARP) {
- ARP arpPacket = (ARP) packet.getPayload();
-
- if ((arpPacket.getOpCode() == ARP.OP_REQUEST) &&
- Objects.equals(myIP, Ip4Address.valueOf(arpPacket.getTargetProtocolAddress()))) {
-
- processArpPacket(context, packet);
-
- }
- }
- }
- }
-
- private class InternalConfigListener implements NetworkConfigListener {
-
- /**
- * Reconfigures the DHCP Server according to the configuration parameters passed.
- *
- * @param cfg configuration object
- */
- private void reconfigureNetwork(DhcpConfig cfg) {
- if (cfg == null) {
- return;
- }
- if (cfg.ip() != null) {
- myIP = cfg.ip();
- }
- if (cfg.mac() != null) {
- myMAC = cfg.mac();
- }
- if (cfg.subnetMask() != null) {
- subnetMask = cfg.subnetMask();
- }
- if (cfg.broadcastAddress() != null) {
- broadcastAddress = cfg.broadcastAddress();
- }
- if (cfg.routerAddress() != null) {
- routerAddress = cfg.routerAddress();
- }
- if (cfg.domainServer() != null) {
- domainServer = cfg.domainServer();
- }
- if (cfg.ttl() != -1) {
- packetTTL = (byte) cfg.ttl();
- }
- if (cfg.leaseTime() != -1) {
- leaseTime = cfg.leaseTime();
- }
- if (cfg.renewTime() != -1) {
- renewalTime = cfg.renewTime();
- }
- if (cfg.rebindTime() != -1) {
- rebindingTime = cfg.rebindTime();
- }
- if (cfg.defaultTimeout() != -1) {
- dhcpStore.setDefaultTimeoutForPurge(cfg.defaultTimeout());
- }
- if (cfg.timerDelay() != -1) {
- timerDelay = cfg.timerDelay();
- }
- if ((cfg.startIp() != null) && (cfg.endIp() != null)) {
- dhcpStore.populateIPPoolfromRange(cfg.startIp(), cfg.endIp());
- }
- }
-
-
- @Override
- public void event(NetworkConfigEvent event) {
-
- if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED) &&
- event.configClass().equals(DhcpConfig.class)) {
-
- DhcpConfig cfg = cfgService.getConfig(appId, DhcpConfig.class);
- reconfigureNetwork(cfg);
- log.info("Reconfigured");
- }
- }
- }
-
- private class InternalHostProvider extends AbstractProvider implements HostProvider {
-
- /**
- * Creates a provider with the supplier identifier.
- */
- protected InternalHostProvider() {
- super(PID);
- }
-
- @Override
- public void triggerProbe(Host host) {
- // nothing to do
- }
- }
-
- private class PurgeListTask implements TimerTask {
-
- @Override
- public void run(Timeout to) {
- IpAssignment ipAssignment;
- Date dateNow = new Date();
-
- Map<HostId, IpAssignment> ipAssignmentMap = dhcpStore.listAllMapping();
- for (Map.Entry<HostId, IpAssignment> entry: ipAssignmentMap.entrySet()) {
- ipAssignment = entry.getValue();
-
- long timeLapsed = dateNow.getTime() - ipAssignment.timestamp().getTime();
- if ((ipAssignment.assignmentStatus() != IpAssignment.AssignmentStatus.Option_Expired) &&
- (ipAssignment.leasePeriod() > 0) && (timeLapsed > (ipAssignment.leasePeriodMs()))) {
-
- Ip4Address ip4Address = dhcpStore.releaseIP(entry.getKey());
- if (ip4Address != null) {
- hostProviderService.removeIpFromHost(entry.getKey(), ipAssignment.ipAddress());
- }
- }
- }
- timeout = Timer.getTimer().newTimeout(new PurgeListTask(), timerDelay, TimeUnit.MINUTES);
- }
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpUi.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpUi.java
deleted file mode 100644
index bb2bd2c2..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpUi.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.impl;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.ui.UiExtension;
-import org.onosproject.ui.UiExtensionService;
-import org.onosproject.ui.UiMessageHandlerFactory;
-import org.onosproject.ui.UiView;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-import static org.onosproject.ui.UiView.Category.NETWORK;
-
-/**
- * Mechanism to stream data to the GUI.
- */
-@Component(immediate = true, enabled = true)
-@Service(value = DhcpUi.class)
-public class DhcpUi {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
- private static final ClassLoader CL = DhcpUi.class.getClassLoader();
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected UiExtensionService uiExtensionService;
-
- private final UiMessageHandlerFactory messageHandlerFactory =
- () -> ImmutableList.of(new DhcpViewMessageHandler());
-
- private final List<UiView> views = ImmutableList.of(
- new UiView(NETWORK, "dhcp", "DHCP Server")
- );
-
- private final UiExtension uiExtension =
- new UiExtension.Builder(CL, views)
- .messageHandlerFactory(messageHandlerFactory)
- .resourcePath("gui")
- .build();
-
- @Activate
- protected void activate() {
- uiExtensionService.register(uiExtension);
- log.info("Started");
- }
-
- @Deactivate
- protected void deactivate() {
- uiExtensionService.unregister(uiExtension);
- log.info("Stopped");
- }
-
-} \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java
deleted file mode 100644
index 9ce65d5e..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DhcpViewMessageHandler.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.dhcp.DhcpService;
-import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.HostId;
-import org.onosproject.ui.RequestHandler;
-import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.table.TableModel;
-import org.onosproject.ui.table.TableRequestHandler;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * DHCPViewMessageHandler class implementation.
- */
-public class DhcpViewMessageHandler extends UiMessageHandler {
-
- private static final String DHCP_DATA_REQ = "dhcpDataRequest";
- private static final String DHCP_DATA_RESP = "dhcpDataResponse";
- private static final String DHCP = "dhcps";
-
- private static final String HOST = "host";
- private static final String IP = "ip";
- private static final String LEASE = "lease";
-
- private static final String[] COL_IDS = {
- HOST, IP, LEASE
- };
-
- @Override
- protected Collection<RequestHandler> createRequestHandlers() {
- return ImmutableSet.of(
- new DataRequestHandler()
- );
- }
-
- // handler for dhcp table requests
- private final class DataRequestHandler extends TableRequestHandler {
-
- private DataRequestHandler() {
- super(DHCP_DATA_REQ, DHCP_DATA_RESP, DHCP);
- }
-
- @Override
- protected String defaultColumnId() {
- return HOST;
- }
-
- @Override
- protected String[] getColumnIds() {
- return COL_IDS;
- }
-
- @Override
- protected void populateTable(TableModel tm, ObjectNode payload) {
- DhcpService dhcpService = AbstractShellCommand.get(DhcpService.class);
- Map<HostId, IpAssignment> allocationMap = dhcpService.listMapping();
-
- for (Map.Entry<HostId, IpAssignment> entry : allocationMap.entrySet()) {
- populateRow(tm.addRow(), entry);
- }
- }
-
- private void populateRow(TableModel.Row row, Map.Entry<HostId, IpAssignment> entry) {
- if (entry.getValue().leasePeriod() > 0) {
- Date now = new Date(entry.getValue().timestamp().getTime() + entry.getValue().leasePeriod());
- row.cell(HOST, entry.getKey())
- .cell(IP, entry.getValue().ipAddress())
- .cell(LEASE, now.toString());
- } else {
- row.cell(HOST, entry.getKey())
- .cell(IP, entry.getValue().ipAddress())
- .cell(LEASE, "Infinite Static Lease");
- }
- }
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
deleted file mode 100644
index ad4522cb..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/DistributedDhcpStore.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.impl;
-
-import com.google.common.collect.ImmutableSet;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.MacAddress;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.dhcp.DhcpStore;
-import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.HostId;
-import org.onosproject.store.serializers.KryoNamespaces;
-import org.onosproject.store.service.ConsistentMap;
-import org.onosproject.store.service.DistributedSet;
-import org.onosproject.store.service.Serializer;
-import org.onosproject.store.service.StorageService;
-import org.onosproject.store.service.Versioned;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-import java.util.Map;
-import java.util.List;
-import java.util.HashMap;
-import java.util.Objects;
-
-/**
- * Manages the pool of available IP Addresses in the network and
- * Remembers the mapping between MAC ID and IP Addresses assigned.
- */
-
-@Component(immediate = true)
-@Service
-public class DistributedDhcpStore implements DhcpStore {
-
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected StorageService storageService;
-
- private ConsistentMap<HostId, IpAssignment> allocationMap;
-
- private DistributedSet<Ip4Address> freeIPPool;
-
- private static Ip4Address startIPRange;
-
- private static Ip4Address endIPRange;
-
- // Hardcoded values are default values.
-
- private static int timeoutForPendingAssignments = 60;
-
- @Activate
- protected void activate() {
- allocationMap = storageService.<HostId, IpAssignment>consistentMapBuilder()
- .withName("onos-dhcp-assignedIP")
- .withSerializer(Serializer.using(
- new KryoNamespace.Builder()
- .register(KryoNamespaces.API)
- .register(IpAssignment.class,
- IpAssignment.AssignmentStatus.class,
- Date.class,
- long.class,
- Ip4Address.class)
- .build()))
- .build();
-
- freeIPPool = storageService.<Ip4Address>setBuilder()
- .withName("onos-dhcp-freeIP")
- .withSerializer(Serializer.using(KryoNamespaces.API))
- .build();
-
- log.info("Started");
- }
-
- @Deactivate
- protected void deactivate() {
- log.info("Stopped");
- }
-
- @Override
- public Ip4Address suggestIP(HostId hostId, Ip4Address requestedIP) {
-
- IpAssignment assignmentInfo;
- if (allocationMap.containsKey(hostId)) {
- assignmentInfo = allocationMap.get(hostId).value();
- IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus();
- Ip4Address ipAddr = assignmentInfo.ipAddress();
-
- if (assignmentInfo.rangeNotEnforced()) {
- return assignmentInfo.ipAddress();
- } else if (status == IpAssignment.AssignmentStatus.Option_Assigned ||
- status == IpAssignment.AssignmentStatus.Option_Requested) {
- // Client has a currently Active Binding.
- if (ipWithinRange(ipAddr)) {
- return ipAddr;
- }
-
- } else if (status == IpAssignment.AssignmentStatus.Option_Expired) {
- // Client has a Released or Expired Binding.
- if (freeIPPool.contains(ipAddr)) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(timeoutForPendingAssignments)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
- .build();
- if (freeIPPool.remove(ipAddr)) {
- allocationMap.put(hostId, assignmentInfo);
- return ipAddr;
- }
- }
- }
- } else if (requestedIP.toInt() != 0) {
- // Client has requested an IP.
- if (freeIPPool.contains(requestedIP)) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(requestedIP)
- .timestamp(new Date())
- .leasePeriod(timeoutForPendingAssignments)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
- .build();
- if (freeIPPool.remove(requestedIP)) {
- allocationMap.put(hostId, assignmentInfo);
- return requestedIP;
- }
- }
- }
-
- // Allocate a new IP from the server's pool of available IP.
- Ip4Address nextIPAddr = fetchNextIP();
- if (nextIPAddr != null) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(nextIPAddr)
- .timestamp(new Date())
- .leasePeriod(timeoutForPendingAssignments)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Requested)
- .build();
-
- allocationMap.put(hostId, assignmentInfo);
- }
- return nextIPAddr;
-
- }
-
- @Override
- public boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime, boolean rangeNotEnforced,
- List<Ip4Address> addressList) {
-
- IpAssignment assignmentInfo;
-
- log.debug("Assign IP Called w/ Ip4Address: {}, HostId: {}", ipAddr.toString(), hostId.mac().toString());
-
- if (allocationMap.containsKey(hostId)) {
-
- assignmentInfo = allocationMap.get(hostId).value();
- IpAssignment.AssignmentStatus status = assignmentInfo.assignmentStatus();
-
- if (Objects.equals(assignmentInfo.ipAddress(), ipAddr) && ipWithinRange(ipAddr)) {
-
- if (status == IpAssignment.AssignmentStatus.Option_Assigned ||
- status == IpAssignment.AssignmentStatus.Option_Requested) {
- // Client has a currently active binding with the server.
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(leaseTime)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
- .build();
- allocationMap.put(hostId, assignmentInfo);
- return true;
- } else if (status == IpAssignment.AssignmentStatus.Option_Expired) {
- // Client has an expired binding with the server.
- if (freeIPPool.contains(ipAddr)) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(leaseTime)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
- .build();
- if (freeIPPool.remove(ipAddr)) {
- allocationMap.put(hostId, assignmentInfo);
- return true;
- }
- }
- }
- }
- } else if (freeIPPool.contains(ipAddr)) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(leaseTime)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Assigned)
- .build();
- if (freeIPPool.remove(ipAddr)) {
- allocationMap.put(hostId, assignmentInfo);
- return true;
- }
- } else if (rangeNotEnforced) {
- assignmentInfo = IpAssignment.builder()
- .ipAddress(ipAddr)
- .timestamp(new Date())
- .leasePeriod(leaseTime)
- .rangeNotEnforced(true)
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_RangeNotEnforced)
- .subnetMask((Ip4Address) addressList.toArray()[0])
- .dhcpServer((Ip4Address) addressList.toArray()[1])
- .routerAddress((Ip4Address) addressList.toArray()[2])
- .domainServer((Ip4Address) addressList.toArray()[3])
- .build();
- allocationMap.put(hostId, assignmentInfo);
- return true;
- }
- return false;
- }
-
- @Override
- public Ip4Address releaseIP(HostId hostId) {
- if (allocationMap.containsKey(hostId)) {
- IpAssignment newAssignment = IpAssignment.builder(allocationMap.get(hostId).value())
- .assignmentStatus(IpAssignment.AssignmentStatus.Option_Expired)
- .build();
- Ip4Address freeIP = newAssignment.ipAddress();
- allocationMap.put(hostId, newAssignment);
- if (ipWithinRange(freeIP)) {
- freeIPPool.add(freeIP);
- }
- return freeIP;
- }
- return null;
- }
-
- @Override
- public void setDefaultTimeoutForPurge(int timeInSeconds) {
- timeoutForPendingAssignments = timeInSeconds;
- }
-
- @Override
- public Map<HostId, IpAssignment> listAssignedMapping() {
-
- Map<HostId, IpAssignment> validMapping = new HashMap<>();
- IpAssignment assignment;
- for (Map.Entry<HostId, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
- assignment = entry.getValue().value();
- if (assignment.assignmentStatus() == IpAssignment.AssignmentStatus.Option_Assigned
- || assignment.assignmentStatus() == IpAssignment.AssignmentStatus.Option_RangeNotEnforced) {
- validMapping.put(entry.getKey(), assignment);
- }
- }
- return validMapping;
- }
-
- @Override
- public Map<HostId, IpAssignment> listAllMapping() {
- Map<HostId, IpAssignment> validMapping = new HashMap<>();
- for (Map.Entry<HostId, Versioned<IpAssignment>> entry: allocationMap.entrySet()) {
- validMapping.put(entry.getKey(), entry.getValue().value());
- }
- return validMapping;
- }
-
- @Override
- public boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr, boolean rangeNotEnforced,
- List<Ip4Address> addressList) {
- HostId host = HostId.hostId(macID);
- return assignIP(host, ipAddr, -1, rangeNotEnforced, addressList);
- }
-
- @Override
- public boolean removeStaticIP(MacAddress macID) {
- HostId host = HostId.hostId(macID);
- if (allocationMap.containsKey(host)) {
- IpAssignment assignment = allocationMap.get(host).value();
-
- if (assignment.rangeNotEnforced()) {
- allocationMap.remove(host);
- return true;
- }
-
- Ip4Address freeIP = assignment.ipAddress();
- if (assignment.leasePeriod() < 0) {
- allocationMap.remove(host);
- if (ipWithinRange(freeIP)) {
- freeIPPool.add(freeIP);
- }
- return true;
- }
- }
- return false;
- }
-
- @Override
- public Iterable<Ip4Address> getAvailableIPs() {
- return ImmutableSet.copyOf(freeIPPool);
- }
-
- @Override
- public void populateIPPoolfromRange(Ip4Address startIP, Ip4Address endIP) {
- // Clear all entries from previous range.
- allocationMap.clear();
- freeIPPool.clear();
- startIPRange = startIP;
- endIPRange = endIP;
-
- int lastIP = endIP.toInt();
- Ip4Address nextIP;
- for (int loopCounter = startIP.toInt(); loopCounter <= lastIP; loopCounter++) {
- nextIP = Ip4Address.valueOf(loopCounter);
- freeIPPool.add(nextIP);
- }
- }
-
- @Override
- public IpAssignment getIpAssignmentFromAllocationMap(HostId hostId) {
- return allocationMap.get(hostId).value();
- }
-
- /**
- * Fetches the next available IP from the free pool pf IPs.
- *
- * @return the next available IP address
- */
- private Ip4Address fetchNextIP() {
- for (Ip4Address freeIP : freeIPPool) {
- if (freeIPPool.remove(freeIP)) {
- return freeIP;
- }
- }
- return null;
- }
-
- /**
- * Returns true if the given ip is within the range of available IPs.
- *
- * @param ip given ip address
- * @return true if within range, false otherwise
- */
- private boolean ipWithinRange(Ip4Address ip) {
- if ((ip.toInt() >= startIPRange.toInt()) && (ip.toInt() <= endIPRange.toInt())) {
- return true;
- }
- return false;
- }
-}
-
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/package-info.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/package-info.java
deleted file mode 100644
index 12e14e48..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Implementation classes for sample application that assigns and manages DHCP leases.
- */
-package org.onosproject.dhcp.impl; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
deleted file mode 100644
index 6265fee0..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/DhcpWebResource.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.dhcp.rest;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
-import org.onlab.packet.Ip4Address;
-import org.onlab.packet.MacAddress;
-import org.onosproject.dhcp.DhcpService;
-import org.onosproject.dhcp.IpAssignment;
-import org.onosproject.net.HostId;
-import org.onosproject.rest.AbstractWebResource;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-
-/**
- * Manage DHCP address assignments.
- */
-@Path("dhcp")
-public class DhcpWebResource extends AbstractWebResource {
-
- final DhcpService service = get(DhcpService.class);
-
- /**
- * Get DHCP server configuration data.
- * Shows lease, renewal and rebinding times in seconds.
- *
- * @return 200 OK
- * @onos.rsModel DhcpConfigGet
- */
- @GET
- @Path("config")
- public Response getConfigs() {
- DhcpService service = get(DhcpService.class);
- ObjectNode node = mapper().createObjectNode()
- .put("leaseTime", service.getLeaseTime())
- .put("renewalTime", service.getRenewalTime())
- .put("rebindingTime", service.getRebindingTime());
- return ok(node.toString()).build();
- }
-
- /**
- * Get all MAC/IP mappings.
- * Shows all MAC/IP mappings held by the DHCP server.
- *
- * @onos.rsModel DhcpConfigGetMappings
- * @return 200 OK
- */
- @GET
- @Path("mappings")
- public Response listMappings() {
- ObjectNode root = mapper().createObjectNode();
-
- final Map<HostId, IpAssignment> intents = service.listMapping();
- ArrayNode arrayNode = root.putArray("mappings");
- intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("host", i.getKey().toString())
- .put("ip", i.getValue().ipAddress().toString())));
-
- return ok(root.toString()).build();
- }
-
-
- /**
- * Get all available IPs.
- * Shows all the IPs in the free pool of the DHCP Server.
- *
- * @onos.rsModel DhcpConfigGetAvailable
- * @return 200 OK
- */
- @GET
- @Path("available")
- public Response listAvailableIPs() {
- final Iterable<Ip4Address> availableIPList = service.getAvailableIPs();
-
- final ObjectNode root = mapper().createObjectNode();
- ArrayNode arrayNode = root.putArray("availableIP");
- availableIPList.forEach(i -> arrayNode.add(i.toString()));
- return ok(root.toString()).build();
- }
-
- /**
- * Post a new static MAC/IP binding.
- * Registers a static binding to the DHCP server, and displays the current set of bindings.
- *
- * @onos.rsModel DhcpConfigPut
- * @param stream JSON stream
- * @return 200 OK
- */
- @POST
- @Path("mappings")
- @Consumes(MediaType.APPLICATION_JSON)
- public Response setMapping(InputStream stream) {
- ObjectNode root = mapper().createObjectNode();
- try {
- ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
- JsonNode macID = jsonTree.get("mac");
- JsonNode ip = jsonTree.get("ip");
- if (macID != null && ip != null) {
-
- if (!service.setStaticMapping(MacAddress.valueOf(macID.asText()),
- Ip4Address.valueOf(ip.asText()),
- false, Lists.newArrayList())) {
- throw new IllegalArgumentException("Static Mapping Failed. " +
- "The IP maybe unavailable.");
- }
- }
-
- final Map<HostId, IpAssignment> intents = service.listMapping();
- ArrayNode arrayNode = root.putArray("mappings");
- intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("host", i.getKey().toString())
- .put("ip", i.getValue().ipAddress().toString())));
- } catch (IOException e) {
- throw new IllegalArgumentException(e.getMessage());
- }
- return ok(root.toString()).build();
- }
-
- /**
- * Delete a static MAC/IP binding.
- * Removes a static binding from the DHCP Server, and displays the current set of bindings.
- *
- * @param macID mac address identifier
- * @return 200 OK
- */
- @DELETE
- @Path("mappings/{macID}")
- public Response deleteMapping(@PathParam("macID") String macID) {
-
- ObjectNode root = mapper().createObjectNode();
-
- if (!service.removeStaticMapping(MacAddress.valueOf(macID))) {
- throw new IllegalArgumentException("Static Mapping Removal Failed.");
- }
- final Map<HostId, IpAssignment> intents = service.listMapping();
- ArrayNode arrayNode = root.putArray("mappings");
- intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode()
- .put("host", i.getKey().toString())
- .put("ip", i.getValue().ipAddress().toString())));
-
- return ok(root.toString()).build();
- }
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/package-info.java b/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/package-info.java
deleted file mode 100644
index 73173c55..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/java/org/onosproject/dhcp/rest/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * REST APIs for sample application that assigns and manages DHCP leases.
- */
-package org.onosproject.dhcp.rest; \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/framework/src/onos/apps/dhcp/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
deleted file mode 100644
index ce716315..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
- ~ Copyright 2014 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
- <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
- <command>
- <action class="org.onosproject.dhcp.cli.DhcpListAllMappings"/>
- </command>
- <command>
- <action class="org.onosproject.dhcp.cli.DhcpLeaseDetails"/>
- </command>
- <command>
- <action class="org.onosproject.dhcp.cli.DhcpSetStaticMapping"/>
- <completers>
- <ref component-id="macIDCompleter"/>
- <ref component-id="freeIPCompleter"/>
- </completers>
- </command>
- <command>
- <action class="org.onosproject.dhcp.cli.DhcpRemoveStaticMapping"/>
- <completers>
- <ref component-id="macIDCompleter"/>
- </completers>
- </command>
- </command-bundle>
-
- <bean id="macIDCompleter" class="org.onosproject.dhcp.cli.MacIdCompleter"/>
- <bean id="freeIPCompleter" class="org.onosproject.dhcp.cli.FreeIpCompleter"/>
-
-</blueprint> \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.css b/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.css
deleted file mode 100644
index e0a29314..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- DHCP Server -- CSS file
- */
-
-#ov-dhcp h2 {
- display: inline-block;
-}
-
-#ov-dhcp div.ctrl-btns {
- width: 45px;
-}
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.html b/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.html
deleted file mode 100644
index 5782badf..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!-- DHCP Server partial HTML -->
-<div id="ov-dhcp">
- <div class="tabular-header">
- <h2>DHCP Mappings ({{tableData.length}} total)</h2>
- <div class="ctrl-btns">
- <div class="refresh" ng-class="{active: autoRefresh}"
- icon icon-size="36" icon-id="refresh"
- tooltip tt-msg="autoRefreshTip"
- ng-click="toggleRefresh()"></div>
- </div>
- </div>
-
- <div class="summary-list" onos-table-resize>
- <div ng-show="loading" class="loading-wheel"
- icon icon-id="loading" icon-size="75"></div>
-
- <div class="table-header" onos-sortable-header>
- <table>
- <tr>
- <td colId="host" sortable>Host ID</td>
- <td colId="ip" sortable>IP Address</td>
- <td colId="lease" sortable>Lease Expiry</td>
- </tr>
- </table>
- </div>
-
- <div class="table-body">
- <table onos-flash-changes id-prop="host">
- <tr ng-if="!tableData.length" class="no-data">
- <td colspan="2">
- No mappings found
- </td>
- </tr>
-
- <tr ng-repeat="dhcp in tableData track by $index"
- ng-click="selectCallback($event, dhcp)"
- ng-repeat-complete row-id="{{dhcp.host}}">
- <td>{{dhcp.host}}</td>
- <td>{{dhcp.ip}}</td>
- <td>{{dhcp.lease}}</td>
- </tr>
- </table>
- </div>
-
- </div>
-
-</div>
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.js b/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.js
deleted file mode 100644
index 061d0de6..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/app/view/dhcp/dhcp.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- ONOS GUI -- DHCP Server View Module
- */
-
-(function () {
- 'use strict';
-
- // injected refs
- var $log, $scope;
-
- angular.module('ovDhcp', [])
- .controller('OvDhcpCtrl',
- ['$log', '$scope', 'TableBuilderService',
-
- function (_$log_, _$scope_, tbs) {
- $log = _$log_;
- $scope = _$scope_;
-
- function selCb($event, row) {
- $log.debug('Got a click on:', row);
- }
-
- tbs.buildTable({
- scope: $scope,
- tag: 'dhcp',
- selCb: selCb
- });
-
- $scope.$on('$destroy', function () {
- $log.debug('OvDhcpCtrl has been destroyed');
- });
-
- $log.log('OvDhcpCtrl has been created');
- }]);
-}()); \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGet.json b/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGet.json
deleted file mode 100644
index 9e451b30..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGet.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "type": "object",
- "required": [
- "leaseTime",
- "renewalTime",
- "rebindingTime"
- ],
- "properties": {
- "leaseTime": {
- "type": "integer",
- "format": "int64",
- "example": "250"
- },
- "renewalTime": {
- "type": "integer",
- "format": "int64",
- "example": "250"
- },
- "rebindingTime": {
- "type": "integer",
- "format": "int64",
- "example": "250"
- }
- }
-}
-
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetAvailable.json b/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetAvailable.json
deleted file mode 100644
index 2dcb91d5..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetAvailable.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "type": "object",
- "required": [
- "availableIp"
- ],
- "properties": {
- "availableIp": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": "[127.0.0.1]"
- }
- }
-}
-
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetMappings.json b/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetMappings.json
deleted file mode 100644
index c4d17f66..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigGetMappings.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "type": "object",
- "required": [
- "mappings"
- ],
- "properties": {
- "mappings": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "example": "[]"
- }
- }
-}
-
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigPut.json b/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigPut.json
deleted file mode 100644
index a8eb5378..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/definitions/DhcpConfigPut.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "type": "object",
- "required": [
- "mac",
- "ip"],
- "properties": {
- "mac": {
- "type": "String",
- "example": "be:48:89:d5:75:59"
- },
- "ip": {
- "type": "String",
- "example": "10.128.12.4"
- }
- }
-}
-
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/gui/css.html b/framework/src/onos/apps/dhcp/app/src/main/resources/gui/css.html
deleted file mode 100644
index d02ad44a..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/gui/css.html
+++ /dev/null
@@ -1 +0,0 @@
-<link rel="stylesheet" href="app/view/dhcp/dhcp.css"> \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/resources/gui/js.html b/framework/src/onos/apps/dhcp/app/src/main/resources/gui/js.html
deleted file mode 100644
index d37b5768..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/resources/gui/js.html
+++ /dev/null
@@ -1 +0,0 @@
-<script src="app/view/dhcp/dhcp.js"></script> \ No newline at end of file
diff --git a/framework/src/onos/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml b/framework/src/onos/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index a53110ee..00000000
--- a/framework/src/onos/apps/dhcp/app/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2015 Open Networking Laboratory
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- id="ONOS" version="2.5">
- <display-name>DHCP Server REST API v1.0</display-name>
-
- <servlet>
- <servlet-name>JAX-RS Service</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
- <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.config.property.classnames</param-name>
- <param-value>
- org.onosproject.dhcp.rest.DhcpWebResource
- </param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JAX-RS Service</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
-</web-app>