sb.append("\nnw_dst: "); sb.append(IPv4.fromIPv4Address(IPv4.toIPv4Address(p .getTargetProtocolAddress()))); } else if (pkt instanceof LLDP) { sb.append("lldp packet");
/** * Extracts context information from ARP packets. * * @param eth input Ethernet frame that is thought to be ARP * @param inPort in port * @param actions actions to take * @return MessageContext object if the packet was a valid ARP packet, * otherwise null */ private static NeighbourMessageContext createArpContext(Ethernet eth, ConnectPoint inPort, NeighbourMessageActions actions) { if (eth.getEtherType() != Ethernet.TYPE_ARP) { return null; } ARP arp = (ARP) eth.getPayload(); IpAddress target = Ip4Address.valueOf(arp.getTargetProtocolAddress()); IpAddress sender = Ip4Address.valueOf(arp.getSenderProtocolAddress()); NeighbourMessageType type; if (arp.getOpCode() == ARP.OP_REQUEST) { type = NeighbourMessageType.REQUEST; } else if (arp.getOpCode() == ARP.OP_REPLY) { type = NeighbourMessageType.REPLY; } else { return null; } return new DefaultNeighbourMessageContext(actions, eth, inPort, NeighbourProtocol.ARP, type, target, sender); }
OpenstackPortInfo portInfo = openstackPortInfoCollection.stream() .filter(p -> p.ip().equals(sourceIp) && p.mac().equals(srcMac)).findFirst().orElse(null); IpAddress targetIp = Ip4Address.valueOf(arp.getTargetProtocolAddress());
private void arpresponceProcess(ARP arpPacket, DeviceId deviceId) { MacAddress srcMac = MacAddress .valueOf(arpPacket.getTargetHardwareAddress()); MacAddress dstMac = MacAddress .valueOf(arpPacket.getSenderHardwareAddress()); IpAddress srcIp = IpAddress.valueOf(IPv4 .toIPv4Address(arpPacket.getTargetProtocolAddress())); IpAddress dstIp = IpAddress.valueOf(IPv4 .toIPv4Address(arpPacket.getSenderProtocolAddress())); FloatingIp floatingIp = floatingIpStore.get(srcIp); if (floatingIp == null) { return; } DeviceId deviceIdOfFloatingIp = getDeviceIdOfFloatingIP(floatingIp); if (!deviceId.equals(deviceIdOfFloatingIp)) { return; } if (!downloadSnatRules(deviceId, srcMac, srcIp, dstMac, dstIp, floatingIp)) { return; } }
private void arprequestProcess(ARP arpPacket, DeviceId deviceId) { MacAddress dstMac = MacAddress .valueOf(arpPacket.getSenderHardwareAddress()); IpAddress srcIp = IpAddress.valueOf(IPv4 .toIPv4Address(arpPacket.getTargetProtocolAddress())); IpAddress dstIp = IpAddress.valueOf(IPv4 .toIPv4Address(arpPacket.getSenderProtocolAddress())); FloatingIp floatingIp = floatingIpStore.get(srcIp); if (floatingIp == null) { return; } DeviceId deviceIdOfFloatingIp = getDeviceIdOfFloatingIP(floatingIp); if (!deviceId.equals(deviceIdOfFloatingIp)) { return; } Port exPort = exPortOfDevice.get(deviceId); MacAddress srcMac = MacAddress.valueOf(exPort.annotations() .value(AnnotationKeys.PORT_MAC)); if (!downloadSnatRules(deviceId, srcMac, srcIp, dstMac, dstIp, floatingIp)) { return; } Ethernet ethernet = buildArpResponse(dstIp, dstMac, srcIp, srcMac); if (ethernet != null) { sendPacketOut(deviceId, exPort.number(), ethernet); } }