Skip to content

Commit 3a0ca23

Browse files
author
Wilson Ng
committed
Merge branch 'master' of http://github.com/floodlight/bigcode
2 parents c156b12 + ad91ce4 commit 3a0ca23

File tree

7 files changed

+253
-5
lines changed

7 files changed

+253
-5
lines changed

modules/PPE/module/auto/PPE.yml

+21
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ pservice_ports: &pservice_ports
183183
- DHCP_CLIENT : 68
184184
- DHCP_SERVER : 67
185185
- VXLAN : 4789
186+
- MICRO_BFD : 6784
187+
- SINGLE_HOP_BFD : 3784
188+
- MULTI_HOP_BFD : 4784
186189

187190

188191
###############################################################################
@@ -254,6 +257,7 @@ headers: &headers
254257
- OF10
255258
- IGMP
256259
- PIM
260+
- BFD
257261

258262
###############################################################################
259263
#
@@ -452,6 +456,23 @@ fields: &fields
452456
- [ PIM, TYPE, 4, 0, 0 ]
453457
- [ PIM, CHECKSUM, 16, 2, 0 ]
454458

459+
- [ BFD, VERSION, 3, 0, 5 ]
460+
- [ BFD, DIAG, 5, 0, 0 ]
461+
- [ BFD, STATE, 2, 1, 6 ]
462+
- [ BFD, POLL, 1, 1, 5 ]
463+
- [ BFD, FINAL, 1, 1, 4 ]
464+
- [ BFD, CONTROL_IND, 1, 1, 3 ]
465+
- [ BFD, AUTH, 1, 1, 2 ]
466+
- [ BFD, DEMAND, 1, 1, 1 ]
467+
- [ BFD, MULTIPOINT, 1, 1, 0 ]
468+
- [ BFD, DETECT_MULT, 8, 2, 0 ]
469+
- [ BFD, LENGTH, 8, 3, 0 ]
470+
- [ BFD, MY_DISCR, 32, 4, 0 ]
471+
- [ BFD, YOUR_DISCR, 32, 8, 0 ]
472+
- [ BFD, MIN_TX, 32, 12, 0 ]
473+
- [ BFD, MIN_RX, 32, 16, 0 ]
474+
- [ BFD, MIN_ECHO, 32, 20, 0 ]
475+
# FIXME: authentication not handled because data length depends on auth type
455476

456477
###############################################################################
457478
#

modules/PPE/module/inc/PPE/ppe.x

+20
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,22 @@ PPE_FIELD_ENTRY(OF10, LAST, 0, 52, 0)
205205
PPE_FIELD_ENTRY(PIM, VERSION, 4, 0, 4)
206206
PPE_FIELD_ENTRY(PIM, TYPE, 4, 0, 0)
207207
PPE_FIELD_ENTRY(PIM, CHECKSUM, 16, 2, 0)
208+
PPE_FIELD_ENTRY(BFD, VERSION, 3, 0, 5)
209+
PPE_FIELD_ENTRY(BFD, DIAG, 5, 0, 0)
210+
PPE_FIELD_ENTRY(BFD, STATE, 2, 1, 6)
211+
PPE_FIELD_ENTRY(BFD, POLL, 1, 1, 5)
212+
PPE_FIELD_ENTRY(BFD, FINAL, 1, 1, 4)
213+
PPE_FIELD_ENTRY(BFD, CONTROL_IND, 1, 1, 3)
214+
PPE_FIELD_ENTRY(BFD, AUTH, 1, 1, 2)
215+
PPE_FIELD_ENTRY(BFD, DEMAND, 1, 1, 1)
216+
PPE_FIELD_ENTRY(BFD, MULTIPOINT, 1, 1, 0)
217+
PPE_FIELD_ENTRY(BFD, DETECT_MULT, 8, 2, 0)
218+
PPE_FIELD_ENTRY(BFD, LENGTH, 8, 3, 0)
219+
PPE_FIELD_ENTRY(BFD, MY_DISCR, 32, 4, 0)
220+
PPE_FIELD_ENTRY(BFD, YOUR_DISCR, 32, 8, 0)
221+
PPE_FIELD_ENTRY(BFD, MIN_TX, 32, 12, 0)
222+
PPE_FIELD_ENTRY(BFD, MIN_RX, 32, 16, 0)
223+
PPE_FIELD_ENTRY(BFD, MIN_ECHO, 32, 20, 0)
208224
#undef PPE_FIELD_ENTRY
209225
#endif
210226

