blob: 3904c5f0cdb942fd8b7bd22ba2e55db66d6e9c24 [file] [log] [blame]
paul76b89b42004-11-06 17:13:09 +00001@node Packet Binary Dump Format
paul718e3742002-12-13 20:15:29 +00002@appendix Packet Binary Dump Format
3
paul7190f4e2003-08-12 12:40:20 +00004 Quagga can dump routing protocol packet into file with a binary format
paul718e3742002-12-13 20:15:29 +00005(@pxref{Dump BGP packets and table}).
6
7 It seems to be better that we share the MRT's header format for
8backward compatibility with MRT's dump logs. We should also define the
9binary format excluding the header, because we must support both IP
10v4 and v6 addresses as socket addresses and / or routing entries.
11
12 In the last meeting, we discussed to have a version field in the
13header. But Masaki told us that we can define new `type' value rather
14than having a `version' field, and it seems to be better because we
15don't need to change header format.
16
17 Here is the common header format. This is same as that of MRT.
18
19@example
20@group
210 1 2 3
220 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
23+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24| Time |
25+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26| Type | Subtype |
27+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28| Length |
29+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30@end group
31@end example
32
Alexis Fasqueldbe99e02015-11-16 13:55:16 -050033 If `type' is PROTOCOL_BGP4MP_ET, the common header format will
34contain an additional microsecond field (RFC6396 2011).
35
36@example
37@group
380 1 2 3
390 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
40+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
41| Time |
42+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43| Type | Subtype |
44+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45| Length |
46+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47| Microsecond |
48+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49@end group
50@end example
51
paul718e3742002-12-13 20:15:29 +000052 If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE, and
53Address Family == IP (version 4)
54
55@example
56@group
57 0 1 2 3
58 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
59+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60| Source AS number | Destination AS number |
61+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62| Interface Index | Address Family |
63+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64| Source IP address |
65+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66| Destination IP address |
67+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68| Old State | New State |
69+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70@end group
71@end example
72
73Where State is the value defined in RFC1771.
74
75If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_STATE_CHANGE,
76and Address Family == IP version 6
77
78@example
79@group
80 0 1 2 3
81 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
82+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83| Source AS number | Destination AS number |
84+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
85| Interface Index | Address Family |
86+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
87| Source IP address |
88+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
89| Source IP address (Cont'd) |
90+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
91| Source IP address (Cont'd) |
92+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
93| Source IP address (Cont'd) |
94+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95| Destination IP address |
96+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
97| Destination IP address (Cont'd) |
98+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
99| Destination IP address (Cont'd) |
100+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
101| Destination IP address (Cont'd) |
102+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
103| Old State | New State |
104+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
105@end group
106@end example
107
108If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE,
109and Address Family == IP (version 4)
110
111@example
112@group
113 0 1 2 3
114 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
115+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
116| Source AS number | Destination AS number |
117+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
118| Interface Index | Address Family |
119+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
120| Source IP address |
121+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
122| Destination IP address |
123+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
124| BGP Message Packet |
125| |
126+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
127@end group
128@end example
129
130Where BGP Message Packet is the whole contents of the
131BGP4 message including header portion.
132
133If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_MESSAGE,
134and Address Family == IP version 6
135
136@example
137@group
138 0 1 2 3
139 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
140+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
141| Source AS number | Destination AS number |
142+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
143| Interface Index | Address Family |
144+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
145| Source IP address |
146+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
147| Source IP address (Cont'd) |
148+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
149| Source IP address (Cont'd) |
150+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
151| Source IP address (Cont'd) |
152+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
153| Destination IP address |
154+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
155| Destination IP address (Cont'd) |
156+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
157| Destination IP address (Cont'd) |
158+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
159| Destination IP address (Cont'd) |
160+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
161| BGP Message Packet |
162| |
163+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
164@end group
165@end example
166
167If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY,
168and Address Family == IP (version 4)
169
170@example
171@group
172 0 1 2 3
173 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
174+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
175| View # | Status |
176+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
177| Time Last Change |
178+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
179| Address Family | SAFI | Next-Hop-Len |
180+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
181| Next Hop Address |
182+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
183| Prefix Length | Address Prefix [variable] |
184+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
185| Attribute Length |
186+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
187| BGP Attribute [variable length] |
188+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
189@end group
190@end example
191
192If `type' is PROTOCOL_BGP4MP, `subtype' is BGP4MP_ENTRY,
193and Address Family == IP version 6
194
195@example
196@group
197 0 1 2 3
198 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
199+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
200| View # | Status |
201+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
202| Time Last Change |
203+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
204| Address Family | SAFI | Next-Hop-Len |
205+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
206| Next Hop Address |
207+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
208| Next Hop Address (Cont'd) |
209+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
210| Next Hop Address (Cont'd) |
211+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
212| Next Hop Address (Cont'd) |
213+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
214| Prefix Length | Address Prefix [variable] |
215+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
216| Address Prefix (cont'd) [variable] |
217+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
218| Attribute Length |
219+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
220| BGP Attribute [variable length] |
221+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
222@end group
223@end example
224
225 BGP4 Attribute must not contain MP_UNREACH_NLRI.
226 If BGP Attribute has MP_REACH_NLRI field, it must has
227 zero length NLRI, e.g., MP_REACH_NLRI has only Address
228 Family, SAFI and next-hop values.
229
230If `type' is PROTOCOL_BGP4MP and `subtype' is BGP4MP_SNAPSHOT,
231
232@example
233@group
234 0 1 2 3
235 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
236+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
237| View # | File Name [variable] |
238+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
239@end group
240@end example
241
242 The file specified in "File Name" contains all routing entries,
243 which are in the format of ``subtype == BGP4MP_ENTRY''.
244
245@example
246@group
247Constants:
248 /* type value */
Alexis Fasqueldbe99e02015-11-16 13:55:16 -0500249 #define MSG_PROTOCOL_BGP4MP 16
250 #define MSG_PROTOCOL_BGP4MP_ET 17
paul718e3742002-12-13 20:15:29 +0000251 /* subtype value */
252 #define BGP4MP_STATE_CHANGE 0
253 #define BGP4MP_MESSAGE 1
254 #define BGP4MP_ENTRY 2
255 #define BGP4MP_SNAPSHOT 3
256@end group
257@end example