X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ofproto%2Fofproto-dpif.h;h=0704297379db2220664845bc95de234269022f8c;hb=5caf4376cc3710145ea9f57c577f3c3ecde0cad5;hp=0c3252ccf9f48c566e64d40eff01998581e89b98;hpb=9583bc14430acc0578c1d00a78143c01d9cf7bee;p=sliver-openvswitch.git diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index 0c3252ccf..070429737 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -35,22 +35,6 @@ enum { N_TABLES = 255 }; enum { TBL_INTERNAL = N_TABLES - 1 }; /* Used for internal hidden rules. */ BUILD_ASSERT_DECL(N_TABLES >= 2 && N_TABLES <= 255); -/* Reasons that we might need to revalidate every facet, and corresponding - * coverage counters. - * - * A value of 0 means that there is no need to revalidate. - * - * It would be nice to have some cleaner way to integrate with coverage - * counters, but with only a few reasons I guess this is good enough for - * now. */ -enum revalidate_reason { - REV_RECONFIGURE = 1, /* Switch configuration changed. */ - REV_STP, /* Spanning tree protocol port status change. */ - REV_PORT_TOGGLED, /* Port enabled or disabled by CFM, LACP, ...*/ - REV_FLOW_TABLE, /* Flow table changed. */ - REV_INCONSISTENCY /* Facet self-check failed. */ -}; - struct rule_dpif { struct rule up; @@ -75,58 +59,6 @@ struct rule_dpif { struct list facets; /* List of "struct facet"s. */ }; -struct avg_subfacet_rates { - double add_rate; /* Moving average of new flows created per minute. */ - double del_rate; /* Moving average of flows deleted per minute. */ -}; - -/* All datapaths of a given type share a single dpif backer instance. */ -struct dpif_backer { - char *type; - int refcount; - struct dpif *dpif; - struct timer next_expiration; - struct hmap odp_to_ofport_map; /* ODP port to ofport mapping. */ - - struct simap tnl_backers; /* Set of dpif ports backing tunnels. */ - - /* Facet revalidation flags applying to facets which use this backer. */ - enum revalidate_reason need_revalidate; /* Revalidate every facet. */ - struct tag_set revalidate_set; /* Revalidate only matching facets. */ - - struct hmap drop_keys; /* Set of dropped odp keys. */ - bool recv_set_enable; /* Enables or disables receiving packets. */ - - struct hmap subfacets; - struct governor *governor; - - /* Subfacet statistics. - * - * These keep track of the total number of subfacets added and deleted and - * flow life span. They are useful for computing the flow rates stats - * exposed via "ovs-appctl dpif/show". The goal is to learn about - * traffic patterns in ways that we can use later to improve Open vSwitch - * performance in new situations. */ - long long int created; /* Time when it is created. */ - unsigned max_n_subfacet; /* Maximum number of flows */ - unsigned avg_n_subfacet; /* Average number of flows. */ - long long int avg_subfacet_life; /* Average life span of subfacets. */ - - /* The average number of subfacets... */ - struct avg_subfacet_rates hourly; /* ...over the last hour. */ - struct avg_subfacet_rates daily; /* ...over the last day. */ - struct avg_subfacet_rates lifetime; /* ...over the switch lifetime. */ - long long int last_minute; /* Last time 'hourly' was updated. */ - - /* Number of subfacets added or deleted since 'last_minute'. */ - unsigned subfacet_add_count; - unsigned subfacet_del_count; - - /* Number of subfacets added or deleted from 'created' to 'last_minute.' */ - unsigned long long int total_subfacet_add_count; - unsigned long long int total_subfacet_del_count; -}; - /* Extra information about a classifier table. * Currently used just for optimized flow revalidation. */ struct table_dpif { @@ -168,7 +100,6 @@ struct ofproto_dpif { /* Support for debugging async flow mods. */ struct list completions; - bool has_bundle_action; /* True when the first bundle action appears. */ struct netdev_stats stats; /* To account packets generated and consumed in * userspace. */ @@ -195,15 +126,16 @@ struct ofport_dpif { struct hmap_node odp_port_node; /* In dpif_backer's "odp_to_ofport_map". */ struct ofport up; - uint32_t odp_port; + odp_port_t odp_port; struct ofbundle *bundle; /* Bundle that contains this port, if any. */ struct list bundle_node; /* In struct ofbundle's "ports" list. */ struct cfm *cfm; /* Connectivity Fault Management, if any. */ struct bfd *bfd; /* BFD, if any. */ tag_type tag; /* Tag associated with this port. */ bool may_enable; /* May be enabled in bonds. */ + bool is_tunnel; /* This port is a tunnel. */ long long int carrier_seq; /* Carrier status changes. */ - struct tnl_port *tnl_port; /* Tunnel handle, or null. */ + struct ofport_dpif *peer; /* Peer if patch port. */ /* Spanning tree. */ struct stp_port *stp_port; /* Spanning Tree Protocol, if any. */ @@ -218,7 +150,7 @@ struct ofport_dpif { * drivers in old versions of Linux that do not properly support VLANs when * VLAN devices are not used. When broken device drivers are no longer in * widespread use, we will delete these interfaces. */ - uint16_t realdev_ofp_port; + ofp_port_t realdev_ofp_port; int vlandev_vid; }; @@ -268,16 +200,6 @@ struct ofmirror { int64_t byte_count; /* Number of bytes sent. */ }; -/* Node in 'ofport_dpif''s 'priorities' map. Used to maintain a map from - * 'priority' (the datapath's term for QoS queue) to the dscp bits which all - * traffic egressing the 'ofport' with that priority should be marked with. */ -struct priority_to_dscp { - struct hmap_node hmap_node; /* Node in 'ofport_dpif''s 'priorities' map. */ - uint32_t priority; /* Priority of this queue (see struct flow). */ - - uint8_t dscp; /* DSCP bits to mark outgoing traffic with. */ -}; - static inline struct rule_dpif *rule_dpif_cast(const struct rule *rule) { return rule ? CONTAINER_OF(rule, struct rule_dpif, up) : NULL; @@ -305,14 +227,13 @@ mirror_mask_ffs(mirror_mask_t mask) } struct ofport_dpif *get_ofp_port(const struct ofproto_dpif *, - uint16_t ofp_port); + ofp_port_t ofp_port); struct ofport_dpif *get_odp_port(const struct ofproto_dpif *, - uint32_t odp_port); + odp_port_t odp_port); -struct ofport_dpif *ofport_get_peer(const struct ofport_dpif *); - -uint32_t ofp_port_to_odp_port(const struct ofproto_dpif *, uint16_t ofp_port); +odp_port_t ofp_port_to_odp_port(const struct ofproto_dpif *, + ofp_port_t ofp_port); struct rule_dpif *rule_dpif_lookup_in_table(struct ofproto_dpif *, const struct flow *, @@ -335,17 +256,19 @@ size_t put_userspace_action(const struct ofproto_dpif *, const union user_action_cookie *, const size_t cookie_size); -enum slow_path_reason process_special(struct ofproto_dpif *, - const struct flow *, - const struct ofport_dpif *, - const struct ofpbuf *packet); - -uint16_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, - uint16_t realdev_ofp_port, - ovs_be16 vlan_tci); +bool stp_should_process_flow(const struct flow *, struct flow_wildcards *); +void stp_process_packet(const struct ofport_dpif *, + const struct ofpbuf *packet); -struct priority_to_dscp *get_priority(const struct ofport_dpif *, - uint32_t priority); +ofp_port_t vsp_realdev_to_vlandev(const struct ofproto_dpif *, + ofp_port_t realdev_ofp_port, + ovs_be16 vlan_tci); +bool ofproto_dpif_dscp_from_priority(const struct ofport_dpif *, + uint32_t priority, uint8_t *dscp); +int ofproto_dpif_queue_to_priority(const struct ofproto_dpif *, + uint32_t queue_id, uint32_t *priority); +tag_type calculate_flow_tag(struct ofproto_dpif *, const struct flow *, + uint8_t table_id, struct rule_dpif *); #endif /* ofproto-dpif.h */