blob: 77a19dfe3990d5deede42363d9511d110032f019 [file] [log] [blame]
Simon Wunderlichf3baa392014-03-03 17:23:11 +01001#ifndef _UAPI_MPLS_H
2#define _UAPI_MPLS_H
3
4#include <linux/types.h>
5#include <asm/byteorder.h>
6
7/* Reference: RFC 5462, RFC 3032
8 *
9 * 0 1 2 3
10 * 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
11 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 * | Label | TC |S| TTL |
13 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
14 *
15 * Label: Label Value, 20 bits
16 * TC: Traffic Class field, 3 bits
17 * S: Bottom of Stack, 1 bit
18 * TTL: Time to Live, 8 bits
19 */
20
21struct mpls_label {
22 __be32 entry;
23};
24
25#define MPLS_LS_LABEL_MASK 0xFFFFF000
26#define MPLS_LS_LABEL_SHIFT 12
27#define MPLS_LS_TC_MASK 0x00000E00
28#define MPLS_LS_TC_SHIFT 9
29#define MPLS_LS_S_MASK 0x00000100
30#define MPLS_LS_S_SHIFT 8
31#define MPLS_LS_TTL_MASK 0x000000FF
32#define MPLS_LS_TTL_SHIFT 0
33
Tom Herbertc967a082015-05-05 09:06:30 -070034/* Reserved labels */
Tom Herbert78f5b892015-05-07 08:08:51 -070035#define MPLS_LABEL_IPV4NULL 0 /* RFC3032 */
36#define MPLS_LABEL_RTALERT 1 /* RFC3032 */
37#define MPLS_LABEL_IPV6NULL 2 /* RFC3032 */
38#define MPLS_LABEL_IMPLNULL 3 /* RFC3032 */
39#define MPLS_LABEL_ENTROPY 7 /* RFC6790 */
Tom Herbertc967a082015-05-05 09:06:30 -070040#define MPLS_LABEL_GAL 13 /* RFC5586 */
Tom Herbert78f5b892015-05-07 08:08:51 -070041#define MPLS_LABEL_OAMALERT 14 /* RFC3429 */
Tom Herbertc967a082015-05-05 09:06:30 -070042#define MPLS_LABEL_EXTENSION 15 /* RFC7274 */
43
Robert Shearmana6affd22015-08-03 17:50:04 +010044#define MPLS_LABEL_FIRST_UNRESERVED 16 /* RFC3032 */
45
Robert Shearman27d69102017-01-16 14:16:37 +000046/* These are embedded into IFLA_STATS_AF_SPEC:
47 * [IFLA_STATS_AF_SPEC]
48 * -> [AF_MPLS]
49 * -> [MPLS_STATS_xxx]
50 *
51 * Attributes:
52 * [MPLS_STATS_LINK] = {
53 * struct mpls_link_stats
54 * }
55 */
56enum {
57 MPLS_STATS_UNSPEC, /* also used as 64bit pad attribute */
58 MPLS_STATS_LINK,
59 __MPLS_STATS_MAX,
60};
61
62#define MPLS_STATS_MAX (__MPLS_STATS_MAX - 1)
63
64struct mpls_link_stats {
65 __u64 rx_packets; /* total packets received */
66 __u64 tx_packets; /* total packets transmitted */
67 __u64 rx_bytes; /* total bytes received */
68 __u64 tx_bytes; /* total bytes transmitted */
69 __u64 rx_errors; /* bad packets received */
70 __u64 tx_errors; /* packet transmit problems */
71 __u64 rx_dropped; /* packet dropped on receive */
72 __u64 tx_dropped; /* packet dropped on transmit */
73 __u64 rx_noroute; /* no route for packet dest */
74};
75
Simon Wunderlichf3baa392014-03-03 17:23:11 +010076#endif /* _UAPI_MPLS_H */