X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=blobdiff_plain;f=ofproto%2Fofproto-dpif.h;h=94d4e1e70d649e91c288764c3095d5bf7c914264;hp=088ff89314b6c3afb60d12abede13591fedda708;hb=dc723c447a797e555d400594133a35b9841eb1de;hpb=9b516652a1b0113faf6cfa4df2039b7c8a217838 diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index 088ff8931..94d4e1e70 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -21,6 +21,7 @@ #include "odp-util.h" #include "ofp-util.h" #include "ovs-thread.h" +#include "ofproto-provider.h" #include "timer.h" #include "util.h" #include "ovs-thread.h" @@ -42,6 +43,13 @@ enum rule_dpif_lookup_verdict { * the controller. */ RULE_DPIF_LOOKUP_VERDICT_DROP, /* A miss occurred and the packet * should be dropped. */ + RULE_DPIF_LOOKUP_VERDICT_DEFAULT, /* A miss occurred and the packet + * should handled by the default + * miss behaviour. + * For pre-OF1.3 it should be + * forwarded to the controller. + * For OF1.3+ it should be + * dropped. */ }; /* For lock annotation below only. */ @@ -76,16 +84,19 @@ extern struct ovs_rwlock xlate_rwlock; * actions into datapath actions. */ size_t ofproto_dpif_get_max_mpls_depth(const struct ofproto_dpif *); +bool ofproto_dpif_get_enable_recirc(const struct ofproto_dpif *); -uint8_t rule_dpif_lookup(struct ofproto_dpif *, const struct flow *, - struct flow_wildcards *, struct rule_dpif **rule); +uint8_t rule_dpif_lookup(struct ofproto_dpif *, struct flow *, + struct flow_wildcards *, struct rule_dpif **rule, + bool take_ref); enum rule_dpif_lookup_verdict rule_dpif_lookup_from_table(struct ofproto_dpif *, const struct flow *, struct flow_wildcards *, bool force_controller_on_miss, uint8_t *table_id, - struct rule_dpif **rule); + struct rule_dpif **rule, + bool take_ref); void rule_dpif_ref(struct rule_dpif *); void rule_dpif_unref(struct rule_dpif *); @@ -96,8 +107,9 @@ void rule_dpif_credit_stats(struct rule_dpif *rule , bool rule_dpif_is_fail_open(const struct rule_dpif *); bool rule_dpif_is_table_miss(const struct rule_dpif *); bool rule_dpif_is_internal(const struct rule_dpif *); +uint8_t rule_dpif_get_table(const struct rule_dpif *); -struct rule_actions *rule_dpif_get_actions(const struct rule_dpif *); +const struct rule_actions *rule_dpif_get_actions(const struct rule_dpif *); ovs_be64 rule_dpif_get_flow_cookie(const struct rule_dpif *rule); @@ -107,7 +119,7 @@ void rule_dpif_reduce_timeouts(struct rule_dpif *rule, uint16_t idle_timeout, void choose_miss_rule(enum ofputil_port_config, struct rule_dpif *miss_rule, struct rule_dpif *no_packet_in_rule, - struct rule_dpif **rule); + struct rule_dpif **rule, bool take_ref); bool group_dpif_lookup(struct ofproto_dpif *ofproto, uint32_t group_id, struct group_dpif **group); @@ -130,8 +142,10 @@ int ofproto_dpif_execute_actions(struct ofproto_dpif *, const struct flow *, OVS_EXCLUDED(xlate_rwlock); void ofproto_dpif_send_packet_in(struct ofproto_dpif *, struct ofproto_packet_in *); +bool ofproto_dpif_wants_packet_in_on_miss(struct ofproto_dpif *); int ofproto_dpif_send_packet(const struct ofport_dpif *, struct ofpbuf *); void ofproto_dpif_flow_mod(struct ofproto_dpif *, struct ofputil_flow_mod *); +struct rule_dpif *ofproto_dpif_refresh_rule(struct rule_dpif *); struct ofport_dpif *odp_port_to_ofport(const struct dpif_backer *, odp_port_t); @@ -199,4 +213,11 @@ struct ofport_dpif *odp_port_to_ofport(const struct dpif_backer *, odp_port_t); uint32_t ofproto_dpif_alloc_recirc_id(struct ofproto_dpif *ofproto); void ofproto_dpif_free_recirc_id(struct ofproto_dpif *ofproto, uint32_t recirc_id); +int ofproto_dpif_add_internal_flow(struct ofproto_dpif *, + struct match *, int priority, + const struct ofpbuf *ofpacts, + struct rule **rulep); +int ofproto_dpif_delete_internal_flow(struct ofproto_dpif *, struct match *, + int priority); + #endif /* ofproto-dpif.h */