diff --git a/internal/pkg/application/application.go b/internal/pkg/application/application.go
index e8bc663..cc5e331 100644
--- a/internal/pkg/application/application.go
+++ b/internal/pkg/application/application.go
@@ -1168,7 +1168,7 @@
 	}
 	if len(d.(*VoltDevice).NniPort) > 0 {
 		for _, nniPort := range d.(*VoltDevice).NniPort {
-			nniPortID, err := GetApplication().GetPortID(nniPort)
+			nniPortID, err := GetApplication().GetDevicePortID(device, nniPort)
 			if err != nil {
 				logger.Errorw(ctx, "Error getting port ID by port Name", log.Fields{"Error": err})
 				continue
@@ -2349,3 +2349,16 @@
 		va.DevicesDisc.Store(id, device)
 	}
 }
+
+func (va *VoltApplication) GetDevicePortID(device, port string) (uint32, error) {
+	logger.Debugw(ctx, "Received Get Device Port ID", log.Fields{"Port": port})
+	d := va.GetDevice(device)
+	if d == nil {
+		return 0, fmt.Errorf("device not found: %s", device)
+	}
+	value, ok := d.Ports.Load(port)
+	if !ok {
+		return 0, fmt.Errorf("port not found: %s", port)
+	}
+	return value.(*VoltPort).ID, nil
+}
diff --git a/internal/pkg/application/igmpprofiles.go b/internal/pkg/application/igmpprofiles.go
index f26e33b..673dacc 100644
--- a/internal/pkg/application/igmpprofiles.go
+++ b/internal/pkg/application/igmpprofiles.go
@@ -565,7 +565,7 @@
 	if err != nil {
 		return nil, err
 	}
-	nniPortID, err1 := GetApplication().GetPortID(nniPort)
+	nniPortID, err1 := GetApplication().GetDevicePortID(device, nniPort)
 	if err1 != nil {
 		return nil, errors.New("Unknown NNI outport")
 	}
diff --git a/internal/pkg/application/service.go b/internal/pkg/application/service.go
index b36cb8f..bb2966f 100644
--- a/internal/pkg/application/service.go
+++ b/internal/pkg/application/service.go
@@ -593,7 +593,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err1})
 			return nil, err1
 		}
-		inport, _ = GetApplication().GetPortID(nniPort)
+		inport, _ = GetApplication().GetDevicePortID(device.Name, nniPort)
 	}
 	outport, _ := GetApplication().GetPortID(vs.Port)
 	// PortName and PortID to be used for validation of port before flow pushing
@@ -791,7 +791,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return nil, err
 		}
-		outport, _ = GetApplication().GetPortID(nniPort)
+		outport, _ = GetApplication().GetDevicePortID(device.Name, nniPort)
 	}
 	inport, _ := GetApplication().GetPortID(vs.Port)
 	// PortName and PortID to be used for validation of port before flow pushing
diff --git a/internal/pkg/application/vnets.go b/internal/pkg/application/vnets.go
index 8a23636..e4f96be 100644
--- a/internal/pkg/application/vnets.go
+++ b/internal/pkg/application/vnets.go
@@ -1953,7 +1953,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return nil, err
 		}
-		inport, _ = GetApplication().GetPortID(nniPort)
+		inport, _ = GetApplication().GetDevicePortID(device.Name, nniPort)
 	}
 
 	subFlow.SetInPort(inport)
@@ -2051,7 +2051,7 @@
 		logger.Errorw(ctx, "Failed to fetch nni port from vpv", log.Fields{"error": err, "device": vpv.Device})
 		return nil, err
 	}
-	nniport, err := GetApplication().GetPortID(nni)
+	nniport, err := GetApplication().GetDevicePortID(vpv.Device, nni)
 	if err != nil {
 		logger.Errorw(ctx, "Failed to fetch port ID for nni", log.Fields{"error": err, "nni": nni})
 		return nil, err
@@ -2212,7 +2212,7 @@
 	if err != nil {
 		return nil, err
 	}
-	nniport, err := GetApplication().GetPortID(nni)
+	nniport, err := GetApplication().GetDevicePortID(vpv.Device, nni)
 	if err != nil {
 		return nil, err
 	}
@@ -2717,7 +2717,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return true
 		}
-		if portID, err := va.GetPortID(nniPort); err == nil {
+		if portID, err := va.GetDevicePortID(device.Name, nniPort); err == nil {
 			if state, _ := controller.GetController().GetPortState(device.Name, nniPort); state != controller.PortStateUp {
 				logger.Warnw(ctx, "Skipping Dev Flow Configuration - Port Down", log.Fields{"Device": device})
 				return true
@@ -2777,7 +2777,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return true
 		}
-		nniPortID, err := va.GetPortID(nniPort)
+		nniPortID, err := va.GetDevicePortID(device.Name, nniPort)
 		if err != nil {
 			logger.Errorw(ctx, "Push ICMPv6 Failed - Failed to get NNI Port Id", log.Fields{"Port": device.NniPort, "Reason": err.Error})
 		}
@@ -2829,7 +2829,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return true
 		}
-		if portID, err := va.GetPortID(nniPort); err == nil {
+		if portID, err := va.GetDevicePortID(device.Name, nniPort); err == nil {
 			if state, _ := controller.GetController().GetPortState(device.Name, nniPort); state != controller.PortStateUp {
 				logger.Warnw(ctx, "Skipping ICMPv6 Flow Deletion - Port Down", log.Fields{"Device": device})
 				return true
@@ -2883,7 +2883,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return true
 		}
-		nniPortID, err := va.GetPortID(nniPort)
+		nniPortID, err := va.GetDevicePortID(device.Name, nniPort)
 		if err != nil {
 			logger.Errorw(ctx, "Delete ICMPv6 Failed - Failed to get NNI Port Id", log.Fields{"Port": device.NniPort, "Reason": err.Error})
 		}
@@ -2950,7 +2950,7 @@
 			logger.Errorw(ctx, "Error getting NNI port", log.Fields{"Error": err})
 			return true
 		}
-		if portID, err := va.GetPortID(nniPort); err == nil {
+		if portID, err := va.GetDevicePortID(device.Name, nniPort); err == nil {
 			if state, _ := controller.GetController().GetPortState(device.Name, nniPort); state != controller.PortStateUp {
 				logger.Warnw(ctx, "Skipping ICMPv6 Flow Deletion - Port Down", log.Fields{"Device": device})
 				return false
diff --git a/internal/pkg/application/vnets_test.go b/internal/pkg/application/vnets_test.go
index 7016667..9fa1e3f 100644
--- a/internal/pkg/application/vnets_test.go
+++ b/internal/pkg/application/vnets_test.go
@@ -2125,6 +2125,7 @@
 				assert.NotNil(t, got)
 			case "BuildDsDhcp6Flows":
 				voltDev.NniPort = []string{"16777216"}
+				voltDev.Ports.Store("16777216", voltPort)
 				va.DevicesDisc.Store("SDX6320031", voltDev)
 				va.DevicesConfig.Store("SDX6320031", deviceConfig)
 				got, err := vpv.BuildDsDhcp6Flows()
