summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acinclude.m47
-rw-r--r--include/linux/automake.mk1
-rw-r--r--include/linux/tc_act/tc_mpls.h37
3 files changed, 45 insertions, 0 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index 9e1569b07..116ffcf90 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -193,6 +193,13 @@ AC_DEFUN([OVS_CHECK_LINUX_TC], [
[Define to 1 if TCA_VLAN_PUSH_VLAN_PRIORITY is available.])])
AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([#include <linux/tc_act/tc_mpls.h>], [
+ int x = TCA_MPLS_TTL;
+ ])],
+ [AC_DEFINE([HAVE_TCA_MPLS_TTL], [1],
+ [Define to 1 if HAVE_TCA_MPLS_TTL is available.])])
+
+ AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([#include <linux/tc_act/tc_tunnel_key.h>], [
int x = TCA_TUNNEL_KEY_ENC_TTL;
])],
diff --git a/include/linux/automake.mk b/include/linux/automake.mk
index 24f85200b..4873a6ae6 100644
--- a/include/linux/automake.mk
+++ b/include/linux/automake.mk
@@ -1,6 +1,7 @@
noinst_HEADERS += \
include/linux/netfilter/nf_conntrack_sctp.h \
include/linux/pkt_cls.h \
+ include/linux/tc_act/tc_mpls.h \
include/linux/tc_act/tc_pedit.h \
include/linux/tc_act/tc_skbedit.h \
include/linux/tc_act/tc_tunnel_key.h \
diff --git a/include/linux/tc_act/tc_mpls.h b/include/linux/tc_act/tc_mpls.h
new file mode 100644
index 000000000..25ebe3a8b
--- /dev/null
+++ b/include/linux/tc_act/tc_mpls.h
@@ -0,0 +1,37 @@
+#ifndef __LINUX_TC_ACT_TC_MPLS_WRAPPER_H
+#define __LINUX_TC_ACT_TC_MPLS_WRAPPER_H 1
+
+#if defined(__KERNEL__) || defined(HAVE_TCA_MPLS_TTL)
+#include_next <linux/tc_act/tc_mpls.h>
+#else
+
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+/* Copyright (C) 2019 Netronome Systems, Inc. */
+
+#define TCA_MPLS_ACT_POP 1
+#define TCA_MPLS_ACT_PUSH 2
+#define TCA_MPLS_ACT_MODIFY 3
+#define TCA_MPLS_ACT_DEC_TTL 4
+
+struct tc_mpls {
+ tc_gen; /* generic TC action fields. */
+ int m_action; /* action of type TCA_MPLS_ACT_*. */
+};
+
+enum {
+ TCA_MPLS_UNSPEC,
+ TCA_MPLS_TM, /* struct tcf_t; time values associated with action. */
+ TCA_MPLS_PARMS, /* struct tc_mpls; action type and general TC fields. */
+ TCA_MPLS_PAD,
+ TCA_MPLS_PROTO, /* be16; eth_type of pushed or next (for pop) header. */
+ TCA_MPLS_LABEL, /* u32; MPLS label. Lower 20 bits are used. */
+ TCA_MPLS_TC, /* u8; MPLS TC field. Lower 3 bits are used. */
+ TCA_MPLS_TTL, /* u8; MPLS TTL field. Must not be 0. */
+ TCA_MPLS_BOS, /* u8; MPLS BOS field. Either 1 or 0. */
+ __TCA_MPLS_MAX,
+};
+#define TCA_MPLS_MAX (__TCA_MPLS_MAX - 1)
+
+#endif /* __KERNEL__ || HAVE_TCA_MPLS_TTL */
+
+#endif /* __LINUX_TC_ACT_TC_MPLS_WRAPPER_H */