[CORD-1887] Make DHCP relay works with dual homing

Change-Id: I479a292d6d6d4820798ed660cc51826c3b12ede3
diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
index 90efcf4..a0d6e37 100644
--- a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
@@ -151,13 +151,11 @@
     private boolean requestIpv6ND = false;
 
     @Property(name = "useDhcp", boolValue = false,
-            label = "Use DHCP for neighbor discovery by the " +
-                    "Host Location Provider; default is false")
+            label = "Use DHCP to update IP address of the host; default is false")
     private boolean useDhcp = false;
 
     @Property(name = "useDhcp6", boolValue = false,
-            label = "Use DHCPv6 for neighbor discovery by the " +
-                    "Host Location Provider; default is false")
+            label = "Use DHCPv6 to update IP address of the host; default is false")
     private boolean useDhcp6 = false;
 
     @Property(name = "requestInterceptsEnabled", boolValue = true,
@@ -541,25 +539,18 @@
 
             // IPv4: update location only
             } else if (eth.getEtherType() == Ethernet.TYPE_IPV4) {
-                DHCP dhcp = findDhcp(eth).orElse(null);
-                if (dhcp != null) {
-                    if (useDhcp) {
-                        // learn host (server or client) MAC address
-                        createOrUpdateHost(hid, srcMac, vlan, hloc, null);
-
-                        // DHCP ACK: additionally update IP of DHCP client
-                        if (dhcp.getPacketType().equals(DHCP.MsgType.DHCPACK)) {
-                            MacAddress hostMac = MacAddress.valueOf(dhcp.getClientHardwareAddress());
-                            VlanId hostVlan = VlanId.vlanId(eth.getVlanID());
-                            HostId hostId = HostId.hostId(hostMac, hostVlan);
-                            updateHostIp(hostId, IpAddress.valueOf(dhcp.getYourIPAddress()));
-                        }
+                // Update host location
+                createOrUpdateHost(hid, srcMac, vlan, hloc, null);
+                if (useDhcp) {
+                    DHCP dhcp = findDhcp(eth).orElse(null);
+                    // DHCP ACK: additionally update IP of DHCP client
+                    if (dhcp != null  && dhcp.getPacketType().equals(DHCP.MsgType.DHCPACK)) {
+                        MacAddress hostMac = MacAddress.valueOf(dhcp.getClientHardwareAddress());
+                        VlanId hostVlan = VlanId.vlanId(eth.getVlanID());
+                        HostId hostId = HostId.hostId(hostMac, hostVlan);
+                        updateHostIp(hostId, IpAddress.valueOf(dhcp.getYourIPAddress()));
                     }
-                } else {
-                    // learn host MAC address
-                    createOrUpdateHost(hid, srcMac, vlan, hloc, null);
                 }
-            //
             // NeighborAdvertisement and NeighborSolicitation: possible
             // new hosts, update both location and IP.
             //
@@ -605,8 +596,8 @@
                     }
                 }
 
-                // multicast
-                if (eth.isMulticast()) {
+                // multicast, exclude DHCPv6
+                if (eth.isMulticast() && dhcp6 == null) {
                     return;
                 }
 
diff --git a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
index 5c924b5..77e2caa 100644
--- a/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
+++ b/providers/host/src/test/java/org/onosproject/provider/host/impl/HostLocationProviderTest.java
@@ -439,18 +439,6 @@
     }
 
     /**
-     * The host store should not updated when we disabled "useDhcp".
-     */
-    @Test
-    public void receiveDhcpButNotEnabled() {
-        TestUtils.setField(provider, "useDhcp", false);
-        // DHCP Request
-        testProcessor.process(new TestDhcpRequestPacketContext(DEV1, VLAN));
-        assertThat("receiveDhcpButNotEnabled. No host description expected",
-                   providerService.descriptions.size(), is(0));
-    }
-
-    /**
      * When receiving NeighborAdvertisement, updates location and IP.
      */
     @Test