udp: add udp decapsulation

Possibility to register a port via CLI or API to decap incoming UDP
packets:
 - For CLI, a user needs to specify the inner protocol (only MPLS
   supported for now)
 - For API, the protocol is specified by index
Added unittests

Type: feature
Change-Id: Ifedd86d8db2e355b7618472554fd67d77a13a4aa
Signed-off-by: Arthur de Kerhor <arthurdekerhor@gmail.com>
diff --git a/test/vpp_udp_decap.py b/test/vpp_udp_decap.py
new file mode 100644
index 0000000..2bd03ce
--- /dev/null
+++ b/test/vpp_udp_decap.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+"""
+  UDP decap objects
+"""
+
+from vpp_object import VppObject
+from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
+
+
+class VppUdpDecap(VppObject):
+
+    def __init__(self,
+                 test,
+                 is_ip4,
+                 dst_port,
+                 next_proto):
+        self._test = test
+        self.active = False
+        self.udp_decap = {
+            'is_ip4': is_ip4,
+            'port': dst_port,
+            'next_proto': next_proto
+        }
+
+    def add_vpp_config(self):
+        self._test.vapi.udp_decap_add_del(True, self.udp_decap)
+        self._test.registry.register(self, self._test.logger)
+        self.active = True
+
+    def query_vpp_config(self):
+        return self.active
+
+    def remove_vpp_config(self):
+        self._test.vapi.udp_decap_add_del(False, self.udp_decap)
+        self.active = False