diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index fc9304a..a78f093 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -353,6 +353,9 @@
                                       "requestInterceptsEnabled", "false");
         compCfgService.preSetProperty("org.onosproject.dhcprelay.DhcpRelay",
                                       "arpEnabled", "false");
+        compCfgService.preSetProperty("org.onosproject.net.host.impl.HostManager",
+                                      "greedyLearningIpv6", "true");
+
 
         processor = new InternalPacketProcessor();
         linkListener = new InternalLinkListener();
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index a18d4ad..3f5d643 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -23,6 +23,7 @@
 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.Ip6Address;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.VlanId;
@@ -60,6 +61,8 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
+import static org.onlab.packet.IPv6.getLinkLocalAddress;
+import static org.onosproject.net.link.ProbedLinkProvider.DEFAULT_MAC;
 import static org.onosproject.security.AppGuard.checkPermission;
 import static org.slf4j.LoggerFactory.getLogger;
 import static org.onosproject.security.AppPermission.Type.*;
@@ -104,7 +107,6 @@
 
     @Property(name = "allowDuplicateIps", boolValue = true,
             label = "Enable removal of duplicate ip address")
-
     private boolean allowDuplicateIps = true;
 
     @Property(name = "monitorHosts", boolValue = false,
@@ -115,6 +117,10 @@
             label = "Set the probe Rate in milli seconds")
     private long probeRate = 30000;
 
+    @Property(name = "greedyLearningIpv6", boolValue = false,
+            label = "Enable/Disable greedy learning of IPv6 link local address")
+    private boolean greedyLearningIpv6 = false;
+
     private HostMonitor monitor;
 
 
@@ -197,6 +203,16 @@
                      allowDuplicateIps ? "disabled" : "enabled");
         }
 
+        flag = Tools.isPropertyEnabled(properties, "greedyLearningIpv6");
+        if (flag == null) {
+            log.info("greedy learning is not enabled " +
+                             "using current value of {}", greedyLearningIpv6);
+        } else {
+            greedyLearningIpv6 = flag;
+            log.info("Configured. greedyLearningIpv6 {}",
+                     greedyLearningIpv6 ? "enabled" : "disabled");
+        }
+
     }
 
     /**
@@ -330,6 +346,43 @@
                     monitor.addMonitoringFor(ip);
                 });
             }
+
+            // Greedy learning of IPv6 host. We have to disable the greedy
+            // learning of configured hosts. Validate hosts each time will
+            // overwrite the learnt information with the configured informations.
+            if (greedyLearningIpv6) {
+                // Auto-generation of the IPv6 link local address
+                // using the mac address
+                Ip6Address targetIp6Address = Ip6Address.valueOf(
+                        getLinkLocalAddress(hostId.mac().toBytes())
+                );
+                // If we already know this guy we don't need to do other
+                if (!hostDescription.ipAddress().contains(targetIp6Address)) {
+                    Host host = store.getHost(hostId);
+                    // Configured host, skip it.
+                    if (host != null && host.configured()) {
+                        return;
+                    }
+                    // Host does not exist in the store or the target is not known
+                    if ((host == null || !host.ipAddresses().contains(targetIp6Address))) {
+                        // We generate ONOS ip from the ONOS default mac
+                        // We could use the mac generated for the link
+                        // discovery but maybe does not worth
+                        MacAddress onosMacAddress = MacAddress.valueOf(DEFAULT_MAC);
+                        Ip6Address onosIp6Address = Ip6Address.valueOf(
+                                getLinkLocalAddress(onosMacAddress.toBytes())
+                        );
+                        // We send a probe using the monitoring service
+                        monitor.sendProbe(
+                                hostDescription.location(),
+                                targetIp6Address,
+                                onosIp6Address,
+                                onosMacAddress,
+                                hostId.vlanId()
+                        );
+                    }
+                }
+            }
         }
 
         // When a new IP is detected, remove that IP on other hosts if it exists
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
index 7375105..2e4a435 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
@@ -206,21 +206,20 @@
         }
     }
 
-    private void sendProbe(ConnectPoint connectPoint,
-                           IpAddress targetIp,
-                           IpAddress sourceIp, MacAddress sourceMac,
-                           VlanId vlan) {
+    public void sendProbe(ConnectPoint connectPoint,
+                          IpAddress targetIp,
+                          IpAddress sourceIp,
+                          MacAddress sourceMac,
+                          VlanId vlan) {
         Ethernet probePacket;
 
         if (targetIp.isIp4()) {
             // IPv4: Use ARP
             probePacket = buildArpRequest(targetIp, sourceIp, sourceMac, vlan);
         } else {
-            /*
-             * IPv6: Use Neighbor Discovery. According to the NDP protocol,
-             * we should use the solicitation node address as IPv6 destination
-             * and the multicast mac address as Ethernet destination.
-             */
+             // IPv6: Use Neighbor Discovery. According to the NDP protocol,
+             // we should use the solicitation node address as IPv6 destination
+             // and the multicast mac address as Ethernet destination.
             byte[] destIp = IPv6.getSolicitNodeAddress(targetIp.toOctets());
             probePacket = NeighborSolicitation.buildNdpSolicit(
                     targetIp.toOctets(),
