private void sendNotification(OfHeader message, String messageClass) { TranslatorKey key = new TranslatorKey(message.getVersion(), messageClass); if (messageTranslators.containsKey(key)) { for (IMDMessageTranslator<OfHeader, List<DataObject>> translator : messageTranslators.get(key)) { List<DataObject> list = translator.translate(null, sc, message); for (DataObject dataObj : list) { notificationProviderService.offerNotification((Notification) dataObj); } } } }
LOG.trace("translating ticket: {}, ticket: {}", messageType.getSimpleName(), System.identityHashCode(ticket)); Short version = message.getVersion(); if (version == null) { throw new IllegalArgumentException("version is NULL");
@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(); } } }
@Override public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { if(msg instanceof MultipartReply && ((MultipartReply) msg).getType() == MultipartType.OFPMPPORTDESC) { BigInteger datapathId = sc.getFeatures().getDatapathId(); LOG.trace("MultiPartReplyPortToNodeConnectorUpdatedTranslator Being translated to NodeConnectorUpdated "); MultipartReplyMessage message = (MultipartReplyMessage) msg; MultipartReplyPortDescCase caseBody = (MultipartReplyPortDescCase) message.getMultipartReplyBody(); MultipartReplyPortDesc body = caseBody.getMultipartReplyPortDesc(); List<DataObject> list = new CopyOnWriteArrayList<DataObject>(); for ( Ports port : body.getPorts() ) { LOG.debug("Port: " + port); list.add(PortTranslatorUtil.translatePort(msg.getVersion(), datapathId, port.getPortNo(), port)); } return list; } else { return Collections.emptyList(); } }
@Override protected void encode(ChannelHandlerContext ctx, UdpMessageListenerWrapper wrapper, List<Object> out) throws Exception { LOG.trace("Encoding"); try { ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer(); serializationFactory.messageToBuffer(wrapper.getMsg().getVersion(), buffer, wrapper.getMsg()); out.add(new DatagramPacket(buffer, wrapper.getAddress())); } catch(Exception e) { LOG.warn("Message serialization failed: {}", e.getMessage()); Future<Void> newFailedFuture = ctx.newFailedFuture(e); wrapper.getListener().operationComplete(newFailedFuture); return; } }
PacketInMessage message = (PacketInMessage)msg; LOG.trace("PacketIn[v{}]: InPort: {}", msg.getVersion(), message.getInPort());
@Override protected void encode(final ChannelHandlerContext ctx, final MessageListenerWrapper wrapper, final ByteBuf out) throws Exception { LOG.trace("Encoding"); try { serializationFactory.messageToBuffer(wrapper.getMsg().getVersion(), out, wrapper.getMsg()); if(wrapper.getMsg() instanceof FlowModInput){ statisticsCounters.incrementCounter(CounterEventTypes.DS_FLOW_MODS_SENT); } statisticsCounters.incrementCounter(CounterEventTypes.DS_ENCODE_SUCCESS); } catch(final Exception e) { LOG.warn("Message serialization failed ", e); statisticsCounters.incrementCounter(CounterEventTypes.DS_ENCODE_FAIL); if (wrapper.getListener() != null) { final Future<Void> newFailedFuture = ctx.newFailedFuture(e); wrapper.getListener().operationComplete(newFailedFuture); } out.clear(); return; } }
switch (mpReply.getType()){ case OFPMPFLOW: { logger.debug("Received flow statistics reponse from openflow {} switch",msg.getVersion()==1?"1.0":"1.3+"); FlowsStatisticsUpdateBuilder message = new FlowsStatisticsUpdateBuilder(); message.setId(node); logger.debug("Received aggregate flow statistics reponse from openflow {} switch",msg.getVersion()==1?"1.0":"1.3+"); AggregateFlowStatisticsUpdateBuilder message = new AggregateFlowStatisticsUpdateBuilder(); message.setId(node); logger.debug("Received flow table statistics reponse from openflow {} switch",msg.getVersion()==1?"1.0":"1.3+");