X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fofp-actions.h;h=be1a0aa7e03c47ad98ab244d3850bd9de1744b6d;hb=003ce655b7116d18c86a74c50391e54990346931;hp=70ad4b6f8c390293db299432e787874f1ccf191c;hpb=097d493945869ed3c0772d5376cd5368ebab6391;p=sliver-openvswitch.git diff --git a/lib/ofp-actions.h b/lib/ofp-actions.h index 70ad4b6f8..be1a0aa7e 100644 --- a/lib/ofp-actions.h +++ b/lib/ofp-actions.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013 Nicira, Inc. + * Copyright (c) 2012, 2013, 2014 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -234,8 +234,8 @@ struct ofpact_enqueue { * Used for NXAST_OUTPUT_REG. */ struct ofpact_output_reg { struct ofpact ofpact; - struct mf_subfield src; uint16_t max_len; + struct mf_subfield src; }; /* OFPACT_BUNDLE. @@ -363,19 +363,6 @@ struct ofpact_reg_load { union mf_subvalue subvalue; /* Least-significant bits are used. */ }; -/* The position in the packet at which to insert an MPLS header. - * - * Used NXAST_PUSH_MPLS, OFPAT11_PUSH_MPLS. */ -enum ofpact_mpls_position { - /* Add the MPLS LSE after the Ethernet header but before any VLAN tags. - * OpenFlow 1.3+ requires this behavior. */ - OFPACT_MPLS_BEFORE_VLAN, - - /* Add the MPLS LSE after the Ethernet header and any VLAN tags. - * OpenFlow 1.1 and 1.2 require this behavior. */ - OFPACT_MPLS_AFTER_VLAN -}; - /* OFPACT_SET_FIELD. * * Used for OFPAT12_SET_FIELD. */ @@ -392,7 +379,6 @@ struct ofpact_set_field { struct ofpact_push_mpls { struct ofpact ofpact; ovs_be16 ethertype; - enum ofpact_mpls_position position; }; /* OFPACT_POP_MPLS @@ -450,10 +436,10 @@ struct ofpact_meter { * Used for OFPIT11_WRITE_ACTIONS. */ struct ofpact_nest { struct ofpact ofpact; - uint8_t pad[OFPACT_ALIGN(sizeof(struct ofpact)) - sizeof(struct ofpact)]; + uint8_t pad[PAD_SIZE(sizeof(struct ofpact), OFPACT_ALIGNTO)]; struct ofpact actions[]; }; -BUILD_ASSERT_DECL(offsetof(struct ofpact_nest, actions) == OFPACT_ALIGNTO); +BUILD_ASSERT_DECL(offsetof(struct ofpact_nest, actions) % OFPACT_ALIGNTO == 0); static inline size_t ofpact_nest_get_action_len(const struct ofpact_nest *on) @@ -494,9 +480,9 @@ struct ofpact_learn { uint16_t idle_timeout; /* Idle time before discarding (seconds). */ uint16_t hard_timeout; /* Max time before discarding (seconds). */ uint16_t priority; /* Priority level of flow entry. */ + uint8_t table_id; /* Table to insert flow entry. */ uint64_t cookie; /* Cookie for new flow. */ enum ofputil_flow_mod_flags flags; - uint8_t table_id; /* Table to insert flow entry. */ uint16_t fin_idle_timeout; /* Idle timeout after FIN, if nonzero. */ uint16_t fin_hard_timeout; /* Hard timeout after FIN, if nonzero. */ @@ -607,9 +593,13 @@ enum ofperr ofpacts_pull_openflow_instructions(struct ofpbuf *openflow, enum ofp_version version, struct ofpbuf *ofpacts); enum ofperr ofpacts_check(struct ofpact[], size_t ofpacts_len, - struct flow *, bool enforce_consistency, - ofp_port_t max_ports, - uint8_t table_id, uint8_t n_tables); + struct flow *, ofp_port_t max_ports, + uint8_t table_id, uint8_t n_tables, + enum ofputil_protocol *usable_protocols); +enum ofperr ofpacts_check_consistency(struct ofpact[], size_t ofpacts_len, + struct flow *, ofp_port_t max_ports, + uint8_t table_id, uint8_t n_tables, + enum ofputil_protocol usable_protocols); enum ofperr ofpacts_verify(const struct ofpact ofpacts[], size_t ofpacts_len); enum ofperr ofpact_check_output_port(ofp_port_t port, ofp_port_t max_ports); @@ -651,8 +641,8 @@ void *ofpact_put(struct ofpbuf *, enum ofpact_type, size_t len); * After using this function to add a variable-length action, add the * elements of the flexible array (e.g. with ofpbuf_put()), then use * ofpact_update_len() to update the length embedded into the action. - * (Keep in mind the need to refresh the structure from 'ofpacts->l2' after - * adding data to 'ofpacts'.) + * (Keep in mind the need to refresh the structure from 'ofpacts->frame' + * after adding data to 'ofpacts'.) * * struct *ofpact_get_(const struct ofpact *ofpact); * @@ -760,4 +750,7 @@ const char *ovs_instruction_name_from_type(enum ovs_instruction_type type); int ovs_instruction_type_from_name(const char *name); enum ovs_instruction_type ovs_instruction_type_from_ofpact_type( enum ofpact_type); +enum ofperr ovs_instruction_type_from_inst_type( + enum ovs_instruction_type *instruction_type, const uint16_t inst_type); + #endif /* ofp-actions.h */