From aa379b44afa72232e5d7176d5e95b2950bc5dee5 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 25 May 2015 14:14:05 -0700 Subject: [PATCH] ofproto: Ignore generation ID for role change to "equal". The OpenFlow specification says that only role changes to slave or master check the generation ID, so this is a bug fix. OpenFlow 1.2 section A.3.9 phrases the requirement this way: Additionally, if the role value in the message is OFPCR_ROLE_MASTER or OFPCR_ROLE_SLAVE, the switch must validate generation_id to check for stale messages. Found by OFTest. Signed-off-by: Ben Pfaff --- ofproto/ofproto.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 6dda3cdba..a2552030f 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -5255,7 +5255,8 @@ handle_role_request(struct ofconn *ofconn, const struct ofp_header *oh) } if (request.role != OFPCR12_ROLE_NOCHANGE) { - if (request.have_generation_id + if (request.role != OFPCR12_ROLE_EQUAL + && request.have_generation_id && !ofconn_set_master_election_id(ofconn, request.generation_id)) { return OFPERR_OFPRRFC_STALE; } -- 2.20.1