diff --git a/VERSION b/VERSION index 9b1361a6..62291ae2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.5.6 +v0.5.7 diff --git a/ofctrl/fgraphFlow.go b/ofctrl/fgraphFlow.go index ebf4fe4f..57a0179e 100644 --- a/ofctrl/fgraphFlow.go +++ b/ofctrl/fgraphFlow.go @@ -843,12 +843,13 @@ func (self *Flow) installFlowActions(flowMod *openflow13.FlowMod, log.Debugf("flow install. Added setTunnelId Action: %+v", setTunnelAction) - case "setMetadata": - // Set Metadata instruction + case ActTypeSetMetadata: + // Write Metadata instruction metadataInstr := openflow13.NewInstrWriteMetadata(flowAction.metadata, flowAction.metadataMask) // Add the instruction to flowmod flowMod.AddInstruction(metadataInstr) + log.Debugf("flow install. Added writeMetadata Action: %+v", metadataInstr) case ActTypeSetSrcIP: // Set IP src @@ -1587,7 +1588,7 @@ func (self *Flow) SetL4Field(port uint16, field string) error { // Special actions on the flow to set metadata func (self *Flow) SetMetadata(metadata, metadataMask uint64) error { action := new(FlowAction) - action.ActionType = "setMetadata" + action.ActionType = ActTypeSetMetadata action.metadata = metadata action.metadataMask = metadataMask diff --git a/ofctrl/ofAction.go b/ofctrl/ofAction.go index 14dcabbb..8330f64a 100644 --- a/ofctrl/ofAction.go +++ b/ofctrl/ofAction.go @@ -17,7 +17,7 @@ const ( ActTypeSetDstMac = "setMacDa" ActTypeSetSrcMac = "setMacSa" ActTypeSetTunnelID = "setTunnelId" - ActTypeMetatdata = "setMetadata" + ActTypeSetMetadata = "setMetadata" ActTypeSetSrcIP = "setIPSa" ActTypeSetDstIP = "setIPDa" ActTypeSetTunnelSrcIP = "setTunSa" @@ -160,6 +160,20 @@ func (a *SetTunnelIDAction) GetActionType() string { return ActTypeSetTunnelID } +type SetMetadataAction struct { + Metadata uint64 + MetadataMask *uint64 +} + +func (a *SetMetadataAction) GetActionMessage() openflow13.Action { + field := openflow13.NewMetadataField(a.Metadata, a.MetadataMask) + return openflow13.NewActionSetField(*field) +} + +func (a *SetMetadataAction) GetActionType() string { + return ActTypeSetMetadata +} + type SetTunnelDstAction struct { IP net.IP }