[VOL-3067] Harmonizing DHCP and IGMP flags

Change-Id: Id59e7cc1a678e2cf16f0d877feb897610d52d61b
diff --git a/app/src/main/java/org/opencord/olt/impl/Olt.java b/app/src/main/java/org/opencord/olt/impl/Olt.java
index ad52030..3e2aa83 100644
--- a/app/src/main/java/org/opencord/olt/impl/Olt.java
+++ b/app/src/main/java/org/opencord/olt/impl/Olt.java
@@ -506,14 +506,10 @@
         ForwardingObjective.Builder downFwd =
                 oltFlowService.createDownBuilder(uplink, subscriberPort, downstreamMeterId, uniTag);
 
-        if (uniTag.getIsIgmpRequired()) {
-            oltFlowService.processIgmpFilteringObjectives(deviceId, subscriberPort,
-                                                          upstreamMeterId, uniTag, false, true);
-        }
-        if (uniTag.getIsDhcpRequired()) {
-            oltFlowService.processDhcpFilteringObjectives(deviceId, subscriberPort,
-                                                          upstreamMeterId, uniTag, false, true);
-        }
+        oltFlowService.processIgmpFilteringObjectives(deviceId, subscriberPort,
+                                                      upstreamMeterId, uniTag, false, true);
+        oltFlowService.processDhcpFilteringObjectives(deviceId, subscriberPort,
+                                                      upstreamMeterId, uniTag, false, true);
 
         flowObjectiveService.forward(deviceId, upFwd.remove(new ObjectiveContext() {
             @Override
@@ -753,15 +749,11 @@
                 oltFlowService.processEapolFilteringObjectives(deviceId, subscriberPort,
                                                                tagInfo.getUpstreamBandwidthProfile(),
                                                                null, tagInfo.getPonCTag(), true);
-                if (tagInfo.getIsDhcpRequired()) {
-                    oltFlowService.processDhcpFilteringObjectives(deviceId, subscriberPort,
-                                                                  upstreamMeterId, tagInfo, true, true);
-                }
+                oltFlowService.processDhcpFilteringObjectives(deviceId, subscriberPort,
+                                                              upstreamMeterId, tagInfo, true, true);
 
-                if (tagInfo.getIsIgmpRequired()) {
-                    oltFlowService.processIgmpFilteringObjectives(deviceId, subscriberPort, upstreamMeterId, tagInfo,
-                                                                  true, true);
-                }
+                oltFlowService.processIgmpFilteringObjectives(deviceId, subscriberPort, upstreamMeterId, tagInfo,
+                                                              true, true);
                 updateProgrammedSubscriber(cp, tagInfo, true);
                 post(new AccessDeviceEvent(type, deviceId, port, tagInfo.getPonSTag(), tagInfo.getPonCTag(),
                                            tagInfo.getTechnologyProfileId()));
diff --git a/app/src/main/java/org/opencord/olt/impl/OltFlowService.java b/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
index 9db1b40..88c4adc 100644
--- a/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
+++ b/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
@@ -91,7 +91,6 @@
     private static final int NO_PCP = -1;
     private static final Integer MAX_PRIORITY = 10000;
     private static final Integer MIN_PRIORITY = 1000;
-    private static final int DEFAULT_TP_ID = 64;
     private static final String INSTALLED = "installed";
     private static final String REMOVED = "removed";
     private static final String INSTALLATION = "installation";
@@ -178,33 +177,33 @@
 
         Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
 
-        Boolean o = Tools.isPropertyEnabled(properties, "enableDhcpOnProvisioning");
+        Boolean o = Tools.isPropertyEnabled(properties, ENABLE_DHCP_ON_PROVISIONING);
         if (o != null) {
             enableDhcpOnProvisioning = o;
         }
 
-        Boolean v4 = Tools.isPropertyEnabled(properties, "enableDhcpV4");
+        Boolean v4 = Tools.isPropertyEnabled(properties, ENABLE_DHCP_V4);
         if (v4 != null) {
             enableDhcpV4 = v4;
         }
 
-        Boolean v6 = Tools.isPropertyEnabled(properties, "enableDhcpV6");
+        Boolean v6 = Tools.isPropertyEnabled(properties, ENABLE_DHCP_V6);
         if (v6 != null) {
             enableDhcpV6 = v6;
         }
 
-        Boolean p = Tools.isPropertyEnabled(properties, "enableIgmpOnProvisioning");
+        Boolean p = Tools.isPropertyEnabled(properties, ENABLE_IGMP_ON_PROVISIONING);
         if (p != null) {
             enableIgmpOnProvisioning = p;
         }
 
-        Boolean eap = Tools.isPropertyEnabled(properties, "enableEapol");
+        Boolean eap = Tools.isPropertyEnabled(properties, ENABLE_EAPOL);
         if (eap != null) {
             enableEapol = eap;
         }
 
-        String tpId = get(properties, "defaultTechProfileId");
-        defaultTechProfileId = isNullOrEmpty(tpId) ? DEFAULT_TP_ID : Integer.parseInt(tpId.trim());
+        String tpId = get(properties, DEFAULT_TP_ID);
+        defaultTechProfileId = isNullOrEmpty(tpId) ? DEFAULT_TP_ID_DEFAULT : Integer.parseInt(tpId.trim());
 
     }
 
@@ -214,8 +213,11 @@
                                                UniTagInformation tagInformation,
                                                boolean install,
                                                boolean upstream) {
-        if (!enableDhcpOnProvisioning && !upstream) {
-            log.debug("Dhcp provisioning is disabled.");
+        //tagInformation can be none in case of NNI port.
+        //in that case relying on global flag
+        if (!enableDhcpOnProvisioning || (tagInformation != null
+                && !tagInformation.getIsDhcpRequired())) {
+            log.debug("Dhcp provisioning is disabled for port {} on device {}", devId, port);
             return;
         }
 
@@ -230,7 +232,7 @@
             EthType ethType = EthType.EtherType.IPV4.ethType();
             byte protocol = IPv4.PROTOCOL_UDP;
 
-            this.addDhcpFilteringObjectives(devId, port, udpSrc, udpDst, ethType,
+            addDhcpFilteringObjectives(devId, port, udpSrc, udpDst, ethType,
                     upstreamMeterId, techProfileId, protocol, cTag, unitagMatch, install);
         }
 
@@ -241,7 +243,7 @@
             EthType ethType = EthType.EtherType.IPV6.ethType();
             byte protocol = IPv6.PROTOCOL_UDP;
 
-            this.addDhcpFilteringObjectives(devId, port, udpSrc, udpDst, ethType,
+            addDhcpFilteringObjectives(devId, port, udpSrc, udpDst, ethType,
                     upstreamMeterId, techProfileId, protocol, cTag, unitagMatch, install);
         }
     }
@@ -303,13 +305,17 @@
                                                UniTagInformation tagInformation,
                                                boolean install,
                                                boolean upstream) {
-        if (!enableIgmpOnProvisioning) {
-            log.debug("Igmp provisioning is disabled.");
+        //tagInformation can be none in case of NNI port.
+        //in that case relying on global flag
+        if (!enableIgmpOnProvisioning || (tagInformation != null
+                && !tagInformation.getIsIgmpRequired())) {
+            log.debug("Igmp provisioning is disabled for port {} on device {}", devId, port);
             return;
         }
 
         if (!upstream) {
-            log.debug("Direction is not Upstream, ignoring Igmp request");
+            log.debug("Direction on port {} for device {} " +
+                              "is not Upstream, ignoring Igmp request", port, devId);
             return;
         }
 
@@ -706,7 +712,7 @@
      */
     private Long createMetadata(VlanId innerVlan, int techProfileId, PortNumber egressPort) {
         if (techProfileId == NONE_TP_ID) {
-            techProfileId = DEFAULT_TP_ID;
+            techProfileId = DEFAULT_TP_ID_DEFAULT;
         }
 
         return ((long) (innerVlan.id()) << 48 | (long) techProfileId << 32) | egressPort.toLong();