mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
openvswitch: Increase maximum number of datapath ports.
Use hash table to store ports of datapath. Allow 64K ports per switch. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
parent
46df7b8145
commit
15eac2a742
7 changed files with 111 additions and 49 deletions
|
@ -29,7 +29,9 @@
|
|||
#include "flow.h"
|
||||
#include "vport.h"
|
||||
|
||||
#define DP_MAX_PORTS 1024
|
||||
#define DP_MAX_PORTS USHRT_MAX
|
||||
#define DP_VPORT_HASH_BUCKETS 1024
|
||||
|
||||
#define SAMPLE_ACTION_DEPTH 3
|
||||
|
||||
/**
|
||||
|
@ -57,10 +59,8 @@ struct dp_stats_percpu {
|
|||
* @list_node: Element in global 'dps' list.
|
||||
* @n_flows: Number of flows currently in flow table.
|
||||
* @table: Current flow table. Protected by genl_lock and RCU.
|
||||
* @ports: Map from port number to &struct vport. %OVSP_LOCAL port
|
||||
* always exists, other ports may be %NULL. Protected by RTNL and RCU.
|
||||
* @port_list: List of all ports in @ports in arbitrary order. RTNL required
|
||||
* to iterate or modify.
|
||||
* @ports: Hash table for ports. %OVSP_LOCAL port always exists. Protected by
|
||||
* RTNL and RCU.
|
||||
* @stats_percpu: Per-CPU datapath statistics.
|
||||
* @net: Reference to net namespace.
|
||||
*
|
||||
|
@ -75,8 +75,7 @@ struct datapath {
|
|||
struct flow_table __rcu *table;
|
||||
|
||||
/* Switch ports. */
|
||||
struct vport __rcu *ports[DP_MAX_PORTS];
|
||||
struct list_head port_list;
|
||||
struct hlist_head *ports;
|
||||
|
||||
/* Stats. */
|
||||
struct dp_stats_percpu __percpu *stats_percpu;
|
||||
|
@ -87,6 +86,26 @@ struct datapath {
|
|||
#endif
|
||||
};
|
||||
|
||||
struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no);
|
||||
|
||||
static inline struct vport *ovs_vport_rcu(const struct datapath *dp, int port_no)
|
||||
{
|
||||
WARN_ON_ONCE(!rcu_read_lock_held());
|
||||
return ovs_lookup_vport(dp, port_no);
|
||||
}
|
||||
|
||||
static inline struct vport *ovs_vport_rtnl_rcu(const struct datapath *dp, int port_no)
|
||||
{
|
||||
WARN_ON_ONCE(!rcu_read_lock_held() && !rtnl_is_locked());
|
||||
return ovs_lookup_vport(dp, port_no);
|
||||
}
|
||||
|
||||
static inline struct vport *ovs_vport_rtnl(const struct datapath *dp, int port_no)
|
||||
{
|
||||
ASSERT_RTNL();
|
||||
return ovs_lookup_vport(dp, port_no);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct ovs_skb_cb - OVS data in skb CB
|
||||
* @flow: The flow associated with this packet. May be %NULL if no flow.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue