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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
|
Network Working Group S. Hanks
Request for Comments: 1701 NetSmiths, Ltd.
Category: Informational T. Li
D. Farinacci
P. Traina
cisco Systems
October 1994
Generic Routing Encapsulation (GRE)
Status of this Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
Abstract
This document specifies a protocol for performing encapsulation of an
arbitrary network layer protocol over another arbitrary network layer
protocol.
Introduction
A number of different proposals [RFC 1234, RFC 1226] currently exist
for the encapsulation of one protocol over another protocol. Other
types of encapsulations [RFC 1241, SDRP, RFC 1479] have been proposed
for transporting IP over IP for policy purposes. This memo describes
a protocol which is very similar to, but is more general than, the
above proposals. In attempting to be more general, many protocol
specific nuances have been ignored. The result is that this proposal
is may be less suitable for a situation where a specific "X over Y"
encapsulation has been described. It is the attempt of this protocol
to provide a simple, general purpose mechanism which is reduces the
problem of encapsulation from its current O(n^2) problem to a more
manageable state. This proposal also attempts to provide a
lightweight encapsulation for use in policy based routing. This memo
explicitly does not address the issue of when a packet should be
encapsulated. This memo acknowledges, but does not address problems
with mutual encapsulation [RFC 1326].
In the most general case, a system has a packet that needs to be
encapsulated and routed. We will call this the payload packet. The
payload is first encapsulated in a GRE packet, which possibly also
includes a route. The resulting GRE packet can then be encapsulated
in some other protocol and then forwarded. We will call this outer
Hanks, Li, Farinacci & Traina [Page 1]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
protocol the delivery protocol. The algorithms for processing this
packet are discussed later.
Overall packet
The entire encapsulated packet would then have the form:
---------------------------------
| |
| Delivery Header |
| |
---------------------------------
| |
| GRE Header |
| |
---------------------------------
| |
| Payload packet |
| |
---------------------------------
Packet header
The GRE packet header has the form:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|C|R|K|S|s|Recur| Flags | Ver | Protocol Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum (optional) | Offset (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number (optional) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Routing (optional)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Flags and version (2 octets)
The GRE flags are encoded in the first two octets. Bit 0 is the
most significant bit, bit 15 is the least significant bit. Bits
13 through 15 are reserved for the Version field. Bits 5 through
12 are reserved for future use and MUST be transmitted as zero.
Hanks, Li, Farinacci & Traina [Page 2]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
Checksum Present (bit 0)
If the Checksum Present bit is set to 1, then the Checksum field
is present and contains valid information.
If either the Checksum Present bit or the Routing Present bit are
set, BOTH the Checksum and Offset fields are present in the GRE
packet.
Routing Present (bit 1)
If the Routing Present bit is set to 1, then it indicates that the
Offset and Routing fields are present and contain valid
information.
If either the Checksum Present bit or the Routing Present bit are
set, BOTH the Checksum and Offset fields are present in the GRE
packet.
Key Present (bit 2)
If the Key Present bit is set to 1, then it indicates that the Key
field is present in the GRE header. Otherwise, the Key field is
not present in the GRE header.
Sequence Number Present (bit 3)
If the Sequence Number Present bit is set to 1, then it indicates
that the Sequence Number field is present. Otherwise, the
Sequence Number field is not present in the GRE header.
Strict Source Route (bit 4)
The meaning of the Strict Source route bit is defined in other
documents. It is recommended that this bit only be set to 1 if
all of the the Routing Information consists of Strict Source
Routes.
Recursion Control (bits 5-7)
Recursion control contains a three bit unsigned integer which
contains the number of additional encapsulations which are
permissible. This SHOULD default to zero.
Version Number (bits 13-15)
The Version Number field MUST contain the value 0. Other values
are outside of the scope of this document.
Hanks, Li, Farinacci & Traina [Page 3]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
Protocol Type (2 octets)
The Protocol Type field contains the protocol type of the payload
packet. In general, the value will be the Ethernet protocol type
field for the packet. Currently defined protocol types are listed
below. Additional values may be defined in other documents.
Offset (2 octets)
The offset field indicates the octet offset from the start of the
Routing field to the first octet of the active Source Route Entry
to be examined. This field is present if the Routing Present or
the Checksum Present bit is set to 1, and contains valid
information only if the Routing Present bit is set to 1.
Checksum (2 octets)
The Checksum field contains the IP (one's complement) checksum of
the GRE header and the payload packet. This field is present if
the Routing Present or the Checksum Present bit is set to 1, and
contains valid information only if the Checksum Present bit is set
to 1.
Key (4 octets)
The Key field contains a four octet number which was inserted by
the encapsulator. It may be used by the receiver to authenticate
the source of the packet. The techniques for determining
authenticity are outside of the scope of this document. The Key
field is only present if the Key Present field is set to 1.
Sequence Number (4 octets)
The Sequence Number field contains an unsigned 32 bit integer
which is inserted by the encapsulator. It may be used by the
receiver to establish the order in which packets have been
transmitted from the encapsulator to the receiver. The exact
algorithms for the generation of the Sequence Number and the
semantics of their reception is outside of the scope of this
document.
Routing (variable)
The Routing field is optional and is present only if the Routing
Present bit is set to 1.
Hanks, Li, Farinacci & Traina [Page 4]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
The Routing field is a list of Source Route Entries (SREs). Each
SRE has the form:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address Family | SRE Offset | SRE Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Routing Information ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The routing field is terminated with a "NULL" SRE containing an
address family of type 0x0000 and a length of 0.
Address Family (2 octets)
The Address Family field contains a two octet value which indicates
the syntax and semantics of the Routing Information field. The
values for this field and the corresponding syntax and semantics for
Routing Information are defined in other documents.
SRE Offset (1 octet)
The SRE Offset field indicates the octet offset from the start of the
Routing Information field to the first octet of the active entry in
Source Route Entry to be examined.
SRE Length (1 octet)
The SRE Length field contains the number of octets in the SRE. If
the SRE Length is 0, this indicates this is the last SRE in the
Routing field.
Routing Information (variable)
The Routing Information field contains data which may be used in
routing this packet. The exact semantics of this field is defined in
other documents.
Forwarding of GRE packets
Normally, a system which is forwarding delivery layer packets will
not differentiate GRE packets from other packets in any way.
However, a GRE packet may be received by a system. In this case, the
system should use some delivery-specific means to determine that this
is a GRE packet. Once this is determined, the Key, Sequence Number
and Checksum fields if they contain valid information as indicated by
the corresponding flags may be checked. If the Routing Present bit
Hanks, Li, Farinacci & Traina [Page 5]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
is set to 1, then the Address Family field should be checked to
determine the semantics and use of the SRE Length, SRE Offset and
Routing Information fields. The exact semantics for processing a SRE
for each Address Family is defined in other documents.
Once all SREs have been processed, then the source route is complete,
the GRE header should be removed, the payload's TTL MUST be
decremented (if one exists) and the payload packet should be
forwarded as a normal packet. The exact forwarding method depends on
the Protocol Type field.
Current List of Protocol Types
The following are currently assigned protocol types for GRE. Future
protocol types must be taken from DIX ethernet encoding. For
historical reasons, a number of other values have been used for some
protocols. The following table of values MUST be used to identify
the following protocols:
Protocol Family PTYPE
--------------- -----
Reserved 0000
SNA 0004
OSI network layer 00FE
PUP 0200
XNS 0600
IP 0800
Chaos 0804
RFC 826 ARP 0806
Frame Relay ARP 0808
VINES 0BAD
VINES Echo 0BAE
VINES Loopback 0BAF
DECnet (Phase IV) 6003
Transparent Ethernet Bridging 6558
Raw Frame Relay 6559
Apollo Domain 8019
Ethertalk (Appletalk) 809B
Novell IPX 8137
RFC 1144 TCP/IP compression 876B
IP Autonomous Systems 876C
Secure Data 876D
Reserved FFFF
See the IANA list of Ether Types for the complete list of these
values.
URL = ftp://ftp.isi.edu/in-notes/iana/assignments/ethernet-numbers.
Hanks, Li, Farinacci & Traina [Page 6]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
References
RFC 1479
Steenstrup, M. "Inter-Domain Policy Routing Protocol
Specification: Version 1", RFC1479, BBN Systems and Technologies,
July 1993.
RFC 1226
Kantor, B. "Internet Protocol Encapsulation of AX.25 Frames", RFC
1226, University of California, San Diego, May 1991.
RFC 1234
Provan, D. "Tunneling IPX Traffic through IP Networks", RFC 1234,
Novell, Inc., June 1991.
RFC 1241
Woodburn, R., and D. Mills, "Scheme for an Internet Encapsulation
Protocol: Version 1", RFC 1241, SAIC, University of Delaware, July
1991.
RFC 1326
Tsuchiya, P., "Mutual Encapsulation Considered Dangerous", RFC
1326, Bellcore, May 1992.
SDRP
Estrin, D., Li, T., and Y. Rekhter, "Source Demand Routing
Protocol Specification (Version 1)", Work in Progress.
RFC 1702
Hanks, S., Li, T., Farinacci, D., and P. Traina, "Generic Routing
Encapsulation over IPv4 networks", RFC 1702, NetSmiths, Ltd.,
cisco Systems, October 1994.
Security Considerations
Security issues are not discussed in this memo.
Hanks, Li, Farinacci & Traina [Page 7]
^L
RFC 1701 Generic Routing Encapsulation (GRE) October 1994
Acknowledgements
The authors would like to acknowledge Yakov Rekhter (IBM) and Deborah
Estrin (USC) for their advice, encouragement and insightful comments.
Authors' Addresses
Stan Hanks
NetSmiths, Ltd.
2025 Lincoln Highway
Edison NJ, 08817
EMail: stan@netsmiths.com
Tony Li
cisco Systems, Inc.
1525 O'Brien Drive
Menlo Park, CA 94025
EMail: tli@cisco.com
Dino Farinacci
cisco Systems, Inc.
1525 O'Brien Drive
Menlo Park, CA 94025
EMail: dino@cisco.com
Paul Traina
cisco Systems, Inc.
1525 O'Brien Drive
Menlo Park, CA 94025
EMail: pst@cisco.com
Hanks, Li, Farinacci & Traina [Page 8]
^L
|