FD.io VPP
v20.01-48-g3e0dafb74
Vector Packet Processing
sr_packet.h
Go to the documentation of this file.
1
#ifndef included_vnet_sr_packet_h
2
#define included_vnet_sr_packet_h
3
4
#include <
vnet/ip/ip.h
>
5
6
/*
7
* ipv6 segment-routing header format
8
*
9
* Copyright (c) 2013 Cisco and/or its affiliates.
10
* Licensed under the Apache License, Version 2.0 (the "License");
11
* you may not use this file except in compliance with the License.
12
* You may obtain a copy of the License at:
13
*
14
* http://www.apache.org/licenses/LICENSE-2.0
15
*
16
* Unless required by applicable law or agreed to in writing, software
17
* distributed under the License is distributed on an "AS IS" BASIS,
18
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
* See the License for the specific language governing permissions and
20
* limitations under the License.
21
*/
22
23
/*
24
* The Segment Routing Header (SRH) is defined as follows:
25
*
26
* 0 1 2 3
27
* 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
28
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29
* | Next Header | Hdr Ext Len | Routing Type | Segments Left |
30
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31
* | Last Entry | Flags | Tag |
32
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33
* | |
34
* | Segment List[0] (128 bits IPv6 address) |
35
* | |
36
* | |
37
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
38
* | |
39
* | |
40
* ...
41
* | |
42
* | |
43
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44
* | |
45
* | Segment List[n] (128 bits IPv6 address) |
46
* | |
47
* | |
48
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49
* // //
50
* // Optional Type Length Value objects (variable) //
51
* // //
52
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53
*
54
* where:
55
*
56
* o Next Header: 8-bit selector. Identifies the type of header
57
* immediately following the SRH.
58
*
59
* o Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH
60
* header in 8-octet units, not including the first 8 octets.
61
*
62
* o Routing Type: TBD, to be assigned by IANA (suggested value: 4).
63
*
64
* o Segments Left. Defined in [RFC8200], it contains the index, in
65
* the Segment List, of the next segment to inspect. Segments Left
66
* is decremented at each segment.
67
*
68
* o Last Entry: contains the index (zero based), in the Segment List,
69
* of the the last element of the Segment List
70
*
71
* o Flags: 8 bits of flags. Following flags are defined:
72
*
73
* 0 1 2 3 4 5 6 7
74
* +-+-+-+-+-+-+-+-+
75
* |U|P|O|A|H| U |
76
* +-+-+-+-+-+-+-+-+
77
*
78
* U: Unused and for future use. SHOULD be unset on transmission
79
* and MUST be ignored on receipt.
80
*
81
* P-flag: Protected flag. Set when the packet has been rerouted
82
* through FRR mechanism by an SR endpoint node.
83
*
84
* O-flag: OAM flag. When set, it indicates that this packet is
85
* an operations and management (OAM) packet.
86
*
87
* A-flag: Alert flag. If present, it means important Type Length
88
* Value (TLV) objects are present. See Section 3.1 for details
89
* on TLVs objects.
90
*
91
* H-flag: HMAC flag. If set, the HMAC TLV is present and is
92
* encoded as the last TLV of the SRH. In other words, the last
93
* 36 octets of the SRH represent the HMAC information. See
94
* Section 3.1.5 for details on the HMAC TLV.
95
*
96
* o Tag: tag a packet as part of a class or group of packets, e.g.,
97
* packets sharing the same set of properties. When tag is not used
98
* at source it MUST be set to zero on transmission. When tag is not
99
* used during SRH Processing it SHOULD be ignored.
100
*
101
* o Segment List[n]: 128 bit IPv6 addresses representing the nth
102
* segment in the Segment List. The Segment List is encoded starting
103
* from the last segment of the path. I.e., the first element of the
104
* segment list (Segment List [0]) contains the last segment of the
105
* path while the last segment of the Segment List (Segment List[n])
106
* contains the first segment of the path. The index contained in
107
* "Segments Left" identifies the current active segment.
108
*
109
* o Type Length Value (TLV) are described in Section 3.1.
110
*
111
*/
112
113
#ifndef IPPROTO_IPV6_ROUTE
114
#define IPPROTO_IPV6_ROUTE 43
115
#endif
116
117
#define ROUTING_HEADER_TYPE_SR 4
118
119
typedef
struct
120
{
121
/* Protocol for next header. */
122
u8
protocol
;
123
/*
124
* Length of routing header in 8 octet units,
125
* not including the first 8 octets
126
*/
127
u8
length
;
128
129
/* Type of routing header; type 4 = segement routing */
130
u8
type
;
131
132
/* Next segment in the segment list */
133
u8
segments_left
;
134
135
/* Pointer to the first segment in the header */
136
u8
last_entry
;
137
138
/* Flag bits */
139
#define IP6_SR_HEADER_FLAG_PROTECTED (0x40)
140
#define IP6_SR_HEADER_FLAG_OAM (0x20)
141
#define IP6_SR_HEADER_FLAG_ALERT (0x10)
142
#define IP6_SR_HEADER_FLAG_HMAC (0x80)
143
144
/* values 0x0, 0x4 - 0x7 are reserved */
145
u8
flags
;
146
u16
tag
;
147
148
/* The segment elts */
149
ip6_address_t
segments[0];
150
} __attribute__ ((packed))
ip6_sr_header_t
;
151
152
/*
153
* fd.io coding-style-patch-verification: ON
154
*
155
* Local Variables:
156
* eval: (c-set-style "gnu")
157
* End:
158
*/
159
160
#endif
/* included_vnet_sr_packet_h */
ip6_sr_header_t::segments_left
u8 segments_left
Definition:
sr_packet.h:133
ip6_sr_header_t::last_entry
u8 last_entry
Definition:
sr_packet.h:136
ip.h
u8
unsigned char u8
Definition:
types.h:56
ip6_sr_header_t::tag
u16 tag
Definition:
sr_packet.h:146
ip6_sr_header_t::protocol
u8 protocol
Definition:
sr_packet.h:122
ip6_sr_header_t::type
u8 type
Definition:
sr_packet.h:130
u16
unsigned short u16
Definition:
types.h:57
ip6_sr_header_t::flags
u8 flags
Definition:
sr_packet.h:145
ip6_sr_header_t
Definition:
sr_packet.h:119
ip6_sr_header_t::length
u8 length
Definition:
sr_packet.h:127
ip6_address_t
Definition:
ip6_packet.h:46
src
vnet
srv6
sr_packet.h
Generated on Wed Sep 9 2020 00:05:37 for FD.io VPP by
1.8.13