@@ -236,6 +252,7 @@ PPE_HEADER_ENTRY(ETHERTYPE_MISSING)
236252
PPE_HEADER_ENTRY(OF10)
237253
PPE_HEADER_ENTRY(IGMP)
238254
PPE_HEADER_ENTRY(PIM)
255+
PPE_HEADER_ENTRY(BFD)
239256
#undef PPE_HEADER_ENTRY
240257
#endif
241258

@@ -316,6 +333,9 @@ PPE_IP_PROTOCOL_ENTRY(PIM, 103)
316333
PPE_PSERVICE_PORT_ENTRY(DHCP_CLIENT, 68)
317334
PPE_PSERVICE_PORT_ENTRY(DHCP_SERVER, 67)
318335
PPE_PSERVICE_PORT_ENTRY(VXLAN, 4789)
336+
PPE_PSERVICE_PORT_ENTRY(MICRO_BFD, 6784)
337+
PPE_PSERVICE_PORT_ENTRY(SINGLE_HOP_BFD, 3784)
338+
PPE_PSERVICE_PORT_ENTRY(MULTI_HOP_BFD, 4784)
319339
#undef PPE_PSERVICE_PORT_ENTRY
320340
#endif
321341

modules/PPE/module/inc/PPE/ppe_types.h

+25-4
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,23 @@ typedef enum ppe_field_e {
230230
PPE_FIELD_PIM_VERSION,
231231
PPE_FIELD_PIM_TYPE,
232232
PPE_FIELD_PIM_CHECKSUM,
233-
PPE_FIELD_LAST = PPE_FIELD_PIM_CHECKSUM,
233+
PPE_FIELD_BFD_VERSION,
234+
PPE_FIELD_BFD_DIAG,
235+
PPE_FIELD_BFD_STATE,
236+
PPE_FIELD_BFD_POLL,
237+
PPE_FIELD_BFD_FINAL,
238+
PPE_FIELD_BFD_CONTROL_IND,
239+
PPE_FIELD_BFD_AUTH,
240+
PPE_FIELD_BFD_DEMAND,
241+
PPE_FIELD_BFD_MULTIPOINT,
242+
PPE_FIELD_BFD_DETECT_MULT,
243+
PPE_FIELD_BFD_LENGTH,
244+
PPE_FIELD_BFD_MY_DISCR,
245+
PPE_FIELD_BFD_YOUR_DISCR,
246+
PPE_FIELD_BFD_MIN_TX,
247+
PPE_FIELD_BFD_MIN_RX,
248+
PPE_FIELD_BFD_MIN_ECHO,
249+
PPE_FIELD_LAST = PPE_FIELD_BFD_MIN_ECHO,
234250
PPE_FIELD_COUNT,
235251
PPE_FIELD_INVALID = -1,
236252
} ppe_field_t;
@@ -246,7 +262,7 @@ const char* ppe_field_desc(ppe_field_t e);
246262

247263
/** validator */
248264
#define PPE_FIELD_VALID(_e) \
249-
( (0 <= (_e)) && ((_e) <= PPE_FIELD_PIM_CHECKSUM))
265+
( (0 <= (_e)) && ((_e) <= PPE_FIELD_BFD_MIN_ECHO))
250266

251267
/** ppe_field_map table. */
252268
extern aim_map_si_t ppe_field_map[];
@@ -282,7 +298,8 @@ typedef enum ppe_header_e {
282298
PPE_HEADER_OF10,
283299
PPE_HEADER_IGMP,
284300
PPE_HEADER_PIM,
285-
PPE_HEADER_LAST = PPE_HEADER_PIM,
301+
PPE_HEADER_BFD,
302+
PPE_HEADER_LAST = PPE_HEADER_BFD,
286303
PPE_HEADER_COUNT,
287304
PPE_HEADER_INVALID = -1,
288305
} ppe_header_t;
@@ -317,6 +334,7 @@ typedef enum ppe_header_e {
317334
"OF10", \
318335
"IGMP", \
319336
"PIM", \
337+
"BFD", \
320338
}
321339
/** Enum names. */
322340
const char* ppe_header_name(ppe_header_t e);
@@ -329,7 +347,7 @@ const char* ppe_header_desc(ppe_header_t e);
329347

