BUG 6726 : Arp Responder for Internal Subnet Gateway IPAddress 78/48678/3
authorkarthik.prasad <karthik.p@altencalsoftlabs.com>
Fri, 11 Nov 2016 07:34:38 +0000 (13:04 +0530)
committerSam Hague <shague@redhat.com>
Fri, 25 Nov 2016 14:34:50 +0000 (14:34 +0000)
commitdf867d40dd6a67fbc0e9e9f877a53aeeb7585345
treeeab74116e93d7eeb4c685d08666d3637236f95eb
parenta212e4699561f952187ba968416fa3cdf1d12e4c
BUG 6726 : Arp Responder for Internal Subnet Gateway IPAddress

Since all ARP Requests for Gateway IP are punted to controller,
when controller reboots these ARP requests are lost and so
they are not processed. This results in datapath traffic failure
during controller outage duration.

This enhancement introduces a new ARP Responder Table on the
OVS Datapath which will be used to service ARP requests without
the intervention of the controller.   Thereby it enables a
highly available datapath even during controller outage.

This enhancement attempts to address the following 3 usecases:
1. Responding to ARP request for router interface ip address.
2. Responding to ARP request for subnet gateway ip address in case
there is no router interface to serve that subnet gateway ip address.
3. VLAN Tagged ARP packets.

The MYMAC Table (or GWMAC Table) matches on ARP Requests and sends
that same packet to DISPATCHER, CONTROLLER and the new ARP RESPONDER
TABLE.  As of this enhancement, the ARP RESPONDER TABLE is numero 81.

In table 81 an entry is created per gateway IP and lPortTag for an ARP, on
match of the entry an ARP reply packet is created with macaddress of
either the router gateway interface (or) connected macaddress
(in case of direct network association) and forwarded to table 220,
from where packets are sent back to IN_PORT.

This enhancement review also depends on NICIRA ARP actions introduced in
Genius project (refer ActionType.java in Genius repository).
Sample flow entry of ARP Responder Table is attached below.

cookie=0x1c361405, duration=27.172s, table=81, n_packets=1, n_bytes=42,
priority=100,arp,metadata=0x60000300000222e0/0xffffff00fffffffe,arp_tpa=20.20.20.1,arp_op=1
actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],set_field:fe:16:3e:32:29:64->eth_src,
load:0x2->NXM_OF_ARP_OP[],move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],
load:0xfe163e322964->NXM_NX_ARP_SHA[],load:0x14141401->NXM_OF_ARP_SPA[],
load:0->NXM_OF_IN_PORT[],load:0x300->NXM_NX_REG6[],resubmit(,220)

Change-Id: I1e6d60982e0d474c33cfa89a90737f2e7735f1a3
Depends-On: Ida59553187ba20b10bbc4e08d20e491d5dd72200
Signed-off-by: karthik.prasad <karthik.p@altencalsoftlabs.com>
Signed-off-by: Vivekanandan Narasimhan <n.vivekanandan@ericsson.com>
vpnservice/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
vpnservice/vpnmanager/vpnmanager-api/src/main/yang/odl-l3vpn.yang
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpNotificationHandler.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelEndPointChangeListener.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnNodeListener.java
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/arp/responder/ArpResponderConstant.java [new file with mode: 0644]
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/arp/responder/ArpResponderUtil.java [new file with mode: 0644]
vpnservice/vpnmanager/vpnmanager-impl/src/main/resources/org/opendaylight/blueprint/vpnmanager.xml