import org.opendaylight.controller.sal.packet.IDataPacketService;
import org.opendaylight.controller.sal.packet.IListenDataPacket;
import org.opendaylight.controller.sal.packet.IPv4;
+import org.opendaylight.controller.sal.packet.IEEE8021Q;
import org.opendaylight.controller.sal.packet.Packet;
import org.opendaylight.controller.sal.packet.PacketResult;
import org.opendaylight.controller.sal.packet.RawPacket;
Packet formattedPak = this.dataPacketService.decodeDataPacket(inPkt);
if (formattedPak instanceof Ethernet) {
Object nextPak = formattedPak.getPayload();
+ if (nextPak instanceof IEEE8021Q) {
+ log.trace("Moved after the dot1Q header");
+ nextPak = ((IEEE8021Q) nextPak).getPayload();
+ }
if (nextPak instanceof IPv4) {
log.trace("Handle IP packet: {}", formattedPak);
handlePuntedIPPacket((IPv4) nextPak, inPkt.getIncomingNodeConnector());
}
}
- // Now dispatch the packet toward SAL for default container
- IPluginOutDataPacketService defaultOutService = this.pluginOutDataPacketServices
- .get(GlobalConstants.DEFAULT.toString());
- if (defaultOutService != null) {
- defaultOutService.receiveDataPacket(dataPacket);
- if (logger.isTraceEnabled()) {
- logger.trace("Dispatched to apps a frame of size: {} on " + "container: {}: {}",
- new Object[] { ofPacket.getPacketData().length, GlobalConstants.DEFAULT.toString(),
- HexEncode.bytesToHexString(dataPacket.getPacketData()) });
- }
- }
+ boolean dispatched_to_container = false;
+
// Now check the mapping between nodeConnector and
// Container and later on optimally filter based on
// flowSpec
HexEncode.bytesToHexString(dataPacket.getPacketData()) });
}
}
+ dispatched_to_container = true;
}
}
}
}
+ if (!dispatched_to_container) {
+ // Now dispatch the packet toward SAL for default container
+ IPluginOutDataPacketService defaultOutService = this.pluginOutDataPacketServices
+ .get(GlobalConstants.DEFAULT.toString());
+ if (defaultOutService != null) {
+ defaultOutService.receiveDataPacket(dataPacket);
+ if (logger.isTraceEnabled()) {
+ logger.trace("Dispatched to apps a frame of size: {} on " + "container: {}: {}",
+ new Object[] { ofPacket.getPacketData().length,
+ GlobalConstants.DEFAULT.toString(),
+ HexEncode.bytesToHexString(dataPacket.getPacketData()) });
+ }
+ }
+ }
// This is supposed to be the catch all for all the
// DataPacket hence we will assume it has been handled
return;