alshabib
Committed by Gerrit Code Review

fixed the LINC-OE behaviour. Handshaker behaviours must use

sendHandshakeMessage during the handshake rather than sendMsg.

Change-Id: I50b3da2c592f77dd786da68d42e5dc289407cd37
...@@ -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 }
......