30 #define MPLS_HEADER_LEN 4
32 #define MPLS_MAX_RESERVED_LABEL 15
34 #define MPLS_LABEL_IPV4 0
35 #define MPLS_LABEL_ROUTER_ALERT 1
36 #define MPLS_LABEL_IPV6 2
37 #define MPLS_LABEL_NULL 3
39 #define MPLS_LABEL(shim) SCNtohl(shim) >> 12
40 #define MPLS_BOTTOM(shim) ((SCNtohl(shim) >> 8) & 0x1)
43 #define MPLS_PROTO_ETHERNET_PW 0
44 #define MPLS_PROTO_IPV4 4
45 #define MPLS_PROTO_IPV6 6
48 const uint8_t *pkt, uint32_t
len)
61 memcpy(&shim, pkt,
sizeof(shim));
68 if (
len > USHRT_MAX) {
78 if (
len > USHRT_MAX) {
103 switch (pkt[0] >> 4) {
105 if (
len > USHRT_MAX) {
111 if (
len > USHRT_MAX) {
133 static int DecodeMPLSTestHeaderTooSmall(
void)
163 static int DecodeMPLSTestPacketTooSmall(
void)
173 uint8_t pkt0[] = { 0x00, 0x01, 0x51, 0xff };
180 uint8_t pkt1[] = { 0x00, 0x01, 0x51, 0xff, 0x45 };
187 uint8_t pkt2[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01 };
194 uint8_t pkt3[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02 };
203 uint8_t pkt4[] = { 0x00, 0x01, 0x51, 0xff, 0x45, 0x01, 0x02, 0x03 };
211 static int DecodeMPLSTestBadLabelRouterAlert(
void)
215 0x00, 0x00, 0x11, 0xff, 0x45, 0x00, 0x00, 0x64,
216 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
217 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
218 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
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,
224 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
225 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
226 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
227 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
251 static int DecodeMPLSTestBadLabelImplicitNull(
void)
255 0x00, 0x00, 0x31, 0xff, 0x45, 0x00, 0x00, 0x64,
256 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
257 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
258 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
259 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
260 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
261 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
262 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
263 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
264 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
265 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
266 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
267 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
291 static int DecodeMPLSTestBadLabelReserved(
void)
295 0x00, 0x00, 0x51, 0xff, 0x45, 0x00, 0x00, 0x64,
296 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
297 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
298 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
299 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
300 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
301 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
302 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
303 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
304 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
305 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
306 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
307 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
331 static int DecodeMPLSTestUnknownPayloadType(
void)
339 0x00, 0x01, 0x51, 0xff, 0x15, 0x00, 0x00, 0x64,
340 0x00, 0x0a, 0x00, 0x00, 0xff, 0x01, 0xa5, 0x6a,
341 0x0a, 0x01, 0x02, 0x01, 0x0a, 0x22, 0x00, 0x01,
342 0x08, 0x00, 0x3a, 0x77, 0x0a, 0x39, 0x06, 0x2b,
343 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x33, 0x50,
344 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
345 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
346 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
347 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
348 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
349 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
350 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd,
351 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd
381 DecodeMPLSTestHeaderTooSmall);
383 DecodeMPLSTestPacketTooSmall);
385 DecodeMPLSTestBadLabelRouterAlert);
387 DecodeMPLSTestBadLabelImplicitNull);
389 DecodeMPLSTestBadLabelReserved);
391 DecodeMPLSTestUnknownPayloadType);