Code Review
/
openflowjava.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Merge "BUG-3229: Add support for PacketIn filtering" into stable/lithium
[openflowjava.git]
/
openflow-protocol-impl
/
src
/
main
/
java
/
org
/
opendaylight
/
openflowjava
/
protocol
/
impl
/
core
/
connection
/
ConnectionAdapterImpl.java
diff --git
a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/ConnectionAdapterImpl.java
b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/ConnectionAdapterImpl.java
index 6d9013ec893e20b5a5a49306073d7ff10da44e16..cf2693c80276a4c587b3bc0f45d47af17d8078e5 100644
(file)
--- a/
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/ConnectionAdapterImpl.java
+++ b/
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/ConnectionAdapterImpl.java
@@
-27,6
+27,8
@@
import java.util.concurrent.TimeUnit;
import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandler;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandlerRegistration;
import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandler;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandlerRegistration;
+import org.opendaylight.openflowjava.protocol.impl.core.OFVersionDetector;
+import org.opendaylight.openflowjava.protocol.impl.core.PipelineHandlers;
import org.opendaylight.openflowjava.statistics.CounterEventTypes;
import org.opendaylight.openflowjava.statistics.StatisticsCounters;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
import org.opendaylight.openflowjava.statistics.CounterEventTypes;
import org.opendaylight.openflowjava.statistics.StatisticsCounters;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
@@
-117,6
+119,7
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
private OutboundQueueManager<?> outputManager;
private boolean disconnectOccured = false;
private final StatisticsCounters statisticsCounters;
private OutboundQueueManager<?> outputManager;
private boolean disconnectOccured = false;
private final StatisticsCounters statisticsCounters;
+ private OFVersionDetector versionDetector;
private final InetSocketAddress address;
/**
private final InetSocketAddress address;
/**
@@
-135,6
+138,7
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
this.address = address;
channel.pipeline().addLast(output);
statisticsCounters = StatisticsCounters.getInstance();
this.address = address;
channel.pipeline().addLast(output);
statisticsCounters = StatisticsCounters.getInstance();
+
LOG.debug("ConnectionAdapter created");
}
LOG.debug("ConnectionAdapter created");
}
@@
-280,19
+284,23
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
systemListener.onSwitchIdleEvent((SwitchIdleEvent) message);
// OpenFlow messages
} else if (message instanceof EchoRequestMessage) {
systemListener.onSwitchIdleEvent((SwitchIdleEvent) message);
// OpenFlow messages
} else if (message instanceof EchoRequestMessage) {
- messageListener.onEchoRequestMessage((EchoRequestMessage) message);
+ if (outputManager != null) {
+ outputManager.onEchoRequest((EchoRequestMessage) message);
+ } else {
+ messageListener.onEchoRequestMessage((EchoRequestMessage) message);
+ }
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof ErrorMessage) {
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof ErrorMessage) {
- messageListener.onErrorMessage((ErrorMessage) message);
- if (outputManager
!= null
) {
-
outputManager.onMessage((OfHeader
) message);
+ // Send only unmatched errors
+ if (outputManager
== null || !outputManager.onMessage((OfHeader) message)
) {
+
messageListener.onErrorMessage((ErrorMessage
) message);
}
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof ExperimenterMessage) {
}
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof ExperimenterMessage) {
- messageListener.onExperimenterMessage((ExperimenterMessage) message);
if (outputManager != null) {
outputManager.onMessage((OfHeader) message);
}
if (outputManager != null) {
outputManager.onMessage((OfHeader) message);
}
+ messageListener.onExperimenterMessage((ExperimenterMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof FlowRemovedMessage) {
messageListener.onFlowRemovedMessage((FlowRemovedMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof FlowRemovedMessage) {
messageListener.onFlowRemovedMessage((FlowRemovedMessage) message);
@@
-302,10
+310,10
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
messageListener.onHelloMessage((HelloMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof MultipartReplyMessage) {
messageListener.onHelloMessage((HelloMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof MultipartReplyMessage) {
- messageListener.onMultipartReplyMessage((MultipartReplyMessage) message);
if (outputManager != null) {
outputManager.onMessage((OfHeader) message);
}
if (outputManager != null) {
outputManager.onMessage((OfHeader) message);
}
+ messageListener.onMultipartReplyMessage((MultipartReplyMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof PacketInMessage) {
messageListener.onPacketInMessage((PacketInMessage) message);
statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
} else if (message instanceof PacketInMessage) {
messageListener.onPacketInMessage((PacketInMessage) message);
@@
-455,6
+463,9
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
@Override
public void fireConnectionReadyNotification() {
@Override
public void fireConnectionReadyNotification() {
+ versionDetector = (OFVersionDetector) channel.pipeline().get(PipelineHandlers.OF_VERSION_DETECTOR.name());
+ Preconditions.checkState(versionDetector != null);
+
new Thread(new Runnable() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
@@
-514,4
+525,10
@@
public class ConnectionAdapterImpl implements ConnectionFacade {
Channel getChannel() {
return channel;
}
Channel getChannel() {
return channel;
}
+
+ @Override
+ public void setPacketInFiltering(final boolean enabled) {
+ versionDetector.setFilterPacketIns(enabled);
+ LOG.debug("PacketIn filtering {}abled", enabled ? "en" : "dis");
+ }
}
}