@@ -253,19 +253,12 @@ str_to_ipv6(const char *str_, struct in6_addr *addrp, struct in6_addr *maskp)
253253 free (str );
254254}
255255
256- static void *
257- put_action (struct ofpbuf * b , size_t size , uint16_t type )
258- {
259- struct ofp_action_header * ah = ofpbuf_put_zeros (b , size );
260- ah -> type = htons (type );
261- ah -> len = htons (size );
262- return ah ;
263- }
264-
265256static struct ofp_action_output *
266257put_output_action (struct ofpbuf * b , uint16_t port )
267258{
268- struct ofp_action_output * oao = put_action (b , sizeof * oao , OFPAT_OUTPUT );
259+ struct ofp_action_output * oao ;
260+
261+ oao = ofputil_put_OFPAT_OUTPUT (b );
269262 oao -> port = htons (port );
270263 return oao ;
271264}
@@ -282,18 +275,11 @@ parse_enqueue(struct ofpbuf *b, char *arg)
282275 ovs_fatal (0 , "\"enqueue\" syntax is \"enqueue:PORT:QUEUE\"" );
283276 }
284277
285- oae = put_action ( b , sizeof * oae , OFPAT_ENQUEUE );
278+ oae = ofputil_put_OFPAT_ENQUEUE ( b );
286279 oae -> port = htons (str_to_u32 (port ));
287280 oae -> queue_id = htonl (str_to_u32 (queue ));
288281}
289282
290- static void
291- put_dl_addr_action (struct ofpbuf * b , uint16_t type , const char * addr )
292- {
293- struct ofp_action_dl_addr * oada = put_action (b , sizeof * oada , type );
294- str_to_mac (addr , oada -> dl_addr );
295- }
296-
297283static void
298284parse_output (struct ofpbuf * b , char * arg )
299285{
@@ -304,9 +290,7 @@ parse_output(struct ofpbuf *b, char *arg)
304290
305291 nxm_parse_field_bits (arg , & src , & ofs , & n_bits );
306292
307- naor = put_action (b , sizeof * naor , OFPAT_VENDOR );
308- naor -> vendor = htonl (NX_VENDOR_ID );
309- naor -> subtype = htons (NXAST_OUTPUT_REG );
293+ naor = ofputil_put_NXAST_OUTPUT_REG (b );
310294 naor -> ofs_nbits = nxm_encode_ofs_nbits (ofs , n_bits );
311295 naor -> src = htonl (src );
312296 naor -> max_len = htons (UINT16_MAX );
@@ -316,8 +300,9 @@ parse_output(struct ofpbuf *b, char *arg)
316300}
317301
318302static void
319- parse_resubmit (struct nx_action_resubmit * nar , char * arg )
303+ parse_resubmit (struct ofpbuf * b , char * arg )
320304{
305+ struct nx_action_resubmit * nar ;
321306 char * in_port_s , * table_s ;
322307 uint16_t in_port ;
323308 uint8_t table ;
@@ -339,33 +324,23 @@ parse_resubmit(struct nx_action_resubmit *nar, char *arg)
339324 " on resubmit" );
340325 }
341326
342- nar -> vendor = htonl (NX_VENDOR_ID );
343- nar -> in_port = htons (in_port );
344327 if (in_port != OFPP_IN_PORT && table == 255 ) {
345- nar -> subtype = htons ( NXAST_RESUBMIT );
328+ nar = ofputil_put_NXAST_RESUBMIT ( b );
346329 } else {
347- nar -> subtype = htons ( NXAST_RESUBMIT_TABLE );
330+ nar = ofputil_put_NXAST_RESUBMIT_TABLE ( b );
348331 nar -> table = table ;
349332 }
333+ nar -> in_port = htons (in_port );
350334}
351335
352336static void
353- parse_set_tunnel (struct ofpbuf * b , enum ofputil_action_code code ,
354- const char * arg )
337+ parse_set_tunnel (struct ofpbuf * b , const char * arg )
355338{
356339 uint64_t tun_id = str_to_u64 (arg );
357- if (code == OFPUTIL_NXAST_SET_TUNNEL64 || tun_id > UINT32_MAX ) {
358- struct nx_action_set_tunnel64 * nast64 ;
359- nast64 = put_action (b , sizeof * nast64 , OFPAT_VENDOR );
360- nast64 -> vendor = htonl (NX_VENDOR_ID );
361- nast64 -> subtype = htons (NXAST_SET_TUNNEL64 );
362- nast64 -> tun_id = htonll (tun_id );
340+ if (tun_id > UINT32_MAX ) {
341+ ofputil_put_NXAST_SET_TUNNEL64 (b )-> tun_id = htonll (tun_id );
363342 } else {
364- struct nx_action_set_tunnel * nast ;
365- nast = put_action (b , sizeof * nast , OFPAT_VENDOR );
366- nast -> vendor = htonl (NX_VENDOR_ID );
367- nast -> subtype = htons (NXAST_SET_TUNNEL );
368- nast -> tun_id = htonl (tun_id );
343+ ofputil_put_NXAST_SET_TUNNEL (b )-> tun_id = htonl (tun_id );
369344 }
370345}
371346
@@ -377,9 +352,7 @@ parse_note(struct ofpbuf *b, const char *arg)
377352 int remainder ;
378353 size_t len ;
379354
380- nan = put_action (b , sizeof * nan , OFPAT_VENDOR );
381- nan -> vendor = htonl (NX_VENDOR_ID );
382- nan -> subtype = htons (NXAST_NOTE );
355+ nan = ofputil_put_NXAST_NOTE (b );
383356
384357 b -> size -= sizeof nan -> note ;
385358 while (* arg != '\0' ) {
@@ -414,68 +387,50 @@ parse_note(struct ofpbuf *b, const char *arg)
414387static void
415388parse_named_action (enum ofputil_action_code code , struct ofpbuf * b , char * arg )
416389{
390+ struct ofp_action_dl_addr * oada ;
417391 struct ofp_action_vlan_pcp * oavp ;
418392 struct ofp_action_vlan_vid * oavv ;
419393 struct ofp_action_nw_addr * oana ;
420- struct ofp_action_nw_tos * oant ;
421394 struct ofp_action_tp_port * oata ;
422- struct nx_action_header * nah ;
423- struct nx_action_resubmit * nar ;
424- struct nx_action_set_queue * nasq ;
425- struct nx_action_reg_move * move ;
426- struct nx_action_reg_load * load ;
427- struct nx_action_multipath * nam ;
428- struct nx_action_autopath * naa ;
429395
430396 switch (code ) {
431397 case OFPUTIL_OFPAT_OUTPUT :
432398 parse_output (b , arg );
433399 break ;
434400
435401 case OFPUTIL_OFPAT_SET_VLAN_VID :
436- oavv = put_action ( b , sizeof * oavv , OFPAT_SET_VLAN_VID );
402+ oavv = ofputil_put_OFPAT_SET_VLAN_VID ( b );
437403 oavv -> vlan_vid = htons (str_to_u32 (arg ));
438404 break ;
439405
440406 case OFPUTIL_OFPAT_SET_VLAN_PCP :
441- oavp = put_action ( b , sizeof * oavp , OFPAT_SET_VLAN_PCP );
407+ oavp = ofputil_put_OFPAT_SET_VLAN_PCP ( b );
442408 oavp -> vlan_pcp = str_to_u32 (arg );
443409 break ;
444410
445411 case OFPUTIL_OFPAT_STRIP_VLAN :
446- put_action ( b , sizeof ( struct ofp_action_header ), OFPAT_STRIP_VLAN );
412+ ofputil_put_OFPAT_STRIP_VLAN ( b );
447413 break ;
448414
449415 case OFPUTIL_OFPAT_SET_DL_SRC :
450- put_dl_addr_action (b , OFPAT_SET_DL_SRC , arg );
451- break ;
452-
453416 case OFPUTIL_OFPAT_SET_DL_DST :
454- put_dl_addr_action (b , OFPAT_SET_DL_DST , arg );
417+ oada = ofputil_put_action (code , b );
418+ str_to_mac (arg , oada -> dl_addr );
455419 break ;
456420
457421 case OFPUTIL_OFPAT_SET_NW_SRC :
458- oana = put_action (b , sizeof * oana , OFPAT_SET_NW_SRC );
459- str_to_ip (arg , & oana -> nw_addr , NULL );
460- break ;
461-
462422 case OFPUTIL_OFPAT_SET_NW_DST :
463- oana = put_action ( b , sizeof * oana , OFPAT_SET_NW_DST );
423+ oana = ofputil_put_action ( code , b );
464424 str_to_ip (arg , & oana -> nw_addr , NULL );
465425 break ;
466426
467427 case OFPUTIL_OFPAT_SET_NW_TOS :
468- oant = put_action (b , sizeof * oant , OFPAT_SET_NW_TOS );
469- oant -> nw_tos = str_to_u32 (arg );
428+ ofputil_put_OFPAT_SET_NW_TOS (b )-> nw_tos = str_to_u32 (arg );
470429 break ;
471430
472431 case OFPUTIL_OFPAT_SET_TP_SRC :
473- oata = put_action (b , sizeof * oata , OFPAT_SET_TP_SRC );
474- oata -> tp_port = htons (str_to_u32 (arg ));
475- break ;
476-
477432 case OFPUTIL_OFPAT_SET_TP_DST :
478- oata = put_action ( b , sizeof * oata , OFPAT_SET_TP_DST );
433+ oata = ofputil_put_action ( code , b );
479434 oata -> tp_port = htons (str_to_u32 (arg ));
480435 break ;
481436
@@ -484,50 +439,43 @@ parse_named_action(enum ofputil_action_code code, struct ofpbuf *b, char *arg)
484439 break ;
485440
486441 case OFPUTIL_NXAST_RESUBMIT :
487- nar = put_action (b , sizeof * nar , OFPAT_VENDOR );
488- parse_resubmit (nar , arg );
442+ parse_resubmit (b , arg );
489443 break ;
490444
491445 case OFPUTIL_NXAST_SET_TUNNEL :
492- case OFPUTIL_NXAST_SET_TUNNEL64 :
493- parse_set_tunnel (b , code , arg );
446+ parse_set_tunnel (b , arg );
494447 break ;
495448
496449 case OFPUTIL_NXAST_SET_QUEUE :
497- nasq = put_action (b , sizeof * nasq , OFPAT_VENDOR );
498- nasq -> vendor = htonl (NX_VENDOR_ID );
499- nasq -> subtype = htons (NXAST_SET_QUEUE );
500- nasq -> queue_id = htonl (str_to_u32 (arg ));
450+ ofputil_put_NXAST_SET_QUEUE (b )-> queue_id = htonl (str_to_u32 (arg ));
501451 break ;
502452
503453 case OFPUTIL_NXAST_POP_QUEUE :
504- nah = put_action (b , sizeof * nah , OFPAT_VENDOR );
505- nah -> vendor = htonl (NX_VENDOR_ID );
506- nah -> subtype = htons (NXAST_POP_QUEUE );
454+ ofputil_put_NXAST_POP_QUEUE (b );
507455 break ;
508456
509457 case OFPUTIL_NXAST_REG_MOVE :
510- move = ofpbuf_put_uninit (b , sizeof * move );
511- nxm_parse_reg_move (move , arg );
458+ nxm_parse_reg_move (ofputil_put_NXAST_REG_MOVE (b ), arg );
512459 break ;
513460
514461 case OFPUTIL_NXAST_REG_LOAD :
515- load = ofpbuf_put_uninit (b , sizeof * load );
516- nxm_parse_reg_load (load , arg );
462+ nxm_parse_reg_load (ofputil_put_NXAST_REG_LOAD (b ), arg );
517463 break ;
518464
519465 case OFPUTIL_NXAST_NOTE :
520466 parse_note (b , arg );
521467 break ;
522468
469+ case OFPUTIL_NXAST_SET_TUNNEL64 :
470+ ofputil_put_NXAST_SET_TUNNEL64 (b )-> tun_id = htonll (str_to_u64 (arg ));
471+ break ;
472+
523473 case OFPUTIL_NXAST_MULTIPATH :
524- nam = ofpbuf_put_uninit (b , sizeof * nam );
525- multipath_parse (nam , arg );
474+ multipath_parse (ofputil_put_NXAST_MULTIPATH (b ), arg );
526475 break ;
527476
528477 case OFPUTIL_NXAST_AUTOPATH :
529- naa = ofpbuf_put_uninit (b , sizeof * naa );
530- autopath_parse (naa , arg );
478+ autopath_parse (ofputil_put_NXAST_AUTOPATH (b ), arg );
531479 break ;
532480
533481 case OFPUTIL_NXAST_BUNDLE :
0 commit comments