From 6f7bf0f0129b2714f99d18faa8a0bd87a2a3799e Mon Sep 17 00:00:00 2001
From: yatinkarel <ykarel@redhat.com>
Date: Mon, 20 Dec 2021 13:07:25 +0530
Subject: [PATCH] [OVN] Add reverse DNS records

PTR DNS requests support is available since
ovn-21.06.0[1].

This patch adds/removes required enteries for each ip
address of the port in DNS NB table, For example for ip
addresses "10.0.0.4 fd5a:cdd8:f382:0:f816:3eff:fe5b:bb6"
and fqdn "vm1.ovn.test." following enteries are added:-
- 4.0.0.10.in-addr.arpa="vm1.ovn.test"
- 6.b.b.0.b.5.e.f.f.f.e.3.6.1.8.f.0.0.0.0.2.8.3.f.8.d.d.c.a.5.d.f.ip6.arpa="vm1.ovn.test"

[1] https://github.com/ovn-org/ovn/commit/82a4e44

Closes-Bug: #1951872
Change-Id: If03a2ad2475cdb390c4388d6869cd0b2a0555eb7
(cherry picked from commit 5b597d6e4ee647502d3f2aecd46de63f409317b4)
(cherry picked from commit 5b30b14ad726e41793c76ecd0fca8ee66cf51607)
(cherry picked from commit 591570c5f4069234bef460274aa5442b60eed5de)
(cherry picked from commit 3664aa1bb421cc1d7add0c2c5209af27b384ec1b)
Conflicts, trivial due to change near imports at top of file:
    neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py
---

diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
index 96c4457..1aa18db 100644
--- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
+++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
@@ -2240,6 +2240,10 @@
                 port_dns_records[fqdn] = dns_assignment['ip_address']
             else:
                 port_dns_records[fqdn] += " " + dns_assignment['ip_address']
+            # Add reverse DNS enteries for port only for fqdn
+            for ip in port_dns_records[fqdn].split(" "):
+                ptr_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+                port_dns_records[ptr_record] = fqdn
 
         return port_dns_records
 
@@ -2288,14 +2292,18 @@
         net_dns_domain = net.get('dns_domain', '').rstrip('.')
 
         hostnames = []
+        ips = []
         for dns_assignment in port['dns_assignment']:
             hostname = dns_assignment['hostname']
             fqdn = dns_assignment['fqdn'].rstrip('.')
+            ip = dns_assignment['ip_address']
             if hostname not in hostnames:
                 hostnames.append(hostname)
                 net_dns_fqdn = hostname + '.' + net_dns_domain
                 if net_dns_domain and net_dns_fqdn != fqdn:
                     hostnames.append(net_dns_fqdn)
+            if ip not in ips:
+                ips.append(ip)
 
             if fqdn not in hostnames:
                 hostnames.append(fqdn)
@@ -2304,3 +2312,8 @@
             if ls_dns_record.records.get(hostname):
                 txn.add(self._nb_idl.dns_remove_record(
                         ls_dns_record.uuid, hostname, if_exists=True))
+        for ip in ips:
+            ptr_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+            if ls_dns_record.records.get(ptr_record):
+                txn.add(self._nb_idl.dns_remove_record(
+                        ls_dns_record.uuid, ptr_record, if_exists=True))
diff --git a/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_resources.py b/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_resources.py
index e8a9fda..558a11a 100644
--- a/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_resources.py
+++ b/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_resources.py
@@ -965,6 +965,9 @@
              'records': {'n1p1': port_ips, 'n1p1.ovn.test': port_ips,
                          'n1p1.net-n1': port_ips}}
         ]
+        for ip in port_ips.split(" "):
+            p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+            expected_dns_records[0]['records'][p_record] = 'n1p1.ovn.test'
 
         self._validate_dns_records(expected_dns_records)
         self._validate_ls_dns_records(n1_lswitch_name,
@@ -990,6 +993,9 @@
         expected_dns_records.append(
             {'external_ids': {'ls_name': n2_lswitch_name},
              'records': {'n2p1': port_ips, 'n2p1.ovn.test': port_ips}})
+        for ip in port_ips.split(" "):
+            p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+            expected_dns_records[1]['records'][p_record] = 'n2p1.ovn.test'
         self._validate_dns_records(expected_dns_records)
         self._validate_ls_dns_records(n1_lswitch_name,
                                       [expected_dns_records[0]])
@@ -1007,6 +1013,9 @@
         expected_dns_records[0]['records']['n1p2'] = port_ips
         expected_dns_records[0]['records']['n1p2.ovn.test'] = port_ips
         expected_dns_records[0]['records']['n1p2.net-n1'] = port_ips
+        for ip in port_ips.split(" "):
+            p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+            expected_dns_records[0]['records'][p_record] = 'n1p2.ovn.test'
         self._validate_dns_records(expected_dns_records)
         self._validate_ls_dns_records(n1_lswitch_name,
                                       [expected_dns_records[0]])
@@ -1020,6 +1029,11 @@
         res = req.get_response(self.api)
         self.assertEqual(200, res.status_int)
         expected_dns_records[0]['records'].pop('n1p1')
+        port_ips = " ".join([f['ip_address']
+                             for f in n1p1['port']['fixed_ips']])
+        for ip in port_ips.split(" "):
+            p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+            expected_dns_records[0]['records'].pop(p_record)
         expected_dns_records[0]['records'].pop('n1p1.ovn.test')
         expected_dns_records[0]['records'].pop('n1p1.net-n1')
         self._validate_dns_records(expected_dns_records)
diff --git a/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py b/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py
index 7678367..e910353 100644
--- a/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py
+++ b/neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import netaddr
 from neutron.common.ovn import acl as acl_utils
 from neutron.common.ovn import constants as ovn_const
 from neutron.common.ovn import utils
@@ -162,6 +163,9 @@
                 self.expected_dns_records[0]['records'][hname] = port_ips
                 hname = 'n1-' + p + '.ovn.test'
                 self.expected_dns_records[0]['records'][hname] = port_ips
+                for ip in port_ips.split(" "):
+                    p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+                    self.expected_dns_records[0]['records'][p_record] = hname
                 self.expected_ports_with_unknown_addr.append(lport_name)
 
             if p == 'p1':
@@ -512,6 +516,9 @@
                 self.expected_dns_records[1]['records'][hname] = port_ips
                 hname = 'n4-' + p + '.ovn.test'
                 self.expected_dns_records[1]['records'][hname] = port_ips
+                for ip in port_ips.split(" "):
+                    p_record = netaddr.IPAddress(ip).reverse_dns.rstrip(".")
+                    self.expected_dns_records[1]['records'][p_record] = hname
 
             n4_port_dict[p] = port['port']['id']
             self.lport_dhcp_ignored.append(port['port']['id'])
