Signed-off-by: Sergey Madaminov <[email protected]>

Co-authored-by: William Tu <[email protected]>
Signed-off-by: William Tu <[email protected]>

---
 build-aux/copy-file-from-build.py         |  19 +
 build-aux/extract-odp-netlink-h.py        |  84 ++++
 build-aux/extract-odp-netlink-macros-h.py |  58 +++
 config.h.meson                            | 387 ++++++++++++++++++
 include/meson.build                       |  30 ++
 include/openvswitch/meson.build           |   8 +
 lib/dirs.c.in.meson                       | 113 ++++++
 lib/meson.build                           | 460 ++++++++++++++++++++++
 lib/openvswitch.map.in                    |   4 +
 lib/sflow.map.in                          |   4 +
 meson.build                               | 371 +++++++++++++++++
 meson_options.txt                         |   2 +
 ofproto/meson.build                       |  59 +++
 ofproto/ofproto.map.in                    |   4 +
 ovsdb/meson.build                         | 106 +++++
 ovsdb/ovsdb.map.in                        |   4 +
 python/ovs/meson.build                    |  24 ++
 utilities/meson.build                     |  83 ++++
 vswitchd/meson.build                      |  30 ++
 vtep/meson.build                          |  71 ++++
 vtep/vtep.map.in                          |   4 +
 21 files changed, 1925 insertions(+)
 create mode 100644 build-aux/copy-file-from-build.py
 create mode 100755 build-aux/extract-odp-netlink-h.py
 create mode 100755 build-aux/extract-odp-netlink-macros-h.py
 create mode 100644 config.h.meson
 create mode 100644 include/meson.build
 create mode 100644 include/openvswitch/meson.build
 create mode 100644 lib/dirs.c.in.meson
 create mode 100644 lib/meson.build
 create mode 100644 lib/openvswitch.map.in
 create mode 100644 lib/sflow.map.in
 create mode 100644 meson.build
 create mode 100644 meson_options.txt
 create mode 100644 ofproto/meson.build
 create mode 100644 ofproto/ofproto.map.in
 create mode 100644 ovsdb/meson.build
 create mode 100644 ovsdb/ovsdb.map.in
 create mode 100644 python/ovs/meson.build
 create mode 100644 utilities/meson.build
 create mode 100644 vswitchd/meson.build
 create mode 100644 vtep/meson.build
 create mode 100644 vtep/vtep.map.in

