Hey Ankur, A problem I see here with flow delete is that Flow delete requires: - no attributes (i.e. no "key"): if flow flush is requested - key only: if a specific flow key is to be deleted.
When / if masks will be allowed for flows, the mask is expected not to exist. How does the current code behave if the userspace gives it a "flow delete" with actions (which is invalid)? Will it do a flow set then a flow delete? As about flow flush, I think that by the current implementation it will crash. Regards, Sam ________________________________________ Date: Wed, 24 Sep 2014 00:15:43 -0700 From: Ankur Sharma <ankursha...@vmware.com> To: dev@openvswitch.org Subject: [ovs-dev] [PATCH v1 09/10] datapath-windows/Flow.c: FLOW_DEL command handler. Message-ID: <1411542944-19374-9-git-send-email-ankursha...@vmware.com> Registered FLOW_DEL command handler. The same command handler as FLOW_ADD is good enough to handle FLOW_DEL case as well with minor changes for checking to action attribute. --- datapath-windows/ovsext/Datapath.c | 5 +++++ datapath-windows/ovsext/Flow.c | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c index 5008aab..5377f09 100644 --- a/datapath-windows/ovsext/Datapath.c +++ b/datapath-windows/ovsext/Datapath.c @@ -202,6 +202,11 @@ NETLINK_CMD nlFlowFamilyCmdOps[] = { .handler = OvsFlowNlNewCmdHandler, .supportedDevOp = OVS_TRANSACTION_DEV_OP, .validateDpIndex = FALSE + }, + { .cmd = OVS_FLOW_CMD_DEL, + .handler = OvsFlowNlNewCmdHandler, + .supportedDevOp = OVS_TRANSACTION_DEV_OP, + .validateDpIndex = FALSE } }; diff --git a/datapath-windows/ovsext/Flow.c b/datapath-windows/ovsext/Flow.c index e170de6..b95f69b 100644 --- a/datapath-windows/ovsext/Flow.c +++ b/datapath-windows/ovsext/Flow.c @@ -358,8 +358,11 @@ _OvsFlowMapNlToFlowPut(POVS_MESSAGE msgIn, PNL_ATTR keyAttr, mappedFlow); /* Map the action */ - mappedFlow->actionsLen = NlAttrGetSize(actionAttr); - mappedFlow->actions = NlAttrGet(actionAttr); + if (actionAttr) { + mappedFlow->actionsLen = NlAttrGetSize(actionAttr); + mappedFlow->actions = NlAttrGet(actionAttr); + } + mappedFlow->dpNo = ovsHdr->dp_ifindex; _OvsFlowMapNlToFlowPutFlags(genlMsgHdr, flowAttrClear, -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev