X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fofp-actions.h;h=00cba6ad1e8f60240c64b4df9c46a845a8a58ede;hb=c4e976db1343aac88dec4b457bdf5d0277f247e6;hp=0478a9b9fa4447df139dc27cd7eeb2a9b65284ee;hpb=b2dd70be133bf86c3b8a1d597594489827887b69;p=sliver-openvswitch.git diff --git a/lib/ofp-actions.h b/lib/ofp-actions.h index 0478a9b9f..00cba6ad1 100644 --- a/lib/ofp-actions.h +++ b/lib/ofp-actions.h @@ -78,6 +78,8 @@ DEFINE_OFPACT(STACK_PUSH, ofpact_stack, ofpact) \ DEFINE_OFPACT(STACK_POP, ofpact_stack, ofpact) \ DEFINE_OFPACT(DEC_TTL, ofpact_cnt_ids, cnt_ids) \ + DEFINE_OFPACT(SET_MPLS_LABEL, ofpact_mpls_label, ofpact) \ + DEFINE_OFPACT(SET_MPLS_TC, ofpact_mpls_tc, ofpact) \ DEFINE_OFPACT(SET_MPLS_TTL, ofpact_mpls_ttl, ofpact) \ DEFINE_OFPACT(DEC_MPLS_TTL, ofpact_null, ofpact) \ DEFINE_OFPACT(PUSH_MPLS, ofpact_push_mpls, ofpact) \ @@ -331,7 +333,8 @@ struct ofpact_ip_ttl { * Used for OFPAT10_SET_TP_SRC, OFPAT10_SET_TP_DST. */ struct ofpact_l4_port { struct ofpact ofpact; - uint16_t port; /* TCP or UDP port number. */ + uint16_t port; /* TCP, UDP or SCTP port number. */ + uint8_t flow_ip_proto; /* IP proto from corresponding match, or 0 */ }; /* OFPACT_REG_MOVE. @@ -379,6 +382,7 @@ enum ofpact_mpls_position { struct ofpact_set_field { struct ofpact ofpact; const struct mf_field *field; + bool flow_has_vlan; /* VLAN present at action validation time. */ union mf_value value; }; @@ -490,9 +494,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. */ @@ -550,9 +554,27 @@ struct ofpact_cnt_ids { uint16_t cnt_ids[]; }; +/* OFPACT_SET_MPLS_LABEL. + * + * Used for OFPAT11_SET_MPLS_LABEL and NXAST_SET_MPLS_LABEL */ +struct ofpact_mpls_label { + struct ofpact ofpact; + + ovs_be32 label; +}; + +/* OFPACT_SET_MPLS_TC. + * + * Used for OFPAT11_SET_MPLS_TC and NXAST_SET_MPLS_TC */ +struct ofpact_mpls_tc { + struct ofpact ofpact; + + uint8_t tc; +}; + /* OFPACT_SET_MPLS_TTL. * - * Used for NXAST_SET_MPLS_TTL */ + * Used for OFPAT11_SET_MPLS_TTL and NXAST_SET_MPLS_TTL */ struct ofpact_mpls_ttl { struct ofpact ofpact; @@ -576,30 +598,32 @@ struct ofpact_group { }; /* Converting OpenFlow to ofpacts. */ -enum ofperr ofpacts_pull_openflow10(struct ofpbuf *openflow, - unsigned int actions_len, - struct ofpbuf *ofpacts); -enum ofperr ofpacts_pull_openflow11_actions(struct ofpbuf *openflow, - enum ofp_version version, - unsigned int actions_len, - struct ofpbuf *ofpacts); -enum ofperr ofpacts_pull_openflow11_instructions(struct ofpbuf *openflow, - enum ofp_version version, - unsigned int instructions_len, - struct ofpbuf *ofpacts); +enum ofperr ofpacts_pull_openflow_actions(struct ofpbuf *openflow, + unsigned int actions_len, + enum ofp_version version, + struct ofpbuf *ofpacts); +enum ofperr ofpacts_pull_openflow_instructions(struct ofpbuf *openflow, + unsigned int instructions_len, + enum ofp_version version, + struct ofpbuf *ofpacts); enum ofperr ofpacts_check(struct ofpact[], size_t ofpacts_len, struct flow *, ofp_port_t max_ports, - uint8_t table_id, bool enforce_consistency); + 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); /* Converting ofpacts to OpenFlow. */ -void ofpacts_put_openflow10(const struct ofpact[], size_t ofpacts_len, - struct ofpbuf *openflow); -size_t ofpacts_put_openflow11_actions(const struct ofpact[], size_t ofpacts_len, - struct ofpbuf *openflow); -void ofpacts_put_openflow11_instructions(const struct ofpact[], - size_t ofpacts_len, - struct ofpbuf *openflow); +size_t ofpacts_put_openflow_actions(const struct ofpact[], size_t ofpacts_len, + struct ofpbuf *openflow, enum ofp_version); +void ofpacts_put_openflow_instructions(const struct ofpact[], + size_t ofpacts_len, + struct ofpbuf *openflow, + enum ofp_version ofp_version); /* Working with ofpacts. */ bool ofpacts_output_to_port(const struct ofpact[], size_t ofpacts_len,