330348
/** validator */
331349
#define PPE_HEADER_VALID(_e) \
332-
( (0 <= (_e)) && ((_e) <= PPE_HEADER_PIM))
350+
( (0 <= (_e)) && ((_e) <= PPE_HEADER_BFD))
333351

334352
/** ppe_header_map table. */
335353
extern aim_map_si_t ppe_header_map[];
@@ -597,6 +615,9 @@ typedef enum ppe_pservice_port_e {
597615
PPE_PSERVICE_PORT_DHCP_CLIENT = 68,
598616
PPE_PSERVICE_PORT_DHCP_SERVER = 67,
599617
PPE_PSERVICE_PORT_VXLAN = 4789,
618+
PPE_PSERVICE_PORT_MICRO_BFD = 6784,
619+
PPE_PSERVICE_PORT_SINGLE_HOP_BFD = 3784,
620+
PPE_PSERVICE_PORT_MULTI_HOP_BFD = 4784,
600621
} ppe_pservice_port_t;
601622

602623
/** Enum names. */

modules/PPE/module/src/ppe_enums.c

+40
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,22 @@ aim_map_si_t ppe_field_map[] =
263263
{ "PIM_VERSION", PPE_FIELD_PIM_VERSION },
264264
{ "PIM_TYPE", PPE_FIELD_PIM_TYPE },
265265
{ "PIM_CHECKSUM", PPE_FIELD_PIM_CHECKSUM },
266+
{ "BFD_VERSION", PPE_FIELD_BFD_VERSION },
267+
{ "BFD_DIAG", PPE_FIELD_BFD_DIAG },
268+
{ "BFD_STATE", PPE_FIELD_BFD_STATE },
269+
{ "BFD_POLL", PPE_FIELD_BFD_POLL },
270+
{ "BFD_FINAL", PPE_FIELD_BFD_FINAL },
271+
{ "BFD_CONTROL_IND", PPE_FIELD_BFD_CONTROL_IND },
272+
{ "BFD_AUTH", PPE_FIELD_BFD_AUTH },
273+
{ "BFD_DEMAND", PPE_FIELD_BFD_DEMAND },
274+
{ "BFD_MULTIPOINT", PPE_FIELD_BFD_MULTIPOINT },
275+
{ "BFD_DETECT_MULT", PPE_FIELD_BFD_DETECT_MULT },
276+
{ "BFD_LENGTH", PPE_FIELD_BFD_LENGTH },
277+
{ "BFD_MY_DISCR", PPE_FIELD_BFD_MY_DISCR },
278+
{ "BFD_YOUR_DISCR", PPE_FIELD_BFD_YOUR_DISCR },
279+
{ "BFD_MIN_TX", PPE_FIELD_BFD_MIN_TX },
280+
{ "BFD_MIN_RX", PPE_FIELD_BFD_MIN_RX },
281+
{ "BFD_MIN_ECHO", PPE_FIELD_BFD_MIN_ECHO },
266282
{ NULL, 0 }
267283
};
268284

@@ -435,6 +451,22 @@ aim_map_si_t ppe_field_desc_map[] =
435451
{ "None", PPE_FIELD_PIM_VERSION },
436452
{ "None", PPE_FIELD_PIM_TYPE },
437453
{ "None", PPE_FIELD_PIM_CHECKSUM },
454+
{ "None", PPE_FIELD_BFD_VERSION },
455+
{ "None", PPE_FIELD_BFD_DIAG },
456+
{ "None", PPE_FIELD_BFD_STATE },
457+
{ "None", PPE_FIELD_BFD_POLL },
458+
{ "None", PPE_FIELD_BFD_FINAL },
459+
{ "None", PPE_FIELD_BFD_CONTROL_IND },
460+
{ "None", PPE_FIELD_BFD_AUTH },
461+
{ "None", PPE_FIELD_BFD_DEMAND },
462+
{ "None", PPE_FIELD_BFD_MULTIPOINT },
463+
{ "None", PPE_FIELD_BFD_DETECT_MULT },
464+
{ "None", PPE_FIELD_BFD_LENGTH },
465+
{ "None", PPE_FIELD_BFD_MY_DISCR },
466+
{ "None", PPE_FIELD_BFD_YOUR_DISCR },
467+
{ "None", PPE_FIELD_BFD_MIN_TX },
468+
{ "None", PPE_FIELD_BFD_MIN_RX },
469+
{ "None", PPE_FIELD_BFD_MIN_ECHO },
438470
{ NULL, 0 }
439471
};
440472

@@ -507,6 +539,7 @@ aim_map_si_t ppe_header_map[] =
507539
{ "OF10", PPE_HEADER_OF10 },
508540
{ "IGMP", PPE_HEADER_IGMP },
509541
{ "PIM", PPE_HEADER_PIM },
542+
{ "BFD", PPE_HEADER_BFD },
510543
{ NULL, 0 }
511544
};
512545

@@ -539,6 +572,7 @@ aim_map_si_t ppe_header_desc_map[] =
539572
{ "None", PPE_HEADER_OF10 },
540573
{ "None", PPE_HEADER_IGMP },
541574
{ "None", PPE_HEADER_PIM },
575+
{ "None", PPE_HEADER_BFD },
542576
{ NULL, 0 }
543577
};
544578

@@ -1123,6 +1157,9 @@ aim_map_si_t ppe_pservice_port_map[] =
11231157
{ "DHCP_CLIENT", PPE_PSERVICE_PORT_DHCP_CLIENT },
11241158
{ "DHCP_SERVER", PPE_PSERVICE_PORT_DHCP_SERVER },
11251159
{ "VXLAN", PPE_PSERVICE_PORT_VXLAN },
1160+
{ "MICRO_BFD", PPE_PSERVICE_PORT_MICRO_BFD },
1161+
{ "SINGLE_HOP_BFD", PPE_PSERVICE_PORT_SINGLE_HOP_BFD },
1162+
{ "MULTI_HOP_BFD", PPE_PSERVICE_PORT_MULTI_HOP_BFD },
11261163
{ NULL, 0 }
11271164
};
11281165

@@ -1131,6 +1168,9 @@ aim_map_si_t ppe_pservice_port_desc_map[] =
11311168
{ "None", PPE_PSERVICE_PORT_DHCP_CLIENT },
11321169
{ "None", PPE_PSERVICE_PORT_DHCP_SERVER },
11331170
{ "None", PPE_PSERVICE_PORT_VXLAN },
1171+
{ "None", PPE_PSERVICE_PORT_MICRO_BFD },
1172+
{ "None", PPE_PSERVICE_PORT_SINGLE_HOP_BFD },
1173+
{ "None", PPE_PSERVICE_PORT_MULTI_HOP_BFD },
11341174
{ NULL, 0 }
11351175
};
11361176

modules/PPE/module/src/ppe_parse.c

+37
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,43 @@ ppe_parse_service_port_VXLAN(ppe_packet_t* ppep,
158158
return 0;
159159
}
160160

