From 78a3fff6c3b2f7943bcfd7301c666934834d2a0e Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Tue, 4 Sep 2012 10:32:48 +0900 Subject: [PATCH] lib/ofp-util: preparation for OF12 of ofp-util Add necessary macros to ofp-util for OF12 support. This is just a placeholder. Signed-off-by: Isaku Yamahata Signed-off-by: Simon Horman Signed-off-by: Ben Pfaff --- lib/ofp-actions.c | 3 +++ lib/ofp-parse.c | 6 ++++++ lib/ofp-print.c | 1 + lib/ofp-util.c | 3 +++ lib/ofp-util.def | 23 +++++++++++++++++++++++ lib/ofp-util.h | 6 ++++++ 6 files changed, 42 insertions(+) diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index 6fcfba85..210f4ce6 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -283,6 +283,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, NAME) case OFPUTIL_##ENUM: +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" NOT_REACHED(); @@ -397,6 +398,7 @@ ofpact_from_openflow10(const union ofp_action *a, struct ofpbuf *out) switch (code) { case OFPUTIL_ACTION_INVALID: #define OFPAT11_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" NOT_REACHED(); @@ -659,6 +661,7 @@ ofpact_from_openflow11(const union ofp_action *a, struct ofpbuf *out) switch (code) { case OFPUTIL_ACTION_INVALID: #define OFPAT10_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) case OFPUTIL_##ENUM: #include "ofp-util.def" NOT_REACHED(); diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index 518bbdd3..165a36e8 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -350,6 +350,12 @@ parse_named_action(enum ofputil_action_code code, const struct flow *flow, ofpact_put_SET_VLAN_PCP(ofpacts)->vlan_pcp = pcp; break; + case OFPUTIL_OFPAT12_SET_FIELD: + NOT_REACHED(); /* This will be implemented by later patch and + * enabled using a non-NULL name in + * OFPAT12_ACTION(OFPAT12_SET_FIELD, ...) */ + break; + case OFPUTIL_OFPAT10_STRIP_VLAN: ofpact_put_STRIP_VLAN(ofpacts); break; diff --git a/lib/ofp-print.c b/lib/ofp-print.c index d116ef14..67896257 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -457,6 +457,7 @@ ofputil_action_bitmap_to_name(uint32_t bit) case OFPUTIL_A_SET_NW_TOS: return "SET_NW_TOS"; case OFPUTIL_A_SET_TP_SRC: return "SET_TP_SRC"; case OFPUTIL_A_SET_TP_DST: return "SET_TP_DST"; + case OFPUTIL_A_SET_FIELD: return "SET_FIELD"; case OFPUTIL_A_ENQUEUE: return "ENQUEUE"; case OFPUTIL_A_COPY_TTL_OUT: return "COPY_TTL_OUT"; case OFPUTIL_A_COPY_TTL_IN: return "COPY_TTL_IN"; diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 11781b6f..33ff6ea7 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -3499,6 +3499,7 @@ ofputil_action_code_from_name(const char *name) NULL, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) NAME, #define OFPAT11_ACTION(ENUM, STRUCT, NAME) NAME, +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) NAME, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) NAME, #include "ofp-util.def" }; @@ -3528,6 +3529,7 @@ ofputil_put_action(enum ofputil_action_code code, struct ofpbuf *buf) #define OFPAT10_ACTION(ENUM, STRUCT, NAME) \ case OFPUTIL_##ENUM: return ofputil_put_##ENUM(buf); #define OFPAT11_ACTION OFPAT10_ACTION +#define OFPAT12_ACTION OFPAT10_ACTION #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ case OFPUTIL_##ENUM: return ofputil_put_##ENUM(buf); #include "ofp-util.def" @@ -3552,6 +3554,7 @@ ofputil_put_action(enum ofputil_action_code code, struct ofpbuf *buf) return s; \ } #define OFPAT11_ACTION OFPAT10_ACTION +#define OFPAT12_ACTION OFPAT10_ACTION #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 391c14bf..6f5113e7 100644 --- a/lib/ofp-util.def +++ b/lib/ofp-util.def @@ -36,6 +36,28 @@ OFPAT11_ACTION(OFPAT11_SET_TP_DST, ofp_action_tp_port, "mod_tp_dst") //OFPAT11_ACTION(OFPAT11_SET_NW_TTL, ofp11_action_nw_ttl, "set_nw_ttl") //OFPAT11_ACTION(OFPAT11_DEC_NW_TTL, ofp_action_header, "dec_ttl") +#ifndef OFPAT12_ACTION +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) +#endif +//OFPAT12_ACTION(OFPAT12_OUTPUT, , "output") +//OFPAT12_ACTION(OFPAT12_COPY_TTL_OUT, ofp_action_header, "copy_ttl_out") +//OFPAT12_ACTION(OFPAT12_COPY_TTL_IN, ofp_action_header, "copy_ttl_in") +//OFPAT12_ACTION(OFPAT12_SET_MPLS_TTL, , "set_mpls_ttl") +//OFPAT12_ACTION(OFPAT12_DEC_MPLS_TTL, ofp_action_header, "dec_mpls_ttl") +//OFPAT12_ACTION(OFPAT12_PUSH_VLAN, , "push_vlan") +//OFPAT12_ACTION(OFPAT12_POP_VLAN, ofp_action_header, "pop_vlan") +//OFPAT12_ACTION(OFPAT12_PUSH_MPLS, , "push_mpls") +//OFPAT12_ACTION(OFPAT12_POP_MPLS, , "pop_mpls") +//OFPAT12_ACTION(OFPAT12_SET_QUEUE, , "set_queue") +//OFPAT12_ACTION(OFPAT12_GROUP, , "group") +//OFPAT12_ACTION(OFPAT12_SET_NW_TTL, , "set_nw_ttl") +//OFPAT12_ACTION(OFPAT12_DEC_NW_TTL, ofp_action_header, "dec_ttl") +//Use non-NULL name for OFPAT12_SET_FIELD once the code for +//the OFPUTIL_OFPAT12_SET_FIELD case in parse_named_action() is implemented +//OFPAT12_ACTION(OFPAT12_SET_FIELD, ofp12_action_set_field, "set_field") +OFPAT12_ACTION(OFPAT12_SET_FIELD, ofp12_action_set_field, NULL) +//OFPAT12_ACTION(OFPAT12_EXPERIMENTER, , ) + #ifndef NXAST_ACTION #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) #endif @@ -62,4 +84,5 @@ NXAST_ACTION(NXAST_DEC_TTL_CNT_IDS, nx_action_cnt_ids, 1, NULL) #undef OFPAT10_ACTION #undef OFPAT11_ACTION +#undef OFPAT12_ACTION #undef NXAST_ACTION diff --git a/lib/ofp-util.h b/lib/ofp-util.h index ee459f30..e3a93c97 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -397,6 +397,7 @@ enum ofputil_action_bitmap { OFPUTIL_A_GROUP = 1 << 24, OFPUTIL_A_SET_NW_TTL = 1 << 25, OFPUTIL_A_DEC_NW_TTL = 1 << 26, + OFPUTIL_A_SET_FIELD = 1 << 27, }; /* Abstract ofp_switch_features. */ @@ -550,6 +551,7 @@ enum OVS_PACKED_ENUM ofputil_action_code { OFPUTIL_ACTION_INVALID, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) OFPUTIL_##ENUM, #define OFPAT11_ACTION(ENUM, STRUCT, NAME) OFPUTIL_##ENUM, +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) OFPUTIL_##ENUM, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) OFPUTIL_##ENUM, #include "ofp-util.def" }; @@ -558,6 +560,7 @@ enum OVS_PACKED_ENUM ofputil_action_code { enum { #define OFPAT10_ACTION(ENUM, STRUCT, NAME) + 1 #define OFPAT11_ACTION(ENUM, STRUCT, NAME) + 1 +#define OFPAT12_ACTION(ENUM, STRUCT, NAME) + 1 #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) + 1 OFPUTIL_N_ACTIONS = 1 #include "ofp-util.def" @@ -587,6 +590,9 @@ void *ofputil_put_action(enum ofputil_action_code, struct ofpbuf *buf); #define OFPAT11_ACTION(ENUM, STRUCT, NAME) \ void ofputil_init_##ENUM(struct STRUCT *); \ struct STRUCT *ofputil_put_##ENUM(struct ofpbuf *); +#define OFPAT12_ACTION(ENUM, STRUCT, 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.30.2