X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=switch%2Fswitch-flow.h;h=38cfa6e08735d626febc705af2ab0324eb0e4a98;hb=a660f93e18f80ebaae47533360ea5bb556335eba;hp=0f6c72161a2e1e97ec2f03cc4dce63a621d5403b;hpb=9630e4100553c3531605aa44db65e9eaafe07dad;p=sliver-openvswitch.git diff --git a/switch/switch-flow.h b/switch/switch-flow.h index 0f6c72161..38cfa6e08 100644 --- a/switch/switch-flow.h +++ b/switch/switch-flow.h @@ -35,6 +35,7 @@ #define SWITCH_FLOW_H 1 #include +#include "openflow/openflow.h" #include "flow.h" #include "list.h" @@ -48,6 +49,11 @@ struct sw_flow_key { uint32_t nw_dst_mask; /* 1-bit in each significant nw_dst bit. */ }; +struct sw_flow_actions { + size_t actions_len; + struct ofp_action_header actions[0]; +}; + struct sw_flow { struct sw_flow_key key; @@ -60,28 +66,29 @@ struct sw_flow { uint64_t byte_count; /* Number of bytes seen. */ uint8_t reason; /* Reason flow expired (one of OFPER_*). */ + struct sw_flow_actions *sf_acts; + /* Private to table implementations. */ struct list node; struct list iter_node; unsigned long int serial; - - /* Actions (XXX probably most flows have only a single action). */ - unsigned int n_actions; - struct ofp_action *actions; }; int flow_matches_1wild(const struct sw_flow_key *, const struct sw_flow_key *); int flow_matches_2wild(const struct sw_flow_key *, const struct sw_flow_key *); -int flow_del_matches(const struct sw_flow_key *, const struct sw_flow_key *, +int flow_matches_desc(const struct sw_flow_key *, const struct sw_flow_key *, int); -struct sw_flow *flow_alloc(int n_actions); +struct sw_flow *flow_alloc(size_t); void flow_free(struct sw_flow *); void flow_deferred_free(struct sw_flow *); +void flow_deferred_free_acts(struct sw_flow_actions *); +void flow_replace_acts(struct sw_flow *, const struct ofp_action_header *, + size_t); void flow_extract_match(struct sw_flow_key* to, const struct ofp_match* from); void flow_fill_match(struct ofp_match* to, const struct sw_flow_key* from); void print_flow(const struct sw_flow_key *); bool flow_timeout(struct sw_flow *flow); -void flow_used(struct sw_flow *flow, struct buffer *buffer); +void flow_used(struct sw_flow *flow, struct ofpbuf *buffer); #endif /* switch-flow.h */