DPN ID In ARP Notifications

https://git.opendaylight.org/gerrit/#/c/75248/

The Genius arputil component provides a notification service for ARP packets forwarded from switches via OpenFlow packet-in events. This change adds the switch’s datapath ID to the notifications.

Problem description

This change resolves the fact that the switch datapath ID is not copied from the OpenFlow packet-in event to the ARP notification sent by Genius arputil.

Use Cases

This change is primarily introduced to correctly support assigning a FIP to an Octavia VIP:

https://jira.opendaylight.org/browse/NETVIRT-1402

An Octavia VIP is a Neutron port that is not bound to any VM and is therefor not added to br-int. The VM containing the active HaProxy sends gratuitous ARPs for the VIP’s IP and ODL intercepts those and programs flows to forward VM traffic to the VMs port.

The ODL code responsible for configuring the FIP association flows on OVS currently relies on a southbound openflow port that corresponds to the neutron FIP port. The only real reason this is required is so that ODL can decide which switch should get the flows. In the case of the VIP port, there is no corresponding southbound port so the flows never get configured.

To resolve this, ODL can know which switch to program the flows on from the gratuitous ARP packet-in event which will come from the right switch (we already listen for those.) So, basically we just respond to the gratuitous ARP by correlating it with the Neutron port, checking that the port is an Octavia VIP (the owner field), and programming the flows.

Proposed change

  • Add dpn-id fields to the the arp-request-received and arp-response-received yang notifications

  • Extract the datapath ID from the PacketReceived’s ingress field and set it in the notification

Yang changes

In arputil-api, add dpn-id fields to the the arp-request-received and arp-response-received yang notifications

Targeted Release

Nitrogen and preferably backported to Oxygen

Usage

Consumers of the ARP notifications may call getDpnId() to retrieve the datapath ID of the switch that forwarded the ARP packed to the controller.

REST API

This change simply adds a field to an existing yang notification and therefor does not change any APIs.

CLI

N/A

Implementation

Work Items

Simple change, see the gerrit patch above.

Dependencies

Although ARP notifications are currently consumed by netvirt vpnmanager, this feature is backwards compatible. A new notification listener that consumes the datapath ID will be added to natmanager to resolve the issue with Octavia mentioned above.

Testing

This feature will be tested as part of the fix to the above mentioned bug.

CSIT

TBD