Committed by
Gerrit Code Review
fixed the LINC-OE behaviour. Handshaker behaviours must use
sendHandshakeMessage during the handshake rather than sendMsg. Change-Id: I50b3da2c592f77dd786da68d42e5dc289407cd37
Showing
7 changed files
with
52 additions
and
34 deletions
| ... | @@ -45,7 +45,7 @@ public class DefaultSwitchHandShaker extends AbstractOpenFlowSwitch { | ... | @@ -45,7 +45,7 @@ public class DefaultSwitchHandShaker extends AbstractOpenFlowSwitch { |
| 45 | if (factory().getVersion() == OFVersion.OF_10) { | 45 | if (factory().getVersion() == OFVersion.OF_10) { |
| 46 | OFFlowAdd.Builder fmBuilder = factory().buildFlowAdd(); | 46 | OFFlowAdd.Builder fmBuilder = factory().buildFlowAdd(); |
| 47 | fmBuilder.setPriority(LOWEST_PRIORITY); | 47 | fmBuilder.setPriority(LOWEST_PRIORITY); |
| 48 | - sendMsg(fmBuilder.build()); | 48 | + sendHandshakeMessage(fmBuilder.build()); |
| 49 | } | 49 | } |
| 50 | } | 50 | } |
| 51 | 51 | ... | ... |
| ... | @@ -64,7 +64,7 @@ public class OFCorsaSwitchDriver extends AbstractOpenFlowSwitch { | ... | @@ -64,7 +64,7 @@ public class OFCorsaSwitchDriver extends AbstractOpenFlowSwitch { |
| 64 | .setXid(barrierXid).build(); | 64 | .setXid(barrierXid).build(); |
| 65 | 65 | ||
| 66 | 66 | ||
| 67 | - sendMsg(Collections.singletonList(barrier)); | 67 | + sendHandshakeMessage(barrier); |
| 68 | 68 | ||
| 69 | } | 69 | } |
| 70 | 70 | ... | ... |
| ... | @@ -64,9 +64,6 @@ public class OFOpticalSwitchImplLINC13 extends AbstractOpenFlowSwitch { | ... | @@ -64,9 +64,6 @@ public class OFOpticalSwitchImplLINC13 extends AbstractOpenFlowSwitch { |
| 64 | 64 | ||
| 65 | @Override | 65 | @Override |
| 66 | public boolean isDriverHandshakeComplete() { | 66 | public boolean isDriverHandshakeComplete() { |
| 67 | - if (!startDriverHandshakeCalled) { | ||
| 68 | - throw new SwitchDriverSubHandshakeNotStarted(); | ||
| 69 | - } | ||
| 70 | return driverHandshakeComplete.get(); | 67 | return driverHandshakeComplete.get(); |
| 71 | } | 68 | } |
| 72 | 69 | ||
| ... | @@ -161,7 +158,7 @@ public class OFOpticalSwitchImplLINC13 extends AbstractOpenFlowSwitch { | ... | @@ -161,7 +158,7 @@ public class OFOpticalSwitchImplLINC13 extends AbstractOpenFlowSwitch { |
| 161 | "message " + | 158 | "message " + |
| 162 | "{}", | 159 | "{}", |
| 163 | circuitPortsRequest.toString()); | 160 | circuitPortsRequest.toString()); |
| 164 | - this.sendMsg(Collections.<OFMessage>singletonList(circuitPortsRequest)); | 161 | + this.sendHandshakeMessage(circuitPortsRequest); |
| 165 | } | 162 | } |
| 166 | 163 | ||
| 167 | @Override | 164 | @Override | ... | ... |
| ... | @@ -222,7 +222,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -222,7 +222,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 222 | .build(); | 222 | .build(); |
| 223 | msglist.add(getAC); | 223 | msglist.add(getAC); |
| 224 | 224 | ||
| 225 | - sendMsg(msglist); | 225 | + msglist.stream().forEach(m -> sendHandshakeMessage(m)); |
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | private void decodeAsyncGetReply(OFAsyncGetReply rep) { | 228 | private void decodeAsyncGetReply(OFAsyncGetReply rep) { |
| ... | @@ -245,21 +245,21 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -245,21 +245,21 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 245 | OFMessage gtf = factory.buildTableFeaturesStatsRequest() | 245 | OFMessage gtf = factory.buildTableFeaturesStatsRequest() |
| 246 | .setXid(getNextTransactionId()) | 246 | .setXid(getNextTransactionId()) |
| 247 | .build(); | 247 | .build(); |
| 248 | - sendMsg(gtf); | 248 | + sendHandshakeMessage(gtf); |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | private void sendGroupFeaturesRequest() throws IOException { | 251 | private void sendGroupFeaturesRequest() throws IOException { |
| 252 | OFMessage gfr = factory.buildGroupFeaturesStatsRequest() | 252 | OFMessage gfr = factory.buildGroupFeaturesStatsRequest() |
| 253 | .setXid(getNextTransactionId()) | 253 | .setXid(getNextTransactionId()) |
| 254 | .build(); | 254 | .build(); |
| 255 | - sendMsg(gfr); | 255 | + sendHandshakeMessage(gfr); |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | private void sendGroupDescRequest() throws IOException { | 258 | private void sendGroupDescRequest() throws IOException { |
| 259 | OFMessage gdr = factory.buildGroupDescStatsRequest() | 259 | OFMessage gdr = factory.buildGroupDescStatsRequest() |
| 260 | .setXid(getNextTransactionId()) | 260 | .setXid(getNextTransactionId()) |
| 261 | .build(); | 261 | .build(); |
| 262 | - sendMsg(gdr); | 262 | + sendHandshakeMessage(gdr); |
| 263 | } | 263 | } |
| 264 | 264 | ||
| 265 | /*Create L2 interface groups for all physical ports | 265 | /*Create L2 interface groups for all physical ports |
| ... | @@ -290,12 +290,12 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -290,12 +290,12 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 290 | .setGroupType(OFGroupType.INDIRECT) | 290 | .setGroupType(OFGroupType.INDIRECT) |
| 291 | .setXid(getNextTransactionId()) | 291 | .setXid(getNextTransactionId()) |
| 292 | .build(); | 292 | .build(); |
| 293 | + sendHandshakeMessage(gmAdd); | ||
| 293 | msglist.add(gmAdd); | 294 | msglist.add(gmAdd); |
| 294 | l2groups.put(pnum, gl2); | 295 | l2groups.put(pnum, gl2); |
| 295 | } | 296 | } |
| 296 | } | 297 | } |
| 297 | log.debug("Creating {} L2 groups in sw {}", msglist.size(), getStringId()); | 298 | log.debug("Creating {} L2 groups in sw {}", msglist.size(), getStringId()); |
| 298 | - sendMsg(msglist); | ||
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | private int getVlanConfig(int portnum) { | 301 | private int getVlanConfig(int portnum) { |
| ... | @@ -394,9 +394,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -394,9 +394,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 394 | .setGroupType(OFGroupType.INDIRECT) | 394 | .setGroupType(OFGroupType.INDIRECT) |
| 395 | .setXid(getNextTransactionId()) | 395 | .setXid(getNextTransactionId()) |
| 396 | .build(); | 396 | .build(); |
| 397 | - msglist.add(gmAdd); | 397 | + sendHandshakeMessage(gmAdd); |
| 398 | + | ||
| 398 | } | 399 | } |
| 399 | - sendMsg(msglist); | 400 | + |
| 400 | log.debug("Creating {} L3 groups in sw {}", msglist.size(), getStringId()); | 401 | log.debug("Creating {} L3 groups in sw {}", msglist.size(), getStringId()); |
| 401 | } | 402 | } |
| 402 | 403 | ||
| ... | @@ -407,7 +408,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -407,7 +408,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 407 | * instead of the IP ttl | 408 | * instead of the IP ttl |
| 408 | */ | 409 | */ |
| 409 | private void setL25Groups() throws IOException { | 410 | private void setL25Groups() throws IOException { |
| 410 | - List<OFMessage> msglist = new ArrayList<OFMessage>(); | 411 | + |
| 411 | for (OFGroup gl2 : l2groups.values()) { | 412 | for (OFGroup gl2 : l2groups.values()) { |
| 412 | int gnum = gl2.getGroupNumber(); | 413 | int gnum = gl2.getGroupNumber(); |
| 413 | int portnum = gnum & 0x0000ffff; | 414 | int portnum = gnum & 0x0000ffff; |
| ... | @@ -445,11 +446,12 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -445,11 +446,12 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 445 | .setGroupType(OFGroupType.INDIRECT) | 446 | .setGroupType(OFGroupType.INDIRECT) |
| 446 | .setXid(getNextTransactionId()) | 447 | .setXid(getNextTransactionId()) |
| 447 | .build(); | 448 | .build(); |
| 448 | - msglist.add(gmAdd); | 449 | + sendHandshakeMessage(gmAdd); |
| 450 | + | ||
| 449 | } | 451 | } |
| 450 | } | 452 | } |
| 451 | - sendMsg(msglist); | 453 | + |
| 452 | - log.debug("Creating {} MPLS groups in sw {}", msglist.size(), getStringId()); | 454 | + log.debug("Created MPLS groups in sw {}", getStringId()); |
| 453 | } | 455 | } |
| 454 | 456 | ||
| 455 | /* Using ECMP groups | 457 | /* Using ECMP groups |
| ... | @@ -560,13 +562,14 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -560,13 +562,14 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 560 | .setHardTimeout(0) | 562 | .setHardTimeout(0) |
| 561 | .setXid(getNextTransactionId()) | 563 | .setXid(getNextTransactionId()) |
| 562 | .build(); | 564 | .build(); |
| 563 | - msglist.add(flowEntry); | 565 | + sendHandshakeMessage(flowEntry); |
| 566 | + | ||
| 564 | } | 567 | } |
| 565 | } | 568 | } |
| 566 | // table-vlan has no table-miss entry, and so packets that miss are | 569 | // table-vlan has no table-miss entry, and so packets that miss are |
| 567 | // essentially dropped | 570 | // essentially dropped |
| 568 | - sendMsg(msglist); | 571 | + |
| 569 | - log.debug("Adding {} vlan-rules in sw {}", msglist.size(), getStringId()); | 572 | + log.debug("Added vlan-rules in sw {}", getStringId()); |
| 570 | } | 573 | } |
| 571 | 574 | ||
| 572 | private void populateTableTMac() throws IOException { | 575 | private void populateTableTMac() throws IOException { |
| ... | @@ -617,7 +620,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -617,7 +620,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 617 | List<OFMessage> msglist = new ArrayList<OFMessage>(2); | 620 | List<OFMessage> msglist = new ArrayList<OFMessage>(2); |
| 618 | msglist.add(ipEntry); | 621 | msglist.add(ipEntry); |
| 619 | msglist.add(mplsEntry); | 622 | msglist.add(mplsEntry); |
| 620 | - sendMsg(msglist); | 623 | + msglist.stream().forEach(m -> sendHandshakeMessage(m)); |
| 621 | } | 624 | } |
| 622 | 625 | ||
| 623 | private List<String> getMyIps() { // send to controller | 626 | private List<String> getMyIps() { // send to controller |
| ... | @@ -762,10 +765,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -762,10 +765,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 762 | .setHardTimeout(0) | 765 | .setHardTimeout(0) |
| 763 | .setXid(getNextTransactionId()) | 766 | .setXid(getNextTransactionId()) |
| 764 | .build(); | 767 | .build(); |
| 765 | - msglist.add(myIpEntry); | 768 | + sendHandshakeMessage(myIpEntry); |
| 769 | + | ||
| 766 | } | 770 | } |
| 767 | - sendMsg(msglist); | 771 | + log.debug("Added {} my-ip-rules in sw {}", getStringId()); |
| 768 | - log.debug("Adding {} my-ip-rules in sw {}", msglist.size(), getStringId()); | ||
| 769 | } | 772 | } |
| 770 | 773 | ||
| 771 | private void populateMySubnets() throws IOException { | 774 | private void populateMySubnets() throws IOException { |
| ... | @@ -804,11 +807,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -804,11 +807,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 804 | .setHardTimeout(0) | 807 | .setHardTimeout(0) |
| 805 | .setXid(getNextTransactionId()) | 808 | .setXid(getNextTransactionId()) |
| 806 | .build(); | 809 | .build(); |
| 807 | - msglist.add(myIpEntry); | 810 | + sendHandshakeMessage(myIpEntry); |
| 811 | + | ||
| 808 | } | 812 | } |
| 809 | - sendMsg(msglist); | 813 | + log.debug("Added subnet-ip-rules in sw {}", getStringId()); |
| 810 | - log.debug("Adding {} subnet-ip-rules in sw {}", msglist.size(), getStringId()); | ||
| 811 | - msglist.clear(); | ||
| 812 | } | 814 | } |
| 813 | 815 | ||
| 814 | private void populateRoutes() throws IOException { | 816 | private void populateRoutes() throws IOException { |
| ... | @@ -948,10 +950,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -948,10 +950,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 948 | .setHardTimeout(0) | 950 | .setHardTimeout(0) |
| 949 | .setXid(getNextTransactionId()) | 951 | .setXid(getNextTransactionId()) |
| 950 | .build(); | 952 | .build(); |
| 953 | + sendHandshakeMessage(myMetaEntry); | ||
| 951 | msglist.add(myMetaEntry); | 954 | msglist.add(myMetaEntry); |
| 952 | 955 | ||
| 953 | } | 956 | } |
| 954 | - sendMsg(msglist); | ||
| 955 | log.debug("Adding {} next-hop-router-rules in sw {}", msglist.size(), | 957 | log.debug("Adding {} next-hop-router-rules in sw {}", msglist.size(), |
| 956 | getStringId()); | 958 | getStringId()); |
| 957 | 959 | ||
| ... | @@ -1007,9 +1009,9 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -1007,9 +1009,9 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 1007 | .setHardTimeout(0) | 1009 | .setHardTimeout(0) |
| 1008 | .setXid(getNextTransactionId()) | 1010 | .setXid(getNextTransactionId()) |
| 1009 | .build(); | 1011 | .build(); |
| 1010 | - msglist.add(myIpEntry); | 1012 | + sendHandshakeMessage(myIpEntry); |
| 1011 | } | 1013 | } |
| 1012 | - sendMsg(msglist); | 1014 | + |
| 1013 | log.debug("Adding {} next-hop-host-rules in sw {}", msglist.size(), getStringId()); | 1015 | log.debug("Adding {} next-hop-host-rules in sw {}", msglist.size(), getStringId()); |
| 1014 | } | 1016 | } |
| 1015 | 1017 | ||
| ... | @@ -1081,9 +1083,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -1081,9 +1083,10 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 1081 | .setHardTimeout(0) | 1083 | .setHardTimeout(0) |
| 1082 | .setXid(getNextTransactionId()) | 1084 | .setXid(getNextTransactionId()) |
| 1083 | .build(); | 1085 | .build(); |
| 1086 | + sendHandshakeMessage(myMplsEntry); | ||
| 1084 | msglist.add(myMplsEntry); | 1087 | msglist.add(myMplsEntry); |
| 1085 | } | 1088 | } |
| 1086 | - sendMsg(msglist); | 1089 | + |
| 1087 | log.debug("Adding {} mpls-forwarding-rules in sw {}", msglist.size(), | 1090 | log.debug("Adding {} mpls-forwarding-rules in sw {}", msglist.size(), |
| 1088 | getStringId()); | 1091 | getStringId()); |
| 1089 | 1092 | ||
| ... | @@ -1166,7 +1169,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -1166,7 +1169,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 1166 | .setXid(getNextTransactionId()) | 1169 | .setXid(getNextTransactionId()) |
| 1167 | .build(); | 1170 | .build(); |
| 1168 | 1171 | ||
| 1169 | - sendMsg(tableMissEntry); | 1172 | + sendHandshakeMessage(tableMissEntry); |
| 1170 | } | 1173 | } |
| 1171 | 1174 | ||
| 1172 | private void sendBarrier(boolean finalBarrier) { | 1175 | private void sendBarrier(boolean finalBarrier) { |
| ... | @@ -1179,7 +1182,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { | ... | @@ -1179,7 +1182,7 @@ public class OFSwitchImplCPqD13 extends AbstractOpenFlowSwitch { |
| 1179 | .setXid(xid) | 1182 | .setXid(xid) |
| 1180 | .build(); | 1183 | .build(); |
| 1181 | 1184 | ||
| 1182 | - sendMsg(br); | 1185 | + sendHandshakeMessage(br); |
| 1183 | } | 1186 | } |
| 1184 | 1187 | ||
| 1185 | @Override | 1188 | @Override | ... | ... |
| ... | @@ -136,6 +136,12 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour | ... | @@ -136,6 +136,12 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour |
| 136 | "a non role request message"); | 136 | "a non role request message"); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | + public final void sendHandshakeMessage(OFMessage message) { | ||
| 140 | + if (!this.isDriverHandshakeComplete()) { | ||
| 141 | + channel.write(Collections.singletonList(message)); | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + | ||
| 139 | @Override | 145 | @Override |
| 140 | public final boolean isConnected() { | 146 | public final boolean isConnected() { |
| 141 | return this.connected; | 147 | return this.connected; | ... | ... |
| ... | @@ -210,4 +210,12 @@ public interface OpenFlowSwitchDriver extends OpenFlowSwitch, HandlerBehaviour { | ... | @@ -210,4 +210,12 @@ public interface OpenFlowSwitchDriver extends OpenFlowSwitch, HandlerBehaviour { |
| 210 | */ | 210 | */ |
| 211 | void sendRoleRequest(OFMessage message); | 211 | void sendRoleRequest(OFMessage message); |
| 212 | 212 | ||
| 213 | + /** | ||
| 214 | + * Allows the handshaker behaviour to send messages during the | ||
| 215 | + * handshake phase only. | ||
| 216 | + * | ||
| 217 | + * @param message an OpenFlow message | ||
| 218 | + */ | ||
| 219 | + void sendHandshakeMessage(OFMessage message); | ||
| 220 | + | ||
| 213 | } | 221 | } | ... | ... |
| ... | @@ -229,6 +229,10 @@ public class RoleManagerTest { | ... | @@ -229,6 +229,10 @@ public class RoleManagerTest { |
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | @Override | 231 | @Override |
| 232 | + public void sendHandshakeMessage(OFMessage message) { | ||
| 233 | + } | ||
| 234 | + | ||
| 235 | + @Override | ||
| 232 | public boolean connectSwitch() { | 236 | public boolean connectSwitch() { |
| 233 | return false; | 237 | return false; |
| 234 | } | 238 | } | ... | ... |
-
Please register or login to post a comment