[ovs-dev] [PATCH 09/12] ofproto: Do not add flow on flow mod if new_cookie is UINT64_MAX
Simon Horman
horms at verge.net.au
Mon Sep 17 00:26:56 UTC 2012
Internally a new_cookie value UINT64_MAX is used for
an OpenFlow 1.2 flow mod whose command is not Add.
Open Flow 1.2 does not permit adding flows for such commands.
Also, UINT64_MAX is a prohibited cookie value, and the
existing code created a flow with that value as for the cookie.
Signed-off-by: Simon Horman <horms at verge.net.au>
---
v13
* Fix logic error in modify_flows_add.
- Zero should be returned if fm->cookie_mask is non-zero.
* Fix endienness issues in modify_flows_add()
v12
* No change
v11
* Initial post
---
ofproto/ofproto.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 06a394c..1f1cd60 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -3129,6 +3129,17 @@ modify_flows__(struct ofproto *ofproto, struct ofconn *ofconn,
return error;
}
+static enum ofperr
+modify_flows_add(struct ofproto *ofproto, struct ofconn *ofconn,
+ const struct ofputil_flow_mod *fm,
+ const struct ofp_header *request)
+{
+ if (fm->cookie_mask != htonll(0) || fm->new_cookie == htonll(UINT64_MAX)) {
+ return 0;
+ }
+ return add_flow(ofproto, ofconn, fm, request);
+}
+
/* Implements OFPFC_MODIFY. Returns 0 on success or an OpenFlow error code on
* failure.
*
@@ -3148,7 +3159,7 @@ modify_flows_loose(struct ofproto *ofproto, struct ofconn *ofconn,
if (error) {
return error;
} else if (list_is_empty(&rules)) {
- return fm->cookie_mask ? 0 : add_flow(ofproto, ofconn, fm, request);
+ return modify_flows_add(ofproto, ofconn, fm, request);
} else {
return modify_flows__(ofproto, ofconn, fm, request, &rules);
}
@@ -3174,7 +3185,7 @@ modify_flow_strict(struct ofproto *ofproto, struct ofconn *ofconn,
if (error) {
return error;
} else if (list_is_empty(&rules)) {
- return fm->cookie_mask ? 0 : add_flow(ofproto, ofconn, fm, request);
+ return modify_flows_add(ofproto, ofconn, fm, request);
} else {
return list_is_singleton(&rules) ? modify_flows__(ofproto, ofconn,
fm, request, &rules)
--
1.7.10.4
More information about the dev
mailing list