diff options
author | Ben Pfaff <blp@nicira.com> | 2010-12-10 10:40:58 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2010-12-10 11:13:32 -0800 |
commit | cdee00fd635d1e0f1eeb5d9c009daeb59abd4777 (patch) | |
tree | 49ef94d30bcb995fa1070c3aa770a9a515b26b0a /lib/odp-util.h | |
parent | 7f8ca6459c37ede8faf13f730bcd4d9f05dfd13b (diff) |
datapath: Replace "struct odp_action" by Netlink attributes.
In the medium term, we plan to migrate the datapath to use Netlink as its
communication channel. In the short term, we need to be able to have
actions with 64-bit arguments but "struct odp_action" only has room for
48 bits. So this patch shifts to variable-length arguments using Netlink
attributes, which starts in on the Netlink transition and makes 64-bit
arguments possible at the same time.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'lib/odp-util.h')
-rw-r--r-- | lib/odp-util.h | 31 |
1 files changed, 4 insertions, 27 deletions
diff --git a/lib/odp-util.h b/lib/odp-util.h index 813e29f3..6051c52d 100644 --- a/lib/odp-util.h +++ b/lib/odp-util.h @@ -29,30 +29,6 @@ struct ds; struct flow; -enum { MAX_ODP_ACTIONS = 16384 / sizeof(union odp_action) }; - -/* odp_actions_add() assumes that MAX_ODP_ACTIONS is a power of 2. */ -BUILD_ASSERT_DECL(IS_POW2(MAX_ODP_ACTIONS)); - -struct odp_actions { - size_t n_actions; - union odp_action actions[MAX_ODP_ACTIONS]; -}; - -static inline void -odp_actions_init(struct odp_actions *actions) -{ - actions->n_actions = 0; -} - -union odp_action *odp_actions_add(struct odp_actions *actions, uint16_t type); - -static inline bool -odp_actions_overflow(const struct odp_actions *actions) -{ - return actions->n_actions > MAX_ODP_ACTIONS; -} - static inline uint16_t ofp_port_to_odp_port(uint16_t ofp_port) { @@ -80,9 +56,10 @@ odp_port_to_ofp_port(uint16_t odp_port) } void format_odp_flow_key(struct ds *, const struct odp_flow_key *); -void format_odp_action(struct ds *, const union odp_action *); -void format_odp_actions(struct ds *, const union odp_action *actions, - size_t n_actions); +int odp_action_len(uint16_t type); +void format_odp_action(struct ds *, const struct nlattr *); +void format_odp_actions(struct ds *, const struct nlattr *odp_actions, + size_t actions_len); void format_odp_flow_stats(struct ds *, const struct odp_flow_stats *); void format_odp_flow(struct ds *, const struct odp_flow *); |