diff --git a/build-aux/copy-file-from-build.py 
b/build-aux/copy-file-from-build.py
new file mode 100644
index 000000000..df6432634
--- /dev/null
+++ b/build-aux/copy-file-from-build.py
@@ -0,0 +1,19 @@
+import os
+import shutil
+import sys
+
+input_file = os.path.join(
+    os.getenv('MESON_BUILD_ROOT'),
+    os.getenv('MESON_SUBDIR'),
+    sys.argv[1])
+
+output_file = os.path.join(
+    os.getenv('MESON_SOURCE_ROOT'),
+    os.getenv('MESON_SUBDIR'),
+    sys.argv[2])
+
+print(input_file)
+print(output_file)
+print(os.path.dirname(output_file))
+os.makedirs(os.path.dirname(output_file), exist_ok=True)
+shutil.copyfile(input_file, output_file)
diff --git a/build-aux/extract-odp-netlink-h.py 
b/build-aux/extract-odp-netlink-h.py
new file mode 100755
index 000000000..c4da0a344
--- /dev/null
+++ b/build-aux/extract-odp-netlink-h.py
@@ -0,0 +1,84 @@
+# This is a "python" script that transforms <linux/openvswitch.h> into a
+# form that is suitable for inclusion within the Open vSwitch tree on
+# both Linux and non-Linux systems including Windows.
+
+import re
+import sys
+
+banner = ("""/* -*- mode: c; buffer-read-only: t -*- */
+/* Generated automatically from <linux/openvswitch.h> -- do not modify! */
+
+
+
+""")
+
+win_defs = ('''
+#ifdef _WIN32
+#include "OvsDpInterfaceExt.h"
+#include "OvsDpInterfaceCtExt.h"
+#endif
+
+/* IPCT_* enums may not be defined in all platforms, so do not use them. */
+#define OVS_CT_EVENT_NEW       (1 << 0)   /* 1 << IPCT_NEW */
+#define OVS_CT_EVENT_RELATED   (1 << 1)   /* 1 << IPCT_RELATED */
+#define OVS_CT_EVENT_DESTROY   (1 << 2)   /* 1 << IPCT_DESTROY */
+#define OVS_CT_EVENT_REPLY     (1 << 3)   /* 1 << IPCT_REPLY */
+#define OVS_CT_EVENT_ASSURED   (1 << 4)   /* 1 << IPCT_ASSURED */
+#define OVS_CT_EVENT_PROTOINFO (1 << 5)   /* 1 << IPCT_PROTOINFO */
+#define OVS_CT_EVENT_HELPER    (1 << 6)   /* 1 << IPCT_HELPER */
+#define OVS_CT_EVENT_MARK      (1 << 7)   /* 1 << IPCT_MARK */
+#define OVS_CT_EVENT_SEQADJ    (1 << 8)   /* 1 << IPCT_SEQADJ */
+#define OVS_CT_EVENT_SECMARK   (1 << 9)   /* 1 << IPCT_SECMARK */
+#define OVS_CT_EVENT_LABEL     (1 << 10)  /* 1 << IPCT_LABEL */
+
+#define OVS_CT_EVENTMASK_DEFAULT \\
+  (OVS_CT_EVENT_NEW | OVS_CT_EVENT_RELATED | OVS_CT_EVENT_DESTROY |\\
+   OVS_CT_EVENT_MARK | OVS_CT_EVENT_LABEL)
+
+
+''')
+
+header_template = sys.argv[1]
+with open(header_template, 'r') as f:
+    contents = f.readlines()
+
+# Add a header warning that this is a generated file.  It might save somebody
+# some frustration (maybe even me!).
+contents.insert(0, banner)
+
+# Include platform extensions header file on Win32.
+contents.insert(len(contents) - 1, win_defs)
+
+contents = "".join(contents)
+
+# Avoid using reserved names in header guards.
+contents = re.sub("_LINUX_OPENVSWITCH_H", "ODP_NETLINK_H", contents)
+
+# Use OVS's own struct eth_addr instead of a 6-byte char array.
+contents = re.sub("<linux/types.h>", "\"openvswitch/types.h\"", contents)
+contents = re.sub("<linux/if_ether.h>", "<netinet/in.h>", contents)
+contents = re.sub("__u8\s+([a-zA-Z0-9_]*)\s*\[\s*ETH_ALEN\s*\]", "struct 
eth_addr \\1", contents)
+
+# Transform IPv6 addresses from an array to struct in6_addr
+#
+# As a very special case, only transform member names with more than
+# one character because struct ovs_key_nsh has a member "__be32 c[4];"
+# that is not an IPv6 address.
+contents = re.sub("__be32\s+([a-zA-Z0-9_]{2,})\s*\[\s*4\s*\]", "struct 
in6_addr \\1", contents)
+
+# Transform most Linux-specific __u<N> types into C99 uint<N>_t types,
+# and most Linux-specific __be<N> into Open vSwitch ovs_be<N>,
+# and use the appropriate userspace header.
+contents = re.sub("__u32", "uint32_t", contents)
+contents = re.sub("__u16", "uint16_t", contents)
+contents = re.sub("__u8", "uint8_t", contents)
+contents = re.sub("__be32", "ovs_be32", contents)
+contents = re.sub("__be16", "ovs_be16", contents)
+
+# Transform 64-bit Linux-specific types into Open vSwitch specialized
+# types for 64-bit numbers that might only be aligned on a 32-bit
+# boundary.
+contents = re.sub("__u64", "ovs_32aligned_u64", contents)
+contents = re.sub("__be64", "ovs_32aligned_be64", contents)
+
+print(contents)
diff --git a/build-aux/extract-odp-netlink-macros-h.py 
b/build-aux/extract-odp-netlink-macros-h.py
new file mode 100755
index 000000000..8b57b235d
--- /dev/null
+++ b/build-aux/extract-odp-netlink-macros-h.py
@@ -0,0 +1,58 @@
+import mmap
+import re
+import sys
+
+hfile=sys.argv[1]
+
+# 'line_start' is the line number where the definition of the struct begin
+# 'line_end' is the line number where the definition of the struct ends
+def generate_fields_macros(struct_name):
+    with open(hfile, 'r') as f:
+        define_lines = []
+        found = False
+        for line in f:
+            if found:
+                tmp_line = re.sub(";.*", "", line)
+                fields = re.split("\s+", tmp_line)
+                if len(fields) == 5:
+                    define_lines.append("    {offsetof(struct " + struct_name 
+ ", " + fields[3] + "), sizeof(" + fields[1] + " " + fields[2] + ")}, \\")
+                elif len(fields) == 4:
+                    define_lines.append("    {offsetof(struct " + struct_name 
+ ", " + fields[2] + "), sizeof(" + fields[1] + ")}, \\")
+                else:
+                    define_lines.append("    {0, 0}}")
+                    break
+            elif re.search(r'\b' + struct_name + r'\b', line):
+                if "{" in line:
+                    found = True
+        STRUCT = struct_name.upper()
+        define_line = "#define " + STRUCT + "_OFFSETOF_SIZEOF_ARR { \\"
+        print(define_line)
+        for define_line in define_lines:
+            print(define_line)
+        print()
+        print()
+
+preamble = ("""/* Generated automatically from <include/odp-netlink.h> -- do 
not modify! */
+#ifndef ODP_NETLINK_MACROS_H
+#define ODP_NETLINK_MACROS_H
+
+""")
+
+print(preamble)
+
+generate_fields_macros("ovs_key_ethernet")
+generate_fields_macros("ovs_key_ipv4")
+generate_fields_macros("ovs_key_ipv6")
+generate_fields_macros("ovs_key_tcp")
+generate_fields_macros("ovs_key_udp")
+generate_fields_macros("ovs_key_sctp")
+generate_fields_macros("ovs_key_icmp")
+generate_fields_macros("ovs_key_icmpv6")
+generate_fields_macros("ovs_key_arp")
+generate_fields_macros("ovs_key_nd")
+generate_fields_macros("ovs_key_nd_extensions")
+
+epilogue = ("""
+#endif""")
+
+print(epilogue)
diff --git a/config.h.meson b/config.h.meson
new file mode 100644
index 000000000..3aaa1cbd6
--- /dev/null
+++ b/config.h.meson
@@ -0,0 +1,387 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#mesondefine AC_APPLE_UNIVERSAL_BUILD
+
+/* If the C compiler is GCC 4.7 or later, define to the return value of
+   __atomic_always_lock_free(1, 0). If the C compiler is not GCC or is an
+   older version of GCC, the value does not matter. */
+#mesondefine ATOMIC_ALWAYS_LOCK_FREE_1B
+
+/* If the C compiler is GCC 4.7 or later, define to the return value of
+   __atomic_always_lock_free(2, 0). If the C compiler is not GCC or is an
+   older version of GCC, the value does not matter. */
+#mesondefine ATOMIC_ALWAYS_LOCK_FREE_2B
+
+/* If the C compiler is GCC 4.7 or later, define to the return value of
+   __atomic_always_lock_free(4, 0). If the C compiler is not GCC or is an
+   older version of GCC, the value does not matter. */
+#mesondefine ATOMIC_ALWAYS_LOCK_FREE_4B
+
+/* If the C compiler is GCC 4.7 or later, define to the return value of
+   __atomic_always_lock_free(8, 0). If the C compiler is not GCC or is an
+   older version of GCC, the value does not matter. */
+#mesondefine ATOMIC_ALWAYS_LOCK_FREE_8B
+
+/* System uses the DPDK module. */
+#mesondefine DPDK_NETDEV
+
+/* Define to 1 if AF_XDP support is available and enabled. */
+#mesondefine HAVE_AF_XDP
+
+/* Define to 1 if you have the <atomic> header file. */
+#mesondefine HAVE_ATOMIC
+
+/* Define to 1 if you have backtrace(3). */
+#mesondefine HAVE_BACKTRACE
+
+/* Define to 1 if you have the <bits/floatn-common.h> header file. */
+#mesondefine HAVE_BITS_FLOATN_COMMON_H
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#mesondefine HAVE_CLOCK_GETTIME
+
+/* define if the compiler supports basic C++11 syntax */
+#mesondefine HAVE_CXX11
+
+/* Define to 1 if you have the declaration of `malloc_trim', and to 0 if you
+   don't. */
+#mesondefine HAVE_DECL_MALLOC_TRIM
+
+/* Define to 1 if you have the declaration of `RTE_EAL_NUMA_AWARE_HUGEPAGES',
+   and to 0 if you don't. */
+#mesondefine HAVE_DECL_RTE_EAL_NUMA_AWARE_HUGEPAGES
+
+/* Define to 1 if you have the declaration of `RTE_LIBRTE_VHOST_NUMA', and to
+   0 if you don't. */
+#mesondefine HAVE_DECL_RTE_LIBRTE_VHOST_NUMA
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#mesondefine HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
+   don't. */
+#mesondefine HAVE_DECL_SYS_SIGLIST
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#mesondefine HAVE_DLFCN_H
+
+/* Define to 1 if the C compiler and linker supports the GCC 4.0+ atomic
+   built-ins. */
+#mesondefine HAVE_GCC4_ATOMICS
+
+/* Define to 1 if you have the `getloadavg' function. */
+#mesondefine HAVE_GETLOADAVG
+
+/* Define to 1 if you have the `getmntent_r' function. */
+#mesondefine HAVE_GETMNTENT_R
+
+/* Define to 1 if pthread_setname_np() is available and takes 2 parameters
+   (like glibc). */
+/* MSR: fix this */
+#mesondefine HAVE_GLIBC_PTHREAD_SETNAME_NP
+/* #define HAVE_GLIBC_PTHREAD_SETNAME_NP 1 */
+/* Define to 1 if net/if_dl.h is available. */
+#mesondefine HAVE_IF_DL
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#mesondefine HAVE_INTTYPES_H
+
+/* Define to 1 if libcap-ng is available. */
+#mesondefine HAVE_LIBCAPNG
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#mesondefine HAVE_LIBSOCKET
+
+/* Define to 1 if you have the <libunwind.h> header file. */
+#mesondefine HAVE_LIBUNWIND_H
+
+/* Define to 1 if you have the <linux/if_ether.h> header file. */
+#mesondefine HAVE_LINUX_IF_ETHER_H
+
+/* Define to 1 if you have the <linux/net_namespace.h> header file. */
+#mesondefine HAVE_LINUX_NET_NAMESPACE_H
+
+/* Define to 1 if you have the <linux/perf_event.h> header file. */
+#mesondefine HAVE_LINUX_PERF_EVENT_H
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+#mesondefine HAVE_LINUX_TYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#mesondefine HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mlockall' function. */
+#mesondefine HAVE_MLOCKALL
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#mesondefine HAVE_MNTENT_H
+
+/* Define to 1 if pthread_setname_np() is available and takes 3 parameters
+   (like NetBSD). */
+#mesondefine HAVE_NETBSD_PTHREAD_SETNAME_NP
+
+/* Define to 1 if Netlink protocol is available. */
+#mesondefine HAVE_NETLINK
+
+/* Define to 1 if you have the <net/if_mib.h> header file. */
+#mesondefine HAVE_NET_IF_MIB_H
+
+/* Define to 1 if struct nla_bitfield32 is available. */
+#mesondefine HAVE_NLA_BITFIELD32
+
+/* Define to 1 if OpenSSL is installed. */
+#mesondefine HAVE_OPENSSL
+
+/* Define to 1 if `posix_memalign' works. */
+#mesondefine HAVE_POSIX_MEMALIGN
+
+/* Define if compiler supports #pragma message directive */
+#mesondefine HAVE_PRAGMA_MESSAGE
+
+/* Define to 1 if you have the `pthread_set_name_np' function. */
+#mesondefine HAVE_PTHREAD_SET_NAME_NP
+
+/* Define to 1 if you have the `pthread_spin_lock' function. */
+#mesondefine HAVE_PTHREAD_SPIN_LOCK
+/* #define HAVE_PTHREAD_SPIN_LOCK 1 */
+/* Define to 1 if you have the <rte_config.h> header file. */
+#mesondefine HAVE_RTE_CONFIG_H
+
+/* Define to 1 if SCTP_CONNTRACK_HEARTBEAT_SENT is available. */
+#mesondefine HAVE_SCTP_CONNTRACK_HEARTBEATS
+
+/* Define to 1 if you have the `sendmmsg' function. */
+#mesondefine HAVE_SENDMMSG
+
+/* Define to 1 if you have the `statvfs' function. */
+#mesondefine HAVE_STATVFS
+
+/* Define to 1 if you have the <stdatomic.h> header file. */
+#mesondefine HAVE_STDATOMIC_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#mesondefine HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#mesondefine HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#mesondefine HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strerror_r' function. */
+#mesondefine HAVE_STRERROR_R
+
+/* Define to 1 if you have the <strings.h> header file. */
+#mesondefine HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#mesondefine HAVE_STRING_H
+
+/* Define to 1 if you have the `strnlen' function. */
+#mesondefine HAVE_STRNLEN
+
+/* Define if strtok_r macro segfaults on some inputs */
+#mesondefine HAVE_STRTOK_R_BUG
+
+/* Define to 1 if `ifr_flagshigh' is a member of `struct ifreq'. */
+#mesondefine HAVE_STRUCT_IFREQ_IFR_FLAGSHIGH
+
+/* Define to 1 if `msg_len' is a member of `struct mmsghdr'. */
+#mesondefine HAVE_STRUCT_MMSGHDR_MSG_LEN
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+#mesondefine HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
+
+/* Define to 1 if `st_mtimensec' is a member of `struct stat'. */
+#mesondefine HAVE_STRUCT_STAT_ST_MTIMENSEC
+
+/* Define to 1 if `st_mtim.tv_nsec' is a member of `struct stat'. */
+#mesondefine HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+
+/* Define to 1 if `firstuse' is a member of `struct tcf_t'. */
+#mesondefine HAVE_STRUCT_TCF_T_FIRSTUSE
+
+/* Define to 1 if the system has the type `struct timespec'. */
+#mesondefine HAVE_STRUCT_TIMESPEC
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#mesondefine HAVE_SYS_STATVFS_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#mesondefine HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#mesondefine HAVE_SYS_TYPES_H
+
+/* Define to 1 if HAVE_TCA_MPLS_TTL is available. */
+#mesondefine HAVE_TCA_MPLS_TTL
+
+/* Define to 1 if TCA_PEDIT_KEY_EX_HDR_TYPE_UDP is available. */
+#mesondefine HAVE_TCA_PEDIT_KEY_EX_HDR_TYPE_UDP
+
+/* Define to 1 if TCA_POLICE_PKTRATE64 is available. */
+#mesondefine HAVE_TCA_POLICE_PKTRATE64
+
+/* Define to 1 if TCA_SKBEDIT_FLAGS is available. */
+#mesondefine HAVE_TCA_SKBEDIT_FLAGS
+
+/* Define to 1 if TCA_TUNNEL_KEY_ENC_TTL is available. */
+#mesondefine HAVE_TCA_TUNNEL_KEY_ENC_TTL
+
+/* Define to 1 if TCA_VLAN_PUSH_VLAN_PRIORITY is available. */
+#mesondefine HAVE_TCA_VLAN_PUSH_VLAN_PRIORITY
+
+/* Define to 1 if the C compiler and linker supports the C11 thread_local
+   macro defined in <threads.h>. */
+#mesondefine HAVE_THREAD_LOCAL
+
+/* Define to 1 if unbound is detected. */
+#mesondefine HAVE_UNBOUND
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#mesondefine HAVE_UNISTD_H
+
+/* Define to 1 if unwind is detected. */
+#mesondefine HAVE_UNWIND
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#mesondefine HAVE_VALGRIND_VALGRIND_H
+
+/* Define to 1 if __virtio16 is available. */
+#mesondefine HAVE_VIRTIO_TYPES
+
+/* XDP need wakeup support detected in xsk.h. */
+#mesondefine HAVE_XDP_NEED_WAKEUP
+
+/* Define to 1 if the C compiler and linker supports the GCC __thread
+   extenions. */
+#mesondefine HAVE___THREAD
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#mesondefine LT_OBJDIR
+
+/* Define to 1 if OpenSSL supports Server Name Indication (SNI). */
+#mesondefine OPENSSL_SUPPORTS_SNI
+
+/* Name of package */
+#mesondefine PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#mesondefine PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#mesondefine PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#mesondefine PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#mesondefine PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#mesondefine PACKAGE_URL
+
+/* Define to the version of this package. */
+#mesondefine PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#mesondefine STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#mesondefine STRERROR_R_CHAR_P
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+#mesondefine _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+#mesondefine _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+#mesondefine _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+#mesondefine _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+#mesondefine __EXTENSIONS__
+#endif
+
+/* Version number of package */
+#mesondefine VERSION
+
+/* NUMA Aware vHost support detected in DPDK. */
+#mesondefine VHOST_NUMA
+
+/* System uses the Visual Studio build target. */
+#mesondefine VSTUDIO_DDK
+
+/* Define to 1 if building on WIN32. */
+#mesondefine WIN32
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#mesondefine WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#mesondefine _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#mesondefine _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#mesondefine _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#mesondefine _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#mesondefine _POSIX_SOURCE
+
+/* MSR: fix this hack */
+#ifndef WIN32
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE 1
+# endif
+/* Define __USE_POSIX if you have the <bits/posix1_lim.h> header file
+   and you are on Linux (or other POSIX compliant OS) */
+/* #mesondefine __USE_POSIX */
+
+/* Define __USE_XOPEN if you have the <bits/xopen_lim.h> header file
+   and you are on Linux (or other POSIX compliant OS) */
+/* #mesondefine __USE_XOPEN */
+#endif
+
+/* MSR: fix this - move this to the build file itself */
+#ifdef WIN32
+#include "include/windows/windefs.h"
+#endif
+
+/* MSR: use meson checks to enable/disable this
+   and still not clear why it does not work on Linux
+   or maybe I should include this header only in Windows */
+#if defined(__clang__) && defined(WIN32)
+#include <intrin.h>
+#endif
+
+#mesondefine HAVE_THREAD_SAFETY
diff --git a/include/meson.build b/include/meson.build
new file mode 100644
index 000000000..65ac6b5e7
--- /dev/null
+++ b/include/meson.build
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+include_odp_netlink_h = custom_target(
+    'odp-netlink.h',
+    input : meson.project_source_root() + 
'/datapath/linux/compat/include/linux/openvswitch.h',
+    output : 'odp-netlink.h',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-odp-netlink-h.py',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+include_odp_netlink_macros_h = custom_target(
+    'odp-netlink-macros.h',
+    input : include_odp_netlink_h,
+    output : 'odp-netlink-macros.h',
+    command : [
+        prog_python,
+        meson.project_source_root() + 
'/build-aux/extract-odp-netlink-macros-h.py',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+subdir('openvswitch')
diff --git a/include/openvswitch/meson.build b/include/openvswitch/meson.build
new file mode 100644
index 000000000..e6365cbc3
--- /dev/null
+++ b/include/openvswitch/meson.build
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+configure_file(
+    input : meson.project_source_root() + '/include/openvswitch/version.h.in',
+    output : 'version.h',
+    configuration : conf_version,
+)
diff --git a/lib/dirs.c.in.meson b/lib/dirs.c.in.meson
new file mode 100644
index 000000000..d3459ab2e
--- /dev/null
+++ b/lib/dirs.c.in.meson
@@ -0,0 +1,113 @@
+@BANNER@
+#line 2 "@srcdir@/lib/dirs.c.in.meson"
+/*
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <config.h>
+#include "dirs.h"
+#include <stdlib.h>
+#include "ovs-thread.h"
+#include "util.h"
+
+struct directory {
+    const char *value;          /* Actual value; NULL if not yet determined. */
+    const char *default_value;  /* Default value. */
+    const char *var_name;       /* Environment variable to override default. */
+    struct ovsthread_once once; /* Ensures 'value' gets initialized once. */
+};
+
+static const char *
+get_dir(struct directory *d)
+{
+    if (ovsthread_once_start(&d->once)) {
+        d->value = getenv(d->var_name);
+        if (!d->value || !d->value[0]) {
+            d->value = d->default_value;
+        }
+        ovsthread_once_done(&d->once);
+    }
+    return d->value;
+}
+
+const char *
+ovs_sysconfdir(void)
+{
+    static struct directory d = {
+        NULL, @sysconfdir@, "OVS_SYSCONFDIR", OVSTHREAD_ONCE_INITIALIZER
+    };
+
+    return get_dir(&d);
+}
+
+const char *
+ovs_pkgdatadir(void)
+{
+    static struct directory d = {
+        NULL, @pkgdatadir@, "OVS_PKGDATADIR", OVSTHREAD_ONCE_INITIALIZER
+    };
+
+    return get_dir(&d);
+}
+
+const char *
+ovs_rundir(void)
+{
+    static struct directory d = {
+        NULL, @RUNDIR@, "OVS_RUNDIR", OVSTHREAD_ONCE_INITIALIZER
+    };
+
+    return get_dir(&d);
+}
+
+const char *
+ovs_logdir(void)
+{
+    static struct directory d = {
+        NULL, @LOGDIR@, "OVS_LOGDIR", OVSTHREAD_ONCE_INITIALIZER
+    };
+
+    return get_dir(&d);
+}
+
+const char *
+ovs_dbdir(void)
+{
+    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
+    static const char *dbdir;
+
+    if (ovsthread_once_start(&once)) {
+        dbdir = getenv("OVS_DBDIR");
+        if (!dbdir || !dbdir[0]) {
+            char *sysconfdir = getenv("OVS_SYSCONFDIR");
+
+            dbdir = (sysconfdir
+                     ? xasprintf("%s/openvswitch", sysconfdir)
+                     : @DBDIR@);
+        }
+        ovsthread_once_done(&once);
+    }
+    return dbdir;
+}
+
+const char *
+ovs_bindir(void)
+{
+    static struct directory d = {
+        NULL, @bindir@, "OVS_BINDIR", OVSTHREAD_ONCE_INITIALIZER
+    };
+
+    return get_dir(&d);
+}
diff --git a/lib/meson.build b/lib/meson.build
new file mode 100644
index 000000000..42e0bbfd6
--- /dev/null
+++ b/lib/meson.build
@@ -0,0 +1,460 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+lib_ovsdb_server_idl_c = custom_target(
+    'ovsdb-server-idl.c',
+    input : lib_ovsdb_server_idl_ovsidl,
+    output : 'ovsdb-server-idl.c',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-source',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+lib_ovsdb_server_idl_h = custom_target(
+    'ovsdb-server-idl.h',
+    input : lib_ovsdb_server_idl_ovsidl,
+    output : 'ovsdb-server-idl.h',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-header',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+lib_vswitch_idl_c = custom_target(
+    'vswitch-idl.c',
+    input : lib_vswitch_idl_ovsidl,
+    output : 'vswitch-idl.c',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-source',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+lib_vswitch_idl_h = custom_target(
+    'vswitch-idl.h',
+    input : lib_vswitch_idl_ovsidl,
+    output : 'vswitch-idl.h',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-header',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+#sources = files(
+#    'dpif-netdev-lookup-avx512-gather.c',
+#    'dpif-netdev-extract-avx512.c',
+#    'dpif-netdev-avx512.c',
+#)
+#
+#deps = []
+#
+#mapfile = '../openvswitchavx512.map'
+#vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+#openvswitchavx512 = library(
+#  'openvswitchavx512', sources,
+#  dependencies : deps,
+#  include_directories : global_inc,
+#  c_args : [
+#    '-mavx512f',
+#    '-mavx512bw',
+#    '-mavx512dq',
+#    '-mbmi',
+#    '-mbmi2',
+#    '-fPIC',
+#  ],
+#  link_args : ['-Wl,--no-undefined', vflag],
+#  link_depends : mapfile,
+#  version : as_version,
+#  soversion : as_soversion,
+#)
+#
+
+sources = files(
+    'sflow_agent.c',
+    'sflow_sampler.c',
+    'sflow_poller.c',
+    'sflow_receiver.c',
+)
+
+deps = []
+
+mapfile = meson.project_build_root() + '/sflow.map'
+vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+sflow = library(
+  'sflow', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined', vflag],
+  link_depends : mapfile,
+  version : as_version,
+  soversion : as_soversion,
+)
+
+# lib/meta-flow.inc
+lib_meta_flow_inc = custom_target(
+    'meta-flow.inc',
+    input : meson.project_source_root() + '/include/openvswitch/meta-flow.h',
+    output : 'meta-flow.inc',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-fields',
+        'meta-flow',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+# lib/nx-match.inc
+lib_nx_match_inc = custom_target(
+    'nx-match.inc',
+    input : meson.project_source_root() + '/include/openvswitch/meta-flow.h',
+    output : 'nx-match.inc',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-fields',
+        'nx-match',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+# lib/ofc-actions.inc1
+lib_ofp_actions_inc1 = custom_target(
+    'ofp-actions.inc1',
+    input : meson.project_source_root() + '/lib/ofp-actions.c',
+    output : 'ofp-actions.inc1',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-actions',
+        'prototypes',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+# lib/ofc-actions.inc2
+lib_ofp_actions_inc2 = custom_target(
+    'ofp-actions.inc2',
+    input : meson.project_source_root() + '/lib/ofp-actions.c',
+    output : 'ofp-actions.inc2',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-actions',
+        'definitions',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+# lib/ofp-errors.inc
+lib_ofp_errors_inc = custom_target(
+    'ofp-errors.inc',
+    input : [
+        meson.project_source_root() + '/include/openvswitch/ofp-errors.h',
+        meson.project_source_root() + '/include/openflow/openflow-common.h',
+    ],
+    output : 'ofp-errors.inc',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-errors',
+        '@INPUT0@',
+        '@INPUT1@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+# lib/ofp-msgs.inc
+lib_ofp_msgs_inc = custom_target(
+    'ofp-msgs.inc',
+    input : [
+        meson.project_source_root() + '/include/openvswitch/ofp-msgs.h',
+    ],
+    output : 'ofp-msgs.inc',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/extract-ofp-msgs',
+        '@INPUT@',
+        'lib/ofp-msgs.inc',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+sources = files(
+       'aes128.c',
+       'backtrace.c',
+       'bfd.c',
+       'bundle.c',
+       'byteq.c',
+       'cfm.c',
+       'classifier.c',
+       'ccmap.c',
+       'cmap.c',
+       'colors.c',
+       'command-line.c',
+       'connectivity.c',
+       'conntrack-icmp.c',
+       'conntrack-tcp.c',
+       'conntrack-tp.c',
+       'conntrack-other.c',
+       'conntrack.c',
+       'coverage.c',
+       'crc32c.c',
+       'csum.c',
+       'ct-dpif.c',
+       'daemon.c',
+       'db-ctl-base.c',
+       'dummy.c',
+       'dpctl.c',
+       'dp-packet.c',
+       'dpif-netdev-extract-study.c',
+       'dpif-netdev-lookup.c',
+       'dpif-netdev-lookup-autovalidator.c',
+       'dpif-netdev-lookup-generic.c',
+       'dpif-netdev.c',
+       'dpif-netdev-private-dfc.c',
+       'dpif-netdev-private-dpif.c',
+       'dpif-netdev-private-extract.c',
+       'dpif-netdev-perf.c',
+       'dpif.c',
+       'heap.c',
+       'dynamic-string.c',
+       'entropy.c',
+       'fat-rwlock.c',
+       'fatal-signal.c',
+       'flow.c',
+       'guarded-list.c',
+       'hash.c',
+       'hindex.c',
+       'hmap.c',
+       'hmapx.c',
+       'id-pool.c',
+       'if-notifier-manual.c',
+       'ipf.c',
+       'jhash.c',
+       'json.c',
+       'jsonrpc.c',
+       'lacp.c',
+       'learn.c',
+       'learning-switch.c',
+       'lockfile.c',
+       'mac-learning.c',
+       'match.c',
+       'mcast-snooping.c',
+       'memory.c',
+       'meta-flow.c',
+       'multipath.c',
+       'namemap.c',
+       'netdev-dummy.c',
+       'netdev-offload.c',
+       'netdev-vport.c',
+       'netdev.c',
+       'netlink.c',
+       'nx-match.c',
+       'object-collection.c',
+       'odp-execute.c',
+       'odp-util.c',
+       'ofp-actions.c',
+       'ofp-bundle.c',
+       'ofp-connection.c',
+       'ofp-ed-props.c',
+       'ofp-errors.c',
+       'ofp-flow.c',
+       'ofp-group.c',
+       'ofp-ipfix.c',
+       'ofp-match.c',
+       'ofp-meter.c',
+       'ofp-monitor.c',
+       'ofp-msgs.c',
+       'ofp-packet.c',
+       'ofp-parse.c',
+       'ofp-port.c',
+       'ofp-print.c',
+       'ofp-prop.c',
+       'ofp-protocol.c',
+       'ofp-queue.c',
+       'ofp-switch.c',
+       'ofp-table.c',
+       'ofp-util.c',
+       'ofp-version-opt.c',
+       'ofpbuf.c',
+       'ovs-atomic-locked.c',
+       'ovs-lldp.c',
+       'ovs-numa.c',
+       'ovs-rcu.c',
+       'ovs-replay.c',
+       'ovs-router.c',
+       'ovs-thread.c',
+       'ovsdb-cs.c',
+       'ovsdb-data.c',
+       'ovsdb-error.c',
+       'ovsdb-idl.c',
+       'ovsdb-map-op.c',
+       'ovsdb-set-op.c',
+       'ovsdb-condition.c',
+       'ovsdb-parser.c',
+       'ovsdb-session.c',
+       'ovsdb-types.c',
+       'ox-stat.c',
+       'packets.c',
+       'pcap-file.c',
+       'perf-counter.c',
+       'stopwatch.c',
+       'poll-loop.c',
+       'process.c',
+       'pvector.c',
+       'random.c',
+       'rconn.c',
+       'reconnect.c',
+       'rstp.c',
+       'rstp-state-machines.c',
+       'seq.c',
+       'sha1.c',
+       'shash.c',
+       'simap.c',
+       'skiplist.c',
+       'smap.c',
+       'socket-util.c',
+       'sort.c',
+       'sset.c',
+       'stp.c',
+       'stream-fd.c',
+       'stream-replay.c',
+       'stream-tcp.c',
+       'stream.c',
+       'stdio.c',
+       'string.c',
+       'svec.c',
+       'syslog-direct.c',
+       'syslog-libc.c',
+       'syslog-null.c',
+       'table.c',
+       'timer.c',
+       'timeval.c',
+       'tnl-neigh-cache.c',
+       'tnl-ports.c',
+       'netdev-native-tnl.c',
+       'token-bucket.c',
+       'tun-metadata.c',
+       'unicode.c',
+       'unixctl.c',
+       'userspace-tso.c',
+       'util.c',
+       'uuid.c',
+       'vconn-stream.c',
+       'vconn.c',
+       'vlan-bitmap.c',
+       'vlog.c',
+       'lldp/lldp.c',
+       'lldp/lldpd.c',
+       'lldp/lldpd-structs.c',
+       'dpdk-stub.c',
+    'async-append-null.c', # no POSIX_AIO
+    'stream-nossl.c',
+    'dns-resolve.h',
+    'dns-resolve-stub.c',
+)
+
+if build_machine.system() == 'windows'
+    sources += files(
+        'daemon-windows.c',
+        'getopt_long.c',
+        'getrusage-windows.c',
+        'latch-windows.c',
+        'route-table-stub.c',
+        'if-notifier-stub.c',
+        'stream-windows.c',
+        'strsep.c',
+        'dpif-netlink.c',
+        'netdev-windows.c',
+        'netlink-conntrack.c',
+        'netlink-notifier.c',
+        'netlink-socket.c',
+        'wmi.c',
+    )
+endif
+
+if build_machine.system() == 'linux'
+    sources += files(
+        'daemon-unix.c',
+        'latch-unix.c',
+        'signals.c',
+        'socket-util-unix.c',
+        'stream-unix.c',
+        'dpif-netlink.c',
+        'dpif-netlink-rtnl.c',
+        'if-notifier.c',
+        'netdev-linux.c',
+        'netdev-offload-tc.c',
+        'netlink-conntrack.c',
+        'netlink-notifier.c',
+        'netlink-socket.c',
+        'rtnetlink.c',
+        'route-table.c',
+        'tc.c',
+    )
+endif
+
+sources += [
+    meson.project_build_root() + '/' + 'dirs.c',
+    lib_ovsdb_server_idl_c,
+    lib_ovsdb_server_idl_h,
+    lib_vswitch_idl_c,
+    lib_vswitch_idl_h,
+    include_odp_netlink_h,
+    include_odp_netlink_macros_h,
+]
+
+sources += [
+    lib_meta_flow_inc,
+    lib_nx_match_inc,
+    lib_ofp_actions_inc1,
+    lib_ofp_actions_inc2,
+    lib_ofp_errors_inc,
+    lib_ofp_msgs_inc,
+]
+
+deps = [ thread_dep ]
+
+if build_machine.system() == 'windows'
+    deps += windows_deps
+endif
+
+mapfile = meson.project_build_root() + '/openvswitch.map'
+vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+openvswitch = library(
+    'openvswitch', sources,
+    dependencies : deps,
+    include_directories : global_inc,
+    link_args : ['-Wl,--no-undefined', vflag],
+    link_depends : mapfile,
+#    link_with : openvswitchavx512,
+    version : as_version,
+    soversion : as_soversion,
+)
+
+#global_libs += openvswitchavx512
+global_libs += sflow
+global_libs += openvswitch
diff --git a/lib/openvswitch.map.in b/lib/openvswitch.map.in
new file mode 100644
index 000000000..0662ec806
--- /dev/null
+++ b/lib/openvswitch.map.in
@@ -0,0 +1,4 @@
+libopenvswitch_@SOVERSION@ {
+global:
+    *;
+};
diff --git a/lib/sflow.map.in b/lib/sflow.map.in
new file mode 100644
index 000000000..9956cf5fd
--- /dev/null
+++ b/lib/sflow.map.in
@@ -0,0 +1,4 @@
+libsflow_@SOVERSION@ {
+global:
+    *;
+};
diff --git a/meson.build b/meson.build
new file mode 100644
index 000000000..b750d8f2f
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,371 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+# Meson Newer Version Justification
+# Version 0.56.0: enables 'project_build_root' for 'meson' object
+# Version 0.57.0: enables use of 'env' in 'custom_target'
+# Version 0.59.0: enables use of 'feed' in 'custom_target'
+
+project('openvswitch', 'C',
+        version: '2.16.90',
+        license: 'Apache2.0',
+        default_options: ['buildtype=release', 'default_library=static'],
+        meson_version: '>= 0.59.0'
+)
+
+as_version = meson.project_version()
+ver_arr = as_version.split('.')
+
+as_current_version  = ver_arr[0]
+as_revision_version = ver_arr[1]
+as_age_version      = ver_arr[2]
+
+as_soversion = '0'
+conf_soversion = configuration_data()
+conf_soversion.set('SOVERSION', as_soversion)
+
+cc = meson.get_compiler('c')
+
+prog_python = import('python').find_installation('python3')
+python_env = environment()
+python_env.set('PYTHONPATH', meson.project_source_root() + '/python')
+# Prevent creation of *.pyc files in 'python/build/__pycache__' directory
+python_env.set('PYTHONDONTWRITEBYTECODE', 'yes')
+cdata = configuration_data()
+
+if build_machine.system() == 'linux'
+    m_dep = cc.find_library('m', required : true)
+    thread_dep = dependency('threads', required : true)
+endif
+
+if build_machine.system() == 'windows'
+    if get_option('with-pthread') == 'optval'
+        error('"with-pthread" is a required option on Windows')
+    endif
+    win_pthread_path = get_option('with-pthread')
+    thread_dep = cc.find_library(
+        'pthreadVC3-w32',
+        dirs : [
+            # Some may place DLL and LIB files under 'lib' subfolder
+            win_pthread_path,
+            win_pthread_path + '/lib',
+        ],
+        required : true,
+    )
+    windows_libs = [
+        'Ws2_32', # Resolve symbols for Winsock
+        'WbemUuid',
+        'Shlwapi',
+        'Iphlpapi',
+    ]
+       windows_deps = []
+    foreach w : windows_libs
+        windows_deps += cc.find_library(
+            w,
+            required : true,
+        )
+    endforeach
+endif
+
+check_headers = [
+  ['HAVE_BITS_FLOATN_COMMON_H', 'bits/floatn/common.h'],
+  ['HAVE_DLFCN_H', 'dlfcn.h'],
+  ['HAVE_INTTYPES_H', 'inttypes.h'],
+  ['HAVE_LIBUNWIND_H', 'libunwind.h'],
+  ['HAVE_LINUX_IF_ETHER_H', 'linux/if/ether.h'],
+  ['HAVE_LINUX_NET_NAMESPACE_H', 'linux/net/namespace.h'],
+  ['HAVE_LINUX_PERF_EVENT_H', 'linux/perf/event.h'],
+  ['HAVE_LINUX_TYPES_H', 'linux/types.h'],
+  ['HAVE_MEMORY_H', 'memory.h'],
+  ['HAVE_MNTENT_H', 'mntent.h'],
+  ['HAVE_NET_IF_MIB_H', 'net/if/mib.h'],
+  ['HAVE_NETLINK', 'linux/netlink.h'],
+  ['HAVE_RTE_CONFIG_H', 'rte/config.h'],
+  ['HAVE_STDATOMIC_H', 'stdatomic.h'],
+  ['HAVE_STDINT_H', 'stdint.h'],
+  ['HAVE_STDIO_H', 'stdio.h'],
+  ['HAVE_STDLIB_H', 'stdlib.h'],
+  ['HAVE_STRINGS_H', 'strings.h'],
+  ['HAVE_STRING_H', 'string.h'],
+  ['HAVE_SYS_STATVFS_H', 'sys/statvfs.h'],
+  ['HAVE_SYS_STAT_H', 'sys/stat.h'],
+  ['HAVE_SYS_TYPES_H', 'sys/types.h'],
+  ['HAVE_UNISTD_H', 'unistd.h'],
+  ['HAVE_VALGRIND_VALGRIND_H', 'valgrind/valgrind.h'],
+]
+
+foreach h : check_headers
+  if cc.has_header(h.get(1))
+    cdata.set(h.get(0), 1)
+  endif
+endforeach
+
+check_functions = [
+# check token ['HAVE_AF_XDP']
+# check token ['HAVE_ATOMIC']
+# check token ['HAVE_BACKTRACE']
+  ['HAVE_CLOCK_GETTIME', 'clock_gettime', '#include<time.h>', []],
+# check token ['HAVE_CXX11']
+# check token ['HAVE_DECL_MALLOC_TRIM']
+# check token ['HAVE_DECL_RTE_EAL_NUMA_AWARE_HUGEPAGES']
+# check token ['HAVE_DECL_RTE_LIBRTE_VHOST_NUMA']
+# check token ['HAVE_DECL_STRERROR_R']
+# check token ['HAVE_DECL_SYS_SIGLIST']
+# check token ['HAVE_GCC4_ATOMICS']
+  ['HAVE_GETLOADAVG', 'getloadavg', '#include<stdlib.h>', []],
+  ['HAVE_GETMNTENT_R', 'getmntent_r', '#include<mntent.h>', []],
+# check token ['HAVE_GLIBC_PTHREAD_SETNAME_NP']
+# check token ['HAVE_IF_DL']
+# check token ['HAVE_LIBCAPNG']
+# check token ['HAVE_LIBSOCKET']
+# check token ['HAVE_MLOCKALL']
+# check token ['HAVE_NETBSD_PTHREAD_SETNAME_NP']
+# check token ['HAVE_NETLINK']
+# check token ['HAVE_NLA_BITFIELD32']
+# check token ['HAVE_OPENSSL']
+  ['HAVE_POSIX_MEMALIGN', 'posix_memalign', '#include<stdlib.h>', []],
+# check token ['HAVE_PRAGMA_MESSAGE']
+  ['HAVE_PTHREAD_SET_NAME_NP', 'pthread_set_name_np', '#include<pthread.h>', 
[]],
+# check token ['HAVE_PTHREAD_SPIN_LOCK']
+# check token ['HAVE_SCTP_CONNTRACK_HEARTBEATS']
+  ['HAVE_SENDMMSG', 'sendmmsg', '#include<sys/socket.h>', ['-D_GNU_SOURCE']],
+  ['HAVE_STATVFS', 'statvfs', '#include<sys/statvfs.h>', []],
+  ['HAVE_STRERROR_R', 'strerror_r', '#include<string.h>', []],
+# check token ['HAVE_STRNLEN']
+# check token ['HAVE_STRTOK_R_BUG']
+# check token ['HAVE_STRUCT_IFREQ_IFR_FLAGSHIGH']
+# check token ['HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID']
+# check token ['HAVE_STRUCT_STAT_ST_MTIMENSEC']
+# check token ['HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC']
+# check token ['HAVE_STRUCT_TCF_T_FIRSTUSE']
+# check token ['HAVE_STRUCT_TIMESPEC']
+# check token ['HAVE_TCA_MPLS_TTL']
+# check token ['HAVE_TCA_PEDIT_KEY_EX_HDR_TYPE_UDP']
+# check token ['HAVE_TCA_POLICE_PKTRATE64']
+# check token ['HAVE_TCA_SKBEDIT_FLAGS']
+# check token ['HAVE_TCA_TUNNEL_KEY_ENC_TTL']
+# check token ['HAVE_TCA_VLAN_PUSH_VLAN_PRIORITY']
+# check token ['HAVE_THREAD_LOCAL']
+# check token ['HAVE_UNBOUND']
+# check token ['HAVE_UNWIND']
+# check token ['HAVE_VIRTIO_TYPES']
+# check token ['HAVE_XDP_NEED_WAKEUP']
+# check token ['HAVE___THREAD']
+]
+
+foreach f : check_functions
+  if cc.has_function(f.get(1), prefix : f.get(2), args : f.get(3))
+    cdata.set(f.get(0), 1)
+  endif
+endforeach
+
+check_structs = [
+  ['HAVE_NLA_BITFIELD32', 'value', 'struct nla_bitfield32', 
'#include<linux/netlink.h>', []],
+  ['HAVE_STRUCT_MMSGHDR_MSG_LEN', 'msg_len', 'struct mmsghdr', 
'#include<sys/socket.h>', ['-D_GNU_SOURCE']],
+]
+
+foreach s : check_structs
+  if cc.has_member(s.get(2), s.get(1), prefix : s.get(3), args : s.get(4))
+    cdata.set(s.get(0), 1)
+  endif
+endforeach
+
+cdata.set('PACKAGE_STRING', '"' + meson.project_name() + ' ' + as_version + 
'"')
+cdata.set('VERSION', '"' + as_version + '"')
+
+if build_machine.system() == 'windows'
+       cdata.set('WIN32', 1)
+endif
+
+configure_file(input : 'config.h.meson',
+  output : 'config.h',
+  configuration : cdata)
+
+header_files = [
+    ['lib', 'string.h'],
+    ['lib', 'stdio.h'],
+]
+
+conf_headers = configuration_data()
+conf_headers.set('INCLUDE_NEXT', 'include_next')
+conf_headers.set_quoted('NEXT_STDIO_H', 'stdio.h')
+conf_headers.set_quoted('NEXT_STRING_H', 'string.h')
+
+foreach h : header_files
+    configure_file(
+        input : h.get(0) + '/' + h.get(1) + '.in',
+        output : h.get(1),
+        configuration : conf_headers,
+    )
+endforeach
+
+
+map_files = [
+    ['lib', 'sflow.map'],
+    ['lib', 'openvswitch.map'],
+    ['ovsdb', 'ovsdb.map'],
+    ['ofproto', 'ofproto.map'],
+    ['vtep', 'vtep.map'],
+]
+
+foreach m : map_files
+    configure_file(
+        input : m.get(0) + '/' + m.get(1) + '.in',
+        output : m.get(1),
+        configuration : conf_soversion,
+    )
+endforeach
+
+ovs_lib_version = '0'
+ovs_lib_revision = '0'
+ovs_lib_age = '0'
+
+conf_version = configuration_data()
+conf_version.set('PACKAGE_STRING', meson.project_name() + ' ' + as_version)
+conf_version.set('PACKAGE_VERSION', as_version)
+conf_version.set('LT_CURRENT', ovs_lib_version)
+conf_version.set('LT_REVISION', ovs_lib_revision)
+conf_version.set('LT_AGE', ovs_lib_age)
+
+subdir('include')
+
+# MSR: this is temporary hard-coded
+# though values are taken from the 'config.log'
+# however, most of it should be coming from
+# supplied options and have default values
+cin_processing = configuration_data()
+cin_processing.set('BANNER', '/* -*- mode: c; buffer-read-only: t -*- */') # 
this a temporary hack and may break backwards compatability with autotools
+cin_processing.set('srcdir', meson.project_source_root())
+cin_processing.set_quoted('LOGDIR', '/var/log/openvswitch')
+cin_processing.set_quoted('RUNDIR', '/var/run/openvswitch')
+cin_processing.set_quoted('DBDIR', '/etc/openvswitch')
+cin_processing.set_quoted('bindir', '/bin')
+cin_processing.set_quoted('sysconfdir', '/etc')
+cin_processing.set_quoted('pkgdatadir', '/usr/share/openvswitch')
+
+subdir('python/ovs')
+
+c_in_files = [
+    ['lib', 'dirs.c'],
+]
+
+foreach cin : c_in_files
+    configure_file(
+        input : cin.get(0) + '/' + cin.get(1) + '.in.meson',
+        output : cin.get(1),
+        configuration : cin_processing,
+    )
+endforeach
+
+global_inc = include_directories(
+    '.',
+    'include',
+    'lib',
+)
+
+if build_machine.system() == 'windows'
+    global_inc = include_directories(
+               '.',
+               'include',
+               'lib',
+               'include/windows',
+               'datapath-windows/include',
+        # Some may place header files under 'include' subfolder
+               win_pthread_path,
+        win_pthread_path + '/include',
+       )
+endif
+
+global_libs = []
+
+add_project_arguments('-Wstrict-prototypes', language : 'c')
+add_project_arguments(
+    '-Wall',
+    '-Wextra',
+    '-Wno-sign-compare',
+    '-Wpointer-arith',
+    '-Wformat',
+    '-Wformat-security',
+    '-Wswitch-enum',
+    '-Wunused-parameter',
+    '-Wbad-function-cast',
+    '-Wcast-align',
+    '-Wstrict-prototypes',
+    '-Wold-style-definition',
+    '-Wmissing-prototypes',
+    '-Wmissing-field-initializers',
+    '-fno-strict-aliasing',
+    '-Wswitch-bool',
+    '-Wlogical-not-parentheses',
+    '-Wsizeof-array-argument',
+    '-Wshift-negative-value',
+#    '-Qunused-arguments',
+    '-Wshadow',
+    '-Wno-null-pointer-arithmetic',
+#    '-Warray-bounds-pointer-arithmetic',
+    language : 'c',
+)
+
+install_prefix = '/usr/local/'
+
+lib_ovsdb_server_idl_ovsidl = custom_target(
+    'ovsdb-server-idl.ovsidl',
+    input : [
+        meson.project_source_root() + '/ovsdb/_server.ovsschema',
+        meson.project_source_root() + '/lib/ovsdb-server-idl.ann',
+    ],
+    output : 'ovsdb-server-idl.ovsidl',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'annotate',
+        '@INPUT0@',
+        '@INPUT1@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+lib_vswitch_idl_ovsidl = custom_target(
+    'vswitch-idl.ovsidl',
+    input : [
+        meson.project_source_root() + '/vswitchd/vswitch.ovsschema',
+        meson.project_source_root() + '/lib/vswitch-idl.ann',
+    ],
+    output : 'vswitch-idl.ovsidl',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'annotate',
+        '@INPUT0@',
+        '@INPUT1@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+vtep_vtep_idl_ovsidl = custom_target(
+    'vtep-idl.ovsidl',
+    input : [
+        meson.project_source_root() + '/vtep/vtep.ovsschema',
+        meson.project_source_root() + '/vtep/vtep-idl.ann',
+    ],
+    output : 'vtep-idl.ovsidl',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'annotate',
+        '@INPUT0@',
+        '@INPUT1@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+subdir('lib')
+subdir('ofproto')
+subdir('utilities')
+subdir('vtep')
+subdir('vswitchd')
+subdir('ovsdb')
+#subdir('datapath')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 000000000..2631b2669
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,2 @@
+option('with-pthread', type : 'string', value : 'optval',
+       description : 'Path to the POSIX threads API library for Windows')
diff --git a/ofproto/meson.build b/ofproto/meson.build
new file mode 100644
index 000000000..4f3b3fe21
--- /dev/null
+++ b/ofproto/meson.build
@@ -0,0 +1,59 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+ofproto_ipfix_entities_def = custom_target(
+    'ipfix-entities.def',
+    input : meson.project_source_root() + '/ofproto/ipfix.xml',
+    output : 'ipfix-entities.def',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ofproto/ipfix-gen-entities',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+sources = files(
+       'bond.c',
+       'collectors.c',
+       'connmgr.c',
+       'fail-open.c',
+       'in-band.c',
+       'names.c',
+       'netflow.c',
+       'ofproto.c',
+       'ofproto-dpif.c',
+       'ofproto-dpif-ipfix.c',
+       'ofproto-dpif-mirror.c',
+       'ofproto-dpif-monitor.c',
+       'ofproto-dpif-rid.c',
+       'ofproto-dpif-sflow.c',
+       'ofproto-dpif-trace.c',
+       'ofproto-dpif-upcall.c',
+       'ofproto-dpif-xlate.c',
+       'ofproto-dpif-xlate-cache.c',
+       'pinsched.c',
+       'tunnel.c',
+       'bundles.c',
+)
+
+sources += [
+    include_odp_netlink_h,
+    ofproto_ipfix_entities_def,
+]
+
+deps = []
+
+mapfile = meson.project_build_root() + '/ofproto.map'
+vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+ofproto = library(
+  'ofproto', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined', vflag],
+  link_depends : mapfile,
+  link_with : sflow,
+  version : as_version,
+  soversion : as_soversion,
+)
diff --git a/ofproto/ofproto.map.in b/ofproto/ofproto.map.in
new file mode 100644
index 000000000..46b86511b
--- /dev/null
+++ b/ofproto/ofproto.map.in
@@ -0,0 +1,4 @@
+libofproto_@SOVERSION@ {
+global:
+    *;
+};
diff --git a/ovsdb/meson.build b/ovsdb/meson.build
new file mode 100644
index 000000000..1f7299e10
--- /dev/null
+++ b/ovsdb/meson.build
@@ -0,0 +1,106 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+# ovsdb/_server.ovsschema.inc
+ovsdb__server_ovsschema_inc = custom_target(
+    '_server.ovsschema.inc',
+    input : meson.project_source_root() + '/ovsdb/_server.ovsschema',
+    output : '_server.ovsschema.inc',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/build-aux/text2c',
+    ],
+    feed : true,
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+sources = files(
+       'column.c',
+       'condition.c',
+       'execution.c',
+       'file.c',
+       'jsonrpc-server.c',
+       'log.c',
+       'mutation.c',
+       'ovsdb.c',
+       'monitor.c',
+       'query.c',
+       'raft.c',
+       'raft-private.c',
+       'raft-rpc.c',
+       'rbac.c',
+       'replication.c',
+       'relay.c',
+       'row.c',
+       'server.c',
+       'storage.c',
+       'table.c',
+       'trigger.c',
+       'transaction.c',
+       'transaction-forward.c',
+       'ovsdb-util.c',
+)
+
+deps = []
+
+mapfile = meson.project_build_root() + '/ovsdb.map'
+vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+ovsdb = library(
+  'ovsdb', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined', vflag],
+  link_depends : mapfile,
+  version : as_version,
+  soversion : as_soversion,
+)
+
+sources = files(
+    'ovsdb-tool.c',
+)
+
+deps = []
+
+executable('ovsdb-tool', sources,
+    dependencies : deps,
+    include_directories : global_inc,
+    link_args : ['-Wl,--no-undefined'],
+    link_with : [ ovsdb, openvswitch ],
+    install : true,
+    install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovsdb-client.c',
+)
+
+deps = []
+
+executable('ovsdb-client', sources,
+    dependencies : deps,
+    include_directories : global_inc,
+    link_args : ['-Wl,--no-undefined'],
+    link_with : [ ovsdb, openvswitch ],
+    install : true,
+    install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovsdb-server.c',
+)
+
+sources += [
+    ovsdb__server_ovsschema_inc,
+]
+
+deps = []
+
+executable('ovsdb-server', sources,
+    dependencies : deps,
+    include_directories : global_inc,
+    link_args : ['-Wl,--no-undefined'],
+    link_with : [ ovsdb, openvswitch ],
+    install : true,
+    install_dir: install_prefix / 'sbin',
+)
diff --git a/ovsdb/ovsdb.map.in b/ovsdb/ovsdb.map.in
new file mode 100644
index 000000000..ef7c8dd0f
--- /dev/null
+++ b/ovsdb/ovsdb.map.in
@@ -0,0 +1,4 @@
+libovsdb_@SOVERSION@ {
+global:
+    *;
+};
diff --git a/python/ovs/meson.build b/python/ovs/meson.build
new file mode 100644
index 000000000..8bc28f35b
--- /dev/null
+++ b/python/ovs/meson.build
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+conf_dirs_py = configuration_data()
+conf_dirs_py.set('LOGDIR', '/var/log/openvswitch')
+conf_dirs_py.set('RUNDIR', '/var/run/openvswitch')
+conf_dirs_py.set('DBDIR', '/etc/openvswitch')
+conf_dirs_py.set('bindir', '/bin')
+conf_dirs_py.set('pkgdatadir', '/usr/share/openvswitch')
+conf_dirs_py.set('variables', '@variables@')
+
+configure_file(
+    input : meson.project_source_root() + '/python/ovs/dirs.py.template',
+    output : 'dirs.py',
+    configuration : conf_dirs_py,
+)
+
+python_ovs_dirs_py = run_command(
+    prog_python,
+    meson.project_source_root() + '/build-aux/copy-file-from-build.py',
+    'dirs.py',
+    'dirs.py',
+    check : true,
+)
diff --git a/utilities/meson.build b/utilities/meson.build
new file mode 100644
index 000000000..49c7200d8
--- /dev/null
+++ b/utilities/meson.build
@@ -0,0 +1,83 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+sources = files(
+    'ovs-appctl.c',
+)
+
+deps = []
+
+executable('ovs-appctl', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : openvswitch,
+  install : true,
+  install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovs-testcontroller.c',
+)
+
+if build_machine.system() == 'linux'
+    deps += m_dep
+endif
+
+executable('ovs-testcontroller', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : openvswitch,
+  install : true,
+  install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovs-dpctl.c',
+)
+
+sources += [
+       include_odp_netlink_h,
+]
+
+executable('ovs-dpctl', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : openvswitch,
+  install : true,
+  install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovs-ofctl.c',
+)
+
+sources += [
+       include_odp_netlink_h,
+]
+
+executable('ovs-ofctl', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : [ openvswitch, ofproto ],
+  install : true,
+  install_dir: install_prefix / 'bin',
+)
+
+sources = files(
+    'ovs-vsctl.c',
+)
+
+sources += lib_vswitch_idl_h
+
+executable('ovs-vsctl', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : openvswitch,
+  install : true,
+  install_dir: install_prefix / 'bin',
+)
diff --git a/vswitchd/meson.build b/vswitchd/meson.build
new file mode 100644
index 000000000..b8e329854
--- /dev/null
+++ b/vswitchd/meson.build
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+sources = files(
+    'bridge.c',
+    'ovs-vswitchd.c',
+    'system-stats.c',
+    'xenserver.c',
+)
+
+sources += [
+       include_odp_netlink_h,
+]
+
+sources += lib_vswitch_idl_h
+
+deps = []
+
+if build_machine.system() == 'linux'
+    deps += m_dep
+endif
+
+executable('ovs-vswitchd', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined'],
+  link_with : [ openvswitch, ofproto, sflow ],
+  install : true,
+  install_dir: install_prefix / 'sbin',
+)
diff --git a/vtep/meson.build b/vtep/meson.build
new file mode 100644
index 000000000..abdae7eb0
--- /dev/null
+++ b/vtep/meson.build
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2021 VMware, Inc.
+
+vtep_vtep_idl_c = custom_target(
+    'vtep-idl.c',
+#    input : meson.project_source_root() + '/vtep/vtep-idl.ovsidl',
+    input : vtep_vtep_idl_ovsidl,
+    output : 'vtep-idl.c',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-source',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+vtep_vtep_idl_h = custom_target(
+    'vtep-idl.h',
+#    input : meson.project_source_root() + '/vtep/vtep-idl.ovsidl',
+    input : vtep_vtep_idl_ovsidl,
+    output : 'vtep-idl.h',
+    command : [
+        prog_python,
+        meson.project_source_root() + '/ovsdb/ovsdb-idlc.in',
+        'c-idl-header',
+        '@INPUT@',
+    ],
+    capture : '@OUTPUT@',
+    env : python_env,
+)
+
+#sources = files(
+#    'vtep-idl.c',
+#)
+sources = [
+    vtep_vtep_idl_c,
+    vtep_vtep_idl_h,
+]
+
+deps = []
+
+mapfile = meson.project_build_root() + '/vtep.map'
+vflag = '-Wl'.format(meson.current_source_dir(), mapfile)
+vtep = library(
+  'vtep', sources,
+  dependencies : deps,
+  include_directories : global_inc,
+  link_args : ['-Wl,--no-undefined', vflag],
+  link_depends : mapfile,
+  version : as_version,
+  soversion : as_soversion,
+)
+
+sources = files(
+    'vtep-ctl.c',
+)
+
+sources += [
+    vtep_vtep_idl_h,
+]
+
+deps = []
+
+executable('vtep-ctl', sources,
+    dependencies : deps,
+    include_directories : global_inc,
+    link_args : ['-Wl,--no-undefined'],
+    link_with : [ vtep, openvswitch ],
+)
diff --git a/vtep/vtep.map.in b/vtep/vtep.map.in
new file mode 100644
index 000000000..e548586fc
--- /dev/null
+++ b/vtep/vtep.map.in
@@ -0,0 +1,4 @@
+libvtep_@SOVERSION@ {
+global:
+    *;
+};
-- 
2.25.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to