From: Ben Pfaff Date: Mon, 25 May 2015 21:14:05 +0000 (-0700) Subject: ofproto: Ignore generation ID for role change to "equal". X-Git-Tag: v2.4.0~16 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=aa379b44afa72232e5d7176d5e95b2950bc5dee5 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 --- 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; }