@Override public void serialize(GetFeaturesOutput message, ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeLong(message.getDatapathId().longValue()); outBuffer.writeInt(message.getBuffers().intValue()); outBuffer.writeByte(message.getTables().intValue()); outBuffer.writeByte(message.getAuxiliaryId().intValue()); outBuffer.writeZero(PADDING); writeCapabilities(message.getCapabilities(), outBuffer); outBuffer.writeInt(message.getReserved().intValue()); ByteBufUtils.updateOFHeaderLength(outBuffer); }
builderSwFeatures.setMaxBuffers(features.getBuffers()); builderSwFeatures.setMaxTables(features.getTables()); if(features.getCapabilitiesV10().isOFPCARPMATCHIP()) { capabilities.add(FlowFeatureCapabilityArpMatchIp.class); if(features.getCapabilitiesV10().isOFPCFLOWSTATS()) { capabilities.add(FlowFeatureCapabilityFlowStats.class); if(features.getCapabilitiesV10().isOFPCIPREASM()) { capabilities.add(FlowFeatureCapabilityIpReasm.class); if(features.getCapabilitiesV10().isOFPCPORTSTATS()) { capabilities.add(FlowFeatureCapabilityPortStats.class); if(features.getCapabilitiesV10().isOFPCQUEUESTATS()) { capabilities.add(FlowFeatureCapabilityQueueStats.class); if(features.getCapabilitiesV10().isOFPCRESERVED()) { capabilities.add(FlowFeatureCapabilityReserved.class); if(features.getCapabilitiesV10().isOFPCSTP()) { capabilities.add(FlowFeatureCapabilityStp.class); if(features.getCapabilitiesV10().isOFPCTABLESTATS()) { capabilities.add(FlowFeatureCapabilityTableStats.class);
@Override public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { if (msg instanceof GetFeaturesOutput) { GetFeaturesOutput features = (GetFeaturesOutput) msg; List<DataObject> list = new CopyOnWriteArrayList<DataObject>(); BigInteger datapathId = sc.getFeatures().getDatapathId(); if( features.getPhyPort() != null ) { for (PhyPort port : features.getPhyPort()) { list.add(PortTranslatorUtil.translatePort(msg.getVersion(), datapathId, port.getPortNo(), port)); } } return list; } else { // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here? return Collections.emptyList(); } } }
/** * @param features switch feature output * @param seed seed value * @return connection cookie key * @see #createConnectionCookie(BigInteger,short, int) */ public static SwitchConnectionDistinguisher createConnectionCookie( GetFeaturesOutput features, int seed) { return createConnectionCookie(features.getDatapathId(), features.getAuxiliaryId(), seed); }
public void sendGetFeaturesOuputToCore(final Short proposedVersion, final int moduleId, final ConnectionAdapter connectionAdapter) { GetFeaturesOutput featureOutput = getFeaturesFromRegistry(connectionAdapter); shimRelay.sendOpenFlowMessageToCore(ShimSwitchConnectionHandlerImpl.coreConnector, featureOutput, proposedVersion, featureOutput.getXid(), featureOutput.getDatapathId().shortValue(), moduleId); }
@Override public void serialize(final GetFeaturesOutput message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeLong(message.getDatapathId().longValue()); outBuffer.writeInt(message.getBuffers().intValue()); outBuffer.writeByte(message.getTables().intValue()); outBuffer.writeZero(PADDING); outBuffer.writeInt(createCapabilities(message.getCapabilitiesV10())); outBuffer.writeInt(createActionsV10(message.getActionsV10())); for (PhyPort port : message.getPhyPort()) { outBuffer.writeShort(port.getPortNo().intValue()); outBuffer.writeBytes(IetfYangUtil.INSTANCE.bytesFor(port.getHwAddr())); writeName(port.getName(), outBuffer); writePortConfig(port.getConfigV10(), outBuffer); writePortState(port.getStateV10(), outBuffer); writePortFeature(port.getCurrentFeaturesV10(), outBuffer); writePortFeature(port.getAdvertisedFeaturesV10(), outBuffer); writePortFeature(port.getSupportedFeaturesV10(), outBuffer); writePortFeature(port.getPeerFeaturesV10(), outBuffer); } ByteBufUtils.updateOFHeaderLength(outBuffer); }
public synchronized BigInteger getDatapathID(ConnectionAdapter connectionAdapter) throws NullPointerException { if (connectionAdapterMap.containsKey(connectionAdapter)) { GetFeaturesOutput obj = connectionAdapterMap.get(connectionAdapter); if (obj != null) { return obj.getDatapathId(); } } return null; }
builderSwFeatures.setMaxBuffers(features.getBuffers()); builderSwFeatures.setMaxTables(features.getTables()); if(features.getCapabilities().isOFPCFLOWSTATS()) { capabilities.add(FlowFeatureCapabilityFlowStats.class); if(features.getCapabilities().isOFPCGROUPSTATS()) { capabilities.add(FlowFeatureCapabilityGroupStats.class); if(features.getCapabilities().isOFPCIPREASM()) { capabilities.add(FlowFeatureCapabilityIpReasm.class); if(features.getCapabilities().isOFPCPORTBLOCKED()) { capabilities.add(FlowFeatureCapabilityPortBlocked.class); if(features.getCapabilities().isOFPCPORTSTATS()) { capabilities.add(FlowFeatureCapabilityPortStats.class); if(features.getCapabilities().isOFPCQUEUESTATS()) { capabilities.add(FlowFeatureCapabilityQueueStats.class); if(features.getCapabilities().isOFPCTABLESTATS()) { capabilities.add(FlowFeatureCapabilityTableStats.class);
@Override public void onSessionAdded(final SwitchSessionKeyOF sessionKey, final SessionContext context) { GetFeaturesOutput features = context.getFeatures(); BigInteger datapathId = features.getDatapathId(); InstanceIdentifier<Node> identifier = identifierFromDatapathId(datapathId); NodeRef nodeRef = new NodeRef(identifier); NodeId nodeId = nodeIdFromDatapathId(datapathId); ModelDrivenSwitch ofSwitch = new ModelDrivenSwitchImpl(nodeId, identifier, context, convertorExecutor); NotificationQueueWrapper wrappedNotification = new NotificationQueueWrapper( nodeAdded(ofSwitch, features, nodeRef), context.getFeatures().getVersion()); reqOpenflowEntityOwnership(ofSwitch, context, wrappedNotification, rpcProviderRegistry); }
/** * @param features {@link org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput} * @return switch features */ public SwitchFeatures buildSwitchFeatures(GetFeaturesOutput features) { if(swFeaturesBuilders.containsKey(features.getVersion())) { LOG.debug("map contains version {}", features.getVersion()); try { return swFeaturesBuilders.get(features.getVersion()).build(features); } catch (NullPointerException e) { LOG.warn("error while building switch features: {}", e.getMessage()); LOG.debug("error while building switch features.. ", e); } } else { LOG.warn("unknown version: {}", features.getVersion()); } return null; }
public synchronized ConnectionAdapter getConnectionAdapter(Long datapathId) throws NullPointerException { for (ConnectionAdapter conn : connectionAdapterMap.keySet()) { if (connectionAdapterMap.get(conn).getDatapathId().longValue() == datapathId) { return conn; } } return null; }
@Override public void onSuccess(RpcResult<GetFeaturesOutput> rpcFeatures) { LOG.trace("features are back"); if (rpcFeatures.isSuccessful()) { GetFeaturesOutput featureOutput = rpcFeatures.getResult(); LOG.debug("obtained features: datapathId={}", featureOutput.getDatapathId()); LOG.debug("obtained features: auxiliaryId={}", featureOutput.getAuxiliaryId()); LOG.trace("handshake SETTLED: version={}, datapathId={}, auxiliaryId={}", version, featureOutput.getDatapathId(), featureOutput.getAuxiliaryId()); handshakeListener.onHandshakeSuccessful(featureOutput, proposedVersion); } else { // handshake failed LOG.warn("issuing disconnect during handshake [{}]", connectionAdapter.getRemoteAddress()); for (RpcError rpcError : rpcFeatures.getErrors()) { LOG.debug("handshake - features failure [{}]: i:{} | m:{} | s:{}", xid, rpcError.getInfo(), rpcError.getMessage(), rpcError.getSeverity(), rpcError.getCause() ); } handshakeListener.onHandshakeFailure(); } LOG.debug("postHandshake DONE"); }
@Override public void onSessionRemoved(final SessionContext context) { GetFeaturesOutput features = context.getFeatures(); BigInteger datapathId = features.getDatapathId(); InstanceIdentifier<Node> identifier = identifierFromDatapathId(datapathId); NodeRef nodeRef = new NodeRef(identifier); NodeId nodeId = nodeIdFromDatapathId(datapathId); unregOpenflowEntityOwnership(nodeId); NodeRemoved nodeRemoved = nodeRemoved(nodeRef); ModelDrivenSwitchRegistration registration = context.getProviderRegistration(); if (null != registration) { registration.close(); context.setProviderRegistration(null); } LOG.debug("ModelDrivenSwitch for {} unregistered from MD-SAL.", datapathId); NotificationQueueWrapper wrappedNotification = new NotificationQueueWrapper( nodeRemoved, context.getFeatures().getVersion()); context.getNotificationEnqueuer().enqueueNotification(wrappedNotification); }
/** * @return protocol version */ public Short getVersion() { return taskContext.getSession().getFeatures().getVersion(); }
public void setSlaveRole(SessionContext sessionContext) { OfpRole newRole = OfpRole.BECOMESLAVE; if (sessionContext != null) { final BigInteger targetSwitchDPId = sessionContext.getFeatures().getDatapathId(); LOG.debug("setSlaveRole: Set controller as a SLAVE controller for {}", targetSwitchDPId.toString()); RolePushTask task = new RolePushTask(newRole, sessionContext); ListenableFuture<Boolean> rolePushResult = pool.submit(task); final CheckedFuture<Boolean, RolePushException> rolePushResultChecked = RoleUtil.makeCheckedRuleRequestFxResult(rolePushResult); Futures.addCallback(rolePushResult, new FutureCallback<Boolean>(){ @Override public void onSuccess(Boolean result){ LOG.debug("setSlaveRole: Controller is set as a SLAVE for {}", targetSwitchDPId.toString()); } @Override public void onFailure(Throwable e){ LOG.error("setSlaveRole: Role request to set controller as a SLAVE failed for {}", targetSwitchDPId.toString(), e); } }); } else { LOG.warn("setSlaveRole: sessionContext is not set. Device is not connected anymore"); } }
GetFeaturesOutput features, short version) { SwitchSessionKeyOF sessionKey = createSwitchSessionKey(features .getDatapathId()); SessionContext sessionContext = getSessionManager().getSessionContext(sessionKey); if (LOG.isDebugEnabled()) { if (features.getAuxiliaryId() == null || features.getAuxiliaryId() == 0) { + dumpDataPathId(features.getDatapathId())); getSessionManager().invalidateSessionContext(sessionKey); + dumpDataPathId(features.getDatapathId())); } else { if (sessionContext.getAuxiliaryConductor(auxiliaryKey) != null) { LOG.warn("duplicate datapathId+auxiliary occured while registering switch session: " + dumpDataPathId(features.getDatapathId()) + " | " + features.getAuxiliaryId()); getSessionManager().invalidateAuxiliary(sessionKey, auxiliaryKey);
public void initSession(GetFeaturesOutput featuresOutput) { if (featuresOutput != null) { sc.setFeatures(featuresOutput); ShimConductor cond = new ShimConductor(); cond.setVersion(featuresOutput.getVersion()); sc.setPrimaryConductor(cond); } }
@Override public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { List<DataObject> results = null; if(msg instanceof NotificationQueueWrapper) { NotificationQueueWrapper wrappedNotification = (NotificationQueueWrapper) msg; BigInteger datapathId = sc.getFeatures().getDatapathId(); Short version = wrappedNotification.getVersion(); LOG.debug("NotificationQueueWrapper: version {} dataPathId {} notification {}", version, datapathId, wrappedNotification.getImplementedInterface()); results = Lists.newArrayList((DataObject) wrappedNotification.getNotification()); } else { // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here? results = Collections.emptyList(); } return results; }
session.getFeatures().getVersion(), session.getNextXid()); Future<RpcResult<BarrierOutput>> barrierResult = session.getPrimaryConductor().getConnectionAdapter().barrier(barrierInput); try { session.getFeatures().getVersion(), session.getNextXid()); Future<RpcResult<BarrierOutput>> barrierResult = session.getPrimaryConductor().getConnectionAdapter().barrier(barrierInput); try {
@Override public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { if(msg instanceof PortStatusMessage) { PortStatusMessage port = (PortStatusMessage)msg; List<DataObject> list = new CopyOnWriteArrayList<DataObject>(); BigInteger datapathId = sc.getFeatures().getDatapathId(); Long portNo = port.getPortNo(); Short version = port.getVersion(); if(port.getReason() == PortReason.OFPPRDELETE){ LOG.debug("PortStatusMessage: version {} dataPathId {} portNo {} reason {}",version, datapathId,portNo,port.getReason()); list.add(PortTranslatorUtil.translatePortRemoved(version, datapathId, portNo, port)); }else{ LOG.debug("PortStatusMessage: version {} dataPathId {} portNo {}",version, datapathId,portNo); list.add(PortTranslatorUtil.translatePort(version, datapathId, portNo, port)); } return list; } else { // TODO - Do something smarter than returning null if translation fails... what Exception should we throw here? return Collections.emptyList(); } } }