diff --git a/internal/pkg/intf/appif.go b/internal/pkg/intf/appif.go
new file mode 100644
index 0000000..76ea4d4
--- /dev/null
+++ b/internal/pkg/intf/appif.go
@@ -0,0 +1,37 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package intf
+
+// App Interface
+type App interface {
+	PortAddInd(string, uint32, string)
+	PortDelInd(string, string)
+	PortUpdateInd(string, string, uint32)
+	PacketInInd(string, string, []byte)
+	PortUpInd(string, string)
+	PortDownInd(string, string)
+	AddDevice(string, string, string)
+	DeviceUpInd(string)
+	DeviceDownInd(string)
+	DelDevice(string)
+	SetRebootFlag(bool)
+	ProcessFlowModResultIndication(FlowStatus)
+	DeviceRebootInd(string, string, string)
+	DeviceDisableInd(string)
+	UpdateMvlanProfilesForDevice(string)
+	TriggerPendingProfileDeleteReq(string)
+	TriggerPendingMigrateServicesReq(string)
+}
diff --git a/internal/pkg/intf/flowerror.go b/internal/pkg/intf/flowerror.go
new file mode 100644
index 0000000..04ca588
--- /dev/null
+++ b/internal/pkg/intf/flowerror.go
@@ -0,0 +1,31 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package intf
+
+import (
+	"voltha-go-controller/internal/pkg/of"
+)
+
+// FlowStatus structure
+type FlowStatus struct {
+	Device         string
+	Cookie         string
+	FlowModType    of.Command
+	Flow           *of.VoltSubFlow
+	Status         uint32
+	Reason         string
+	AdditionalData of.BwAvailDetails
+}
diff --git a/internal/pkg/intf/taskif.go b/internal/pkg/intf/taskif.go
new file mode 100644
index 0000000..5427d4f
--- /dev/null
+++ b/internal/pkg/intf/taskif.go
@@ -0,0 +1,29 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package intf
+
+import (
+	"context"
+	"voltha-go-controller/internal/pkg/tasks"
+)
+
+/*Tasks interface is responsible for creating the tasks
+and executing them as well. For now, it is assumed that
+one task run at a time though interface doesn't force it.*/
+type Tasks interface {
+	AddTask(tasks.Task)
+	Initialize(cxt context.Context)
+}
diff --git a/internal/pkg/intf/vpagent.go b/internal/pkg/intf/vpagent.go
new file mode 100644
index 0000000..f255d13
--- /dev/null
+++ b/internal/pkg/intf/vpagent.go
@@ -0,0 +1,68 @@
+/*
+* Copyright 2022-present Open Networking Foundation
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package intf
+
+import (
+	"context"
+
+	"voltha-go-controller/internal/pkg/holder"
+
+	ofp "github.com/opencord/voltha-protos/v5/go/openflow_13"
+)
+
+// VPClientCfg structure
+type VPClientCfg struct {
+	DeviceID         string
+	SerialNum        string
+	SouthBoundID     string
+	VolthaClient     *holder.VolthaServiceClientHolder
+	PacketOutChannel chan *ofp.PacketOut
+}
+
+// DiscoveryType type
+type DiscoveryType uint8
+
+const (
+	// DeviceDisc constant
+	DeviceDisc DiscoveryType = 0
+	// DeviceReDisc constant
+	DeviceReDisc DiscoveryType = 1
+)
+
+// IVPClient interface
+type IVPClient interface {
+	ChangeEvent(*ofp.ChangeEvent) error
+	PacketIn(*ofp.PacketIn)
+	ConnectInd(cxt context.Context, DiscType DiscoveryType)
+	Stop()
+}
+
+// VPAgent interface
+type VPAgent interface {
+	receiveOltRebootNoti(ctx context.Context)
+	handleOltRebootNoti(ctx context.Context)
+}
+
+// IVPClientAgent interface
+type IVPClientAgent interface {
+	AddNewDevice(cfg *VPClientCfg)
+	DelDevice(id string)
+	IsRebootInProgressForDevice(device string) bool
+	// RebootInd(string, string, string)
+	IsBlockedDevice(string) bool
+	AddBlockedDevices(string)
+	DelBlockedDevices(string)
+}
