git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Setting tag sliver-openvswitch-1.10.90-3
[sliver-openvswitch.git]
/
lib
/
ofp-actions.h
diff --git
a/lib/ofp-actions.h
b/lib/ofp-actions.h
index
a811167
..
b97afd0
100644
(file)
--- a/
lib/ofp-actions.h
+++ b/
lib/ofp-actions.h
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2012 Nicira, Inc.
+ * Copyright (c) 2012
, 2013
Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-60,6
+60,7
@@
DEFINE_OFPACT(SET_VLAN_VID, ofpact_vlan_vid, ofpact) \
DEFINE_OFPACT(SET_VLAN_PCP, ofpact_vlan_pcp, ofpact) \
DEFINE_OFPACT(STRIP_VLAN, ofpact_null, ofpact) \
DEFINE_OFPACT(SET_VLAN_VID, ofpact_vlan_vid, ofpact) \
DEFINE_OFPACT(SET_VLAN_PCP, ofpact_vlan_pcp, ofpact) \
DEFINE_OFPACT(STRIP_VLAN, ofpact_null, ofpact) \
+ DEFINE_OFPACT(PUSH_VLAN, ofpact_null, ofpact) \
DEFINE_OFPACT(SET_ETH_SRC, ofpact_mac, ofpact) \
DEFINE_OFPACT(SET_ETH_DST, ofpact_mac, ofpact) \
DEFINE_OFPACT(SET_IPV4_SRC, ofpact_ipv4, ofpact) \
DEFINE_OFPACT(SET_ETH_SRC, ofpact_mac, ofpact) \
DEFINE_OFPACT(SET_ETH_DST, ofpact_mac, ofpact) \
DEFINE_OFPACT(SET_IPV4_SRC, ofpact_ipv4, ofpact) \
@@
-69,7
+70,13
@@
DEFINE_OFPACT(SET_L4_DST_PORT, ofpact_l4_port, ofpact) \
DEFINE_OFPACT(REG_MOVE, ofpact_reg_move, ofpact) \
DEFINE_OFPACT(REG_LOAD, ofpact_reg_load, ofpact) \
DEFINE_OFPACT(SET_L4_DST_PORT, ofpact_l4_port, ofpact) \
DEFINE_OFPACT(REG_MOVE, ofpact_reg_move, ofpact) \
DEFINE_OFPACT(REG_LOAD, ofpact_reg_load, ofpact) \
+ 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(DEC_TTL, ofpact_cnt_ids, cnt_ids) \
+ 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) \
+ DEFINE_OFPACT(POP_MPLS, ofpact_pop_mpls, ofpact) \
\
/* Metadata. */ \
DEFINE_OFPACT(SET_TUNNEL, ofpact_tunnel, ofpact) \
\
/* Metadata. */ \
DEFINE_OFPACT(SET_TUNNEL, ofpact_tunnel, ofpact) \
@@
-83,14
+90,17
@@
\
/* Arithmetic. */ \
DEFINE_OFPACT(MULTIPATH, ofpact_multipath, ofpact) \
\
/* Arithmetic. */ \
DEFINE_OFPACT(MULTIPATH, ofpact_multipath, ofpact) \
- DEFINE_OFPACT(AUTOPATH, ofpact_autopath, ofpact) \
\
/* Other. */ \
DEFINE_OFPACT(NOTE, ofpact_note, data) \
DEFINE_OFPACT(EXIT, ofpact_null, ofpact) \
\
/* Other. */ \
DEFINE_OFPACT(NOTE, ofpact_note, data) \
DEFINE_OFPACT(EXIT, ofpact_null, ofpact) \
+ DEFINE_OFPACT(SAMPLE, ofpact_sample, ofpact) \
\
/* Instructions */ \
\
/* Instructions */ \
- /* TODO:XXX Clear-Actions, Write-Actions, Write-Metadata */ \
+ DEFINE_OFPACT(METER, ofpact_meter, ofpact) \
+ /* XXX Write-Actions */ \
+ DEFINE_OFPACT(CLEAR_ACTIONS, ofpact_null, ofpact) \
+ DEFINE_OFPACT(WRITE_METADATA, ofpact_metadata, ofpact) \
DEFINE_OFPACT(GOTO_TABLE, ofpact_goto_table, ofpact)
/* enum ofpact_type, with a member OFPACT_<ENUM> for each action. */
DEFINE_OFPACT(GOTO_TABLE, ofpact_goto_table, ofpact)
/* enum ofpact_type, with a member OFPACT_<ENUM> for each action. */
@@
-173,9
+183,10
@@
ofpact_end(const struct ofpact *ofpacts, size_t ofpacts_len)
\f
/* Action structure for each OFPACT_*. */
\f
/* Action structure for each OFPACT_*. */
-/* OFPACT_STRIP_VLAN, OFPACT_POP_QUEUE, OFPACT_EXIT.
+/* OFPACT_STRIP_VLAN, OFPACT_POP_QUEUE, OFPACT_EXIT
, OFPACT_CLEAR_ACTIONS
.
*
*
- * Used for OFPAT10_STRIP_VLAN, NXAST_DEC_TTL, NXAST_POP_QUEUE, NXAST_EXIT.
+ * Used for OFPAT10_STRIP_VLAN, NXAST_POP_QUEUE, NXAST_EXIT,
+ * OFPAT11_POP_VLAN, OFPIT11_CLEAR_ACTIONS.
*
* Action structure for actions that do not have any extra data beyond the
* action type. */
*
* Action structure for actions that do not have any extra data beyond the
* action type. */
@@
-188,7
+199,7
@@
struct ofpact_null {
* Used for OFPAT10_OUTPUT. */
struct ofpact_output {
struct ofpact ofpact;
* Used for OFPAT10_OUTPUT. */
struct ofpact_output {
struct ofpact ofpact;
-
uint16_t port;
/* Output port. */
+
ofp_port_t port;
/* Output port. */
uint16_t max_len; /* Max send len, for port OFPP_CONTROLLER. */
};
uint16_t max_len; /* Max send len, for port OFPP_CONTROLLER. */
};
@@
-207,7
+218,7
@@
struct ofpact_controller {
* Used for OFPAT10_ENQUEUE. */
struct ofpact_enqueue {
struct ofpact ofpact;
* Used for OFPAT10_ENQUEUE. */
struct ofpact_enqueue {
struct ofpact ofpact;
-
uint16
_t port;
+
ofp_port
_t port;
uint32_t queue;
};
uint32_t queue;
};
@@
-237,7
+248,7
@@
struct ofpact_bundle {
/* Slaves for output. */
unsigned int n_slaves;
/* Slaves for output. */
unsigned int n_slaves;
-
uint16
_t slaves[];
+
ofp_port
_t slaves[];
};
/* OFPACT_SET_VLAN_VID.
};
/* OFPACT_SET_VLAN_VID.
@@
-297,6
+308,14
@@
struct ofpact_reg_move {
struct mf_subfield dst;
};
struct mf_subfield dst;
};
+/* OFPACT_STACK_PUSH.
+ *
+ * Used for NXAST_STACK_PUSH and NXAST_STACK_POP. */
+struct ofpact_stack {
+ struct ofpact ofpact;
+ struct mf_subfield subfield;
+};
+
/* OFPACT_REG_LOAD.
*
* Used for NXAST_REG_LOAD, OFPAT12_SET_FIELD. */
/* OFPACT_REG_LOAD.
*
* Used for NXAST_REG_LOAD, OFPAT12_SET_FIELD. */
@@
-306,6
+325,22
@@
struct ofpact_reg_load {
union mf_subvalue subvalue; /* Least-significant bits are used. */
};
union mf_subvalue subvalue; /* Least-significant bits are used. */
};
+/* OFPACT_PUSH_VLAN/MPLS/PBB
+ *
+ * Used for NXAST_PUSH_MPLS, OFPAT11_PUSH_MPLS. */
+struct ofpact_push_mpls {
+ struct ofpact ofpact;
+ ovs_be16 ethertype;
+};
+
+/* OFPACT_POP_MPLS
+ *
+ * Used for NXAST_POP_MPLS, OFPAT11_POP_MPLS.. */
+struct ofpact_pop_mpls {
+ struct ofpact ofpact;
+ ovs_be16 ethertype;
+};
+
/* OFPACT_SET_TUNNEL.
*
* Used for NXAST_SET_TUNNEL, NXAST_SET_TUNNEL64. */
/* OFPACT_SET_TUNNEL.
*
* Used for NXAST_SET_TUNNEL, NXAST_SET_TUNNEL64. */
@@
-331,25
+366,42
@@
struct ofpact_fin_timeout {
uint16_t fin_hard_timeout;
};
uint16_t fin_hard_timeout;
};
+/* OFPACT_WRITE_METADATA.
+ *
+ * Used for NXAST_WRITE_METADATA. */
+struct ofpact_metadata {
+ struct ofpact ofpact;
+ ovs_be64 metadata;
+ ovs_be64 mask;
+};
+
+/* OFPACT_METER.
+ *
+ * Used for OFPIT13_METER. */
+struct ofpact_meter {
+ struct ofpact ofpact;
+ uint32_t meter_id;
+};
+
/* OFPACT_RESUBMIT.
*
* Used for NXAST_RESUBMIT, NXAST_RESUBMIT_TABLE. */
struct ofpact_resubmit {
struct ofpact ofpact;
/* OFPACT_RESUBMIT.
*
* Used for NXAST_RESUBMIT, NXAST_RESUBMIT_TABLE. */
struct ofpact_resubmit {
struct ofpact ofpact;
-
uint16
_t in_port;
+
ofp_port
_t in_port;
uint8_t table_id;
};
/* Part of struct ofpact_learn, below. */
struct ofpact_learn_spec {
uint8_t table_id;
};
/* Part of struct ofpact_learn, below. */
struct ofpact_learn_spec {
- int n_bits;
+ int n_bits;
/* Number of bits in source and dest. */
- int src_type;
- struct mf_subfield src;
- union mf_subvalue src_imm;
+ int src_type;
/* One of NX_LEARN_SRC_*. */
+ struct mf_subfield src;
/* NX_LEARN_SRC_FIELD only. */
+ union mf_subvalue src_imm;
/* NX_LEARN_SRC_IMMEDIATE only. */
- int dst_type;
- struct mf_subfield dst;
+ int dst_type;
/* One of NX_LEARN_DST_*. */
+ struct mf_subfield dst;
/* NX_LEARN_DST_MATCH, NX_LEARN_DST_LOAD only. */
};
/* OFPACT_LEARN.
};
/* OFPACT_LEARN.
@@
-390,15
+442,6
@@
struct ofpact_multipath {
struct mf_subfield dst;
};
struct mf_subfield dst;
};
-/* OFPACT_AUTOPATH.
- *
- * Used for NXAST_AUTOPATH. */
-struct ofpact_autopath {
- struct ofpact ofpact;
- struct mf_subfield dst;
- uint32_t port;
-};
-
/* OFPACT_NOTE.
*
* Used for NXAST_NOTE. */
/* OFPACT_NOTE.
*
* Used for NXAST_NOTE. */
@@
-408,9
+451,20
@@
struct ofpact_note {
uint8_t data[];
};
uint8_t data[];
};
+/* OFPACT_SAMPLE.
+ *
+ * Used for NXAST_SAMPLE. */
+struct ofpact_sample {
+ struct ofpact ofpact;
+ uint16_t probability; // Always >0.
+ uint32_t collector_set_id;
+ uint32_t obs_domain_id;
+ uint32_t obs_point_id;
+};
+
/* OFPACT_DEC_TTL.
*
/* OFPACT_DEC_TTL.
*
- * Used for NXAST_DEC_TTL and NXAST_DEC_TTL_CNT_IDS. */
+ * Used for
OFPAT11_DEC_NW_TTL,
NXAST_DEC_TTL and NXAST_DEC_TTL_CNT_IDS. */
struct ofpact_cnt_ids {
struct ofpact ofpact;
struct ofpact_cnt_ids {
struct ofpact ofpact;
@@
-419,6
+473,15
@@
struct ofpact_cnt_ids {
uint16_t cnt_ids[];
};
uint16_t cnt_ids[];
};
+/* OFPACT_SET_MPLS_TTL.
+ *
+ * Used for NXAST_SET_MPLS_TTL */
+struct ofpact_mpls_ttl {
+ struct ofpact ofpact;
+
+ uint8_t ttl;
+};
+
/* OFPACT_GOTO_TABLE
*
* Used for OFPIT11_GOTO_TABLE */
/* OFPACT_GOTO_TABLE
*
* Used for OFPIT11_GOTO_TABLE */
@@
-438,7
+501,9
@@
enum ofperr ofpacts_pull_openflow11_instructions(struct ofpbuf *openflow,
unsigned int instructions_len,
struct ofpbuf *ofpacts);
enum ofperr ofpacts_check(const struct ofpact[], size_t ofpacts_len,
unsigned int instructions_len,
struct ofpbuf *ofpacts);
enum ofperr ofpacts_check(const struct ofpact[], size_t ofpacts_len,
- const struct flow *, int max_ports);
+ struct flow *, ofp_port_t max_ports,
+ uint8_t table_id);
+enum ofperr ofpacts_verify(const struct ofpact ofpacts[], size_t ofpacts_len);
/* Converting ofpacts to OpenFlow. */
void ofpacts_put_openflow10(const struct ofpact[], size_t ofpacts_len,
/* Converting ofpacts to OpenFlow. */
void ofpacts_put_openflow10(const struct ofpact[], size_t ofpacts_len,
@@
-451,7
+516,7
@@
void ofpacts_put_openflow11_instructions(const struct ofpact[],
/* Working with ofpacts. */
bool ofpacts_output_to_port(const struct ofpact[], size_t ofpacts_len,
/* Working with ofpacts. */
bool ofpacts_output_to_port(const struct ofpact[], size_t ofpacts_len,
-
uint16
_t port);
+
ofp_port
_t port);
bool ofpacts_equal(const struct ofpact a[], size_t a_len,
const struct ofpact b[], size_t b_len);
bool ofpacts_equal(const struct ofpact a[], size_t a_len,
const struct ofpact b[], size_t b_len);
@@
-516,7
+581,7
@@
void *ofpact_put(struct ofpbuf *, enum ofpact_type, size_t len);
static inline struct STRUCT * \
ofpact_get_##ENUM(const struct ofpact *ofpact) \
{ \
static inline struct STRUCT * \
ofpact_get_##ENUM(const struct ofpact *ofpact) \
{ \
-
assert(ofpact->type == OFPACT_##ENUM);
\
+
ovs_assert(ofpact->type == OFPACT_##ENUM);
\
return (struct STRUCT *) ofpact; \
} \
\
return (struct STRUCT *) ofpact; \
} \
\
@@
-545,6
+610,10
@@
void ofpact_pad(struct ofpbuf *);
* It is enforced on parser from text string.
*/
#define OVS_INSTRUCTIONS \
* It is enforced on parser from text string.
*/
#define OVS_INSTRUCTIONS \
+ DEFINE_INST(OFPIT13_METER, \
+ ofp13_instruction_meter, false, \
+ "meter") \
+ \
DEFINE_INST(OFPIT11_APPLY_ACTIONS, \
ofp11_instruction_actions, true, \
"apply_actions") \
DEFINE_INST(OFPIT11_APPLY_ACTIONS, \
ofp11_instruction_actions, true, \
"apply_actions") \
@@
-577,16
+646,10
@@
enum {
#undef DEFINE_INST
};
#undef DEFINE_INST
};
-
-static inline bool
-ofpact_is_instruction(const struct ofpact *a)
-{
- /* TODO:XXX Clear-Actions, Write-Actions, Write-Metadata */
- return a->type == OFPACT_GOTO_TABLE;
-}
-
-const char *ofpact_instruction_name_from_type(enum ovs_instruction_type type);
-int ofpact_instruction_type_from_name(const char *name);
+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);
void ofpact_set_field_init(struct ofpact_reg_load *load,
const struct mf_field *mf, const void *src);
void ofpact_set_field_init(struct ofpact_reg_load *load,
const struct mf_field *mf, const void *src);