From 9c4dbc1caa7f83c16775406547f9cfba38c8d513 Mon Sep 17 00:00:00 2001 From: Alexander Wu Date: Fri, 17 Jan 2014 13:19:35 -0800 Subject: [PATCH] ofp-actions: Complete ofp13_action_type. Signed-off-by: Alexander Wu Signed-off-by: Ben Pfaff --- include/openflow/openflow-1.3.h | 20 ++++++++++++++++++-- lib/ofp-actions.c | 3 +++ lib/ofp-parse.c | 19 +++++++++++++++++++ lib/ofp-util.c | 5 +++++ lib/ofp-util.def | 21 +++++++++++++++++++++ lib/ofp-util.h | 5 +++++ 6 files changed, 71 insertions(+), 2 deletions(-) diff --git a/include/openflow/openflow-1.3.h b/include/openflow/openflow-1.3.h index 767e04810..4696f01d4 100644 --- a/include/openflow/openflow-1.3.h +++ b/include/openflow/openflow-1.3.h @@ -104,8 +104,24 @@ struct ofp13_instruction_meter { OFP_ASSERT(sizeof(struct ofp13_instruction_meter) == 8); enum ofp13_action_type { - OFPAT13_PUSH_PBB = 26, /* Push a new PBB service tag (I-TAG) */ - OFPAT13_POP_PBB = 27 /* Pop the outer PBB service tag (I-TAG) */ + OFPAT13_OUTPUT = 0, /* Output to switch port. */ + OFPAT13_COPY_TTL_OUT = 11, /* Copy TTL "outwards" -- from next-to-outermost + to outermost */ + OFPAT13_COPY_TTL_IN = 12, /* Copy TTL "inwards" -- from outermost to + next-to-outermost */ + OFPAT13_SET_MPLS_TTL = 15, /* MPLS TTL */ + OFPAT13_DEC_MPLS_TTL = 16, /* Decrement MPLS TTL */ + OFPAT13_PUSH_VLAN = 17, /* Push a new VLAN tag */ + OFPAT13_POP_VLAN = 18, /* Pop the outer VLAN tag */ + OFPAT13_PUSH_MPLS = 19, /* Push a new MPLS Label Stack Entry */ + OFPAT13_POP_MPLS = 20, /* Pop the outer MPLS Label Stack Entry */ + OFPAT13_SET_QUEUE = 21, /* Set queue id when outputting to a port */ + OFPAT13_GROUP = 22, /* Apply group. */ + OFPAT13_SET_NW_TTL = 23, /* IP TTL. */ + OFPAT13_DEC_NW_TTL = 24, /* Decrement IP TTL. */ + OFPAT13_SET_FIELD = 25, /* Set a header field using OXM TLV format. */ + OFPAT13_PUSH_PBB = 26, /* Push a new PBB service tag (I-TAG) */ + OFPAT13_POP_PBB = 27 /* Pop the outer PBB service tag (I-TAG) */ }; /* enum ofp_config_flags value OFPC_INVALID_TTL_TO_CONTROLLER diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index c4cd8dc8b..d552f9cfc 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -377,6 +377,7 @@ ofpact_from_nxast(const union ofp_action *a, enum ofputil_action_code code, case OFPUTIL_ACTION_INVALID: #define OFPAT10_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" OVS_NOT_REACHED(); @@ -523,6 +524,7 @@ ofpact_from_openflow10(const union ofp_action *a, switch (code) { case OFPUTIL_ACTION_INVALID: #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" OVS_NOT_REACHED(); @@ -1141,6 +1143,7 @@ ofpact_from_openflow11(const union ofp_action *a, enum ofp_version version, switch (code) { case OFPUTIL_ACTION_INVALID: #define OFPAT10_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" OVS_NOT_REACHED(); diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index b254ac6ec..5c5bb0647 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -650,6 +650,7 @@ parse_named_action(enum ofputil_action_code code, case OFPUTIL_OFPAT10_OUTPUT: case OFPUTIL_OFPAT11_OUTPUT: + case OFPUTIL_OFPAT13_OUTPUT: error = parse_output(arg, ofpacts); break; @@ -686,14 +687,17 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT12_SET_FIELD: + case OFPUTIL_OFPAT13_SET_FIELD: return set_field_parse(arg, ofpacts, usable_protocols); case OFPUTIL_OFPAT10_STRIP_VLAN: case OFPUTIL_OFPAT11_POP_VLAN: + case OFPUTIL_OFPAT13_POP_VLAN: ofpact_put_STRIP_VLAN(ofpacts)->ofpact.compat = code; break; case OFPUTIL_OFPAT11_PUSH_VLAN: + case OFPUTIL_OFPAT13_PUSH_VLAN: *usable_protocols &= OFPUTIL_P_OF11_UP; error = str_to_u16(arg, "ethertype", ðertype); if (error) { @@ -709,6 +713,7 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_SET_QUEUE: + case OFPUTIL_OFPAT13_SET_QUEUE: error = str_to_u32(arg, &ofpact_put_SET_QUEUE(ofpacts)->queue_id); break; @@ -758,6 +763,7 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_SET_NW_TTL: + case OFPUTIL_OFPAT13_SET_NW_TTL: error = str_to_u8(arg, "TTL", &ttl); if (error) { return error; @@ -767,6 +773,7 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_DEC_NW_TTL: + case OFPUTIL_OFPAT13_DEC_NW_TTL: OVS_NOT_REACHED(); case OFPUTIL_OFPAT10_SET_TP_SRC: @@ -861,10 +868,12 @@ parse_named_action(enum ofputil_action_code code, case OFPUTIL_NXAST_SET_MPLS_TTL: case OFPUTIL_OFPAT11_SET_MPLS_TTL: + case OFPUTIL_OFPAT13_SET_MPLS_TTL: error = parse_set_mpls_ttl(ofpacts, arg); break; case OFPUTIL_OFPAT11_DEC_MPLS_TTL: + case OFPUTIL_OFPAT13_DEC_MPLS_TTL: case OFPUTIL_NXAST_DEC_MPLS_TTL: ofpact_put_DEC_MPLS_TTL(ofpacts); break; @@ -878,6 +887,7 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_PUSH_MPLS: + case OFPUTIL_OFPAT13_PUSH_MPLS: case OFPUTIL_NXAST_PUSH_MPLS: error = str_to_u16(arg, "push_mpls", ðertype); if (!error) { @@ -886,6 +896,7 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_POP_MPLS: + case OFPUTIL_OFPAT13_POP_MPLS: case OFPUTIL_NXAST_POP_MPLS: error = str_to_u16(arg, "pop_mpls", ðertype); if (!error) { @@ -894,9 +905,17 @@ parse_named_action(enum ofputil_action_code code, break; case OFPUTIL_OFPAT11_GROUP: + case OFPUTIL_OFPAT13_GROUP: error = str_to_u32(arg, &ofpact_put_GROUP(ofpacts)->group_id); break; + /* FIXME when implement OFPAT13_* */ + case OFPUTIL_OFPAT13_COPY_TTL_OUT: + case OFPUTIL_OFPAT13_COPY_TTL_IN: + case OFPUTIL_OFPAT13_PUSH_PBB: + case OFPUTIL_OFPAT13_POP_PBB: + OVS_NOT_REACHED(); + case OFPUTIL_NXAST_STACK_PUSH: error = nxm_parse_stack_action(ofpact_put_STACK_PUSH(ofpacts), arg); break; diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 5c6120a67..85f457849 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -5236,6 +5236,7 @@ static const char *const names[OFPUTIL_N_ACTIONS] = { NULL, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) NAME, #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) NAME, +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) NAME, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) NAME, #include "ofp-util.def" }; @@ -5275,6 +5276,8 @@ ofputil_put_action(enum ofputil_action_code code, struct ofpbuf *buf) { switch (code) { case OFPUTIL_ACTION_INVALID: +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) case OFPUTIL_##ENUM: +#include "ofp-util.def" OVS_NOT_REACHED(); #define OFPAT10_ACTION(ENUM, STRUCT, NAME) \ @@ -5306,6 +5309,8 @@ ofputil_put_action(enum ofputil_action_code code, struct ofpbuf *buf) } #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ OFPAT10_ACTION(ENUM, STRUCT, NAME) +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ + OFPAT10_ACTION(ENUM, STRUCT, NAME) #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ void \ ofputil_init_##ENUM(struct STRUCT *s) \ diff --git a/lib/ofp-util.def b/lib/ofp-util.def index fae2bf2a0..44decaeff 100644 --- a/lib/ofp-util.def +++ b/lib/ofp-util.def @@ -44,6 +44,26 @@ OFPAT11_ACTION(OFPAT11_DEC_NW_TTL, ofp_action_header, 0, NULL) OFPAT11_ACTION(OFPAT12_SET_FIELD, ofp12_action_set_field, 1, "set_field") OFPAT11_ACTION(OFPAT11_GROUP, ofp11_action_group, 0, "group") +#ifndef OFPAT13_ACTION +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) +#endif +OFPAT13_ACTION(OFPAT13_OUTPUT, ofp11_action_output, 0, "output") +OFPAT13_ACTION(OFPAT13_COPY_TTL_OUT, ofp_action_header, 0, "copy_ttl_out") +OFPAT13_ACTION(OFPAT13_COPY_TTL_IN, ofp_action_header, 0, "copy_ttl_in") +OFPAT13_ACTION(OFPAT13_SET_MPLS_TTL, ofp11_action_mpls_ttl, 0, "set_mpls_ttl") +OFPAT13_ACTION(OFPAT13_DEC_MPLS_TTL, ofp_action_header, 0, "dec_mpls_ttl") +OFPAT13_ACTION(OFPAT13_PUSH_VLAN, ofp11_action_push, 0, "push_vlan") +OFPAT13_ACTION(OFPAT13_POP_VLAN, ofp_action_header, 0, "pop_vlan") +OFPAT13_ACTION(OFPAT13_PUSH_MPLS, ofp11_action_push, 0, "push_mpls") +OFPAT13_ACTION(OFPAT13_POP_MPLS, ofp11_action_pop_mpls, 0, "pop_mpls") +OFPAT13_ACTION(OFPAT13_SET_QUEUE, ofp11_action_set_queue, 0, "set_queue") +OFPAT13_ACTION(OFPAT13_GROUP, ofp11_action_group, 0, "group") +OFPAT13_ACTION(OFPAT13_SET_NW_TTL, ofp11_action_nw_ttl, 0, "set_nw_ttl") +OFPAT13_ACTION(OFPAT13_DEC_NW_TTL, ofp_action_header, 0, "dec_nw_ttl") +OFPAT13_ACTION(OFPAT13_SET_FIELD, ofp12_action_set_field, 1, "set_field") +OFPAT13_ACTION(OFPAT13_PUSH_PBB, ofp11_action_push, 0, "push_pbb") +OFPAT13_ACTION(OFPAT13_POP_PBB, ofp_action_header, 0, "pop_pbb") + #ifndef NXAST_ACTION #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) #endif @@ -80,4 +100,5 @@ NXAST_ACTION(NXAST_SAMPLE, nx_action_sample, 0, "sample") #undef OFPAT10_ACTION #undef OFPAT11_ACTION +#undef OFPAT13_ACTION #undef NXAST_ACTION diff --git a/lib/ofp-util.h b/lib/ofp-util.h index 4d955fde8..20efa2876 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -851,6 +851,7 @@ enum OVS_PACKED_ENUM ofputil_action_code { OFPUTIL_ACTION_INVALID, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) OFPUTIL_##ENUM, #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) OFPUTIL_##ENUM, +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) OFPUTIL_##ENUM, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) OFPUTIL_##ENUM, #include "ofp-util.def" }; @@ -859,6 +860,7 @@ enum OVS_PACKED_ENUM ofputil_action_code { enum { #define OFPAT10_ACTION(ENUM, STRUCT, NAME) + 1 #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) + 1 +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) + 1 #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) + 1 OFPUTIL_N_ACTIONS = 1 #include "ofp-util.def" @@ -889,6 +891,9 @@ void *ofputil_put_action(enum ofputil_action_code, struct ofpbuf *buf); #define OFPAT11_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ void ofputil_init_##ENUM(struct STRUCT *); \ struct STRUCT *ofputil_put_##ENUM(struct ofpbuf *); +#define OFPAT13_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ + void ofputil_init_##ENUM(struct STRUCT *); \ + struct STRUCT *ofputil_put_##ENUM(struct ofpbuf *); #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ void ofputil_init_##ENUM(struct STRUCT *); \ struct STRUCT *ofputil_put_##ENUM(struct ofpbuf *); -- 2.43.0