private void processErrorReply(OFError errorMsg) { OFMessage offendingMsg = errorMsg.getOffendingMsg(); Integer xid; if (offendingMsg != null) { xid = offendingMsg.getXid(); } else { xid = errorMsg.getXid(); } /* * the error can be a reply to a synchronous message or to a statistic * request message */ Callable<?> worker = messageWaitingDone.remove(xid); if (worker == null) { return; } if (worker instanceof SynchronousMessage) { ((SynchronousMessage) worker).wakeup(errorMsg); } else { ((StatisticsCollector) worker).wakeup(errorMsg); } }
private void processErrorReply(OFError errorMsg) { OFMessage offendingMsg = errorMsg.getOffendingMsg(); Integer xid; if (offendingMsg != null) { xid = offendingMsg.getXid(); } else { xid = errorMsg.getXid(); } /* * the error can be a reply to a synchronous message or to a statistic * request message */ Callable<?> worker = messageWaitingDone.remove(xid); if (worker == null) { return; } if (worker instanceof SynchronousMessage) { ((SynchronousMessage) worker).wakeup(errorMsg); } else { ((StatisticsCollector) worker).wakeup(errorMsg); } }
@Override void processOFError(final SwitchChannelHandler h, final OFError m) { try { if (m.getOffendingMsg().getType() != OFType.BARRIER_REQUEST) { h.log.error( "Error waiting for features (type:{}, code:{})", m.getErrorType(), m.getErrorCode()); if (h.channel.isOpen()) { h.channel.close(); } } else { h.log.warn( "Barrier Request message not understood by switch {}; " + "if it's an HP switch you are probably ok.", HexString.toHexString(h.featuresReply .getDatapathId())); } } catch (MessageParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
private void handleErrorMessage(ISwitch sw, OFError errorMsg) { Node node = NodeCreator.createOFNode(sw.getId()); OFMessage offendingMsg = errorMsg.getOffendingMsg(); Integer xid; if (offendingMsg != null) { xid = offendingMsg.getXid(); } else { xid = errorMsg.getXid(); } Long rid = getMessageRid(sw.getId(), xid); /* * Null or zero requestId indicates that the error message is meant for * a sync message. It will be handled by the sync message worker thread. * Hence we are done here. */ if ((rid == null) || (rid == 0)) { return; } /* * Notifies the caller that error has been reported for a previous flow * programming request */ for (Map.Entry<String, IFlowProgrammerNotifier> containerNotifier : flowProgrammerNotifiers .entrySet()) { IFlowProgrammerNotifier notifier = containerNotifier.getValue(); notifier.flowErrorReported(node, rid, Utils.getOFErrorString(errorMsg)); } }