diff options
Diffstat (limited to 'net/openvswitch/vport.h')
| -rw-r--r-- | net/openvswitch/vport.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h index 8d721e62f388..35f89d84b45e 100644 --- a/net/openvswitch/vport.h +++ b/net/openvswitch/vport.h | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include <linux/list.h> | 23 | #include <linux/list.h> |
| 24 | #include <linux/netlink.h> | 24 | #include <linux/netlink.h> |
| 25 | #include <linux/openvswitch.h> | 25 | #include <linux/openvswitch.h> |
| 26 | #include <linux/reciprocal_div.h> | ||
| 26 | #include <linux/skbuff.h> | 27 | #include <linux/skbuff.h> |
| 27 | #include <linux/spinlock.h> | 28 | #include <linux/spinlock.h> |
| 28 | #include <linux/u64_stats_sync.h> | 29 | #include <linux/u64_stats_sync.h> |
| @@ -52,6 +53,10 @@ void ovs_vport_get_stats(struct vport *, struct ovs_vport_stats *); | |||
| 52 | int ovs_vport_set_options(struct vport *, struct nlattr *options); | 53 | int ovs_vport_set_options(struct vport *, struct nlattr *options); |
| 53 | int ovs_vport_get_options(const struct vport *, struct sk_buff *); | 54 | int ovs_vport_get_options(const struct vport *, struct sk_buff *); |
| 54 | 55 | ||
| 56 | int ovs_vport_set_upcall_portids(struct vport *, struct nlattr *pids); | ||
| 57 | int ovs_vport_get_upcall_portids(const struct vport *, struct sk_buff *); | ||
| 58 | u32 ovs_vport_find_upcall_portid(const struct vport *, struct sk_buff *); | ||
| 59 | |||
| 55 | int ovs_vport_send(struct vport *, struct sk_buff *); | 60 | int ovs_vport_send(struct vport *, struct sk_buff *); |
| 56 | 61 | ||
| 57 | /* The following definitions are for implementers of vport devices: */ | 62 | /* The following definitions are for implementers of vport devices: */ |
| @@ -62,13 +67,27 @@ struct vport_err_stats { | |||
| 62 | u64 tx_dropped; | 67 | u64 tx_dropped; |
| 63 | u64 tx_errors; | 68 | u64 tx_errors; |
| 64 | }; | 69 | }; |
| 70 | /** | ||
| 71 | * struct vport_portids - array of netlink portids of a vport. | ||
| 72 | * must be protected by rcu. | ||
| 73 | * @rn_ids: The reciprocal value of @n_ids. | ||
| 74 | * @rcu: RCU callback head for deferred destruction. | ||
| 75 | * @n_ids: Size of @ids array. | ||
| 76 | * @ids: Array storing the Netlink socket pids to be used for packets received | ||
| 77 | * on this port that miss the flow table. | ||
| 78 | */ | ||
| 79 | struct vport_portids { | ||
| 80 | struct reciprocal_value rn_ids; | ||
| 81 | struct rcu_head rcu; | ||
| 82 | u32 n_ids; | ||
| 83 | u32 ids[]; | ||
| 84 | }; | ||
| 65 | 85 | ||
| 66 | /** | 86 | /** |
| 67 | * struct vport - one port within a datapath | 87 | * struct vport - one port within a datapath |
| 68 | * @rcu: RCU callback head for deferred destruction. | 88 | * @rcu: RCU callback head for deferred destruction. |
| 69 | * @dp: Datapath to which this port belongs. | 89 | * @dp: Datapath to which this port belongs. |
| 70 | * @upcall_portid: The Netlink port to use for packets received on this port that | 90 | * @upcall_portids: RCU protected 'struct vport_portids'. |
| 71 | * miss the flow table. | ||
| 72 | * @port_no: Index into @dp's @ports array. | 91 | * @port_no: Index into @dp's @ports array. |
| 73 | * @hash_node: Element in @dev_table hash table in vport.c. | 92 | * @hash_node: Element in @dev_table hash table in vport.c. |
| 74 | * @dp_hash_node: Element in @datapath->ports hash table in datapath.c. | 93 | * @dp_hash_node: Element in @datapath->ports hash table in datapath.c. |
| @@ -80,7 +99,7 @@ struct vport_err_stats { | |||
| 80 | struct vport { | 99 | struct vport { |
| 81 | struct rcu_head rcu; | 100 | struct rcu_head rcu; |
| 82 | struct datapath *dp; | 101 | struct datapath *dp; |
| 83 | u32 upcall_portid; | 102 | struct vport_portids __rcu *upcall_portids; |
| 84 | u16 port_no; | 103 | u16 port_no; |
| 85 | 104 | ||
| 86 | struct hlist_node hash_node; | 105 | struct hlist_node hash_node; |
| @@ -111,7 +130,7 @@ struct vport_parms { | |||
| 111 | /* For ovs_vport_alloc(). */ | 130 | /* For ovs_vport_alloc(). */ |
| 112 | struct datapath *dp; | 131 | struct datapath *dp; |
| 113 | u16 port_no; | 132 | u16 port_no; |
| 114 | u32 upcall_portid; | 133 | struct nlattr *upcall_portids; |
| 115 | }; | 134 | }; |
| 116 | 135 | ||
| 117 | /** | 136 | /** |
