Multi UNI changes in voltha-lib-go
meterId setter method created for flows.
VERSION fixed
GetMeterIdFromWriteMetadata function added.
This function is used by rw-core when assigning meterId to upstream OLT trap flow.
Change-Id: Ic63735ae9006a68b364e703d58996cd3cee6049b
diff --git a/VERSION b/VERSION
index 0062ac9..6b244dc 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5.0.0
+5.0.1
diff --git a/pkg/flows/flow_utils.go b/pkg/flows/flow_utils.go
index 90b6785..ff6aaf0 100644
--- a/pkg/flows/flow_utils.go
+++ b/pkg/flows/flow_utils.go
@@ -1576,3 +1576,33 @@
}
return b.Bytes()
}
+
+func GetMeterIdFromWriteMetadata(ctx context.Context, flow *ofp.OfpFlowStats) uint32 {
+ /*
+ Write metadata instruction value (metadata) is 8 bytes:
+ MS 2 bytes: C Tag
+ Next 2 bytes: Technology Profile Id
+ Next 4 bytes: Port number (uni or nni) or MeterId
+ This is set in the ONOS OltPipeline as a write metadata instruction
+ */
+ var meterID uint32 = 0
+ md := GetMetadataFromWriteMetadataAction(ctx, flow)
+ logger.Debugw(ctx, "found-metadata-for-egress/uni-port", log.Fields{"metadata": md})
+ if md != 0 {
+ meterID = uint32(md & 0xFFFFFFFF)
+ logger.Debugw(ctx, "found-meterID-in-write-metadata-action", log.Fields{"meterID": meterID})
+ }
+ return meterID
+}
+
+func SetMeterIdToFlow(flow *ofp.OfpFlowStats, meterId uint32) {
+ if flow != nil {
+ for _, instruction := range flow.Instructions {
+ if instruction.Type == uint32(METER_ACTION) {
+ if meterInst := instruction.GetMeter(); meterInst != nil {
+ meterInst.MeterId = meterId
+ }
+ }
+ }
+ }
+}