diff --git a/internal/pkg/application/application.go b/internal/pkg/application/application.go
index 8b1e763..9476e55 100644
--- a/internal/pkg/application/application.go
+++ b/internal/pkg/application/application.go
@@ -38,7 +38,7 @@
 	"voltha-go-controller/internal/pkg/tasks"
 	"voltha-go-controller/internal/pkg/util"
 	errorCodes "voltha-go-controller/internal/pkg/errorcodes"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 var logger log.CLogger
@@ -47,7 +47,7 @@
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.RegisterPackage(log.JSON, log.ErrorLevel, log.Fields{})
+	logger, err = log.AddPackageWithDefaultParam()
 	if err != nil {
 		panic(err)
 	}
@@ -64,9 +64,9 @@
 
 // List of Mac Learning Type
 const (
-        MacLearningNone MacLearningType = iota
-        Learn
-        ReLearn
+	MacLearningNone MacLearningType = iota
+	Learn
+	ReLearn
 )
 
 // MacLearningType represents Mac Learning Type
@@ -2050,7 +2050,7 @@
 				va.DeleteDevFlowForVlanFromDevice(vnet, vnet.PendingDeviceToDelete)
 				va.deleteVnetConfig(vnet)
 			} else {
-				logger.Warn(ctx, "Vnet Delete Failed : Device Not Found", log.Fields{"Vnet": vnet.Name, "Device": vnet.PendingDeviceToDelete})
+				logger.Warnw(ctx, "Vnet Delete Failed : Device Not Found", log.Fields{"Vnet": vnet.Name, "Device": vnet.PendingDeviceToDelete})
 			}
 		}
 	}
diff --git a/internal/pkg/application/dhcprelay.go b/internal/pkg/application/dhcprelay.go
index 06aa3db..c57771c 100644
--- a/internal/pkg/application/dhcprelay.go
+++ b/internal/pkg/application/dhcprelay.go
@@ -27,7 +27,7 @@
 	cntlr "voltha-go-controller/internal/pkg/controller"
 	"voltha-go-controller/internal/pkg/of"
 	"voltha-go-controller/internal/pkg/util"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 // DhcpRelayState type
@@ -509,7 +509,7 @@
 					logger.Debugw(ctx, "IPv6 Allocated", log.Fields{"IANA IPv6": ipv6Addr})
 					return ipv6Addr, leaseTime
 				}
-				logger.Warn(ctx, "Decode of IANA Failed", log.Fields{"Reason": err.Error()})
+				logger.Warnw(ctx, "Decode of IANA Failed", log.Fields{"Reason": err.Error()})
 				break
 			}
 		}
@@ -532,7 +532,7 @@
 					logger.Debugw(ctx, "IPv6 Allocated", log.Fields{"IAPD IPv6": ipv6Addr})
 					break
 				} else {
-					logger.Warn(ctx, "Decode of IAPD Failed", log.Fields{"Reason": err.Error()})
+					logger.Warnw(ctx, "Decode of IAPD Failed", log.Fields{"Reason": err.Error()})
 					break
 				}
 			}
diff --git a/internal/pkg/application/dhcpserverhandler.go b/internal/pkg/application/dhcpserverhandler.go
index c208910..947dd34 100644
--- a/internal/pkg/application/dhcpserverhandler.go
+++ b/internal/pkg/application/dhcpserverhandler.go
@@ -19,7 +19,7 @@
 	"sync"
 	"time"
 
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 const (
diff --git a/internal/pkg/application/flowevent.go b/internal/pkg/application/flowevent.go
index 4fe1a0a..f6f3584 100644
--- a/internal/pkg/application/flowevent.go
+++ b/internal/pkg/application/flowevent.go
@@ -19,7 +19,7 @@
 	infraerrorcode "voltha-go-controller/internal/pkg/errorcodes/service"
 
 	"voltha-go-controller/internal/pkg/intf"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 //Generic Framework to enabling all flow based event trigger and handling.
diff --git a/internal/pkg/application/igmp.go b/internal/pkg/application/igmp.go
index d43283d..ba3f8fe 100644
--- a/internal/pkg/application/igmp.go
+++ b/internal/pkg/application/igmp.go
@@ -33,7 +33,7 @@
 	"voltha-go-controller/database"
 	"voltha-go-controller/internal/pkg/of"
 	"voltha-go-controller/internal/pkg/util"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 const (
@@ -2771,7 +2771,7 @@
 		}
 		return ig
 	}
