--- /dev/null
+--- /dev/null
++++ b/include/uapi/linux/mpls.h
+@@ -0,0 +1,34 @@
++#ifndef _UAPI_MPLS_H
++#define _UAPI_MPLS_H
++
++#include <linux/types.h>
++#include <asm/byteorder.h>
++
++/* Reference: RFC 5462, RFC 3032
++ *
++ * 0 1 2 3
++ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++ * | Label | TC |S| TTL |
++ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
++ *
++ * Label: Label Value, 20 bits
++ * TC: Traffic Class field, 3 bits
++ * S: Bottom of Stack, 1 bit
++ * TTL: Time to Live, 8 bits
++ */
++
++struct mpls_label {
++ __be32 entry;
++};
++
++#define MPLS_LS_LABEL_MASK 0xFFFFF000
++#define MPLS_LS_LABEL_SHIFT 12
++#define MPLS_LS_TC_MASK 0x00000E00
++#define MPLS_LS_TC_SHIFT 9
++#define MPLS_LS_S_MASK 0x00000100
++#define MPLS_LS_S_SHIFT 8
++#define MPLS_LS_TTL_MASK 0x000000FF
++#define MPLS_LS_TTL_SHIFT 0
++
++#endif /* _UAPI_MPLS_H */