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