[CORD-46] Create a broadcast group for each subnet

DONE
- Expose subnet-to-ports information from DeviceProperties and DeviceConfiguration
- Create subnetNextObjectiveStore to store <DeviceId, IpPrefix> to nextId mapping
- Implement broadcast NextObjective in SpringOpenTTP
      Use ALL group type to achieve broadcast

TODO (not in this submission)
- Push ARP table for a host when its location is learned
- Push default ARP table miss rule. Action = to the broadcast group

Change-Id: I2de28095e85289e75af3fc7a02c811b270b342ad
diff --git a/src/main/java/org/onosproject/segmentrouting/grouphandler/DeviceProperties.java b/src/main/java/org/onosproject/segmentrouting/grouphandler/DeviceProperties.java
index 497f525..d28d38d 100644
--- a/src/main/java/org/onosproject/segmentrouting/grouphandler/DeviceProperties.java
+++ b/src/main/java/org/onosproject/segmentrouting/grouphandler/DeviceProperties.java
@@ -16,9 +16,12 @@
 package org.onosproject.segmentrouting.grouphandler;
 
 import java.util.List;
+import java.util.Map;
 
+import org.onlab.packet.Ip4Prefix;
 import org.onlab.packet.MacAddress;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
 
 /**
  * Mechanism through which group handler module retrieves
@@ -33,6 +36,7 @@
      * @return segment id of a device
      */
     int getSegmentId(DeviceId deviceId);
+
     /**
      * Returns the Mac address of a device to be used in group creation.
      *
@@ -40,6 +44,7 @@
      * @return mac address of a device
      */
     MacAddress getDeviceMac(DeviceId deviceId);
+
     /**
      * Indicates whether a device is edge device or transit/core device.
      *
@@ -47,6 +52,7 @@
      * @return boolean
      */
     boolean isEdgeDevice(DeviceId deviceId);
+
     /**
      * Returns all segment IDs to be considered in building auto
      *
@@ -54,4 +60,16 @@
      * @return list of segment IDs
      */
     List<Integer> getAllDeviceSegmentIds();
+
+    /**
+     * Returns subnet-to-ports mapping of given device.
+     *
+     * For each entry of the map
+     * Key: a subnet
+     * Value: a list of ports, which are bound to the subnet
+     *
+     * @param deviceId device identifier
+     * @return a map that contains all subnet-to-ports mapping of given device
+     */
+    Map<Ip4Prefix, List<PortNumber>> getSubnetPortsMap(DeviceId deviceId);
 }