X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=switch%2Fswitch-flow.h;h=16066cbf349db7de66d4d3a949380daf973ff27e;hb=b7d8bab74dc293132fcb7fdd72ba497ca71d72ab;hp=1320c09731e8ff794654eb7000dd821e554d5de2;hpb=f593e3ab70ab06acbf97cbb0a9f897dc4f078011;p=openvswitch diff --git a/switch/switch-flow.h b/switch/switch-flow.h index 1320c097..16066cbf 100644 --- a/switch/switch-flow.h +++ b/switch/switch-flow.h @@ -35,6 +35,7 @@ #define SWITCH_FLOW_H 1 #include +#include "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 { + unsigned int n_actions; + struct ofp_action actions[0]; +}; + struct sw_flow { struct sw_flow_key key; @@ -60,14 +66,12 @@ 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 *); @@ -77,6 +81,8 @@ int flow_del_matches(const struct sw_flow_key *, const struct sw_flow_key *, struct sw_flow *flow_alloc(int n_actions); 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 *, int); 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);