-	logger.Error(ctx, "GetMvlan Pro failed", log.Fields{"Group": gip})
+	logger.Errorw(ctx, "GetMvlan Pro failed", log.Fields{"Group": gip})
 	return nil
 }
 
diff --git a/internal/pkg/application/major_upgrade.go b/internal/pkg/application/major_upgrade.go
index 084a554..639822b 100644
--- a/internal/pkg/application/major_upgrade.go
+++ b/internal/pkg/application/major_upgrade.go
@@ -25,7 +25,7 @@
 	"github.com/google/gopacket/layers"
 
 	"voltha-go-controller/database"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 const (
@@ -123,7 +123,7 @@
 	Migrate := new(DataMigration)
 	var NoDataInDB bool
 	err := GetMigrationInfo(Migrate)
-	logger.Debug(ctx, "Migration data", log.Fields{"DataMigration": Migrate})
+	logger.Debugw(ctx, "Migration data", log.Fields{"DataMigration": Migrate})
 	// No DB entry represents N verison Bring Up for the First time
 	if err != nil {
 		NoDataInDB = true
@@ -136,10 +136,10 @@
 		Migrate.Status = MigrationComplete
 		Migrate.ModuleVer = database.PresentVersionMap
 		if err := Migrate.WriteToDb(); err != nil {
-			logger.Error(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
+			logger.Errorw(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
 		}
 		//MigrateProbestatus has to be Updated to Complete when No Migration is Required
-		logger.Debug(ctx, "Migration Probe Status", log.Fields{"Migration Probe": Migrate.Status})
+		logger.Debugw(ctx, "Migration Probe Status", log.Fields{"Migration Probe": Migrate.Status})
 		//probe.UpdateDBMigrationStatus(ctx, true)
 		return false
 		// Migration required when vgc moves to Higher Versions
@@ -173,7 +173,7 @@
 	}
 
 	// In case Service Reboots/Rolls Back then Probe Success to MSM
-	logger.Debug(ctx, "Migration Probe Status", log.Fields{"Migration Probe": Migrate.Status})
+	logger.Debugw(ctx, "Migration Probe Status", log.Fields{"Migration Probe": Migrate.Status})
 	//probe.UpdateDBMigrationStatus(ctx, true)
 	return false
 }
@@ -193,10 +193,10 @@
 		logger.Debug(ctx, "Started Go Routine for data migration")
 		err = MigrateDBData()
 		if err != nil {
-			logger.Error(ctx, "Failed to Migrate the Data", log.Fields{"error": err})
+			logger.Errorw(ctx, "Failed to Migrate the Data", log.Fields{"error": err})
 			Migrate.Status = MigrationFailed
 			if err := Migrate.WriteToDb(); err != nil {
-				logger.Error(ctx, "DB Write failed to Migration Path", log.Fields{"error": err})
+				logger.Errorw(ctx, "DB Write failed to Migration Path", log.Fields{"error": err})
 			}
 		}
 		logger.Debug(ctx, "Completed Go Routine for data migration")
@@ -206,17 +206,17 @@
 		Migrate.Status = MigrationInProgress
 		Migrate.ModuleVer = database.PresentVersionMap
 		if err = Migrate.WriteToDb(); err != nil {
-			logger.Error(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
+			logger.Errorw(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
 			return
 		}
 	}()
 	// Failure Senario can be Exceptions, incase of panic Update the status as failed
 	defer func() {
 		if err := recover(); err != nil {
-			logger.Error(ctx, "Migration failure due to Exception happend", log.Fields{"reason": err})
+			logger.Errorw(ctx, "Migration failure due to Exception happend", log.Fields{"reason": err})
 			Migrate.Status = MigrationFailed
 			if err := Migrate.WriteToDb(); err != nil {
-				logger.Error(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
+				logger.Errorw(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
 			}
 			//probe.UpdateDBMigrationStatus(ctx, false)
 			return
@@ -227,9 +227,9 @@
 	//probe.UpdateDBMigrationStatus(ctx, true)
 	Migrate.Status = MigrationComplete
 	if err := Migrate.WriteToDb(); err != nil {
-		logger.Error(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
+		logger.Errorw(ctx, "DB Write failed for Migration Path", log.Fields{"error": err})
 	}
-	logger.Info(ctx, "Migration completed successfully", log.Fields{"Status": Migrate.Status})
+	logger.Infow(ctx, "Migration completed successfully", log.Fields{"Status": Migrate.Status})
 }
 
 // MigrateDBData to migrate database data
@@ -277,18 +277,18 @@
 	previousPath := database.GetModuleKeypath(module, database.PreviousVersionMap[module])
 	dbPathKeysValueMap, err := db.List(previousPath)
 	if err != nil {
-		logger.Error(ctx, "failed to Fetch the Keys from Redis", log.Fields{"error": err})
+		logger.Errorw(ctx, "failed to Fetch the Keys from Redis", log.Fields{"error": err})
 		//No return required, Data might not be present in DB
 		return nil
 	}
 	if len(dbPathKeysValueMap) == 0 {
-		logger.Debug(ctx, "No data present in DB for the path", log.Fields{"dbPath": module})
+		logger.Debugw(ctx, "No data present in DB for the path", log.Fields{"dbPath": module})
 		return nil
 	}
 
 	// Fetch each Path from previous version and store to present version after data migration changes
 	for hash, value := range dbPathKeysValueMap {
-		logger.Debug(ctx, "DB path", log.Fields{"hash": hash})
+		logger.Debugw(ctx, "DB path", log.Fields{"hash": hash})
 		//convert the value to a specific type based on the dbPath
 		b, ok := value.Value.([]byte)
 		if !ok {
@@ -307,7 +307,7 @@
 		presentPath := database.GetKeyPath(module) + hash
 		logger.Infow(ctx, "Before writing to DB", log.Fields{"presentParams": presentParams})
 		if err := db.Put(presentPath, presentParams); err != nil {
-			logger.Error(ctx, "Update Params failed", log.Fields{"key": presentPath, "presentparams": presentParams})
+			logger.Errorw(ctx, "Update Params failed", log.Fields{"key": presentPath, "presentparams": presentParams})
 			return err
 		}
 	}
@@ -323,7 +323,7 @@
 
 	err := json.Unmarshal(data, &vsmap)
 	if err != nil {
-		logger.Warn(ctx, "Unmarshal of VPV failed", log.Fields{"error": err})
+		logger.Warnw(ctx, "Unmarshal of VPV failed", log.Fields{"error": err})
 		return ""
 	}
 	// changes to handle change in data type of MacLearning parameter
@@ -399,7 +399,7 @@
 
 	err := json.Unmarshal(data, &vnet)
 	if err != nil {
-		logger.Warn(ctx, "Unmarshal of VNET failed", log.Fields{"error": err})
+		logger.Warnw(ctx, "Unmarshal of VNET failed", log.Fields{"error": err})
 		return ""
 	}
 
@@ -432,7 +432,7 @@
 
 	err := json.Unmarshal(data, &vpvmap)
 	if err != nil {
-		logger.Warn(ctx, "Unmarshal of VPV failed", log.Fields{"error": err})
+		logger.Warnw(ctx, "Unmarshal of VPV failed", log.Fields{"error": err})
 		return ""
 	}
 	// changes to handle change in data type of MacLearning parameter
@@ -606,12 +606,12 @@
 
 //DeleteDbPathKeys Deleted the paths from DB
 func DeleteDbPathKeys(keyPath string) error {
-	logger.Debug(ctx, "Deleting paths for version", log.Fields{"Path": keyPath})
+	logger.Debugw(ctx, "Deleting paths for version", log.Fields{"Path": keyPath})
 
 	// Delete all the keys
 	err := db.DeleteAll(keyPath)
 	if err != nil && err.Error() != common.ErrEntryNotFound.Error() {
-		logger.Error(ctx, "Delete Key failed", log.Fields{"error": err})
+		logger.Errorw(ctx, "Delete Key failed", log.Fields{"error": err})
 		return err
 	}
 	return nil
diff --git a/internal/pkg/application/meters.go b/internal/pkg/application/meters.go
index 4b5fd71..cd3e724 100644
--- a/internal/pkg/application/meters.go
+++ b/internal/pkg/application/meters.go
@@ -23,7 +23,7 @@
 	cntlr "voltha-go-controller/internal/pkg/controller"
 	"voltha-go-controller/database"
 	"voltha-go-controller/internal/pkg/of"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 // VoltShaperConfig is shaper profile configuration structure
@@ -192,7 +192,7 @@
 		meter.AddBand(vm.Air, 0)
 	}
 
-	logger.Debug(ctx, "Total Bands are", log.Fields{"meter": *meter})
+	logger.Debugw(ctx, "Total Bands are", log.Fields{"meter": *meter})
 	if err := cntlr.GetController().ModMeter(port, device, of.MeterCommandAdd, meter); err != nil {
 		logger.Warnw(ctx, "Add meter to device Failed", log.Fields{"Id": vm.ID, "meter": *meter, "Error": err})
 	}
diff --git a/internal/pkg/application/minor_upgrade.go b/internal/pkg/application/minor_upgrade.go
index 8953470..d8e7094 100644
--- a/internal/pkg/application/minor_upgrade.go
+++ b/internal/pkg/application/minor_upgrade.go
@@ -24,7 +24,7 @@
 
 	"github.com/google/gopacket/layers"
 	"voltha-go-controller/database"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 type paramsUpdationFunc func(hash string, value interface{}) error
diff --git a/internal/pkg/application/pppoeia.go b/internal/pkg/application/pppoeia.go
index 8b5a214..7c55b79 100644
--- a/internal/pkg/application/pppoeia.go
+++ b/internal/pkg/application/pppoeia.go
@@ -27,7 +27,7 @@
 	cntlr "voltha-go-controller/internal/pkg/controller"
 	"voltha-go-controller/internal/pkg/of"
 	"voltha-go-controller/internal/pkg/util"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 // PppoeIaState type
diff --git a/internal/pkg/application/service.go b/internal/pkg/application/service.go
index e9a7393..b9ff4b2 100644
--- a/internal/pkg/application/service.go
+++ b/internal/pkg/application/service.go
@@ -35,7 +35,7 @@
 	"voltha-go-controller/internal/pkg/of"
 	"voltha-go-controller/internal/pkg/util"
 	errorCodes "voltha-go-controller/internal/pkg/errorcodes"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 const (
@@ -569,7 +569,7 @@
 		if err := vs.setDSMatchActionVlanT0(subflow1); err != nil {
 			return nil, err
 		}
-		logger.Info(ctx, "HSIA DS flows MAC Learning & MAC", log.Fields{"ML": vs.MacLearning, "Mac": vs.MacAddr})
+		logger.Infow(ctx, "HSIA DS flows MAC Learning & MAC", log.Fields{"ML": vs.MacLearning, "Mac": vs.MacAddr})
 		if NonZeroMacAddress(vs.MacAddr) {
 			subflow1.SetMatchDstMac(vs.MacAddr)
 		}
@@ -1065,7 +1065,7 @@
 			va.AddVnetToPort(vs.Port, vnet, vs)
 		}
 	} else {
-		logger.Error(ctx, "VNET-does-not-exist-for-service", log.Fields{"ServiceName": cfg.Name})
+		logger.Errorw(ctx, "VNET-does-not-exist-for-service", log.Fields{"ServiceName": cfg.Name})
 		return errors.New("VNET doesn't exist")
 	}
 
@@ -1089,7 +1089,7 @@
 		}
 		//mmAg.AssociatedServices++
 		//va.UpdateMeterProf(*mmAg)
-		logger.Debug(ctx, "northbound-service-add-sucessful", log.Fields{"ServiceName": vs.Name})
+		logger.Debugw(ctx, "northbound-service-add-sucessful", log.Fields{"ServiceName": vs.Name})
 	}
 
 	logger.Warnw(ctx, "Added Service to DB", log.Fields{"Name": vs.Name, "Port": (vs.Port), "ML": vs.MacLearning})
@@ -1208,7 +1208,7 @@
 		if meter.AssociatedServices > 0 {
 			meter.AssociatedServices--
 			if meter.AssociatedServices == 0 && !skipMeterDeletion {
-				logger.Info(ctx, "Meter should be deleted now\n", log.Fields{"MeterID": meter})
+				logger.Infow(ctx, "Meter should be deleted now\n", log.Fields{"MeterID": meter})
 				va.UpdateMeterProf(*meter)
 			}
 		}
@@ -1271,7 +1271,7 @@
 		prevBwAvail = bwAvailInfo.PrevBw
 		presentBwAvail = bwAvailInfo.PresentBw
 		vs.BwAvailInfo = prevBwAvail + "," + presentBwAvail
-		logger.Debug(ctx, "Bandwidth-value-formed", log.Fields{"BwAvailInfo": vs.BwAvailInfo})
+		logger.Debugw(ctx, "Bandwidth-value-formed", log.Fields{"BwAvailInfo": vs.BwAvailInfo})
 	}
 	vs.WriteToDb()
 
@@ -1495,7 +1495,7 @@
 	vlans = append(vlans, of.VlanType(vlan))
 	service := GetApplication().GetServiceFromCvlan(device, portName, vlans, uint8(pbit))
 	if nil != service {
-		logger.Info(ctx, "Service Found for", log.Fields{"serviceName": service.Name, "portName": portName, "ctag": vlan})
+		logger.Infow(ctx, "Service Found for", log.Fields{"serviceName": service.Name, "portName": portName, "ctag": vlan})
 	} else {
 		logger.Errorw(ctx, "No Service for", log.Fields{"portName": portName, "ctag": vlan, "Pbit": pbit, "device": device, "VlanControl": vlanControl})
 	}
@@ -1630,7 +1630,7 @@
 			if vs.UsHSIAFlowsApplied {
 				vpv.DelTrapFlows()
 				vs.DelHsiaFlows()
-				logger.Info(ctx, "Remove Service Flows Triggered", log.Fields{"Service": srv, "US": vs.UsHSIAFlowsApplied, "DS": vs.DsHSIAFlowsApplied})
+				logger.Infow(ctx, "Remove Service Flows Triggered", log.Fields{"Service": srv, "US": vs.UsHSIAFlowsApplied, "DS": vs.DsHSIAFlowsApplied})
 			} else {
 				vs.updateVnetProfile(msr.DeviceID)
 			}
@@ -1690,7 +1690,7 @@
 // Removes old service and creates new VPV & service with udpated vnet profile
 func (vs *VoltService) updateVnetProfile(deviceID string) {
 
-	logger.Info(ctx, "Update Vnet Profile Triggering", log.Fields{"Service": vs.Name, "US": vs.UsHSIAFlowsApplied, "DS": vs.DsHSIAFlowsApplied})
+	logger.Infow(ctx, "Update Vnet Profile Triggering", log.Fields{"Service": vs.Name, "US": vs.UsHSIAFlowsApplied, "DS": vs.DsHSIAFlowsApplied})
 
 	nvs := VoltService{}
 	nvs.VoltServiceCfg = vs.VoltServiceCfg
diff --git a/internal/pkg/application/vnets.go b/internal/pkg/application/vnets.go
index 40add28..78fe54f 100644
--- a/internal/pkg/application/vnets.go
+++ b/internal/pkg/application/vnets.go
@@ -34,7 +34,7 @@
 	"voltha-go-controller/internal/pkg/of"
 	"voltha-go-controller/internal/pkg/util"
 	errorCodes "voltha-go-controller/internal/pkg/errorcodes"
-	"github.com/opencord/voltha-lib-go/v7/pkg/log"
+	"voltha-go-controller/log"
 )
 
 const (
@@ -292,7 +292,7 @@
 			devicesToHandle = append(devicesToHandle, serialNum)
 		}
 		if len(devicesToHandle) == 0 {
-			logger.Debug(ctx, "Ignoring Duplicate VNET by name ", log.Fields{"Vnet": cfg.Name})
+			logger.Debugw(ctx, "Ignoring Duplicate VNET by name ", log.Fields{"Vnet": cfg.Name})
 			AppMutex.VnetMutex.Unlock()
 			return nil
 		}
@@ -687,7 +687,7 @@
 // AddSvcUsMeterToDevice to add service upstream meter info to device
 func AddSvcUsMeterToDevice(key, value interface{}) bool {
 	svc := value.(*VoltService)
-	logger.Info(ctx, "Adding upstream meter profile to device", log.Fields{"ServiceName": svc.Name})
+	logger.Infow(ctx, "Adding upstream meter profile to device", log.Fields{"ServiceName": svc.Name})
 	if device, _ := GetApplication().GetDeviceFromPort(svc.Port); device != nil {
 		GetApplication().AddMeterToDevice(svc.Port, device.Name, svc.UsMeterID, 0)
 		return true
@@ -1076,7 +1076,7 @@
 // updateIPv4AndProvisionFlows to update ipv4 and provisional flows
 func (vpv *VoltPortVnet) updateIPv4AndProvisionFlows(key, value interface{}) bool {
 	svc := value.(*VoltService)
-	logger.Info(ctx, "Updating Ipv4 address for service", log.Fields{"ServiceName": svc.Name})
+	logger.Infow(ctx, "Updating Ipv4 address for service", log.Fields{"ServiceName": svc.Name})
 	svc.SetIpv4Addr(vpv.Ipv4Addr)
 	svc.WriteToDb()
 
@@ -2459,7 +2459,7 @@
 	pushflow := func(key interface{}, value interface{}) bool {
 		device := value.(*VoltDevice)
 		if !isDeviceInList(device.SerialNum, vnet.DevicesList) {
-			logger.Info(ctx, "Device not present in vnet device list", log.Fields{"Device": device.SerialNum})
+			logger.Infow(ctx, "Device not present in vnet device list", log.Fields{"Device": device.SerialNum})
 			return true
 		}
 		if device.State != controller.DeviceStateUP {
@@ -2721,7 +2721,7 @@
 
 // BuildICMPv6Flow to Build DS flow for ICMPv6
 func BuildICMPv6Flow(inport uint32, vnet *VoltVnet) *of.VoltFlow {
-	logger.Info(ctx, "Building ICMPv6 MC Flow", log.Fields{"SVlan": vnet.SVlan, "CVlan": vnet.CVlan})
+	logger.Infow(ctx, "Building ICMPv6 MC Flow", log.Fields{"SVlan": vnet.SVlan, "CVlan": vnet.CVlan})
 	flow := &of.VoltFlow{}
 	flow.SubFlows = make(map[uint64]*of.VoltSubFlow)
 	subFlow := of.NewVoltSubFlow()
@@ -2750,7 +2750,7 @@
 
 //BuildDSArpFlow Builds DS flow for ARP
 func BuildDSArpFlow(inport uint32, vnet *VoltVnet) *of.VoltFlow {
-	logger.Info(ctx, "Building ARP MC Flow", log.Fields{"SVlan": vnet.SVlan, "CVlan": vnet.CVlan})
+	logger.Infow(ctx, "Building ARP MC Flow", log.Fields{"SVlan": vnet.SVlan, "CVlan": vnet.CVlan})
 
 	flow := &of.VoltFlow{}
 	flow.SubFlows = make(map[uint64]*of.VoltSubFlow)
