This patch adds support for "virtual" port type following the work in
core OVN .
Currently there are two main usages for this type of port:
* Octavia: For creating the logical port for the virtual IP.
* VRRP 
Upon adding an IP address to the allowed_address_pairs field of the
Neutron's port, networking-ovn will look if that IP matches with the IP
of another existing port in the same network. If so, networking-ovn will
updating the matching port accordingly setting its type to "virtual"
and adding the required options in the OVN database.
The patch also accounts for other situations such as:
* Creating the VIP port after the parents (the ones with the IP in the
allowed_address_pairs field) are created.
* When updating removing/adding allowed_address_pairs' the virtual
ports are also updated.
* When deleting a parent port the virtual ports are also updated.
The code removes the type "virtual" from a virtual port whenever there's
no parents left (in case of deletion or editing allowed_address_pairs)
making it an ordinary port again.
The patch also keeps the logic introduced by
33fd553158 for version of OVN which does
not support the virtual port type (> 2.12) making it backward compatible.
Had to fix a bug in a previous cherry-pick that broke a port_type
check in ovn_client.py, https://review.opendev.org/#/c/703195/
Signed-off-by: Lucas Alvares Gomes <firstname.lastname@example.org>
(cherry picked from commit 5e72ea104c)