Lines Matching refs:vport
94 struct vport *ovs_vport_locate(const struct net *net, const char *name) in ovs_vport_locate()
97 struct vport *vport; in ovs_vport_locate() local
99 hlist_for_each_entry_rcu(vport, bucket, hash_node) in ovs_vport_locate()
100 if (!strcmp(name, ovs_vport_name(vport)) && in ovs_vport_locate()
101 net_eq(ovs_dp_get_net(vport->dp), net)) in ovs_vport_locate()
102 return vport; in ovs_vport_locate()
118 struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops, in ovs_vport_alloc()
121 struct vport *vport; in ovs_vport_alloc() local
124 alloc_size = sizeof(struct vport); in ovs_vport_alloc()
130 vport = kzalloc(alloc_size, GFP_KERNEL); in ovs_vport_alloc()
131 if (!vport) in ovs_vport_alloc()
134 vport->dp = parms->dp; in ovs_vport_alloc()
135 vport->port_no = parms->port_no; in ovs_vport_alloc()
136 vport->ops = ops; in ovs_vport_alloc()
137 INIT_HLIST_NODE(&vport->dp_hash_node); in ovs_vport_alloc()
139 if (ovs_vport_set_upcall_portids(vport, parms->upcall_portids)) { in ovs_vport_alloc()
140 kfree(vport); in ovs_vport_alloc()
144 return vport; in ovs_vport_alloc()
158 void ovs_vport_free(struct vport *vport) in ovs_vport_free() argument
163 kfree(rcu_dereference_raw(vport->upcall_portids)); in ovs_vport_free()
164 kfree(vport); in ovs_vport_free()
187 struct vport *ovs_vport_add(const struct vport_parms *parms) in ovs_vport_add()
190 struct vport *vport; in ovs_vport_add() local
199 vport = ops->create(parms); in ovs_vport_add()
200 if (IS_ERR(vport)) { in ovs_vport_add()
202 return vport; in ovs_vport_add()
205 bucket = hash_bucket(ovs_dp_get_net(vport->dp), in ovs_vport_add()
206 ovs_vport_name(vport)); in ovs_vport_add()
207 hlist_add_head_rcu(&vport->hash_node, bucket); in ovs_vport_add()
208 return vport; in ovs_vport_add()
234 int ovs_vport_set_options(struct vport *vport, struct nlattr *options) in ovs_vport_set_options() argument
236 if (!vport->ops->set_options) in ovs_vport_set_options()
238 return vport->ops->set_options(vport, options); in ovs_vport_set_options()
249 void ovs_vport_del(struct vport *vport) in ovs_vport_del() argument
251 hlist_del_rcu(&vport->hash_node); in ovs_vport_del()
252 module_put(vport->ops->owner); in ovs_vport_del()
253 vport->ops->destroy(vport); in ovs_vport_del()
266 void ovs_vport_get_stats(struct vport *vport, struct ovs_vport_stats *stats) in ovs_vport_get_stats() argument
271 dev_stats = dev_get_stats(vport->dev, &temp); in ovs_vport_get_stats()
299 int ovs_vport_get_options(const struct vport *vport, struct sk_buff *skb) in ovs_vport_get_options() argument
304 if (!vport->ops->get_options) in ovs_vport_get_options()
311 err = vport->ops->get_options(vport, skb); in ovs_vport_get_options()
334 int ovs_vport_set_upcall_portids(struct vport *vport, const struct nlattr *ids) in ovs_vport_set_upcall_portids() argument
341 old = ovsl_dereference(vport->upcall_portids); in ovs_vport_set_upcall_portids()
352 rcu_assign_pointer(vport->upcall_portids, vport_portids); in ovs_vport_set_upcall_portids()
373 int ovs_vport_get_upcall_portids(const struct vport *vport, in ovs_vport_get_upcall_portids() argument
378 ids = rcu_dereference_ovsl(vport->upcall_portids); in ovs_vport_get_upcall_portids()
380 if (vport->dp->user_features & OVS_DP_F_VPORT_PIDS) in ovs_vport_get_upcall_portids()
398 u32 ovs_vport_find_upcall_portid(const struct vport *vport, struct sk_buff *skb) in ovs_vport_find_upcall_portid() argument
404 ids = rcu_dereference(vport->upcall_portids); in ovs_vport_find_upcall_portid()
424 int ovs_vport_receive(struct vport *vport, struct sk_buff *skb, in ovs_vport_receive() argument
430 OVS_CB(skb)->input_vport = vport; in ovs_vport_receive()
433 if (unlikely(dev_net(skb->dev) != ovs_dp_get_net(vport->dp))) { in ovs_vport_receive()
469 void ovs_vport_send(struct vport *vport, struct sk_buff *skb, u8 mac_proto) in ovs_vport_send() argument
471 int mtu = vport->dev->mtu; in ovs_vport_send()
473 switch (vport->dev->type) { in ovs_vport_send()
492 if (unlikely(packet_length(skb, vport->dev) > mtu && in ovs_vport_send()
495 vport->dev->name, in ovs_vport_send()
496 packet_length(skb, vport->dev), mtu); in ovs_vport_send()
497 vport->dev->stats.tx_errors++; in ovs_vport_send()
501 skb->dev = vport->dev; in ovs_vport_send()
502 vport->ops->send(skb); in ovs_vport_send()