From e47668d88a21f4077bfb88c1123de0c86679d868 Mon Sep 17 00:00:00 2001
From: fett0 <50275740+fett0@users.noreply.github.com>
Date: Wed, 5 Jul 2023 12:03:20 -0300
Subject: geneve:  T5339: add option to use ipv4 instead of ethernet

---
 .../include/interface/parameters-innerproto.xml.i                 | 8 ++++++++
 interface-definitions/interfaces-geneve.xml.in                    | 1 +
 python/vyos/ifconfig/geneve.py                                    | 1 +
 smoketest/scripts/cli/test_interfaces_geneve.py                   | 6 ++++++
 4 files changed, 16 insertions(+)
 create mode 100644 interface-definitions/include/interface/parameters-innerproto.xml.i

diff --git a/interface-definitions/include/interface/parameters-innerproto.xml.i b/interface-definitions/include/interface/parameters-innerproto.xml.i
new file mode 100644
index 000000000..9cafebd11
--- /dev/null
+++ b/interface-definitions/include/interface/parameters-innerproto.xml.i
@@ -0,0 +1,8 @@
+<!-- include start from interface/parameters-innerproto.xml.i -->
+<leafNode name="innerproto">
+  <properties>
+    <help>Use IPv4 as inner protocol instead of Ethernet</help>
+    <valueless/>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/interfaces-geneve.xml.in b/interface-definitions/interfaces-geneve.xml.in
index 330dadd95..29b563a09 100644
--- a/interface-definitions/interfaces-geneve.xml.in
+++ b/interface-definitions/interfaces-geneve.xml.in
@@ -36,6 +36,7 @@
                   #include <include/interface/parameters-df.xml.i>
                   #include <include/interface/parameters-tos.xml.i>
                   #include <include/interface/parameters-ttl.xml.i>
+                  #include <include/interface/parameters-innerproto.xml.i>
                 </children>
               </node>
               <node name="ipv6">
diff --git a/python/vyos/ifconfig/geneve.py b/python/vyos/ifconfig/geneve.py
index 276c34cd7..7a05e47a7 100644
--- a/python/vyos/ifconfig/geneve.py
+++ b/python/vyos/ifconfig/geneve.py
@@ -45,6 +45,7 @@ class GeneveIf(Interface):
             'parameters.ip.df'           : 'df',
             'parameters.ip.tos'          : 'tos',
             'parameters.ip.ttl'          : 'ttl',
+            'parameters.ip.innerproto'   : 'innerprotoinherit',
             'parameters.ipv6.flowlabel'  : 'flowlabel',
         }
 
diff --git a/smoketest/scripts/cli/test_interfaces_geneve.py b/smoketest/scripts/cli/test_interfaces_geneve.py
index 24d350aeb..b2efb0349 100755
--- a/smoketest/scripts/cli/test_interfaces_geneve.py
+++ b/smoketest/scripts/cli/test_interfaces_geneve.py
@@ -43,6 +43,7 @@ class GeneveInterfaceTest(BasicInterfaceTest.TestCase):
 
             self.cli_set(self._base_path + [intf, 'parameters', 'ip', 'df', 'set'])
             self.cli_set(self._base_path + [intf, 'parameters', 'ip', 'tos', tos])
+            self.cli_set(self._base_path + [intf, 'parameters', 'ip', 'innerproto'])
             self.cli_set(self._base_path + [intf, 'parameters', 'ip', 'ttl', str(ttl)])
             ttl += 10
 
@@ -67,6 +68,11 @@ class GeneveInterfaceTest(BasicInterfaceTest.TestCase):
                 label = options['linkinfo']['info_data']['label']
                 self.assertIn(f'parameters ipv6 flowlabel {label}', self._options[interface])
 
+            if any('innerproto' in s for s in self._options[interface]):
+                inner = options['linkinfo']['info_data']['innerproto']
+                self.assertIn(f'parameters ip {inner}', self._options[interface])
+
+
             self.assertEqual('geneve',        options['linkinfo']['info_kind'])
             self.assertEqual('set',      options['linkinfo']['info_data']['df'])
             self.assertEqual(f'0x{tos}', options['linkinfo']['info_data']['tos'])
-- 
cgit v1.2.3