aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/seg6_local.h
blob: 4fdc424c9cb3a115f66e258b9a792e2e2b440f31 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 *  SR-IPv6 implementation
 *
 *  Author:
 *  David Lebrun <david.lebrun@uclouvain.be>
 *
 *
 *  This program is free software; you can redistribute it and/or
 *      modify it under the terms of the GNU General Public License
 *      as published by the Free Software Foundation; either version
 *      2 of the License, or (at your option) any later version.
 */

#ifndef _UAPI_LINUX_SEG6_LOCAL_H
#define _UAPI_LINUX_SEG6_LOCAL_H

#include <linux/seg6.h>

enum {
	SEG6_LOCAL_UNSPEC,
	SEG6_LOCAL_ACTION,
	SEG6_LOCAL_SRH,
	SEG6_LOCAL_TABLE,
	SEG6_LOCAL_NH4,
	SEG6_LOCAL_NH6,
	SEG6_LOCAL_IIF,
	SEG6_LOCAL_OIF,
	SEG6_LOCAL_BPF,
	SEG6_LOCAL_VRFTABLE,
	SEG6_LOCAL_COUNTERS,
	SEG6_LOCAL_FLAVORS,
	__SEG6_LOCAL_MAX,
};
#define SEG6_LOCAL_MAX (__SEG6_LOCAL_MAX - 1)

enum {
	SEG6_LOCAL_ACTION_UNSPEC	= 0,
	/* node segment */
	SEG6_LOCAL_ACTION_END		= 1,
	/* adjacency segment (IPv6 cross-connect) */
	SEG6_LOCAL_ACTION_END_X		= 2,
	/* lookup of next seg NH in table */
	SEG6_LOCAL_ACTION_END_T		= 3,
	/* decap and L2 cross-connect */
	SEG6_LOCAL_ACTION_END_DX2	= 4,
	/* decap and IPv6 cross-connect */
	SEG6_LOCAL_ACTION_END_DX6	= 5,
	/* decap and IPv4 cross-connect */
	SEG6_LOCAL_ACTION_END_DX4	= 6,
	/* decap and lookup of DA in v6 table */
	SEG6_LOCAL_ACTION_END_DT6	= 7,
	/* decap and lookup of DA in v4 table */
	SEG6_LOCAL_ACTION_END_DT4	= 8,
	/* binding segment with insertion */
	SEG6_LOCAL_ACTION_END_B6	= 9,
	/* binding segment with encapsulation */
	SEG6_LOCAL_ACTION_END_B6_ENCAP	= 10,
	/* binding segment with MPLS encap */
	SEG6_LOCAL_ACTION_END_BM	= 11,
	/* lookup last seg in table */
	SEG6_LOCAL_ACTION_END_S		= 12,
	/* forward to SR-unaware VNF with static proxy */
	SEG6_LOCAL_ACTION_END_AS	= 13,
	/* forward to SR-unaware VNF with masquerading */
	SEG6_LOCAL_ACTION_END_AM	= 14,
	/* custom BPF action */
	SEG6_LOCAL_ACTION_END_BPF	= 15,
	/* decap and lookup of DA in v4 or v6 table */
	SEG6_LOCAL_ACTION_END_DT46	= 16,

	__SEG6_LOCAL_ACTION_MAX,
};

#define SEG6_LOCAL_ACTION_MAX (__SEG6_LOCAL_ACTION_MAX - 1)

enum {
	SEG6_LOCAL_BPF_PROG_UNSPEC,
	SEG6_LOCAL_BPF_PROG,
	SEG6_LOCAL_BPF_PROG_NAME,
	__SEG6_LOCAL_BPF_PROG_MAX,
};

#define SEG6_LOCAL_BPF_PROG_MAX (__SEG6_LOCAL_BPF_PROG_MAX - 1)

/* SRv6 Behavior counters are encoded as netlink attributes guaranteeing the
 * correct alignment.
 * Each counter is identified by a different attribute type (i.e.
 * SEG6_LOCAL_CNT_PACKETS).
 *
 * - SEG6_LOCAL_CNT_PACKETS: identifies a counter that counts the number of
 *   packets that have been CORRECTLY processed by an SRv6 Behavior instance
 *   (i.e., packets that generate errors or are dropped are NOT counted).
 *
 * - SEG6_LOCAL_CNT_BYTES: identifies a counter that counts the total amount
 *   of traffic in bytes of all packets that have been CORRECTLY processed by
 *   an SRv6 Behavior instance (i.e., packets that generate errors or are
 *   dropped are NOT counted).
 *
 * - SEG6_LOCAL_CNT_ERRORS: identifies a counter that counts the number of
 *   packets that have NOT been properly processed by an SRv6 Behavior instance
 *   (i.e., packets that generate errors or are dropped).
 */
enum {
	SEG6_LOCAL_CNT_UNSPEC,
	SEG6_LOCAL_CNT_PAD,		/* pad for 64 bits values */
	SEG6_LOCAL_CNT_PACKETS,
	SEG6_LOCAL_CNT_BYTES,
	SEG6_LOCAL_CNT_ERRORS,
	__SEG6_LOCAL_CNT_MAX,
};

#define SEG6_LOCAL_CNT_MAX (__SEG6_LOCAL_CNT_MAX - 1)

/* SRv6 End* Flavor attributes */
enum {
	SEG6_LOCAL_FLV_UNSPEC,
	SEG6_LOCAL_FLV_OPERATION,
	SEG6_LOCAL_FLV_LCBLOCK_BITS,
	SEG6_LOCAL_FLV_LCNODE_FN_BITS,
	__SEG6_LOCAL_FLV_MAX,
};

#define SEG6_LOCAL_FLV_MAX (__SEG6_LOCAL_FLV_MAX - 1)

/* Designed flavor operations for SRv6 End* Behavior */
enum {
	SEG6_LOCAL_FLV_OP_UNSPEC,
	SEG6_LOCAL_FLV_OP_PSP,
	SEG6_LOCAL_FLV_OP_USP,
	SEG6_LOCAL_FLV_OP_USD,
	SEG6_LOCAL_FLV_OP_NEXT_CSID,
	__SEG6_LOCAL_FLV_OP_MAX
};

#define SEG6_LOCAL_FLV_OP_MAX (__SEG6_LOCAL_FLV_OP_MAX - 1)

#endif