FD.io VPP
v17.04-9-g99c0734
Vector Packet Processing
Main Page
Related Pages
Data Structures
Source
Files
Symbols
FD.io VPP
Vector Packet Processing
Release Notes
Debug CLI
Startup Configuration
Todo List
Node Identifiers
Data Structures
Source
Files
Symbols
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
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
* | First Segment | Flags | RESERVED |
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 [RFC2460], 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 First Segment: contains the index, in the Segment List, of the
69
* first segment of the path which is in fact the last element of the
70
* Segment List.
71
*
72
* o Flags: 8 bits of flags. Following flags are defined:
73
*
74
* 0 1 2 3 4 5 6 7
75
* +-+-+-+-+-+-+-+-+
76
* |U|P|O|A|H| U |
77
* +-+-+-+-+-+-+-+-+
78
*
79
* U: Unused and for future use. SHOULD be unset on transmission
80
* and MUST be ignored on receipt.
81
*
82
* P-flag: Protected flag. Set when the packet has been rerouted
83
* through FRR mechanism by an SR endpoint node.
84
*
85
* O-flag: OAM flag. When set, it indicates that this packet is
86
* an operations and management (OAM) packet.
87
*
88
* A-flag: Alert flag. If present, it means important Type Length
89
* Value (TLV) objects are present. See Section 3.1 for details
90
* on TLVs objects.
91
*
92
* H-flag: HMAC flag. If set, the HMAC TLV is present and is
93
* encoded as the last TLV of the SRH. In other words, the last
94
* 36 octets of the SRH represent the HMAC information. See
95
* Section 3.1.5 for details on the HMAC TLV.
96
*
97
* o RESERVED: SHOULD be unset on transmission and MUST be ignored on
98
* receipt.
99
*
100
* o Segment List[n]: 128 bit IPv6 addresses representing the nth
101
* segment in the Segment List. The Segment List is encoded starting
102
* from the last segment of the path. I.e., the first element of the
103
* segment list (Segment List [0]) contains the last segment of the
104
* path while the last segment of the Segment List (Segment List[n])
105
* contains the first segment of the path. The index contained in
106
* "Segments Left" identifies the current active segment.
107
*
108
* o Type Length Value (TLV) are described in Section 3.1.
109
*
110
*/
111
112
#ifndef IPPROTO_IPV6_ROUTE
113
#define IPPROTO_IPV6_ROUTE 43
114
#endif
115
116
#define ROUTING_HEADER_TYPE_SR 4
117
118
typedef
struct
119
{
120
/* Protocol for next header. */
121
u8
protocol
;
122
/*
123
* Length of routing header in 8 octet units,
124
* not including the first 8 octets
125
*/
126
u8
length
;
127
128
/* Type of routing header; type 4 = segement routing */
129
u8
type
;
130
131
/* Next segment in the segment list */
132
u8
segments_left
;
133
134
/* Pointer to the first segment in the header */
135
u8
first_segment
;
136
137
/* Flag bits */
138
#define IP6_SR_HEADER_FLAG_PROTECTED (0x40)
139
#define IP6_SR_HEADER_FLAG_OAM (0x20)
140
#define IP6_SR_HEADER_FLAG_ALERT (0x10)
141
#define IP6_SR_HEADER_FLAG_HMAC (0x80)
142
143
/* values 0x0, 0x4 - 0x7 are reserved */
144
u8
flags
;
145
u16
reserved
;
146
147
/* The segment elts */
148
ip6_address_t
segments[0];
149
} __attribute__ ((packed)) ip6_sr_header_t;
150
151
/*
152
* fd.io coding-style-patch-verification: ON
153
*
154
* Local Variables:
155
* eval: (c-set-style "gnu")
156
* End:
157
*/
158
159
#endif
/* included_vnet_sr_packet_h */
ip6_sr_header_t::segments_left
u8 segments_left
Definition:
sr_packet.h:132
ip.h
ip6_sr_header_t::protocol
u8 protocol
Definition:
sr_packet.h:121
ip6_sr_header_t::reserved
u16 reserved
Definition:
sr_packet.h:145
ip6_sr_header_t::type
u8 type
Definition:
sr_packet.h:129
ip6_sr_header_t::flags
u8 flags
Definition:
sr_packet.h:144
u16
unsigned short u16
Definition:
types.h:57
u8
unsigned char u8
Definition:
types.h:56
ip6_sr_header_t::length
u8 length
Definition:
sr_packet.h:126
ip6_sr_header_t::first_segment
u8 first_segment
Definition:
sr_packet.h:135
ip6_address_t
Definition:
ip6_packet.h:46
src
vnet
sr
sr_packet.h
Generated on Mon May 15 2017 20:50:22 for FD.io VPP by
1.8.11