161+
static inline int
162+
ppe_parse_service_port_MICRO_BFD(ppe_packet_t* ppep,
163+
uint16_t sport, uint16_t dport,
164+
uint8_t* data, int size)
165+
{
166+
AIM_REFERENCE(sport);
167+
AIM_REFERENCE(dport);
168+
AIM_REFERENCE(size);
169+
PPE_PACKET_HEADER_SET(ppep, PPE_HEADER_BFD, data);
170+
return 0;
171+
}
172+
173+
static inline int
174+
ppe_parse_service_port_SINGLE_HOP_BFD(ppe_packet_t* ppep,
175+
uint16_t sport, uint16_t dport,
176+
uint8_t* data, int size)
177+
{
178+
AIM_REFERENCE(sport);
179+
AIM_REFERENCE(dport);
180+
AIM_REFERENCE(size);
181+
PPE_PACKET_HEADER_SET(ppep, PPE_HEADER_BFD, data);
182+
return 0;
183+
}
184+
185+
static inline int
186+
ppe_parse_service_port_MULTI_HOP_BFD(ppe_packet_t* ppep,
187+
uint16_t sport, uint16_t dport,
188+
uint8_t* data, int size)
189+
{
190+
AIM_REFERENCE(sport);
191+
AIM_REFERENCE(dport);
192+
AIM_REFERENCE(size);
193+
PPE_PACKET_HEADER_SET(ppep, PPE_HEADER_BFD, data);
194+
return 0;
195+
}
196+
197+
161198
static inline int
162199
ppe_parse_service_ports(ppe_packet_t* ppep, uint8_t* data, int size)
163200
{

modules/PPE/utest/ppe_utests.c

+62-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************
22
*
3-
* This file autogenerated from ppe_utests.yml on 2016-08-23 13:37:59.521757.
3+
* This file autogenerated from ppe_utests.yml on 2018-08-13 14:54:23.311474.
44
*
55
* DO NOT EDIT. Changes to this file will be discarded upon regeneration.
66
*
@@ -511,6 +511,67 @@ ucli_block_t ppe_utests[] =
511511
"check ICMPV6_CHECKSUM == 0x1176",
512512
},
513513
},
514+
{
515+
"BFD_HEADER",
516+
{
517+
"data {01005e900001}{5c16c7ffff04}{0800}{4500003400000000ff11a5a90a00010a0a000106c3511a8000207010214803180000000100000000000f4240000c350000000000}",
518+
"check BFD_VERSION == 1",
519+
"check BFD_DIAG == 1",
520+
"check BFD_STATE == 1",
521+
"check BFD_DETECT_MULT == 3",
522+
"check BFD_LENGTH == 24",
523+
"check BFD_MY_DISCR == 1",
524+
"check BFD_YOUR_DISCR == 0",
525+
},
526+
},
527+
{
528+
"BFD_POLL",
529+
{
530+
"data {01005e900001}{5c16c7ffff04}{0800}{450000340001000040117CB67F0000017F00000100351A800020DAD920E00318000000010000000A000493E00005573000000000}",
531+
"check BFD_VERSION == 1",
532+
"check BFD_DIAG == 0",
533+
"check BFD_STATE == 3",
534+
"check BFD_POLL == 1",
535+
"check BFD_DETECT_MULT == 3",
536+
"check BFD_LENGTH == 24",
537+
"check BFD_MY_DISCR == 1",
538+
"check BFD_YOUR_DISCR == 10",
539+
"check BFD_MIN_TX == 300000",
540+
"check BFD_MIN_RX == 350000",
541+
},
542+
},
543+
{
544+
"BFD_FINAL",
545+
{
546+
"data {01005e900001}{5c16c7ffff04}{0800}{450000340001000040117CB67F0000017F00000100351A800020DAD920D00318000000010000000A000493E00005573000000000}",
547+
"check BFD_VERSION == 1",
548+
"check BFD_DIAG == 0",
549+
"check BFD_STATE == 3",
550+
"check BFD_FINAL == 1",
551+
"check BFD_DETECT_MULT == 3",
552+
"check BFD_LENGTH == 24",
553+
"check BFD_MY_DISCR == 1",
554+
"check BFD_YOUR_DISCR == 10",
555+
"check BFD_MIN_TX == 300000",
556+
"check BFD_MIN_RX == 350000",
557+
},
558+
},
559+
{
560+
"BFD_CONTROL_INDEPENDENT",
561+
{
562+
"data {01005e900001}{5c16c7ffff04}{0800}{450000340001000040117CB67F0000017F00000100351A800020DAD920C80318000000010000000A000493E00005573000000000}",
563+
"check BFD_VERSION == 1",
564+
"check BFD_DIAG == 0",
565+
"check BFD_STATE == 3",
566+
"check BFD_CONTROL_IND == 1",
567+
"check BFD_DETECT_MULT == 3",
568+
"check BFD_LENGTH == 24",
569+
"check BFD_MY_DISCR == 1",
570+
"check BFD_YOUR_DISCR == 10",
571+
"check BFD_MIN_TX == 300000",
572+
"check BFD_MIN_RX == 350000",
573+
},
574+
},
514575
{ (void*)0 }
515576
};
516577
int ppe_utests_count = sizeof(ppe_utests)/sizeof(ppe_utests[0]);

0 commit comments

Comments
 (0)