IPv6Service Binding using elanTag
This patch implements the following.
1. We do Service binding for a port only when a v6 address is
configured on the port. IPv6Address could be part of the port
when its initially created or later (i.e, port updated) after
the VM is spawned. Both cases are handled and the port is
unbinded when the v6Address-is-removed/port-deleted. Once
Service Binding is done, packets would hit the IPV6_TABLE(45)
for further processing.
2. Optimizes the IPv6 punt flows by matching on the elanTag.
Previous patch implements punt flows based on the VM macaddress,
this is not optimal as we have to add VM specific punt flows when
a new VM is added. In this patch, we take into account the elanTag
(i.e., network-id) and configure punt flows for
- icmpv6 Router solicitation requests
- icmpv6 Neighbor solicitation requests for router interface
3. Multiple IPv6 subnets can be added/deleted (even when existing VMs
are present) on the network and those edge cases are handled in
this patchset. IPv6Service maintains a cache of (dpnIds <--> List[ports])
per network. We use this info, while programing flows when IPv6 subnets
are added/deleted to handle the edge cases.
Change-Id: I84c98979e9f6f71feb934a96df68613dd6defc42
Signed-off-by: Sridhar Gaddam <sgaddam@redhat.com>