- messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS);
- final TranslatorKey translatorKey = new TranslatorKey(packetInMessage.getVersion(), PacketIn.class.getName());
- final MessageTranslator<PacketInMessage, PacketReceived> messageTranslator = translatorLibrary.lookupTranslator(translatorKey);
- final PacketReceived packetReceived = messageTranslator.translate(packetInMessage, this, null);
- notificationService.publish(packetReceived);
+ messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH);
+ final ConnectionAdapter connectionAdapter = this.getPrimaryConnectionContext().getConnectionAdapter();
+ if (connectionAdapter.isAutoRead()) {
+ final TranslatorKey translatorKey = new TranslatorKey(packetInMessage.getVersion(), PacketIn.class.getName());
+ final MessageTranslator<PacketInMessage, PacketReceived> messageTranslator = translatorLibrary.lookupTranslator(translatorKey);
+ final PacketReceived packetReceived = messageTranslator.translate(packetInMessage, this, null);
+
+ if (packetReceived != null) {
+ messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_TRANSLATE_OUT_SUCCESS);
+ } else {
+ messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_TRANSLATE_SRC_FAILURE);
+ }
+ if (!notificationPublishService.offerNotification(packetReceived)) {
+ LOG.debug("Notification offer refused by notification service.");
+ messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE);
+ LOG.debug("Notification offer refused by notification service.");
+ connectionAdapter.setAutoRead(false);
+ LOG.debug("Throttling primary connection for {}", connectionAdapter.getRemoteAddress());
+ this.throttledConnectionsHolder.storeThrottledConnection(connectionAdapter);
+ } else {
+ messageSpy.spyMessage(packetInMessage.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS);
+ }
+ }
+
+