diff --git a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpService.java b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpService.java
index e356c38..ae61023 100644
--- a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpService.java
+++ b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpService.java
@@ -58,15 +58,15 @@
 
     /**
      * Registers a static IP mapping with the DHCP Server.
-     * Supports the request from OpenStack
+     * Supports rangeNotEnforced option
      *
      * @param macID macID of the client
      * @param ipAddress IP Address requested for the client
-     * @param fromOpenStack true if the request is from OpenStack
-     * @param addressList subnetMask, DHCP/Router/Domain Server IP Address if the request from OpenStack
+     * @param rangeNotEnforced true if rangeNotEnforced was set and the mapping will be eternal
+     * @param addressList subnetMask, DHCP/Router/DNS IP Addresses if rangeNotEnforced was set
      * @return true if the mapping was successfully added, false otherwise
      */
-    boolean setStaticMapping(MacAddress macID, Ip4Address ipAddress, boolean fromOpenStack,
+    boolean setStaticMapping(MacAddress macID, Ip4Address ipAddress, boolean rangeNotEnforced,
                              List<Ip4Address> addressList);
 
     /**
diff --git a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpStore.java b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpStore.java
index bd2e16b..cdfadf7 100644
--- a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpStore.java
+++ b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/DhcpStore.java
@@ -52,12 +52,11 @@
      * @param hostId Host Id of the client requesting an IP
      * @param ipAddr IP Address being requested
      * @param leaseTime Lease time offered by the server for this mapping
-     * @param fromOpenStack true if the request is from Openstack
-     * @param addressList subnetMask, DHCP IP Address, Router IP Address, Domain Server IP Address if the request
-     *                    from OpenStack
+     * @param rangeNotEnforced true if rangeNotEnforced was set
+     * @param addressList subnetMask, DHCP/Router/DNS IP Addresses if rangeNotEnforced was set
      * @return returns true if the assignment was successful, false otherwise
      */
-    boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime, boolean fromOpenStack,
+    boolean assignIP(HostId hostId, Ip4Address ipAddr, int leaseTime, boolean rangeNotEnforced,
                      List<Ip4Address> addressList);
 
 
@@ -95,11 +94,11 @@
      *
      * @param macID macID of the client
      * @param ipAddr IP Address requested for the client
-     * @param fromOpenStack true if the request is from Openstack
-     * @param addressList subnetMask, DHCP/Router/Domain Server IP Address if the request from OpenStack
+     * @param rangeNotEnforced true if rangeNotEnforced was set
+     * @param addressList subnetMask, DHCP/Router/DNS IP Addresses rangeNotEnforced was set
      * @return true if the mapping was successfully registered, false otherwise
      */
-    boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr, boolean fromOpenStack, List<Ip4Address> addressList);
+    boolean assignStaticIP(MacAddress macID, Ip4Address ipAddr, boolean rangeNotEnforced, List<Ip4Address> addressList);
 
     /**
      * Removes a static IP mapping associated with the given MAC ID from the DHCP Server.
diff --git a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
index 998579e..5610fec 100644
--- a/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
+++ b/apps/dhcp/api/src/main/java/org/onosproject/dhcp/IpAssignment.java
@@ -41,7 +41,7 @@
 
     private final Ip4Address domainServer;
 
-    private final boolean fromOpenStack;
+    private final boolean rangeNotEnforced;
 
     private final AssignmentStatus assignmentStatus;
 
@@ -54,7 +54,7 @@
         /**
          * IP Assignment has been requested by a OpenStack.
          */
-        Option_Requested_From_OpenStack,
+        Option_RangeNotEnforced,
         /**
          * IP has been assigned to a host.
          */
@@ -78,13 +78,13 @@
      * @param dhcpServer
      * @param routerAddress
      * @param domainServer
-     * @param fromOpenStack
+     * @param rangeNotEnforced
      */
     private IpAssignment(Ip4Address ipAddress,
                          long leasePeriod,
                          Date timestamp,
                          AssignmentStatus assignmentStatus, Ip4Address subnetMask, Ip4Address dhcpServer,
-                         Ip4Address routerAddress, Ip4Address domainServer, boolean fromOpenStack) {
+                         Ip4Address routerAddress, Ip4Address domainServer, boolean rangeNotEnforced) {
         this.ipAddress = ipAddress;
         this.leasePeriod = leasePeriod;
         this.timestamp = timestamp;
@@ -93,7 +93,7 @@
         this.dhcpServer = dhcpServer;
         this.routerAddress = routerAddress;
         this.domainServer = domainServer;
-        this.fromOpenStack = fromOpenStack;
+        this.rangeNotEnforced = rangeNotEnforced;
     }
 
     /**
@@ -157,8 +157,8 @@
         return domainServer;
     }
 
-    public boolean fromOpenStack() {
-        return fromOpenStack;
+    public boolean rangeNotEnforced() {
+        return rangeNotEnforced;
     }
 
     @Override
@@ -172,7 +172,7 @@
                 .add("dhcpServer", dhcpServer)
                 .add("routerAddress", routerAddress)
                 .add("domainServer", domainServer)
-                .add("fromOpenStack", fromOpenStack)
+                .add("rangeNotEnforced", rangeNotEnforced)
                 .toString();
     }
 
@@ -216,7 +216,7 @@
 
         private Ip4Address routerAddress;
 
-        private boolean fromOpenStack = false;
+        private boolean rangeNotEnforced = false;
 
         private Builder() {
 
@@ -232,7 +232,7 @@
         public IpAssignment build() {
             validateInputs();
             return new IpAssignment(ipAddress, leasePeriod, timeStamp, assignmentStatus, subnetMask,
-                    dhcpServer, domainServer, routerAddress, fromOpenStack);
+                    dhcpServer, domainServer, routerAddress, rangeNotEnforced);
         }
 
         public Builder ipAddress(Ip4Address addr) {
@@ -275,8 +275,8 @@
             return this;
         }
 
-        public Builder fromOpenStack(boolean fromOpenStack) {
-            this.fromOpenStack = fromOpenStack;
+        public Builder rangeNotEnforced(boolean rangeNotEnforced) {
+            this.rangeNotEnforced = rangeNotEnforced;
             return this;
         }
 
@@ -287,16 +287,16 @@
             checkNotNull(leasePeriod, "Lease Period must be specified");
             checkNotNull(timeStamp, "Timestamp must be specified");
 
-            if (fromOpenStack) {
-                checkNotNull(subnetMask, "subnetMask must be specified in case of OpenStack");
-                checkNotNull(dhcpServer, "dhcpServer must be specified in case of OpenStack");
-                checkNotNull(domainServer, "domainServer must be specified in case of OpenStack");
-                checkNotNull(routerAddress, "routerAddress must be specified in case of OpenStack");
+            if (rangeNotEnforced) {
+                checkNotNull(subnetMask, "subnetMask must be specified in case of rangeNotEnforced");
+                checkNotNull(dhcpServer, "dhcpServer must be specified in case of rangeNotEnforced");
+                checkNotNull(domainServer, "domainServer must be specified in case of rangeNotEnforced");
+                checkNotNull(routerAddress, "routerAddress must be specified in case of rangeNotEnforced");
             }
 
             switch (assignmentStatus) {
                 case Option_Requested:
-                case Option_Requested_From_OpenStack:
+                case Option_RangeNotEnforced:
                 case Option_Assigned:
                 case Option_Expired:
                     break;
