diff --git a/apps/openstacknetworking/app/BUILD b/apps/openstacknetworking/app/BUILD
index 3f79a02..e11551a 100644
--- a/apps/openstacknetworking/app/BUILD
+++ b/apps/openstacknetworking/app/BUILD
@@ -16,6 +16,7 @@
     "@jersey_client//jar",
     "@httpclient_osgi//jar",
     "@httpcore_osgi//jar",
+    "@commons_net//jar",
     "@commons_codec//jar",
     "@openstack4j_core//jar",
     "@openstack4j_http_connector//jar",
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
index cab32d2..922d1b5 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
@@ -91,6 +91,7 @@
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_DHCP_RULE;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.DHCP_SERVER_MAC;
 import static org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.DHCP_SERVER_MAC_DEFAULT;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getBroadcastAddr;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -389,8 +390,7 @@
             options.add(doSubnetMask(subnetPrefixLen));
 
             // broadcast address
-            // do not specify broadcast address, let host use default value
-            // options.add(doBroadcastAddr(yourIp, subnetPrefixLen));
+            options.add(doBroadcastAddr(yourIp, subnetPrefixLen));
 
             // domain server
             options.add(doDomainServer(osSubnet));
@@ -452,11 +452,13 @@
         }
 
         private DhcpOption doBroadcastAddr(Ip4Address yourIp, int subnetPrefixLen) {
-            Ip4Address broadcast = Ip4Address.makeMaskedAddress(yourIp, subnetPrefixLen);
+            String broadcast = getBroadcastAddr(yourIp.toString(), subnetPrefixLen);
+
             DhcpOption option = new DhcpOption();
             option.setCode(OptionCode_BroadcastAddress.getValue());
             option.setLength(DHCP_OPTION_DATA_LENGTH);
-            option.setData(broadcast.toOctets());
+            option.setData(IpAddress.valueOf(broadcast).toOctets());
+
             return option;
         }
 
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index 80d18b3..003f01c 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -26,6 +26,7 @@
 import com.google.common.collect.Lists;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.net.util.SubnetUtils;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
@@ -1484,6 +1485,19 @@
     }
 
     /**
+     * Calculate the broadcast address from given IP address and subnet prefix length.
+     *
+     * @param ipAddr        IP address
+     * @param prefixLength  subnet prefix length
+     * @return broadcast address
+     */
+    public static String getBroadcastAddr(String ipAddr, int prefixLength) {
+        String subnet = ipAddr + "/" + prefixLength;
+        SubnetUtils utils = new SubnetUtils(subnet);
+        return utils.getInfo().getBroadcastAddress();
+    }
+
+    /**
      * Builds up and a complete endpoint URL from gateway node.
      *
      * @param node gateway node
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
index e5635e5..9bedb36 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
@@ -81,6 +81,7 @@
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkActivationFlag;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getBroadcastAddr;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getConnectedClient;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
@@ -499,6 +500,29 @@
         checkActivationFlag(null);
     }
 
+    /**
+     * Tests the getBroadcastAddr method.
+     */
+    @Test
+    public void testGetBroadcastAddr() {
+        String ipAddr = "192.168.10.35";
+        int prefix1 = 24;
+        String broadcast1 = getBroadcastAddr(ipAddr, prefix1);
+        assertEquals(broadcast1, "192.168.10.255");
+
+        int prefix2 = 28;
+        String broadcast2 = getBroadcastAddr(ipAddr, prefix2);
+        assertEquals(broadcast2, "192.168.10.47");
+
+        int prefix3 = 32;
+        String broadcast3 = getBroadcastAddr(ipAddr, prefix3);
+        assertEquals(broadcast3, "192.168.10.35");
+
+        int prefix4 = 16;
+        String broadcast4 = getBroadcastAddr(ipAddr, prefix4);
+        assertEquals(broadcast4, "192.168.255.255");
+    }
+
     private DeviceId genDeviceId(int index) {
         return DeviceId.deviceId("of:compute-" + index);
     }
