Prepare include headers
[cascardo/ovs.git] / datapath / vport.c
1 /*
2  * Copyright (c) 2007-2012 Nicira, Inc.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of version 2 of the GNU General Public
6  * License as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16  * 02110-1301, USA
17  */
18
19 #include <linux/etherdevice.h>
20 #include <linux/if.h>
21 #include <linux/if_vlan.h>
22 #include <linux/jhash.h>
23 #include <linux/kconfig.h>
24 #include <linux/kernel.h>
25 #include <linux/list.h>
26 #include <linux/mutex.h>
27 #include <linux/percpu.h>
28 #include <linux/rcupdate.h>
29 #include <linux/rtnetlink.h>
30 #include <linux/compat.h>
31 #include <linux/version.h>
32 #include <net/net_namespace.h>
33
34 #include "datapath.h"
35 #include "gso.h"
36 #include "vport.h"
37 #include "vport-internal_dev.h"
38
39 static void ovs_vport_record_error(struct vport *,
40                                    enum vport_err_type err_type);
41
42 /* List of statically compiled vport implementations.  Don't forget to also
43  * add yours to the list at the bottom of vport.h. */
44 static const struct vport_ops *vport_ops_list[] = {
45         &ovs_netdev_vport_ops,
46         &ovs_internal_vport_ops,
47         &ovs_geneve_vport_ops,
48 #if IS_ENABLED(CONFIG_NET_IPGRE_DEMUX)
49         &ovs_gre_vport_ops,
50         &ovs_gre64_vport_ops,
51 #endif
52         &ovs_vxlan_vport_ops,
53         &ovs_lisp_vport_ops,
54 };
55
56 /* Protected by RCU read lock for reading, ovs_mutex for writing. */
57 static struct hlist_head *dev_table;
58 #define VPORT_HASH_BUCKETS 1024
59
60 /**
61  *      ovs_vport_init - initialize vport subsystem
62  *
63  * Called at module load time to initialize the vport subsystem.
64  */
65 int ovs_vport_init(void)
66 {
67         dev_table = kzalloc(VPORT_HASH_BUCKETS * sizeof(struct hlist_head),
68                             GFP_KERNEL);
69         if (!dev_table)
70                 return -ENOMEM;
71
72         return 0;
73 }
74
75 /**
76  *      ovs_vport_exit - shutdown vport subsystem
77  *
78  * Called at module exit time to shutdown the vport subsystem.
79  */
80 void ovs_vport_exit(void)
81 {
82         kfree(dev_table);
83 }
84
85 static struct hlist_head *hash_bucket(struct net *net, const char *name)
86 {
87         unsigned int hash = jhash(name, strlen(name), (unsigned long) net);
88         return &dev_table[hash & (VPORT_HASH_BUCKETS - 1)];
89 }
90
91 /**
92  *      ovs_vport_locate - find a port that has already been created
93  *
94  * @name: name of port to find
95  *
96  * Must be called with ovs or RCU read lock.
97  */
98 struct vport *ovs_vport_locate(struct net *net, const char *name)
99 {
100         struct hlist_head *bucket = hash_bucket(net, name);
101         struct vport *vport;
102
103         hlist_for_each_entry_rcu(vport, bucket, hash_node)
104                 if (!strcmp(name, vport->ops->get_name(vport)) &&
105                     net_eq(ovs_dp_get_net(vport->dp), net))
106                         return vport;
107
108         return NULL;
109 }
110
111 /**
112  *      ovs_vport_alloc - allocate and initialize new vport
113  *
114  * @priv_size: Size of private data area to allocate.
115  * @ops: vport device ops
116  *
117  * Allocate and initialize a new vport defined by @ops.  The vport will contain
118  * a private data area of size @priv_size that can be accessed using
119  * vport_priv().  vports that are no longer needed should be released with
120  * ovs_vport_free().
121  */
122 struct vport *ovs_vport_alloc(int priv_size, const struct vport_ops *ops,
123                               const struct vport_parms *parms)
124 {
125         struct vport *vport;
126         size_t alloc_size;
127         int i;
128
129         alloc_size = sizeof(struct vport);
130         if (priv_size) {
131                 alloc_size = ALIGN(alloc_size, VPORT_ALIGN);
132                 alloc_size += priv_size;
133         }
134
135         vport = kzalloc(alloc_size, GFP_KERNEL);
136         if (!vport)
137                 return ERR_PTR(-ENOMEM);
138
139         vport->dp = parms->dp;
140         vport->port_no = parms->port_no;
141         vport->ops = ops;
142         INIT_HLIST_NODE(&vport->dp_hash_node);
143
144         if (ovs_vport_set_upcall_portids(vport, parms->upcall_portids)) {
145                 kfree(vport);
146                 return ERR_PTR(-EINVAL);
147         }
148
149         vport->percpu_stats = alloc_percpu(struct pcpu_sw_netstats);
150         if (!vport->percpu_stats) {
151                 kfree(vport);
152                 return ERR_PTR(-ENOMEM);
153         }
154
155         for_each_possible_cpu(i) {
156                 struct pcpu_sw_netstats *vport_stats;
157                 vport_stats = per_cpu_ptr(vport->percpu_stats, i);
158                 u64_stats_init(&vport_stats->syncp);
159         }
160
161         spin_lock_init(&vport->stats_lock);
162
163         return vport;
164 }
165
166 /**
167  *      ovs_vport_free - uninitialize and free vport
168  *
169  * @vport: vport to free
170  *
171  * Frees a vport allocated with ovs_vport_alloc() when it is no longer needed.
172  *
173  * The caller must ensure that an RCU grace period has passed since the last
174  * time @vport was in a datapath.
175  */
176 void ovs_vport_free(struct vport *vport)
177 {
178         kfree((struct vport_portids __force *)vport->upcall_portids);
179         free_percpu(vport->percpu_stats);
180         kfree(vport);
181 }
182
183 /**
184  *      ovs_vport_add - add vport device (for kernel callers)
185  *
186  * @parms: Information about new vport.
187  *
188  * Creates a new vport with the specified configuration (which is dependent on
189  * device type).  ovs_mutex must be held.
190  */
191 struct vport *ovs_vport_add(const struct vport_parms *parms)
192 {
193         struct vport *vport;
194         int err = 0;
195         int i;
196
197         for (i = 0; i < ARRAY_SIZE(vport_ops_list); i++) {
198                 if (vport_ops_list[i]->type == parms->type) {
199                         struct hlist_head *bucket;
200
201                         vport = vport_ops_list[i]->create(parms);
202                         if (IS_ERR(vport)) {
203                                 err = PTR_ERR(vport);
204                                 goto out;
205                         }
206
207                         bucket = hash_bucket(ovs_dp_get_net(vport->dp),
208                                              vport->ops->get_name(vport));
209                         hlist_add_head_rcu(&vport->hash_node, bucket);
210                         return vport;
211                 }
212         }
213
214         err = -EAFNOSUPPORT;
215
216 out:
217         return ERR_PTR(err);
218 }
219
220 /**
221  *      ovs_vport_set_options - modify existing vport device (for kernel callers)
222  *
223  * @vport: vport to modify.
224  * @options: New configuration.
225  *
226  * Modifies an existing device with the specified configuration (which is
227  * dependent on device type).  ovs_mutex must be held.
228  */
229 int ovs_vport_set_options(struct vport *vport, struct nlattr *options)
230 {
231         if (!vport->ops->set_options)
232                 return -EOPNOTSUPP;
233         return vport->ops->set_options(vport, options);
234 }
235
236 /**
237  *      ovs_vport_del - delete existing vport device
238  *
239  * @vport: vport to delete.
240  *
241  * Detaches @vport from its datapath and destroys it.  It is possible to fail
242  * for reasons such as lack of memory.  ovs_mutex must be held.
243  */
244 void ovs_vport_del(struct vport *vport)
245 {
246         ASSERT_OVSL();
247
248         hlist_del_rcu(&vport->hash_node);
249         vport->ops->destroy(vport);
250 }
251
252 /**
253  *      ovs_vport_set_stats - sets offset device stats
254  *
255  * @vport: vport on which to set stats
256  * @stats: stats to set
257  *
258  * Provides a set of transmit, receive, and error stats to be added as an
259  * offset to the collected data when stats are retrieved.  Some devices may not
260  * support setting the stats, in which case the result will always be
261  * -EOPNOTSUPP.
262  *
263  * Must be called with ovs_mutex.
264  */
265 void ovs_vport_set_stats(struct vport *vport, struct ovs_vport_stats *stats)
266 {
267         spin_lock_bh(&vport->stats_lock);
268         vport->offset_stats = *stats;
269         spin_unlock_bh(&vport->stats_lock);
270 }
271
272 /**
273  *      ovs_vport_get_stats - retrieve device stats
274  *
275  * @vport: vport from which to retrieve the stats
276  * @stats: location to store stats
277  *
278  * Retrieves transmit, receive, and error stats for the given device.
279  *
280  * Must be called with ovs_mutex or rcu_read_lock.
281  */
282 void ovs_vport_get_stats(struct vport *vport, struct ovs_vport_stats *stats)
283 {
284         int i;
285
286         /* We potentially have 3 sources of stats that need to be
287          * combined: those we have collected (split into err_stats and
288          * percpu_stats), offset_stats from set_stats(), and device
289          * error stats from netdev->get_stats() (for errors that happen
290          * downstream and therefore aren't reported through our
291          * vport_record_error() function).
292          * Stats from first two sources are merged and reported by ovs over
293          * OVS_VPORT_ATTR_STATS.
294          * netdev-stats can be directly read over netlink-ioctl.
295          */
296
297         spin_lock_bh(&vport->stats_lock);
298
299         *stats = vport->offset_stats;
300
301         stats->rx_errors        += vport->err_stats.rx_errors;
302         stats->tx_errors        += vport->err_stats.tx_errors;
303         stats->tx_dropped       += vport->err_stats.tx_dropped;
304         stats->rx_dropped       += vport->err_stats.rx_dropped;
305
306         spin_unlock_bh(&vport->stats_lock);
307
308         for_each_possible_cpu(i) {
309                 const struct pcpu_sw_netstats *percpu_stats;
310                 struct pcpu_sw_netstats local_stats;
311                 unsigned int start;
312
313                 percpu_stats = per_cpu_ptr(vport->percpu_stats, i);
314
315                 do {
316                         start = u64_stats_fetch_begin_irq(&percpu_stats->syncp);
317                         local_stats = *percpu_stats;
318                 } while (u64_stats_fetch_retry_irq(&percpu_stats->syncp, start));
319
320                 stats->rx_bytes         += local_stats.rx_bytes;
321                 stats->rx_packets       += local_stats.rx_packets;
322                 stats->tx_bytes         += local_stats.tx_bytes;
323                 stats->tx_packets       += local_stats.tx_packets;
324         }
325 }
326
327 /**
328  *      ovs_vport_get_options - retrieve device options
329  *
330  * @vport: vport from which to retrieve the options.
331  * @skb: sk_buff where options should be appended.
332  *
333  * Retrieves the configuration of the given device, appending an
334  * %OVS_VPORT_ATTR_OPTIONS attribute that in turn contains nested
335  * vport-specific attributes to @skb.
336  *
337  * Returns 0 if successful, -EMSGSIZE if @skb has insufficient room, or another
338  * negative error code if a real error occurred.  If an error occurs, @skb is
339  * left unmodified.
340  *
341  * Must be called with ovs_mutex or rcu_read_lock.
342  */
343 int ovs_vport_get_options(const struct vport *vport, struct sk_buff *skb)
344 {
345         struct nlattr *nla;
346         int err;
347
348         if (!vport->ops->get_options)
349                 return 0;
350
351         nla = nla_nest_start(skb, OVS_VPORT_ATTR_OPTIONS);
352         if (!nla)
353                 return -EMSGSIZE;
354
355         err = vport->ops->get_options(vport, skb);
356         if (err) {
357                 nla_nest_cancel(skb, nla);
358                 return err;
359         }
360
361         nla_nest_end(skb, nla);
362         return 0;
363 }
364
365 static void vport_portids_destroy_rcu_cb(struct rcu_head *rcu)
366 {
367         struct vport_portids *ids = container_of(rcu, struct vport_portids,
368                                                  rcu);
369
370         kfree(ids);
371 }
372
373 /**
374  *      ovs_vport_set_upcall_portids - set upcall portids of @vport.
375  *
376  * @vport: vport to modify.
377  * @ids: new configuration, an array of port ids.
378  *
379  * Sets the vport's upcall_portids to @ids.
380  *
381  * Returns 0 if successful, -EINVAL if @ids is zero length or cannot be parsed
382  * as an array of U32.
383  *
384  * Must be called with ovs_mutex.
385  */
386 int ovs_vport_set_upcall_portids(struct vport *vport,  struct nlattr *ids)
387 {
388         struct vport_portids *old, *vport_portids;
389
390         if (!nla_len(ids) || nla_len(ids) % sizeof(u32))
391                 return -EINVAL;
392
393         old = ovsl_dereference(vport->upcall_portids);
394
395         vport_portids = kmalloc(sizeof *vport_portids + nla_len(ids),
396                                 GFP_KERNEL);
397         if (!vport_portids)
398                 return -ENOMEM;
399
400         vport_portids->n_ids = nla_len(ids) / sizeof(u32);
401         vport_portids->rn_ids = reciprocal_value(vport_portids->n_ids);
402         nla_memcpy(vport_portids->ids, ids, nla_len(ids));
403
404         rcu_assign_pointer(vport->upcall_portids, vport_portids);
405
406         if (old)
407                 call_rcu(&old->rcu, vport_portids_destroy_rcu_cb);
408
409         return 0;
410 }
411
412 /**
413  *      ovs_vport_get_upcall_portids - get the upcall_portids of @vport.
414  *
415  * @vport: vport from which to retrieve the portids.
416  * @skb: sk_buff where portids should be appended.
417  *
418  * Retrieves the configuration of the given vport, appending the
419  * %OVS_VPORT_ATTR_UPCALL_PID attribute which is the array of upcall
420  * portids to @skb.
421  *
422  * Returns 0 if successful, -EMSGSIZE if @skb has insufficient room.
423  * If an error occurs, @skb is left unmodified.  Must be called with
424  * ovs_mutex or rcu_read_lock.
425  */
426 int ovs_vport_get_upcall_portids(const struct vport *vport,
427                                  struct sk_buff *skb)
428 {
429         struct vport_portids *ids;
430
431         ids = rcu_dereference_ovsl(vport->upcall_portids);
432
433         if (vport->dp->user_features & OVS_DP_F_VPORT_PIDS)
434                 return nla_put(skb, OVS_VPORT_ATTR_UPCALL_PID,
435                                ids->n_ids * sizeof(u32), (void *) ids->ids);
436         else
437                 return nla_put_u32(skb, OVS_VPORT_ATTR_UPCALL_PID, ids->ids[0]);
438 }
439
440 /**
441  *      ovs_vport_find_upcall_portid - find the upcall portid to send upcall.
442  *
443  * @vport: vport from which the missed packet is received.
444  * @skb: skb that the missed packet was received.
445  *
446  * Uses the skb_get_hash() to select the upcall portid to send the
447  * upcall.
448  *
449  * Returns the portid of the target socket.  Must be called with rcu_read_lock.
450  */
451 u32 ovs_vport_find_upcall_portid(const struct vport *p, struct sk_buff *skb)
452 {
453         struct vport_portids *ids;
454         u32 hash;
455
456         ids = rcu_dereference(p->upcall_portids);
457
458         if (ids->n_ids == 1 && ids->ids[0] == 0)
459                 return 0;
460
461         hash = skb_get_hash(skb);
462         return ids->ids[hash - ids->n_ids * reciprocal_divide(hash, ids->rn_ids)];
463 }
464
465 /**
466  *      ovs_vport_receive - pass up received packet to the datapath for processing
467  *
468  * @vport: vport that received the packet
469  * @skb: skb that was received
470  * @tun_info: tunnel (if any) that carried packet
471  *
472  * Must be called with rcu_read_lock.  The packet cannot be shared and
473  * skb->data should point to the Ethernet header.  The caller must have already
474  * called compute_ip_summed() to initialize the checksumming fields.
475  */
476 void ovs_vport_receive(struct vport *vport, struct sk_buff *skb,
477                        struct ovs_tunnel_info *tun_info)
478 {
479         struct pcpu_sw_netstats *stats;
480         struct sw_flow_key key;
481         int error;
482
483         stats = this_cpu_ptr(vport->percpu_stats);
484         u64_stats_update_begin(&stats->syncp);
485         stats->rx_packets++;
486         stats->rx_bytes += skb->len;
487         u64_stats_update_end(&stats->syncp);
488
489         ovs_skb_init_inner_protocol(skb);
490         OVS_CB(skb)->input_vport = vport;
491         OVS_CB(skb)->egress_tun_info = NULL;
492         error = ovs_flow_key_extract(tun_info, skb, &key);
493         if (unlikely(error)) {
494                 kfree_skb(skb);
495                 return;
496         }
497
498         ovs_dp_process_packet(skb, false);
499 }
500
501 /**
502  *      ovs_vport_send - send a packet on a device
503  *
504  * @vport: vport on which to send the packet
505  * @skb: skb to send
506  *
507  * Sends the given packet and returns the length of data sent.  Either ovs
508  * lock or rcu_read_lock must be held.
509  */
510 int ovs_vport_send(struct vport *vport, struct sk_buff *skb)
511 {
512         int sent = vport->ops->send(vport, skb);
513
514         if (likely(sent > 0)) {
515                 struct pcpu_sw_netstats *stats;
516
517                 stats = this_cpu_ptr(vport->percpu_stats);
518
519                 u64_stats_update_begin(&stats->syncp);
520                 stats->tx_packets++;
521                 stats->tx_bytes += sent;
522                 u64_stats_update_end(&stats->syncp);
523         } else if (sent < 0) {
524                 ovs_vport_record_error(vport, VPORT_E_TX_ERROR);
525                 kfree_skb(skb);
526         } else
527                 ovs_vport_record_error(vport, VPORT_E_TX_DROPPED);
528
529         return sent;
530 }
531
532 /**
533  *      ovs_vport_record_error - indicate device error to generic stats layer
534  *
535  * @vport: vport that encountered the error
536  * @err_type: one of enum vport_err_type types to indicate the error type
537  *
538  * If using the vport generic stats layer indicate that an error of the given
539  * type has occurred.
540  */
541 static void ovs_vport_record_error(struct vport *vport,
542                                    enum vport_err_type err_type)
543 {
544         spin_lock(&vport->stats_lock);
545
546         switch (err_type) {
547         case VPORT_E_RX_DROPPED:
548                 vport->err_stats.rx_dropped++;
549                 break;
550
551         case VPORT_E_RX_ERROR:
552                 vport->err_stats.rx_errors++;
553                 break;
554
555         case VPORT_E_TX_DROPPED:
556                 vport->err_stats.tx_dropped++;
557                 break;
558
559         case VPORT_E_TX_ERROR:
560                 vport->err_stats.tx_errors++;
561                 break;
562         }
563
564         spin_unlock(&vport->stats_lock);
565 }
566
567 static void free_vport_rcu(struct rcu_head *rcu)
568 {
569         struct vport *vport = container_of(rcu, struct vport, rcu);
570
571         ovs_vport_free(vport);
572 }
573
574 void ovs_vport_deferred_free(struct vport *vport)
575 {
576         if (!vport)
577                 return;
578
579         call_rcu(&vport->rcu, free_vport_rcu);
580 }