ONOS-6626 OFAgent - handle RoleRequest
Change-Id: I31b2f701a566a06126fa47fb5dd726779e625184
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
index 116e1cf..8aa6b49 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
@@ -33,6 +33,8 @@
import org.projectfloodlight.openflow.protocol.OFHello;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFMeterFeatures;
+import org.projectfloodlight.openflow.protocol.OFRoleReply;
+import org.projectfloodlight.openflow.protocol.OFRoleRequest;
import org.projectfloodlight.openflow.protocol.OFSetConfig;
import org.projectfloodlight.openflow.protocol.OFStatsReply;
import org.projectfloodlight.openflow.protocol.OFStatsRequest;
@@ -219,8 +221,21 @@
@Override
public void processRoleRequest(Channel channel, OFMessage msg) {
- // TODO process role request and send reply
- log.debug("Functionality not yet supported for {}", msg);
+ OFRoleRequest ofRoleRequest = (OFRoleRequest) msg;
+ OFControllerRole oldRole = role(channel);
+ OFControllerRole newRole = ofRoleRequest.getRole();
+ if (oldRole.equals(newRole)) {
+ log.trace("No change needed to existing role {}", oldRole);
+ } else {
+ log.trace("Changing role from {} to {}", oldRole, newRole);
+ setRole(channel, newRole);
+ }
+ OFRoleReply ofRoleReply = FACTORY.buildRoleReply()
+ .setRole(role(channel))
+ .setXid(msg.getXid())
+ .build();
+ channel.writeAndFlush(Collections.singletonList(ofRoleReply));
+ log.trace("request {}; reply {}", msg, ofRoleReply);
}
@Override
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/OFChannelHandler.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/OFChannelHandler.java
index 9d49982..4e57083 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/OFChannelHandler.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/OFChannelHandler.java
@@ -121,6 +121,9 @@
case ECHO_REQUEST:
handler.ofSwitch.processEchoRequest(handler.channel, msg);
break;
+ case ROLE_REQUEST:
+ handler.ofSwitch.processRoleRequest(handler.channel, msg);
+ break;
case ERROR:
handler.logErrorClose((OFErrorMsg) msg);
break;