+ OFSessionUtil.registerSession(this, featureOutput, negotiatedVersion);
+ requestDesc();
+ requestPorts();
+ if(version == OFConstants.OFP_VERSION_1_3){
+ requestGroupFeatures();
+ requestMeterFeatures();
+ } else if (version == OFConstants.OFP_VERSION_1_0) {
+ // Because the GetFeaturesOutput contains information about the port
+ // in OF1.0 (that we would otherwise get from the PortDesc) we have to pass
+ // it up for parsing to convert into a NodeConnectorUpdate
+ queueKeeper.push(featureOutput, this);
+ }
+ }
+
+ /*
+ * Send an OFPMP_DESC request message to the switch
+ */
+
+ private void requestDesc() {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ builder.setType(MultipartType.OFPMPDESC);
+ builder.setVersion(getVersion());
+ builder.setFlags(new MultipartRequestFlags(false));
+ builder.setMultipartRequestBody(new MultipartRequestDescCaseBuilder().build());
+ builder.setXid(getSessionContext().getNextXid());
+ getConnectionAdapter().multipartRequest(builder.build());
+ }
+
+ private void requestPorts() {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ builder.setType(MultipartType.OFPMPPORTDESC);
+ builder.setVersion(getVersion());
+ builder.setFlags(new MultipartRequestFlags(false));
+ builder.setMultipartRequestBody(new MultipartRequestPortDescCaseBuilder().build());
+ builder.setXid(getSessionContext().getNextXid());
+ getConnectionAdapter().multipartRequest(builder.build());
+ }
+ private void requestGroupFeatures(){
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPGROUPFEATURES);
+ mprInput.setVersion(getVersion());
+ mprInput.setFlags(new MultipartRequestFlags(false));
+ mprInput.setXid(getSessionContext().getNextXid());
+
+ MultipartRequestGroupFeaturesCaseBuilder mprGroupFeaturesBuild =
+ new MultipartRequestGroupFeaturesCaseBuilder();
+ mprInput.setMultipartRequestBody(mprGroupFeaturesBuild.build());
+
+ LOG.debug("Send group features statistics request :{}",mprGroupFeaturesBuild);
+ getConnectionAdapter().multipartRequest(mprInput.build());
+
+ }
+ private void requestMeterFeatures(){
+ MultipartRequestInputBuilder mprInput = new MultipartRequestInputBuilder();
+ mprInput.setType(MultipartType.OFPMPMETERFEATURES);
+ mprInput.setVersion(getVersion());
+ mprInput.setFlags(new MultipartRequestFlags(false));
+ mprInput.setXid(getSessionContext().getNextXid());
+
+ MultipartRequestMeterFeaturesCaseBuilder mprMeterFeaturesBuild =
+ new MultipartRequestMeterFeaturesCaseBuilder();
+ mprInput.setMultipartRequestBody(mprMeterFeaturesBuild.build());
+
+ LOG.debug("Send meter features statistics request :{}",mprMeterFeaturesBuild);
+ getConnectionAdapter().multipartRequest(mprInput.build());