From 95542331854773171597bd8e16d54a8b9dec683a Mon Sep 17 00:00:00 2001 From: Shudong Zhou <shudongzhou@gmail.com> Date: Wed, 30 Jan 2013 21:58:22 -0800 Subject: [PATCH] Send HA role request to switch when master controller gets permission error --- .../core/internal/Controller.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java index ae7f478f7..1716d27e9 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java +++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java @@ -987,8 +987,22 @@ public class Controller implements IFloodlightProviderService, if (roleChanger.checkFirstPendingRoleRequestXid( sw, error.getXid())) { roleChanger.deliverRoleRequestError(sw, error); - } - else { + } else if (error.getErrorCode() == + OFErrorType.OFPET_BAD_REQUEST.getValue() && + error.getErrorType() == + OFBadRequestCode.OFPBRC_EPERM.ordinal() && + role.equals(Role.MASTER)) { + // We are the master and the switch returned permission + // error. Send a role change request in case switch set + // the master to someone else. + // Only send if there are no pending requests. + synchronized(roleChanger) { + if (roleChanger.pendingRequestMap.get(sw) == null) { + log.info("Tell switch {} who is the master", sw); + roleChanger.submitRequest(Collections.singleton(sw), role); + } + } + } else { logError(sw, error); // allow registered listeners to receive error messages -- GitLab