Make DHCP data MTU be configurable in openstacknetworking

Change-Id: Ia51807117f43e0d264c5becf3c2c43f69ef1a7cb
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 12e98e9..3192cb4 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
@@ -75,14 +75,15 @@
     protected final Logger log = getLogger(getClass());
 
     private static final String DHCP_SERVER_MAC = "dhcpServerMac";
+    private static final String DHCP_DATA_MTU = "dhcpDataMtu";
     private static final Ip4Address DEFAULT_DNS = Ip4Address.valueOf("8.8.8.8");
     private static final byte PACKET_TTL = (byte) 127;
     // TODO add MTU, static route option codes to ONOS DHCP and remove here
     private static final byte DHCP_OPTION_MTU = (byte) 26;
     private static final byte[] DHCP_DATA_LEASE_INFINITE =
             ByteBuffer.allocate(4).putInt(-1).array();
-    private static final byte[] DHCP_DATA_MTU_DEFAULT =
-            ByteBuffer.allocate(2).putShort((short) 1450).array();
+    // we are using 1450 as a default DHCP MTU value
+    private static final int DHCP_DATA_MTU_DEFAULT = 1450;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
@@ -103,6 +104,10 @@
             label = "Fake MAC address for virtual network subnet gateway")
     private String dhcpServerMac = DEFAULT_GATEWAY_MAC_STR;
 
+    @Property(name = DHCP_DATA_MTU, intValue = DHCP_DATA_MTU_DEFAULT,
+            label = "DHCP data Maximum Transmission Unit")
+    private int dhcpDataMtu = DHCP_DATA_MTU_DEFAULT;
+
     private final PacketProcessor packetProcessor = new InternalPacketProcessor();
 
     private ApplicationId appId;
@@ -130,12 +135,19 @@
     protected void modified(ComponentContext context) {
         Dictionary<?, ?> properties = context.getProperties();
         String updatedMac;
+        Integer updateMtu;
 
         updatedMac = Tools.get(properties, DHCP_SERVER_MAC);
+        updateMtu = Tools.getIntegerProperty(properties, DHCP_DATA_MTU);
+
         if (!Strings.isNullOrEmpty(updatedMac) && !updatedMac.equals(dhcpServerMac)) {
             dhcpServerMac = updatedMac;
         }
 
+        if (updateMtu != null && updateMtu != dhcpDataMtu) {
+            dhcpDataMtu = updateMtu;
+        }
+
         log.info("Modified");
     }
 
@@ -363,11 +375,10 @@
             option.setData(DEFAULT_DNS.toOctets());
             options.add(option);
 
-            // TODO fix MTU value to be configurable
             option = new DhcpOption();
             option.setCode(DHCP_OPTION_MTU);
             option.setLength((byte) 2);
-            option.setData(DHCP_DATA_MTU_DEFAULT);
+            option.setData(ByteBuffer.allocate(2).putShort((short) dhcpDataMtu).array());
             options.add(option);
 
             // router address