alshabib | 030111e | 2014-09-15 15:56:42 -0700 | [diff] [blame^] | 1 | package org.onlab.onos.fwd; |
| 2 | |
| 3 | import static org.slf4j.LoggerFactory.getLogger; |
| 4 | |
| 5 | import org.onlab.onos.net.PortNumber; |
| 6 | import org.onlab.onos.net.flow.Instructions; |
| 7 | import org.onlab.onos.net.packet.PacketContext; |
| 8 | import org.onlab.onos.net.packet.PacketProcessor; |
| 9 | import org.onlab.onos.net.topology.TopologyService; |
| 10 | import org.slf4j.Logger; |
| 11 | |
| 12 | public class ReactivePacketProcessor implements PacketProcessor { |
| 13 | |
| 14 | private final Logger log = getLogger(getClass()); |
| 15 | private final TopologyService topologyService; |
| 16 | |
| 17 | |
| 18 | public ReactivePacketProcessor(TopologyService topologyService) { |
| 19 | this.topologyService = topologyService; |
| 20 | } |
| 21 | |
| 22 | |
| 23 | @Override |
| 24 | public void process(PacketContext context) { |
| 25 | boolean canBcast = topologyService.isBroadcastPoint(topologyService.currentTopology(), |
| 26 | context.inPacket().receivedFrom()); |
| 27 | |
| 28 | if (canBcast) { |
| 29 | context.treatmentBuilder().add(Instructions.createOutput(PortNumber.FLOOD)); |
| 30 | context.send(); |
| 31 | } else { |
| 32 | context.block(); |
| 33 | } |
| 34 | |
| 35 | } |
| 36 | |
| 37 | } |