[VOL-4577] : Update ONOS olt-app for adding FTTB DPU Management, ANCP traffic & trap rules

Change-Id: Ibb8aad6e68e8bd3b5f5824f0b04f4c5bc2f84a9e
diff --git a/impl/src/main/java/org/opencord/olt/impl/OltUtils.java b/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
index 6300ff9..869a01d 100644
--- a/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
+++ b/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
@@ -16,8 +16,11 @@
 
 package org.opencord.olt.impl;
 
+import org.onlab.packet.VlanId;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.Port;
+import org.opencord.sadis.SubscriberAndDeviceInformation;
+import org.opencord.sadis.UniTagInformation;
 
 import static org.opencord.olt.impl.OltFlowService.FlowOperation.ADD;
 
@@ -57,4 +60,28 @@
     static String completeFlowOpToString(OltFlowService.FlowOperation op) {
         return op == ADD ? "Added" : "Removed";
     }
+
+    /**
+     * Search and return the matching UniTagInfomation from the list of UniTagInfomation in the
+     * SubscriberAndDeviceInformation.
+     * For the match : cvlan, svlan and tpId are used.
+     *
+     * @param subInfo       Subscriber information.
+     * @param innerVlan     cTag
+     * @param outerVlan     sTag
+     * @param tpId          Techprofile Id
+     * @return UniTagInformation
+     */
+    static UniTagInformation getUniTagInformation(SubscriberAndDeviceInformation subInfo, VlanId innerVlan,
+                                                  VlanId outerVlan, int tpId) {
+        UniTagInformation service = null;
+        for (UniTagInformation tagInfo : subInfo.uniTagList()) {
+            if (innerVlan.equals(tagInfo.getPonCTag()) && outerVlan.equals(tagInfo.getPonSTag())
+                    && tpId == tagInfo.getTechnologyProfileId()) {
+                service = tagInfo;
+                break;
+            }
+        }
+        return service;
+    }
 }