public class ReactiveFlowWriter implements ArpPacketListener {
private InventoryReader inventoryReader;
private FlowWriterService flowWriterService;
- private final MacAddress MAC_TO_IGNORE = new MacAddress("ff:ff:ff:ff:ff:ff");
public ReactiveFlowWriter(InventoryReader inventoryReader, FlowWriterService flowWriterService) {
this.inventoryReader = inventoryReader;
this.flowWriterService = flowWriterService;
}
+ /**
+ * Checks if a MAC should be considered for flow creation
+ *
+ * @param macToCheck MacAddress to consider
+ * @return true if a MacAddess is broadcast or multicast, false if
+ * the MacAddress is unicast (and thus legible for flow creation).
+ */
+
+ private boolean ignoreThisMac(MacAddress macToCheck) {
+ if (macToCheck == null) return true;
+ String [] octets = macToCheck.getValue().split(":");
+ short first_byte = Short.parseShort(octets[0]);
+ return ((first_byte & 1) == 1);
+ }
+
@Override
public void onArpPacketReceived(ArpPacketReceived packetReceived) {
if(packetReceived == null || packetReceived.getPacketChain() == null) {
return;
}
MacAddress destMac = ethernetPacket.getDestinationMac();
- if(!MAC_TO_IGNORE.equals(destMac)) {
+ if(!ignoreThisMac(destMac)) {
writeFlows(rawPacket.getIngress(),
ethernetPacket.getSourceMac(),
ethernetPacket.getDestinationMac());