@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(); } } }
@Override public void serialize(final PortStatusMessage message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeByte(message.getReason().getIntValue()); outBuffer.writeZero(PADDING); outBuffer.writeInt(message.getPortNo().intValue()); outBuffer.writeZero(PORT_PADDING_1); outBuffer.writeBytes(IetfYangUtil.INSTANCE.bytesFor(message.getHwAddr())); outBuffer.writeZero(PORT_PADDING_2); writeName(message.getName(), outBuffer); writePortConfig(message.getConfig(), outBuffer); writePortState(message.getState(), outBuffer); writePortFeatures(message.getCurrentFeatures(), outBuffer); writePortFeatures(message.getAdvertisedFeatures(), outBuffer); writePortFeatures(message.getSupportedFeatures(), outBuffer); writePortFeatures(message.getPeerFeatures(), outBuffer); outBuffer.writeInt(message.getCurrSpeed().intValue()); outBuffer.writeInt(message.getMaxSpeed().intValue()); ByteBufUtils.updateOFHeaderLength(outBuffer); }
@Override public void serialize(final PortStatusMessage message, final ByteBuf outBuffer) { ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeByte(message.getReason().getIntValue()); outBuffer.writeZero(PADDING); outBuffer.writeShort(message.getPortNo().intValue()); outBuffer.writeBytes(IetfYangUtil.INSTANCE.bytesFor(message.getHwAddr())); writeName(message.getName(), outBuffer); writePortConfig(message.getConfigV10(), outBuffer); writePortState(message.getStateV10(), outBuffer); writePortFeature(message.getCurrentFeaturesV10(), outBuffer); writePortFeature(message.getAdvertisedFeaturesV10(), outBuffer); writePortFeature(message.getSupportedFeaturesV10(), outBuffer); writePortFeature(message.getPeerFeaturesV10(), outBuffer); ByteBufUtils.updateOFHeaderLength(outBuffer); }