32 #define MPLS_HEADER_LEN 4
34 #define MPLS_MAX_RESERVED_LABEL 15
36 #define MPLS_LABEL_IPV4 0
37 #define MPLS_LABEL_ROUTER_ALERT 1
38 #define MPLS_LABEL_IPV6 2
39 #define MPLS_LABEL_NULL 3
41 #define MPLS_LABEL(shim) SCNtohl(shim) >> 12
42 #define MPLS_BOTTOM(shim) ((SCNtohl(shim) >> 8) & 0x1)
45 #define MPLS_PROTO_ETHERNET_PW 0
46 #define MPLS_PROTO_IPV4 4
47 #define MPLS_PROTO_IPV6 6
50 const uint8_t *pkt, uint32_t
len)
60 if (!PacketIncreaseCheckLayers(p)) {
68 memcpy(&shim, pkt,
sizeof(shim));
75 if (
len > USHRT_MAX) {
85 if (
len > USHRT_MAX) {
110 switch (pkt[0] >> 4) {
112 if (
len > USHRT_MAX) {
118 if (
len > USHRT_MAX) {
140 static int DecodeMPLSTestHeaderTooSmall(
void)
161 static int DecodeMPLSTestPacketTooSmall(
void)
170 uint8_t pkt0[] = { 0x00, 0x01, 0x51, 0xff };
177 uint8_t pkt1[] = { 0x00, 0x01, 0x51, 0xff, 0x45 };
184 uint8_t pkt2[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01 };
191 uint8_t pkt3[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02 };
200 uint8_t pkt4[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02, 0x03 };
208 static int DecodeMPLSTestBadLabelRouterAlert(
void)
211 0x00, 0x00, 0x11, 0xff, 0x45, 0x00, 0x00, 0x64,
212 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
213 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
214 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
215 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
216 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
217 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
218 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
219 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
220 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
221 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
222 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
223 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
241 static int DecodeMPLSTestBadLabelImplicitNull(
void)
244 0x00, 0x00, 0x31, 0xff, 0x45, 0x00, 0x00, 0x64,
245 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
246 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
247 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
248 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
249 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
250 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
251 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
252 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
253 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
254 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
255 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
256 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
273 static int DecodeMPLSTestBadLabelReserved(
void)
276 0x00, 0x00, 0x51, 0xff, 0x45, 0x00, 0x00, 0x64,
277 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
278 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
279 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
281 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
282 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
283 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
284 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
285 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
286 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
287 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
288 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
305 static int DecodeMPLSTestUnknownPayloadType(
void)
311 0x00, 0x01, 0x51, 0xff, 0x15, 0x00, 0x00, 0x64,
312 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
313 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
314 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
315 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
316 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
317 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
318 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
319 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
320 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
321 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
322 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
323 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
346 DecodeMPLSTestHeaderTooSmall);
348 DecodeMPLSTestPacketTooSmall);
350 DecodeMPLSTestBadLabelRouterAlert);
352 DecodeMPLSTestBadLabelImplicitNull);
354 DecodeMPLSTestBadLabelReserved);
356 DecodeMPLSTestUnknownPayloadType);