[ONOS-3801] Implements L3 REST call json parser
- Nullability check for RouterCodec, RoutingInterfaceCodec, RoutingWebResource.
- Copyright fixed.
- externalFixedIps() method in OpenstackExternalGateway class returns the immutable Map.
Change-Id: I841cc1774a074e167ffe327c6e81d3f245cc8ee0
diff --git a/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackArpHandler.java b/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackArpHandler.java
index 3bbe98b..7fb489a 100644
--- a/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackArpHandler.java
+++ b/apps/openstackswitching/app/src/main/java/org/onosproject/openstackswitching/impl/OpenstackArpHandler.java
@@ -1,5 +1,5 @@
/*
-* Copyright 2015 Open Networking Laboratory
+* Copyright 2015-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,9 +28,11 @@
import org.onosproject.net.packet.InboundPacket;
import org.onosproject.net.packet.PacketService;
import org.onosproject.openstackswitching.OpenstackPort;
+import org.onosproject.openstackswitching.OpenstackPortInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.ByteBuffer;
+import java.util.Collection;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -41,6 +43,7 @@
private static Logger log = LoggerFactory
.getLogger(OpenstackArpHandler.class);
+ private static final MacAddress GATEWAY_MAC = MacAddress.valueOf("1f:1f:1f:1f:1f:1f");
private PacketService packetService;
private OpenstackRestHandler restHandler;
private HostService hostService;
@@ -66,7 +69,7 @@
*
* @param pkt ARP request packet
*/
- public void processPacketIn(InboundPacket pkt) {
+ public void processPacketIn(InboundPacket pkt, Collection<OpenstackPortInfo> openstackPortInfoCollection) {
Ethernet ethRequest = pkt.parsed();
ARP arp = (ARP) ethRequest.getPayload();
@@ -74,10 +77,21 @@
return;
}
+ IpAddress sourceIp = Ip4Address.valueOf(arp.getSenderProtocolAddress());
+ MacAddress srcMac = MacAddress.valueOf(arp.getSenderHardwareAddress());
+ OpenstackPortInfo portInfo = openstackPortInfoCollection.stream()
+ .filter(p -> p.ip().equals(sourceIp) && p.mac().equals(srcMac)).findFirst().orElse(null);
IpAddress targetIp = Ip4Address.valueOf(arp.getTargetProtocolAddress());
- MacAddress dstMac = getMacFromHostService(targetIp);
- if (dstMac == null) {
- dstMac = getMacFromOpenstack(targetIp);
+
+ MacAddress dstMac;
+
+ if (targetIp.equals(portInfo == null ? null : portInfo.gatewayIP())) {
+ dstMac = GATEWAY_MAC;
+ } else {
+ dstMac = getMacFromHostService(targetIp);
+ if (dstMac == null) {
+ dstMac = getMacFromOpenstack(targetIp);
+ }
}
if (dstMac == null) {