e9321ee3838719cdd3ba102d9482a7d1937e4f33
[sliver-openvswitch.git] / lib / netdev-linux.c
1 /*
2  * Copyright (c) 2009, 2010, 2011 Nicira Networks.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <config.h>
18
19 #include "netdev-linux.h"
20
21 #include <assert.h>
22 #include <errno.h>
23 #include <fcntl.h>
24 #include <arpa/inet.h>
25 #include <inttypes.h>
26 #include <linux/gen_stats.h>
27 #include <linux/if_ether.h>
28 #include <linux/if_tun.h>
29 #include <linux/ip.h>
30 #include <linux/types.h>
31 #include <linux/ethtool.h>
32 #include <linux/mii.h>
33 #include <linux/pkt_cls.h>
34 #include <linux/pkt_sched.h>
35 #include <linux/rtnetlink.h>
36 #include <linux/sockios.h>
37 #include <linux/version.h>
38 #include <sys/types.h>
39 #include <sys/ioctl.h>
40 #include <sys/socket.h>
41 #include <netpacket/packet.h>
42 #include <net/if.h>
43 #include <net/if_arp.h>
44 #include <net/if_packet.h>
45 #include <net/route.h>
46 #include <netinet/in.h>
47 #include <poll.h>
48 #include <stdlib.h>
49 #include <string.h>
50 #include <unistd.h>
51
52 #include "coverage.h"
53 #include "dpif-linux.h"
54 #include "dynamic-string.h"
55 #include "fatal-signal.h"
56 #include "hash.h"
57 #include "hmap.h"
58 #include "netdev-provider.h"
59 #include "netdev-vport.h"
60 #include "netlink.h"
61 #include "netlink-notifier.h"
62 #include "netlink-socket.h"
63 #include "ofpbuf.h"
64 #include "openflow/openflow.h"
65 #include "packets.h"
66 #include "poll-loop.h"
67 #include "rtnetlink-link.h"
68 #include "socket-util.h"
69 #include "shash.h"
70 #include "sset.h"
71 #include "timer.h"
72 #include "vlog.h"
73
74 VLOG_DEFINE_THIS_MODULE(netdev_linux);
75
76 COVERAGE_DEFINE(netdev_set_policing);
77 COVERAGE_DEFINE(netdev_arp_lookup);
78 COVERAGE_DEFINE(netdev_get_ifindex);
79 COVERAGE_DEFINE(netdev_get_hwaddr);
80 COVERAGE_DEFINE(netdev_set_hwaddr);
81 COVERAGE_DEFINE(netdev_ethtool);
82 \f
83 /* These were introduced in Linux 2.6.14, so they might be missing if we have
84  * old headers. */
85 #ifndef ADVERTISED_Pause
86 #define ADVERTISED_Pause                (1 << 13)
87 #endif
88 #ifndef ADVERTISED_Asym_Pause
89 #define ADVERTISED_Asym_Pause           (1 << 14)
90 #endif
91
92 /* These were introduced in Linux 2.6.24, so they might be missing if we
93  * have old headers. */
94 #ifndef ETHTOOL_GFLAGS
95 #define ETHTOOL_GFLAGS       0x00000025 /* Get flags bitmap(ethtool_value) */
96 #endif
97 #ifndef ETHTOOL_SFLAGS
98 #define ETHTOOL_SFLAGS       0x00000026 /* Set flags bitmap(ethtool_value) */
99 #endif
100
101 /* This was introduced in Linux 2.6.25, so it might be missing if we have old
102  * headers. */
103 #ifndef TC_RTAB_SIZE
104 #define TC_RTAB_SIZE 1024
105 #endif
106
107 static struct nln_notifier *netdev_linux_cache_notifier = NULL;
108 static int cache_notifier_refcount;
109
110 enum {
111     VALID_IFINDEX           = 1 << 0,
112     VALID_ETHERADDR         = 1 << 1,
113     VALID_IN4               = 1 << 2,
114     VALID_IN6               = 1 << 3,
115     VALID_MTU               = 1 << 4,
116     VALID_POLICING          = 1 << 5,
117     VALID_HAVE_VPORT_STATS  = 1 << 6
118 };
119
120 struct tap_state {
121     int fd;
122     bool opened;
123 };
124 \f
125 /* Traffic control. */
126
127 /* An instance of a traffic control class.  Always associated with a particular
128  * network device.
129  *
130  * Each TC implementation subclasses this with whatever additional data it
131  * needs. */
132 struct tc {
133     const struct tc_ops *ops;
134     struct hmap queues;         /* Contains "struct tc_queue"s.
135                                  * Read by generic TC layer.
136                                  * Written only by TC implementation. */
137 };
138
139 /* One traffic control queue.
140  *
141  * Each TC implementation subclasses this with whatever additional data it
142  * needs. */
143 struct tc_queue {
144     struct hmap_node hmap_node; /* In struct tc's "queues" hmap. */
145     unsigned int queue_id;      /* OpenFlow queue ID. */
146 };
147
148 /* A particular kind of traffic control.  Each implementation generally maps to
149  * one particular Linux qdisc class.
150  *
151  * The functions below return 0 if successful or a positive errno value on
152  * failure, except where otherwise noted.  All of them must be provided, except
153  * where otherwise noted. */
154 struct tc_ops {
155     /* Name used by kernel in the TCA_KIND attribute of tcmsg, e.g. "htb".
156      * This is null for tc_ops_default and tc_ops_other, for which there are no
157      * appropriate values. */
158     const char *linux_name;
159
160     /* Name used in OVS database, e.g. "linux-htb".  Must be nonnull. */
161     const char *ovs_name;
162
163     /* Number of supported OpenFlow queues, 0 for qdiscs that have no
164      * queues.  The queues are numbered 0 through n_queues - 1. */
165     unsigned int n_queues;
166
167     /* Called to install this TC class on 'netdev'.  The implementation should
168      * make the Netlink calls required to set up 'netdev' with the right qdisc
169      * and configure it according to 'details'.  The implementation may assume
170      * that the current qdisc is the default; that is, there is no need for it
171      * to delete the current qdisc before installing itself.
172      *
173      * The contents of 'details' should be documented as valid for 'ovs_name'
174      * in the "other_config" column in the "QoS" table in vswitchd/vswitch.xml
175      * (which is built as ovs-vswitchd.conf.db(8)).
176      *
177      * This function must return 0 if and only if it sets 'netdev->tc' to an
178      * initialized 'struct tc'.
179      *
180      * (This function is null for tc_ops_other, which cannot be installed.  For
181      * other TC classes it should always be nonnull.) */
182     int (*tc_install)(struct netdev *netdev, const struct shash *details);
183
184     /* Called when the netdev code determines (through a Netlink query) that
185      * this TC class's qdisc is installed on 'netdev', but we didn't install
186      * it ourselves and so don't know any of the details.
187      *
188      * 'nlmsg' is the kernel reply to a RTM_GETQDISC Netlink message for
189      * 'netdev'.  The TCA_KIND attribute of 'nlmsg' is 'linux_name'.  The
190      * implementation should parse the other attributes of 'nlmsg' as
191      * necessary to determine its configuration.  If necessary it should also
192      * use Netlink queries to determine the configuration of queues on
193      * 'netdev'.
194      *
195      * This function must return 0 if and only if it sets 'netdev->tc' to an
196      * initialized 'struct tc'. */
197     int (*tc_load)(struct netdev *netdev, struct ofpbuf *nlmsg);
198
199     /* Destroys the data structures allocated by the implementation as part of
200      * 'tc'.  (This includes destroying 'tc->queues' by calling
201      * tc_destroy(tc).
202      *
203      * The implementation should not need to perform any Netlink calls.  If
204      * desirable, the caller is responsible for deconfiguring the kernel qdisc.
205      * (But it may not be desirable.)
206      *
207      * This function may be null if 'tc' is trivial. */
208     void (*tc_destroy)(struct tc *tc);
209
210     /* Retrieves details of 'netdev->tc' configuration into 'details'.
211      *
212      * The implementation should not need to perform any Netlink calls, because
213      * the 'tc_install' or 'tc_load' that instantiated 'netdev->tc' should have
214      * cached the configuration.
215      *
216      * The contents of 'details' should be documented as valid for 'ovs_name'
217      * in the "other_config" column in the "QoS" table in vswitchd/vswitch.xml
218      * (which is built as ovs-vswitchd.conf.db(8)).
219      *
220      * This function may be null if 'tc' is not configurable.
221      */
222     int (*qdisc_get)(const struct netdev *netdev, struct shash *details);
223
224     /* Reconfigures 'netdev->tc' according to 'details', performing any
225      * required Netlink calls to complete the reconfiguration.
226      *
227      * The contents of 'details' should be documented as valid for 'ovs_name'
228      * in the "other_config" column in the "QoS" table in vswitchd/vswitch.xml
229      * (which is built as ovs-vswitchd.conf.db(8)).
230      *
231      * This function may be null if 'tc' is not configurable.
232      */
233     int (*qdisc_set)(struct netdev *, const struct shash *details);
234
235     /* Retrieves details of 'queue' on 'netdev->tc' into 'details'.  'queue' is
236      * one of the 'struct tc_queue's within 'netdev->tc->queues'.
237      *
238      * The contents of 'details' should be documented as valid for 'ovs_name'
239      * in the "other_config" column in the "Queue" table in
240      * vswitchd/vswitch.xml (which is built as ovs-vswitchd.conf.db(8)).
241      *
242      * The implementation should not need to perform any Netlink calls, because
243      * the 'tc_install' or 'tc_load' that instantiated 'netdev->tc' should have
244      * cached the queue configuration.
245      *
246      * This function may be null if 'tc' does not have queues ('n_queues' is
247      * 0). */
248     int (*class_get)(const struct netdev *netdev, const struct tc_queue *queue,
249                      struct shash *details);
250
251     /* Configures or reconfigures 'queue_id' on 'netdev->tc' according to
252      * 'details', perfoming any required Netlink calls to complete the
253      * reconfiguration.  The caller ensures that 'queue_id' is less than
254      * 'n_queues'.
255      *
256      * The contents of 'details' should be documented as valid for 'ovs_name'
257      * in the "other_config" column in the "Queue" table in
258      * vswitchd/vswitch.xml (which is built as ovs-vswitchd.conf.db(8)).
259      *
260      * This function may be null if 'tc' does not have queues or its queues are
261      * not configurable. */
262     int (*class_set)(struct netdev *, unsigned int queue_id,
263                      const struct shash *details);
264
265     /* Deletes 'queue' from 'netdev->tc'.  'queue' is one of the 'struct
266      * tc_queue's within 'netdev->tc->queues'.
267      *
268      * This function may be null if 'tc' does not have queues or its queues
269      * cannot be deleted. */
270     int (*class_delete)(struct netdev *, struct tc_queue *queue);
271
272     /* Obtains stats for 'queue' from 'netdev->tc'.  'queue' is one of the
273      * 'struct tc_queue's within 'netdev->tc->queues'.
274      *
275      * On success, initializes '*stats'.
276      *
277      * This function may be null if 'tc' does not have queues or if it cannot
278      * report queue statistics. */
279     int (*class_get_stats)(const struct netdev *netdev,
280                            const struct tc_queue *queue,
281                            struct netdev_queue_stats *stats);
282
283     /* Extracts queue stats from 'nlmsg', which is a response to a
284      * RTM_GETTCLASS message, and passes them to 'cb' along with 'aux'.
285      *
286      * This function may be null if 'tc' does not have queues or if it cannot
287      * report queue statistics. */
288     int (*class_dump_stats)(const struct netdev *netdev,
289                             const struct ofpbuf *nlmsg,
290                             netdev_dump_queue_stats_cb *cb, void *aux);
291 };
292
293 static void
294 tc_init(struct tc *tc, const struct tc_ops *ops)
295 {
296     tc->ops = ops;
297     hmap_init(&tc->queues);
298 }
299
300 static void
301 tc_destroy(struct tc *tc)
302 {
303     hmap_destroy(&tc->queues);
304 }
305
306 static const struct tc_ops tc_ops_htb;
307 static const struct tc_ops tc_ops_hfsc;
308 static const struct tc_ops tc_ops_default;
309 static const struct tc_ops tc_ops_other;
310
311 static const struct tc_ops *tcs[] = {
312     &tc_ops_htb,                /* Hierarchy token bucket (see tc-htb(8)). */
313     &tc_ops_hfsc,               /* Hierarchical fair service curve. */
314     &tc_ops_default,            /* Default qdisc (see tc-pfifo_fast(8)). */
315     &tc_ops_other,              /* Some other qdisc. */
316     NULL
317 };
318
319 static unsigned int tc_make_handle(unsigned int major, unsigned int minor);
320 static unsigned int tc_get_major(unsigned int handle);
321 static unsigned int tc_get_minor(unsigned int handle);
322
323 static unsigned int tc_ticks_to_bytes(unsigned int rate, unsigned int ticks);
324 static unsigned int tc_bytes_to_ticks(unsigned int rate, unsigned int size);
325 static unsigned int tc_buffer_per_jiffy(unsigned int rate);
326
327 static struct tcmsg *tc_make_request(const struct netdev *, int type,
328                                      unsigned int flags, struct ofpbuf *);
329 static int tc_transact(struct ofpbuf *request, struct ofpbuf **replyp);
330 static int tc_add_del_ingress_qdisc(struct netdev *netdev, bool add);
331 static int tc_add_policer(struct netdev *netdev, int kbits_rate,
332                           int kbits_burst);
333
334 static int tc_parse_qdisc(const struct ofpbuf *, const char **kind,
335                           struct nlattr **options);
336 static int tc_parse_class(const struct ofpbuf *, unsigned int *queue_id,
337                           struct nlattr **options,
338                           struct netdev_queue_stats *);
339 static int tc_query_class(const struct netdev *,
340                           unsigned int handle, unsigned int parent,
341                           struct ofpbuf **replyp);
342 static int tc_delete_class(const struct netdev *, unsigned int handle);
343
344 static int tc_del_qdisc(struct netdev *netdev);
345 static int tc_query_qdisc(const struct netdev *netdev);
346
347 static int tc_calc_cell_log(unsigned int mtu);
348 static void tc_fill_rate(struct tc_ratespec *rate, uint64_t bps, int mtu);
349 static void tc_put_rtab(struct ofpbuf *, uint16_t type,
350                         const struct tc_ratespec *rate);
351 static int tc_calc_buffer(unsigned int Bps, int mtu, uint64_t burst_bytes);
352 \f
353 struct netdev_dev_linux {
354     struct netdev_dev netdev_dev;
355
356     struct shash_node *shash_node;
357     unsigned int cache_valid;
358     unsigned int change_seq;
359
360     bool miimon;                    /* Link status of last poll. */
361     long long int miimon_interval;  /* Miimon Poll rate. Disabled if <= 0. */
362     struct timer miimon_timer;
363
364     /* The following are figured out "on demand" only.  They are only valid
365      * when the corresponding VALID_* bit in 'cache_valid' is set. */
366     int ifindex;
367     uint8_t etheraddr[ETH_ADDR_LEN];
368     struct in_addr address, netmask;
369     struct in6_addr in6;
370     int mtu;
371     bool carrier;
372     long long int carrier_resets;
373     uint32_t kbits_rate;        /* Policing data. */
374     uint32_t kbits_burst;
375     bool have_vport_stats;
376     struct tc *tc;
377
378     union {
379         struct tap_state tap;
380     } state;
381 };
382
383 struct netdev_linux {
384     struct netdev netdev;
385     int fd;
386 };
387
388 /* Sockets used for ioctl operations. */
389 static int af_inet_sock = -1;   /* AF_INET, SOCK_DGRAM. */
390
391 /* A Netlink routing socket that is not subscribed to any multicast groups. */
392 static struct nl_sock *rtnl_sock;
393
394 /* This is set pretty low because we probably won't learn anything from the
395  * additional log messages. */
396 static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
397
398 static int netdev_linux_init(void);
399
400 static int netdev_linux_do_ethtool(const char *name, struct ethtool_cmd *,
401                                    int cmd, const char *cmd_name);
402 static int netdev_linux_do_ioctl(const char *name, struct ifreq *, int cmd,
403                                  const char *cmd_name);
404 static int netdev_linux_get_ipv4(const struct netdev *, struct in_addr *,
405                                  int cmd, const char *cmd_name);
406 static int get_flags(const struct netdev *, int *flagsp);
407 static int set_flags(struct netdev *, int flags);
408 static int do_get_ifindex(const char *netdev_name);
409 static int get_ifindex(const struct netdev *, int *ifindexp);
410 static int do_set_addr(struct netdev *netdev,
411                        int ioctl_nr, const char *ioctl_name,
412                        struct in_addr addr);
413 static int get_etheraddr(const char *netdev_name, uint8_t ea[ETH_ADDR_LEN]);
414 static int set_etheraddr(const char *netdev_name, int hwaddr_family,
415                          const uint8_t[ETH_ADDR_LEN]);
416 static int get_stats_via_netlink(int ifindex, struct netdev_stats *stats);
417 static int get_stats_via_proc(const char *netdev_name, struct netdev_stats *stats);
418 static int get_carrier_via_sysfs(const char *name, bool *carrier);
419 static int af_packet_sock(void);
420 static void netdev_linux_miimon_run(void);
421 static void netdev_linux_miimon_wait(void);
422
423 static bool
424 is_netdev_linux_class(const struct netdev_class *netdev_class)
425 {
426     return netdev_class->init == netdev_linux_init;
427 }
428
429 static struct netdev_dev_linux *
430 netdev_dev_linux_cast(const struct netdev_dev *netdev_dev)
431 {
432     const struct netdev_class *netdev_class = netdev_dev_get_class(netdev_dev);
433     assert(is_netdev_linux_class(netdev_class));
434
435     return CONTAINER_OF(netdev_dev, struct netdev_dev_linux, netdev_dev);
436 }
437
438 static struct netdev_linux *
439 netdev_linux_cast(const struct netdev *netdev)
440 {
441     struct netdev_dev *netdev_dev = netdev_get_dev(netdev);
442     const struct netdev_class *netdev_class = netdev_dev_get_class(netdev_dev);
443     assert(is_netdev_linux_class(netdev_class));
444
445     return CONTAINER_OF(netdev, struct netdev_linux, netdev);
446 }
447 \f
448 static int
449 netdev_linux_init(void)
450 {
451     static int status = -1;
452     if (status < 0) {
453         /* Create AF_INET socket. */
454         af_inet_sock = socket(AF_INET, SOCK_DGRAM, 0);
455         status = af_inet_sock >= 0 ? 0 : errno;
456         if (status) {
457             VLOG_ERR("failed to create inet socket: %s", strerror(status));
458         }
459
460         /* Create rtnetlink socket. */
461         if (!status) {
462             status = nl_sock_create(NETLINK_ROUTE, &rtnl_sock);
463             if (status) {
464                 VLOG_ERR_RL(&rl, "failed to create rtnetlink socket: %s",
465                             strerror(status));
466             }
467         }
468     }
469     return status;
470 }
471
472 static void
473 netdev_linux_run(void)
474 {
475     rtnetlink_link_run();
476     netdev_linux_miimon_run();
477 }
478
479 static void
480 netdev_linux_wait(void)
481 {
482     rtnetlink_link_wait();
483     netdev_linux_miimon_wait();
484 }
485
486 static void
487 netdev_dev_linux_changed(struct netdev_dev_linux *dev)
488 {
489     dev->change_seq++;
490     if (!dev->change_seq) {
491         dev->change_seq++;
492     }
493     dev->cache_valid = 0;
494 }
495
496 static void
497 netdev_linux_cache_cb(const struct rtnetlink_link_change *change,
498                       void *aux OVS_UNUSED)
499 {
500     struct netdev_dev_linux *dev;
501     if (change) {
502         struct netdev_dev *base_dev = netdev_dev_from_name(change->ifname);
503         if (base_dev) {
504             const struct netdev_class *netdev_class =
505                                                 netdev_dev_get_class(base_dev);
506
507             if (is_netdev_linux_class(netdev_class)) {
508                 dev = netdev_dev_linux_cast(base_dev);
509
510                 if (dev->carrier != change->running) {
511                     dev->carrier = change->running;
512                     dev->carrier_resets++;
513                 }
514
515                 netdev_dev_linux_changed(dev);
516             }
517         }
518     } else {
519         struct shash device_shash;
520         struct shash_node *node;
521
522         shash_init(&device_shash);
523         netdev_dev_get_devices(&netdev_linux_class, &device_shash);
524         SHASH_FOR_EACH (node, &device_shash) {
525             bool carrier;
526
527             dev = node->data;
528
529             get_carrier_via_sysfs(node->name, &carrier);
530             if (dev->carrier != carrier) {
531                 dev->carrier = carrier;
532                 dev->carrier_resets++;
533             }
534
535             netdev_dev_linux_changed(dev);
536         }
537         shash_destroy(&device_shash);
538     }
539 }
540
541 static int
542 cache_notifier_ref(void)
543 {
544     if (!cache_notifier_refcount) {
545         assert(!netdev_linux_cache_notifier);
546
547         netdev_linux_cache_notifier =
548             rtnetlink_link_notifier_create(netdev_linux_cache_cb, NULL);
549
550         if (!netdev_linux_cache_notifier) {
551             return EINVAL;
552         }
553     }
554     cache_notifier_refcount++;
555
556     return 0;
557 }
558
559 static void
560 cache_notifier_unref(void)
561 {
562     assert(cache_notifier_refcount > 0);
563     if (!--cache_notifier_refcount) {
564         assert(netdev_linux_cache_notifier);
565         rtnetlink_link_notifier_destroy(netdev_linux_cache_notifier);
566         netdev_linux_cache_notifier = NULL;
567     }
568 }
569
570 /* Creates system and internal devices. */
571 static int
572 netdev_linux_create(const struct netdev_class *class, const char *name,
573                     struct netdev_dev **netdev_devp)
574 {
575     struct netdev_dev_linux *netdev_dev;
576     int error;
577
578     error = cache_notifier_ref();
579     if (error) {
580         return error;
581     }
582
583     netdev_dev = xzalloc(sizeof *netdev_dev);
584     netdev_dev->change_seq = 1;
585     netdev_dev_init(&netdev_dev->netdev_dev, name, class);
586     get_carrier_via_sysfs(name, &netdev_dev->carrier);
587
588     *netdev_devp = &netdev_dev->netdev_dev;
589     return 0;
590 }
591
592 /* For most types of netdevs we open the device for each call of
593  * netdev_open().  However, this is not the case with tap devices,
594  * since it is only possible to open the device once.  In this
595  * situation we share a single file descriptor, and consequently
596  * buffers, across all readers.  Therefore once data is read it will
597  * be unavailable to other reads for tap devices. */
598 static int
599 netdev_linux_create_tap(const struct netdev_class *class OVS_UNUSED,
600                         const char *name, struct netdev_dev **netdev_devp)
601 {
602     struct netdev_dev_linux *netdev_dev;
603     struct tap_state *state;
604     static const char tap_dev[] = "/dev/net/tun";
605     struct ifreq ifr;
606     int error;
607
608     netdev_dev = xzalloc(sizeof *netdev_dev);
609     state = &netdev_dev->state.tap;
610
611     error = cache_notifier_ref();
612     if (error) {
613         goto error;
614     }
615
616     /* Open tap device. */
617     state->fd = open(tap_dev, O_RDWR);
618     if (state->fd < 0) {
619         error = errno;
620         VLOG_WARN("opening \"%s\" failed: %s", tap_dev, strerror(error));
621         goto error_unref_notifier;
622     }
623
624     /* Create tap device. */
625     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
626     ovs_strzcpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
627     if (ioctl(state->fd, TUNSETIFF, &ifr) == -1) {
628         VLOG_WARN("%s: creating tap device failed: %s", name,
629                   strerror(errno));
630         error = errno;
631         goto error_unref_notifier;
632     }
633
634     /* Make non-blocking. */
635     error = set_nonblocking(state->fd);
636     if (error) {
637         goto error_unref_notifier;
638     }
639
640     netdev_dev_init(&netdev_dev->netdev_dev, name, &netdev_tap_class);
641     *netdev_devp = &netdev_dev->netdev_dev;
642     return 0;
643
644 error_unref_notifier:
645     cache_notifier_unref();
646 error:
647     free(netdev_dev);
648     return error;
649 }
650
651 static void
652 destroy_tap(struct netdev_dev_linux *netdev_dev)
653 {
654     struct tap_state *state = &netdev_dev->state.tap;
655
656     if (state->fd >= 0) {
657         close(state->fd);
658     }
659 }
660
661 /* Destroys the netdev device 'netdev_dev_'. */
662 static void
663 netdev_linux_destroy(struct netdev_dev *netdev_dev_)
664 {
665     struct netdev_dev_linux *netdev_dev = netdev_dev_linux_cast(netdev_dev_);
666     const struct netdev_class *class = netdev_dev_get_class(netdev_dev_);
667
668     if (netdev_dev->tc && netdev_dev->tc->ops->tc_destroy) {
669         netdev_dev->tc->ops->tc_destroy(netdev_dev->tc);
670     }
671
672     if (class == &netdev_tap_class) {
673         destroy_tap(netdev_dev);
674     }
675     free(netdev_dev);
676
677     cache_notifier_unref();
678 }
679
680 static int
681 netdev_linux_open(struct netdev_dev *netdev_dev_, struct netdev **netdevp)
682 {
683     struct netdev_dev_linux *netdev_dev = netdev_dev_linux_cast(netdev_dev_);
684     struct netdev_linux *netdev;
685     enum netdev_flags flags;
686     int error;
687
688     /* Allocate network device. */
689     netdev = xzalloc(sizeof *netdev);
690     netdev->fd = -1;
691     netdev_init(&netdev->netdev, netdev_dev_);
692
693     /* Verify that the device really exists, by attempting to read its flags.
694      * (The flags might be cached, in which case this won't actually do an
695      * ioctl.)
696      *
697      * Don't do this for "internal" netdevs, though, because those have to be
698      * created as netdev objects before they exist in the kernel, because
699      * creating them in the kernel happens by passing a netdev object to
700      * dpif_port_add(). */
701     if (netdev_dev_get_class(netdev_dev_) != &netdev_internal_class) {
702         error = netdev_get_flags(&netdev->netdev, &flags);
703         if (error == ENODEV) {
704             goto error;
705         }
706     }
707
708     if (!strcmp(netdev_dev_get_type(netdev_dev_), "tap") &&
709         !netdev_dev->state.tap.opened) {
710
711         /* We assume that the first user of the tap device is the primary user
712          * and give them the tap FD.  Subsequent users probably just expect
713          * this to be a system device so open it normally to avoid send/receive
714          * directions appearing to be reversed. */
715         netdev->fd = netdev_dev->state.tap.fd;
716         netdev_dev->state.tap.opened = true;
717     }
718
719     *netdevp = &netdev->netdev;
720     return 0;
721
722 error:
723     netdev_uninit(&netdev->netdev, true);
724     return error;
725 }
726
727 /* Closes and destroys 'netdev'. */
728 static void
729 netdev_linux_close(struct netdev *netdev_)
730 {
731     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
732
733     if (netdev->fd > 0 && strcmp(netdev_get_type(netdev_), "tap")) {
734         close(netdev->fd);
735     }
736     free(netdev);
737 }
738
739 static int
740 netdev_linux_listen(struct netdev *netdev_)
741 {
742     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
743     struct sockaddr_ll sll;
744     int ifindex;
745     int error;
746     int fd;
747
748     if (netdev->fd >= 0) {
749         return 0;
750     }
751
752     /* Create file descriptor. */
753     fd = socket(PF_PACKET, SOCK_RAW, 0);
754     if (fd < 0) {
755         error = errno;
756         VLOG_ERR("failed to create raw socket (%s)", strerror(error));
757         goto error;
758     }
759
760     /* Set non-blocking mode. */
761     error = set_nonblocking(fd);
762     if (error) {
763         goto error;
764     }
765
766     /* Get ethernet device index. */
767     error = get_ifindex(&netdev->netdev, &ifindex);
768     if (error) {
769         goto error;
770     }
771
772     /* Bind to specific ethernet device. */
773     memset(&sll, 0, sizeof sll);
774     sll.sll_family = AF_PACKET;
775     sll.sll_ifindex = ifindex;
776     sll.sll_protocol = (OVS_FORCE unsigned short int) htons(ETH_P_ALL);
777     if (bind(fd, (struct sockaddr *) &sll, sizeof sll) < 0) {
778         error = errno;
779         VLOG_ERR("%s: failed to bind raw socket (%s)",
780                  netdev_get_name(netdev_), strerror(error));
781         goto error;
782     }
783
784     netdev->fd = fd;
785     return 0;
786
787 error:
788     if (fd >= 0) {
789         close(fd);
790     }
791     return error;
792 }
793
794 static int
795 netdev_linux_recv(struct netdev *netdev_, void *data, size_t size)
796 {
797     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
798
799     if (netdev->fd < 0) {
800         /* Device is not listening. */
801         return -EAGAIN;
802     }
803
804     for (;;) {
805         ssize_t retval;
806
807         retval = (netdev_->netdev_dev->netdev_class == &netdev_tap_class
808                   ? read(netdev->fd, data, size)
809                   : recv(netdev->fd, data, size, MSG_TRUNC));
810         if (retval >= 0) {
811             return retval <= size ? retval : -EMSGSIZE;
812         } else if (errno != EINTR) {
813             if (errno != EAGAIN) {
814                 VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s",
815                              strerror(errno), netdev_get_name(netdev_));
816             }
817             return -errno;
818         }
819     }
820 }
821
822 /* Registers with the poll loop to wake up from the next call to poll_block()
823  * when a packet is ready to be received with netdev_recv() on 'netdev'. */
824 static void
825 netdev_linux_recv_wait(struct netdev *netdev_)
826 {
827     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
828     if (netdev->fd >= 0) {
829         poll_fd_wait(netdev->fd, POLLIN);
830     }
831 }
832
833 /* Discards all packets waiting to be received from 'netdev'. */
834 static int
835 netdev_linux_drain(struct netdev *netdev_)
836 {
837     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
838     if (netdev->fd < 0) {
839         return 0;
840     } else if (!strcmp(netdev_get_type(netdev_), "tap")) {
841         struct ifreq ifr;
842         int error = netdev_linux_do_ioctl(netdev_get_name(netdev_), &ifr,
843                                           SIOCGIFTXQLEN, "SIOCGIFTXQLEN");
844         if (error) {
845             return error;
846         }
847         drain_fd(netdev->fd, ifr.ifr_qlen);
848         return 0;
849     } else {
850         return drain_rcvbuf(netdev->fd);
851     }
852 }
853
854 /* Sends 'buffer' on 'netdev'.  Returns 0 if successful, otherwise a positive
855  * errno value.  Returns EAGAIN without blocking if the packet cannot be queued
856  * immediately.  Returns EMSGSIZE if a partial packet was transmitted or if
857  * the packet is too big or too small to transmit on the device.
858  *
859  * The caller retains ownership of 'buffer' in all cases.
860  *
861  * The kernel maintains a packet transmission queue, so the caller is not
862  * expected to do additional queuing of packets. */
863 static int
864 netdev_linux_send(struct netdev *netdev_, const void *data, size_t size)
865 {
866     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
867     for (;;) {
868         ssize_t retval;
869
870         if (netdev->fd < 0) {
871             /* Use our AF_PACKET socket to send to this device. */
872             struct sockaddr_ll sll;
873             struct msghdr msg;
874             struct iovec iov;
875             int ifindex;
876             int error;
877             int sock;
878
879             sock = af_packet_sock();
880             if (sock < 0) {
881                 return sock;
882             }
883
884             error = get_ifindex(netdev_, &ifindex);
885             if (error) {
886                 return error;
887             }
888
889             /* We don't bother setting most fields in sockaddr_ll because the
890              * kernel ignores them for SOCK_RAW. */
891             memset(&sll, 0, sizeof sll);
892             sll.sll_family = AF_PACKET;
893             sll.sll_ifindex = ifindex;
894
895             iov.iov_base = (void *) data;
896             iov.iov_len = size;
897
898             msg.msg_name = &sll;
899             msg.msg_namelen = sizeof sll;
900             msg.msg_iov = &iov;
901             msg.msg_iovlen = 1;
902             msg.msg_control = NULL;
903             msg.msg_controllen = 0;
904             msg.msg_flags = 0;
905
906             retval = sendmsg(sock, &msg, 0);
907         } else {
908             /* Use the netdev's own fd to send to this device.  This is
909              * essential for tap devices, because packets sent to a tap device
910              * with an AF_PACKET socket will loop back to be *received* again
911              * on the tap device. */
912             retval = write(netdev->fd, data, size);
913         }
914
915         if (retval < 0) {
916             /* The Linux AF_PACKET implementation never blocks waiting for room
917              * for packets, instead returning ENOBUFS.  Translate this into
918              * EAGAIN for the caller. */
919             if (errno == ENOBUFS) {
920                 return EAGAIN;
921             } else if (errno == EINTR) {
922                 continue;
923             } else if (errno != EAGAIN) {
924                 VLOG_WARN_RL(&rl, "error sending Ethernet packet on %s: %s",
925                              netdev_get_name(netdev_), strerror(errno));
926             }
927             return errno;
928         } else if (retval != size) {
929             VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%zd bytes of "
930                          "%zu) on %s", retval, size, netdev_get_name(netdev_));
931             return EMSGSIZE;
932         } else {
933             return 0;
934         }
935     }
936 }
937
938 /* Registers with the poll loop to wake up from the next call to poll_block()
939  * when the packet transmission queue has sufficient room to transmit a packet
940  * with netdev_send().
941  *
942  * The kernel maintains a packet transmission queue, so the client is not
943  * expected to do additional queuing of packets.  Thus, this function is
944  * unlikely to ever be used.  It is included for completeness. */
945 static void
946 netdev_linux_send_wait(struct netdev *netdev_)
947 {
948     struct netdev_linux *netdev = netdev_linux_cast(netdev_);
949     if (netdev->fd < 0) {
950         /* Nothing to do. */
951     } else if (strcmp(netdev_get_type(netdev_), "tap")) {
952         poll_fd_wait(netdev->fd, POLLOUT);
953     } else {
954         /* TAP device always accepts packets.*/
955         poll_immediate_wake();
956     }
957 }
958
959 /* Attempts to set 'netdev''s MAC address to 'mac'.  Returns 0 if successful,
960  * otherwise a positive errno value. */
961 static int
962 netdev_linux_set_etheraddr(struct netdev *netdev_,
963                            const uint8_t mac[ETH_ADDR_LEN])
964 {
965     struct netdev_dev_linux *netdev_dev =
966                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
967     int error;
968
969     if (!(netdev_dev->cache_valid & VALID_ETHERADDR)
970         || !eth_addr_equals(netdev_dev->etheraddr, mac)) {
971         error = set_etheraddr(netdev_get_name(netdev_), ARPHRD_ETHER, mac);
972         if (!error) {
973             netdev_dev->cache_valid |= VALID_ETHERADDR;
974             memcpy(netdev_dev->etheraddr, mac, ETH_ADDR_LEN);
975         }
976     } else {
977         error = 0;
978     }
979     return error;
980 }
981
982 /* Returns a pointer to 'netdev''s MAC address.  The caller must not modify or
983  * free the returned buffer. */
984 static int
985 netdev_linux_get_etheraddr(const struct netdev *netdev_,
986                            uint8_t mac[ETH_ADDR_LEN])
987 {
988     struct netdev_dev_linux *netdev_dev =
989                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
990     if (!(netdev_dev->cache_valid & VALID_ETHERADDR)) {
991         int error = get_etheraddr(netdev_get_name(netdev_),
992                                   netdev_dev->etheraddr);
993         if (error) {
994             return error;
995         }
996         netdev_dev->cache_valid |= VALID_ETHERADDR;
997     }
998     memcpy(mac, netdev_dev->etheraddr, ETH_ADDR_LEN);
999     return 0;
1000 }
1001
1002 /* Returns the maximum size of transmitted (and received) packets on 'netdev',
1003  * in bytes, not including the hardware header; thus, this is typically 1500
1004  * bytes for Ethernet devices. */
1005 static int
1006 netdev_linux_get_mtu(const struct netdev *netdev_, int *mtup)
1007 {
1008     struct netdev_dev_linux *netdev_dev =
1009                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1010     if (!(netdev_dev->cache_valid & VALID_MTU)) {
1011         struct ifreq ifr;
1012         int error;
1013
1014         error = netdev_linux_do_ioctl(netdev_get_name(netdev_), &ifr,
1015                                       SIOCGIFMTU, "SIOCGIFMTU");
1016         if (error) {
1017             return error;
1018         }
1019         netdev_dev->mtu = ifr.ifr_mtu;
1020         netdev_dev->cache_valid |= VALID_MTU;
1021     }
1022     *mtup = netdev_dev->mtu;
1023     return 0;
1024 }
1025
1026 /* Sets the maximum size of transmitted (MTU) for given device using linux
1027  * networking ioctl interface.
1028  */
1029 static int
1030 netdev_linux_set_mtu(const struct netdev *netdev_, int mtu)
1031 {
1032     struct netdev_dev_linux *netdev_dev =
1033                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1034     struct ifreq ifr;
1035     int error;
1036
1037     ifr.ifr_mtu = mtu;
1038     error = netdev_linux_do_ioctl(netdev_get_name(netdev_), &ifr,
1039                                   SIOCSIFMTU, "SIOCSIFMTU");
1040     if (error) {
1041         return error;
1042     }
1043
1044     netdev_dev->mtu = ifr.ifr_mtu;
1045     netdev_dev->cache_valid |= VALID_MTU;
1046     return 0;
1047 }
1048
1049 /* Returns the ifindex of 'netdev', if successful, as a positive number.
1050  * On failure, returns a negative errno value. */
1051 static int
1052 netdev_linux_get_ifindex(const struct netdev *netdev)
1053 {
1054     int ifindex, error;
1055
1056     error = get_ifindex(netdev, &ifindex);
1057     return error ? -error : ifindex;
1058 }
1059
1060 static int
1061 netdev_linux_get_carrier(const struct netdev *netdev_, bool *carrier)
1062 {
1063     struct netdev_dev_linux *netdev_dev =
1064                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1065
1066     if (netdev_dev->miimon_interval > 0) {
1067         *carrier = netdev_dev->miimon;
1068     } else {
1069         *carrier = netdev_dev->carrier;
1070     }
1071
1072     return 0;
1073 }
1074
1075 static long long int
1076 netdev_linux_get_carrier_resets(const struct netdev *netdev)
1077 {
1078     return netdev_dev_linux_cast(netdev_get_dev(netdev))->carrier_resets;
1079 }
1080
1081 static int
1082 netdev_linux_do_miimon(const char *name, int cmd, const char *cmd_name,
1083                        struct mii_ioctl_data *data)
1084 {
1085     struct ifreq ifr;
1086     int error;
1087
1088     memset(&ifr, 0, sizeof ifr);
1089     memcpy(&ifr.ifr_data, data, sizeof *data);
1090     error = netdev_linux_do_ioctl(name, &ifr, cmd, cmd_name);
1091     memcpy(data, &ifr.ifr_data, sizeof *data);
1092
1093     return error;
1094 }
1095
1096 static int
1097 netdev_linux_get_miimon(const char *name, bool *miimon)
1098 {
1099     struct mii_ioctl_data data;
1100     int error;
1101
1102     *miimon = false;
1103
1104     memset(&data, 0, sizeof data);
1105     error = netdev_linux_do_miimon(name, SIOCGMIIPHY, "SIOCGMIIPHY", &data);
1106     if (!error) {
1107         /* data.phy_id is filled out by previous SIOCGMIIPHY miimon call. */
1108         data.reg_num = MII_BMSR;
1109         error = netdev_linux_do_miimon(name, SIOCGMIIREG, "SIOCGMIIREG",
1110                                        &data);
1111
1112         if (!error) {
1113             *miimon = !!(data.val_out & BMSR_LSTATUS);
1114         } else {
1115             VLOG_WARN_RL(&rl, "%s: failed to query MII", name);
1116         }
1117     } else {
1118         struct ethtool_cmd ecmd;
1119
1120         VLOG_DBG_RL(&rl, "%s: failed to query MII, falling back to ethtool",
1121                     name);
1122
1123         memset(&ecmd, 0, sizeof ecmd);
1124         error = netdev_linux_do_ethtool(name, &ecmd, ETHTOOL_GLINK,
1125                                         "ETHTOOL_GLINK");
1126         if (!error) {
1127             struct ethtool_value eval;
1128
1129             memcpy(&eval, &ecmd, sizeof eval);
1130             *miimon = !!eval.data;
1131         } else {
1132             VLOG_WARN_RL(&rl, "%s: ethtool link status failed", name);
1133         }
1134     }
1135
1136     return error;
1137 }
1138
1139 static int
1140 netdev_linux_set_miimon_interval(struct netdev *netdev_,
1141                                  long long int interval)
1142 {
1143     struct netdev_dev_linux *netdev_dev;
1144
1145     netdev_dev = netdev_dev_linux_cast(netdev_get_dev(netdev_));
1146
1147     interval = interval > 0 ? MAX(interval, 100) : 0;
1148     if (netdev_dev->miimon_interval != interval) {
1149         netdev_dev->miimon_interval = interval;
1150         timer_set_expired(&netdev_dev->miimon_timer);
1151     }
1152
1153     return 0;
1154 }
1155
1156 static void
1157 netdev_linux_miimon_run(void)
1158 {
1159     struct shash device_shash;
1160     struct shash_node *node;
1161
1162     shash_init(&device_shash);
1163     netdev_dev_get_devices(&netdev_linux_class, &device_shash);
1164     SHASH_FOR_EACH (node, &device_shash) {
1165         struct netdev_dev_linux *dev = node->data;
1166         bool miimon;
1167
1168         if (dev->miimon_interval <= 0 || !timer_expired(&dev->miimon_timer)) {
1169             continue;
1170         }
1171
1172         netdev_linux_get_miimon(dev->netdev_dev.name, &miimon);
1173         if (miimon != dev->miimon) {
1174             dev->miimon = miimon;
1175             netdev_dev_linux_changed(dev);
1176         }
1177
1178         timer_set_duration(&dev->miimon_timer, dev->miimon_interval);
1179     }
1180
1181     shash_destroy(&device_shash);
1182 }
1183
1184 static void
1185 netdev_linux_miimon_wait(void)
1186 {
1187     struct shash device_shash;
1188     struct shash_node *node;
1189
1190     shash_init(&device_shash);
1191     netdev_dev_get_devices(&netdev_linux_class, &device_shash);
1192     SHASH_FOR_EACH (node, &device_shash) {
1193         struct netdev_dev_linux *dev = node->data;
1194
1195         if (dev->miimon_interval > 0) {
1196             timer_wait(&dev->miimon_timer);
1197         }
1198     }
1199     shash_destroy(&device_shash);
1200 }
1201
1202 /* Check whether we can we use RTM_GETLINK to get network device statistics.
1203  * In pre-2.6.19 kernels, this was only available if wireless extensions were
1204  * enabled. */
1205 static bool
1206 check_for_working_netlink_stats(void)
1207 {
1208     /* Decide on the netdev_get_stats() implementation to use.  Netlink is
1209      * preferable, so if that works, we'll use it. */
1210     int ifindex = do_get_ifindex("lo");
1211     if (ifindex < 0) {
1212         VLOG_WARN("failed to get ifindex for lo, "
1213                   "obtaining netdev stats from proc");
1214         return false;
1215     } else {
1216         struct netdev_stats stats;
1217         int error = get_stats_via_netlink(ifindex, &stats);
1218         if (!error) {
1219             VLOG_DBG("obtaining netdev stats via rtnetlink");
1220             return true;
1221         } else {
1222             VLOG_INFO("RTM_GETLINK failed (%s), obtaining netdev stats "
1223                       "via proc (you are probably running a pre-2.6.19 "
1224                       "kernel)", strerror(error));
1225             return false;
1226         }
1227     }
1228 }
1229
1230 static void
1231 swap_uint64(uint64_t *a, uint64_t *b)
1232 {
1233     uint64_t tmp = *a;
1234     *a = *b;
1235     *b = tmp;
1236 }
1237
1238 static void
1239 get_stats_via_vport(const struct netdev *netdev_,
1240                     struct netdev_stats *stats)
1241 {
1242     struct netdev_dev_linux *netdev_dev =
1243                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1244
1245     if (netdev_dev->have_vport_stats ||
1246         !(netdev_dev->cache_valid & VALID_HAVE_VPORT_STATS)) {
1247         int error;
1248
1249         error = netdev_vport_get_stats(netdev_, stats);
1250         if (error) {
1251             VLOG_WARN_RL(&rl, "%s: obtaining netdev stats via vport failed "
1252                          "(%s)", netdev_get_name(netdev_), strerror(error));
1253         }
1254         netdev_dev->have_vport_stats = !error;
1255         netdev_dev->cache_valid |= VALID_HAVE_VPORT_STATS;
1256     }
1257 }
1258
1259 static int
1260 netdev_linux_sys_get_stats(const struct netdev *netdev_,
1261                          struct netdev_stats *stats)
1262 {
1263     static int use_netlink_stats = -1;
1264     int error;
1265
1266     if (use_netlink_stats < 0) {
1267         use_netlink_stats = check_for_working_netlink_stats();
1268     }
1269
1270     if (use_netlink_stats) {
1271         int ifindex;
1272
1273         error = get_ifindex(netdev_, &ifindex);
1274         if (!error) {
1275             error = get_stats_via_netlink(ifindex, stats);
1276         }
1277     } else {
1278         error = get_stats_via_proc(netdev_get_name(netdev_), stats);
1279     }
1280
1281     if (error) {
1282         VLOG_WARN_RL(&rl, "%s: linux-sys get stats failed %d",
1283                       netdev_get_name(netdev_), error);
1284     }
1285     return error;
1286
1287 }
1288
1289 /* Retrieves current device stats for 'netdev-linux'. */
1290 static int
1291 netdev_linux_get_stats(const struct netdev *netdev_,
1292                        struct netdev_stats *stats)
1293 {
1294     struct netdev_dev_linux *netdev_dev =
1295                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1296     struct netdev_stats dev_stats;
1297     int error;
1298
1299     get_stats_via_vport(netdev_, stats);
1300
1301     error = netdev_linux_sys_get_stats(netdev_, &dev_stats);
1302
1303     if (error) {
1304         if (!netdev_dev->have_vport_stats) {
1305             return error;
1306         } else {
1307             return 0;
1308         }
1309     }
1310
1311     if (!netdev_dev->have_vport_stats) {
1312         /* stats not available from OVS then use ioctl stats. */
1313         *stats = dev_stats;
1314     } else {
1315         stats->rx_errors           += dev_stats.rx_errors;
1316         stats->tx_errors           += dev_stats.tx_errors;
1317         stats->rx_dropped          += dev_stats.rx_dropped;
1318         stats->tx_dropped          += dev_stats.tx_dropped;
1319         stats->multicast           += dev_stats.multicast;
1320         stats->collisions          += dev_stats.collisions;
1321         stats->rx_length_errors    += dev_stats.rx_length_errors;
1322         stats->rx_over_errors      += dev_stats.rx_over_errors;
1323         stats->rx_crc_errors       += dev_stats.rx_crc_errors;
1324         stats->rx_frame_errors     += dev_stats.rx_frame_errors;
1325         stats->rx_fifo_errors      += dev_stats.rx_fifo_errors;
1326         stats->rx_missed_errors    += dev_stats.rx_missed_errors;
1327         stats->tx_aborted_errors   += dev_stats.tx_aborted_errors;
1328         stats->tx_carrier_errors   += dev_stats.tx_carrier_errors;
1329         stats->tx_fifo_errors      += dev_stats.tx_fifo_errors;
1330         stats->tx_heartbeat_errors += dev_stats.tx_heartbeat_errors;
1331         stats->tx_window_errors    += dev_stats.tx_window_errors;
1332     }
1333     return 0;
1334 }
1335
1336 /* Retrieves current device stats for 'netdev-tap' netdev or
1337  * netdev-internal. */
1338 static int
1339 netdev_pseudo_get_stats(const struct netdev *netdev_,
1340                         struct netdev_stats *stats)
1341 {
1342     struct netdev_dev_linux *netdev_dev =
1343                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1344     struct netdev_stats dev_stats;
1345     int error;
1346
1347     get_stats_via_vport(netdev_, stats);
1348
1349     error = netdev_linux_sys_get_stats(netdev_, &dev_stats);
1350     if (error) {
1351         if (!netdev_dev->have_vport_stats) {
1352             return error;
1353         } else {
1354             return 0;
1355         }
1356     }
1357
1358     /* If this port is an internal port then the transmit and receive stats
1359      * will appear to be swapped relative to the other ports since we are the
1360      * one sending the data, not a remote computer.  For consistency, we swap
1361      * them back here. This does not apply if we are getting stats from the
1362      * vport layer because it always tracks stats from the perspective of the
1363      * switch. */
1364     if (!netdev_dev->have_vport_stats) {
1365         *stats = dev_stats;
1366         swap_uint64(&stats->rx_packets, &stats->tx_packets);
1367         swap_uint64(&stats->rx_bytes, &stats->tx_bytes);
1368         swap_uint64(&stats->rx_errors, &stats->tx_errors);
1369         swap_uint64(&stats->rx_dropped, &stats->tx_dropped);
1370         stats->rx_length_errors = 0;
1371         stats->rx_over_errors = 0;
1372         stats->rx_crc_errors = 0;
1373         stats->rx_frame_errors = 0;
1374         stats->rx_fifo_errors = 0;
1375         stats->rx_missed_errors = 0;
1376         stats->tx_aborted_errors = 0;
1377         stats->tx_carrier_errors = 0;
1378         stats->tx_fifo_errors = 0;
1379         stats->tx_heartbeat_errors = 0;
1380         stats->tx_window_errors = 0;
1381     } else {
1382         stats->rx_dropped          += dev_stats.tx_dropped;
1383         stats->tx_dropped          += dev_stats.rx_dropped;
1384
1385         stats->rx_errors           += dev_stats.tx_errors;
1386         stats->tx_errors           += dev_stats.rx_errors;
1387
1388         stats->multicast           += dev_stats.multicast;
1389         stats->collisions          += dev_stats.collisions;
1390     }
1391     return 0;
1392 }
1393
1394 /* Stores the features supported by 'netdev' into each of '*current',
1395  * '*advertised', '*supported', and '*peer' that are non-null.  Each value is a
1396  * bitmap of "enum ofp_port_features" bits, in host byte order.  Returns 0 if
1397  * successful, otherwise a positive errno value. */
1398 static int
1399 netdev_linux_get_features(const struct netdev *netdev,
1400                           uint32_t *current, uint32_t *advertised,
1401                           uint32_t *supported, uint32_t *peer)
1402 {
1403     struct ethtool_cmd ecmd;
1404     int error;
1405
1406     memset(&ecmd, 0, sizeof ecmd);
1407     error = netdev_linux_do_ethtool(netdev_get_name(netdev), &ecmd,
1408                                     ETHTOOL_GSET, "ETHTOOL_GSET");
1409     if (error) {
1410         return error;
1411     }
1412
1413     /* Supported features. */
1414     *supported = 0;
1415     if (ecmd.supported & SUPPORTED_10baseT_Half) {
1416         *supported |= OFPPF_10MB_HD;
1417     }
1418     if (ecmd.supported & SUPPORTED_10baseT_Full) {
1419         *supported |= OFPPF_10MB_FD;
1420     }
1421     if (ecmd.supported & SUPPORTED_100baseT_Half)  {
1422         *supported |= OFPPF_100MB_HD;
1423     }
1424     if (ecmd.supported & SUPPORTED_100baseT_Full) {
1425         *supported |= OFPPF_100MB_FD;
1426     }
1427     if (ecmd.supported & SUPPORTED_1000baseT_Half) {
1428         *supported |= OFPPF_1GB_HD;
1429     }
1430     if (ecmd.supported & SUPPORTED_1000baseT_Full) {
1431         *supported |= OFPPF_1GB_FD;
1432     }
1433     if (ecmd.supported & SUPPORTED_10000baseT_Full) {
1434         *supported |= OFPPF_10GB_FD;
1435     }
1436     if (ecmd.supported & SUPPORTED_TP) {
1437         *supported |= OFPPF_COPPER;
1438     }
1439     if (ecmd.supported & SUPPORTED_FIBRE) {
1440         *supported |= OFPPF_FIBER;
1441     }
1442     if (ecmd.supported & SUPPORTED_Autoneg) {
1443         *supported |= OFPPF_AUTONEG;
1444     }
1445     if (ecmd.supported & SUPPORTED_Pause) {
1446         *supported |= OFPPF_PAUSE;
1447     }
1448     if (ecmd.supported & SUPPORTED_Asym_Pause) {
1449         *supported |= OFPPF_PAUSE_ASYM;
1450     }
1451
1452     /* Advertised features. */
1453     *advertised = 0;
1454     if (ecmd.advertising & ADVERTISED_10baseT_Half) {
1455         *advertised |= OFPPF_10MB_HD;
1456     }
1457     if (ecmd.advertising & ADVERTISED_10baseT_Full) {
1458         *advertised |= OFPPF_10MB_FD;
1459     }
1460     if (ecmd.advertising & ADVERTISED_100baseT_Half) {
1461         *advertised |= OFPPF_100MB_HD;
1462     }
1463     if (ecmd.advertising & ADVERTISED_100baseT_Full) {
1464         *advertised |= OFPPF_100MB_FD;
1465     }
1466     if (ecmd.advertising & ADVERTISED_1000baseT_Half) {
1467         *advertised |= OFPPF_1GB_HD;
1468     }
1469     if (ecmd.advertising & ADVERTISED_1000baseT_Full) {
1470         *advertised |= OFPPF_1GB_FD;
1471     }
1472     if (ecmd.advertising & ADVERTISED_10000baseT_Full) {
1473         *advertised |= OFPPF_10GB_FD;
1474     }
1475     if (ecmd.advertising & ADVERTISED_TP) {
1476         *advertised |= OFPPF_COPPER;
1477     }
1478     if (ecmd.advertising & ADVERTISED_FIBRE) {
1479         *advertised |= OFPPF_FIBER;
1480     }
1481     if (ecmd.advertising & ADVERTISED_Autoneg) {
1482         *advertised |= OFPPF_AUTONEG;
1483     }
1484     if (ecmd.advertising & ADVERTISED_Pause) {
1485         *advertised |= OFPPF_PAUSE;
1486     }
1487     if (ecmd.advertising & ADVERTISED_Asym_Pause) {
1488         *advertised |= OFPPF_PAUSE_ASYM;
1489     }
1490
1491     /* Current settings. */
1492     if (ecmd.speed == SPEED_10) {
1493         *current = ecmd.duplex ? OFPPF_10MB_FD : OFPPF_10MB_HD;
1494     } else if (ecmd.speed == SPEED_100) {
1495         *current = ecmd.duplex ? OFPPF_100MB_FD : OFPPF_100MB_HD;
1496     } else if (ecmd.speed == SPEED_1000) {
1497         *current = ecmd.duplex ? OFPPF_1GB_FD : OFPPF_1GB_HD;
1498     } else if (ecmd.speed == SPEED_10000) {
1499         *current = OFPPF_10GB_FD;
1500     } else {
1501         *current = 0;
1502     }
1503
1504     if (ecmd.port == PORT_TP) {
1505         *current |= OFPPF_COPPER;
1506     } else if (ecmd.port == PORT_FIBRE) {
1507         *current |= OFPPF_FIBER;
1508     }
1509
1510     if (ecmd.autoneg) {
1511         *current |= OFPPF_AUTONEG;
1512     }
1513
1514     /* Peer advertisements. */
1515     *peer = 0;                  /* XXX */
1516
1517     return 0;
1518 }
1519
1520 /* Set the features advertised by 'netdev' to 'advertise'. */
1521 static int
1522 netdev_linux_set_advertisements(struct netdev *netdev, uint32_t advertise)
1523 {
1524     struct ethtool_cmd ecmd;
1525     int error;
1526
1527     memset(&ecmd, 0, sizeof ecmd);
1528     error = netdev_linux_do_ethtool(netdev_get_name(netdev), &ecmd,
1529                                     ETHTOOL_GSET, "ETHTOOL_GSET");
1530     if (error) {
1531         return error;
1532     }
1533
1534     ecmd.advertising = 0;
1535     if (advertise & OFPPF_10MB_HD) {
1536         ecmd.advertising |= ADVERTISED_10baseT_Half;
1537     }
1538     if (advertise & OFPPF_10MB_FD) {
1539         ecmd.advertising |= ADVERTISED_10baseT_Full;
1540     }
1541     if (advertise & OFPPF_100MB_HD) {
1542         ecmd.advertising |= ADVERTISED_100baseT_Half;
1543     }
1544     if (advertise & OFPPF_100MB_FD) {
1545         ecmd.advertising |= ADVERTISED_100baseT_Full;
1546     }
1547     if (advertise & OFPPF_1GB_HD) {
1548         ecmd.advertising |= ADVERTISED_1000baseT_Half;
1549     }
1550     if (advertise & OFPPF_1GB_FD) {
1551         ecmd.advertising |= ADVERTISED_1000baseT_Full;
1552     }
1553     if (advertise & OFPPF_10GB_FD) {
1554         ecmd.advertising |= ADVERTISED_10000baseT_Full;
1555     }
1556     if (advertise & OFPPF_COPPER) {
1557         ecmd.advertising |= ADVERTISED_TP;
1558     }
1559     if (advertise & OFPPF_FIBER) {
1560         ecmd.advertising |= ADVERTISED_FIBRE;
1561     }
1562     if (advertise & OFPPF_AUTONEG) {
1563         ecmd.advertising |= ADVERTISED_Autoneg;
1564     }
1565     if (advertise & OFPPF_PAUSE) {
1566         ecmd.advertising |= ADVERTISED_Pause;
1567     }
1568     if (advertise & OFPPF_PAUSE_ASYM) {
1569         ecmd.advertising |= ADVERTISED_Asym_Pause;
1570     }
1571     return netdev_linux_do_ethtool(netdev_get_name(netdev), &ecmd,
1572                                    ETHTOOL_SSET, "ETHTOOL_SSET");
1573 }
1574
1575 /* Attempts to set input rate limiting (policing) policy.  Returns 0 if
1576  * successful, otherwise a positive errno value. */
1577 static int
1578 netdev_linux_set_policing(struct netdev *netdev,
1579                           uint32_t kbits_rate, uint32_t kbits_burst)
1580 {
1581     struct netdev_dev_linux *netdev_dev =
1582         netdev_dev_linux_cast(netdev_get_dev(netdev));
1583     const char *netdev_name = netdev_get_name(netdev);
1584     int error;
1585
1586     COVERAGE_INC(netdev_set_policing);
1587
1588     kbits_burst = (!kbits_rate ? 0       /* Force to 0 if no rate specified. */
1589                    : !kbits_burst ? 1000 /* Default to 1000 kbits if 0. */
1590                    : kbits_burst);       /* Stick with user-specified value. */
1591
1592     if (netdev_dev->cache_valid & VALID_POLICING
1593         && netdev_dev->kbits_rate == kbits_rate
1594         && netdev_dev->kbits_burst == kbits_burst) {
1595         /* Assume that settings haven't changed since we last set them. */
1596         return 0;
1597     }
1598
1599     /* Remove any existing ingress qdisc. */
1600     error = tc_add_del_ingress_qdisc(netdev, false);
1601     if (error) {
1602         VLOG_WARN_RL(&rl, "%s: removing policing failed: %s",
1603                      netdev_name, strerror(error));
1604         return error;
1605     }
1606
1607     if (kbits_rate) {
1608         error = tc_add_del_ingress_qdisc(netdev, true);
1609         if (error) {
1610             VLOG_WARN_RL(&rl, "%s: adding policing qdisc failed: %s",
1611                          netdev_name, strerror(error));
1612             return error;
1613         }
1614
1615         error = tc_add_policer(netdev, kbits_rate, kbits_burst);
1616         if (error){
1617             VLOG_WARN_RL(&rl, "%s: adding policing action failed: %s",
1618                     netdev_name, strerror(error));
1619             return error;
1620         }
1621     }
1622
1623     netdev_dev->kbits_rate = kbits_rate;
1624     netdev_dev->kbits_burst = kbits_burst;
1625     netdev_dev->cache_valid |= VALID_POLICING;
1626
1627     return 0;
1628 }
1629
1630 static int
1631 netdev_linux_get_qos_types(const struct netdev *netdev OVS_UNUSED,
1632                            struct sset *types)
1633 {
1634     const struct tc_ops **opsp;
1635
1636     for (opsp = tcs; *opsp != NULL; opsp++) {
1637         const struct tc_ops *ops = *opsp;
1638         if (ops->tc_install && ops->ovs_name[0] != '\0') {
1639             sset_add(types, ops->ovs_name);
1640         }
1641     }
1642     return 0;
1643 }
1644
1645 static const struct tc_ops *
1646 tc_lookup_ovs_name(const char *name)
1647 {
1648     const struct tc_ops **opsp;
1649
1650     for (opsp = tcs; *opsp != NULL; opsp++) {
1651         const struct tc_ops *ops = *opsp;
1652         if (!strcmp(name, ops->ovs_name)) {
1653             return ops;
1654         }
1655     }
1656     return NULL;
1657 }
1658
1659 static const struct tc_ops *
1660 tc_lookup_linux_name(const char *name)
1661 {
1662     const struct tc_ops **opsp;
1663
1664     for (opsp = tcs; *opsp != NULL; opsp++) {
1665         const struct tc_ops *ops = *opsp;
1666         if (ops->linux_name && !strcmp(name, ops->linux_name)) {
1667             return ops;
1668         }
1669     }
1670     return NULL;
1671 }
1672
1673 static struct tc_queue *
1674 tc_find_queue__(const struct netdev *netdev, unsigned int queue_id,
1675                 size_t hash)
1676 {
1677     struct netdev_dev_linux *netdev_dev =
1678                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1679     struct tc_queue *queue;
1680
1681     HMAP_FOR_EACH_IN_BUCKET (queue, hmap_node, hash, &netdev_dev->tc->queues) {
1682         if (queue->queue_id == queue_id) {
1683             return queue;
1684         }
1685     }
1686     return NULL;
1687 }
1688
1689 static struct tc_queue *
1690 tc_find_queue(const struct netdev *netdev, unsigned int queue_id)
1691 {
1692     return tc_find_queue__(netdev, queue_id, hash_int(queue_id, 0));
1693 }
1694
1695 static int
1696 netdev_linux_get_qos_capabilities(const struct netdev *netdev OVS_UNUSED,
1697                                   const char *type,
1698                                   struct netdev_qos_capabilities *caps)
1699 {
1700     const struct tc_ops *ops = tc_lookup_ovs_name(type);
1701     if (!ops) {
1702         return EOPNOTSUPP;
1703     }
1704     caps->n_queues = ops->n_queues;
1705     return 0;
1706 }
1707
1708 static int
1709 netdev_linux_get_qos(const struct netdev *netdev,
1710                      const char **typep, struct shash *details)
1711 {
1712     struct netdev_dev_linux *netdev_dev =
1713                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1714     int error;
1715
1716     error = tc_query_qdisc(netdev);
1717     if (error) {
1718         return error;
1719     }
1720
1721     *typep = netdev_dev->tc->ops->ovs_name;
1722     return (netdev_dev->tc->ops->qdisc_get
1723             ? netdev_dev->tc->ops->qdisc_get(netdev, details)
1724             : 0);
1725 }
1726
1727 static int
1728 netdev_linux_set_qos(struct netdev *netdev,
1729                      const char *type, const struct shash *details)
1730 {
1731     struct netdev_dev_linux *netdev_dev =
1732                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1733     const struct tc_ops *new_ops;
1734     int error;
1735
1736     new_ops = tc_lookup_ovs_name(type);
1737     if (!new_ops || !new_ops->tc_install) {
1738         return EOPNOTSUPP;
1739     }
1740
1741     error = tc_query_qdisc(netdev);
1742     if (error) {
1743         return error;
1744     }
1745
1746     if (new_ops == netdev_dev->tc->ops) {
1747         return new_ops->qdisc_set ? new_ops->qdisc_set(netdev, details) : 0;
1748     } else {
1749         /* Delete existing qdisc. */
1750         error = tc_del_qdisc(netdev);
1751         if (error) {
1752             return error;
1753         }
1754         assert(netdev_dev->tc == NULL);
1755
1756         /* Install new qdisc. */
1757         error = new_ops->tc_install(netdev, details);
1758         assert((error == 0) == (netdev_dev->tc != NULL));
1759
1760         return error;
1761     }
1762 }
1763
1764 static int
1765 netdev_linux_get_queue(const struct netdev *netdev,
1766                        unsigned int queue_id, struct shash *details)
1767 {
1768     struct netdev_dev_linux *netdev_dev =
1769                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1770     int error;
1771
1772     error = tc_query_qdisc(netdev);
1773     if (error) {
1774         return error;
1775     } else {
1776         struct tc_queue *queue = tc_find_queue(netdev, queue_id);
1777         return (queue
1778                 ? netdev_dev->tc->ops->class_get(netdev, queue, details)
1779                 : ENOENT);
1780     }
1781 }
1782
1783 static int
1784 netdev_linux_set_queue(struct netdev *netdev,
1785                        unsigned int queue_id, const struct shash *details)
1786 {
1787     struct netdev_dev_linux *netdev_dev =
1788                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1789     int error;
1790
1791     error = tc_query_qdisc(netdev);
1792     if (error) {
1793         return error;
1794     } else if (queue_id >= netdev_dev->tc->ops->n_queues
1795                || !netdev_dev->tc->ops->class_set) {
1796         return EINVAL;
1797     }
1798
1799     return netdev_dev->tc->ops->class_set(netdev, queue_id, details);
1800 }
1801
1802 static int
1803 netdev_linux_delete_queue(struct netdev *netdev, unsigned int queue_id)
1804 {
1805     struct netdev_dev_linux *netdev_dev =
1806                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1807     int error;
1808
1809     error = tc_query_qdisc(netdev);
1810     if (error) {
1811         return error;
1812     } else if (!netdev_dev->tc->ops->class_delete) {
1813         return EINVAL;
1814     } else {
1815         struct tc_queue *queue = tc_find_queue(netdev, queue_id);
1816         return (queue
1817                 ? netdev_dev->tc->ops->class_delete(netdev, queue)
1818                 : ENOENT);
1819     }
1820 }
1821
1822 static int
1823 netdev_linux_get_queue_stats(const struct netdev *netdev,
1824                              unsigned int queue_id,
1825                              struct netdev_queue_stats *stats)
1826 {
1827     struct netdev_dev_linux *netdev_dev =
1828                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1829     int error;
1830
1831     error = tc_query_qdisc(netdev);
1832     if (error) {
1833         return error;
1834     } else if (!netdev_dev->tc->ops->class_get_stats) {
1835         return EOPNOTSUPP;
1836     } else {
1837         const struct tc_queue *queue = tc_find_queue(netdev, queue_id);
1838         return (queue
1839                 ? netdev_dev->tc->ops->class_get_stats(netdev, queue, stats)
1840                 : ENOENT);
1841     }
1842 }
1843
1844 static bool
1845 start_queue_dump(const struct netdev *netdev, struct nl_dump *dump)
1846 {
1847     struct ofpbuf request;
1848     struct tcmsg *tcmsg;
1849
1850     tcmsg = tc_make_request(netdev, RTM_GETTCLASS, 0, &request);
1851     if (!tcmsg) {
1852         return false;
1853     }
1854     tcmsg->tcm_parent = 0;
1855     nl_dump_start(dump, rtnl_sock, &request);
1856     ofpbuf_uninit(&request);
1857     return true;
1858 }
1859
1860 static int
1861 netdev_linux_dump_queues(const struct netdev *netdev,
1862                          netdev_dump_queues_cb *cb, void *aux)
1863 {
1864     struct netdev_dev_linux *netdev_dev =
1865                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1866     struct tc_queue *queue, *next_queue;
1867     struct shash details;
1868     int last_error;
1869     int error;
1870
1871     error = tc_query_qdisc(netdev);
1872     if (error) {
1873         return error;
1874     } else if (!netdev_dev->tc->ops->class_get) {
1875         return EOPNOTSUPP;
1876     }
1877
1878     last_error = 0;
1879     shash_init(&details);
1880     HMAP_FOR_EACH_SAFE (queue, next_queue, hmap_node,
1881                         &netdev_dev->tc->queues) {
1882         shash_clear(&details);
1883
1884         error = netdev_dev->tc->ops->class_get(netdev, queue, &details);
1885         if (!error) {
1886             (*cb)(queue->queue_id, &details, aux);
1887         } else {
1888             last_error = error;
1889         }
1890     }
1891     shash_destroy(&details);
1892
1893     return last_error;
1894 }
1895
1896 static int
1897 netdev_linux_dump_queue_stats(const struct netdev *netdev,
1898                               netdev_dump_queue_stats_cb *cb, void *aux)
1899 {
1900     struct netdev_dev_linux *netdev_dev =
1901                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
1902     struct nl_dump dump;
1903     struct ofpbuf msg;
1904     int last_error;
1905     int error;
1906
1907     error = tc_query_qdisc(netdev);
1908     if (error) {
1909         return error;
1910     } else if (!netdev_dev->tc->ops->class_dump_stats) {
1911         return EOPNOTSUPP;
1912     }
1913
1914     last_error = 0;
1915     if (!start_queue_dump(netdev, &dump)) {
1916         return ENODEV;
1917     }
1918     while (nl_dump_next(&dump, &msg)) {
1919         error = netdev_dev->tc->ops->class_dump_stats(netdev, &msg, cb, aux);
1920         if (error) {
1921             last_error = error;
1922         }
1923     }
1924
1925     error = nl_dump_done(&dump);
1926     return error ? error : last_error;
1927 }
1928
1929 static int
1930 netdev_linux_get_in4(const struct netdev *netdev_,
1931                      struct in_addr *address, struct in_addr *netmask)
1932 {
1933     struct netdev_dev_linux *netdev_dev =
1934                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1935
1936     if (!(netdev_dev->cache_valid & VALID_IN4)) {
1937         int error;
1938
1939         error = netdev_linux_get_ipv4(netdev_, &netdev_dev->address,
1940                                       SIOCGIFADDR, "SIOCGIFADDR");
1941         if (error) {
1942             return error;
1943         }
1944
1945         error = netdev_linux_get_ipv4(netdev_, &netdev_dev->netmask,
1946                                       SIOCGIFNETMASK, "SIOCGIFNETMASK");
1947         if (error) {
1948             return error;
1949         }
1950
1951         netdev_dev->cache_valid |= VALID_IN4;
1952     }
1953     *address = netdev_dev->address;
1954     *netmask = netdev_dev->netmask;
1955     return address->s_addr == INADDR_ANY ? EADDRNOTAVAIL : 0;
1956 }
1957
1958 static int
1959 netdev_linux_set_in4(struct netdev *netdev_, struct in_addr address,
1960                      struct in_addr netmask)
1961 {
1962     struct netdev_dev_linux *netdev_dev =
1963                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
1964     int error;
1965
1966     error = do_set_addr(netdev_, SIOCSIFADDR, "SIOCSIFADDR", address);
1967     if (!error) {
1968         netdev_dev->cache_valid |= VALID_IN4;
1969         netdev_dev->address = address;
1970         netdev_dev->netmask = netmask;
1971         if (address.s_addr != INADDR_ANY) {
1972             error = do_set_addr(netdev_, SIOCSIFNETMASK,
1973                                 "SIOCSIFNETMASK", netmask);
1974         }
1975     }
1976     return error;
1977 }
1978
1979 static bool
1980 parse_if_inet6_line(const char *line,
1981                     struct in6_addr *in6, char ifname[16 + 1])
1982 {
1983     uint8_t *s6 = in6->s6_addr;
1984 #define X8 "%2"SCNx8
1985     return sscanf(line,
1986                   " "X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8 X8
1987                   "%*x %*x %*x %*x %16s\n",
1988                   &s6[0], &s6[1], &s6[2], &s6[3],
1989                   &s6[4], &s6[5], &s6[6], &s6[7],
1990                   &s6[8], &s6[9], &s6[10], &s6[11],
1991                   &s6[12], &s6[13], &s6[14], &s6[15],
1992                   ifname) == 17;
1993 }
1994
1995 /* If 'netdev' has an assigned IPv6 address, sets '*in6' to that address (if
1996  * 'in6' is non-null) and returns true.  Otherwise, returns false. */
1997 static int
1998 netdev_linux_get_in6(const struct netdev *netdev_, struct in6_addr *in6)
1999 {
2000     struct netdev_dev_linux *netdev_dev =
2001                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
2002     if (!(netdev_dev->cache_valid & VALID_IN6)) {
2003         FILE *file;
2004         char line[128];
2005
2006         netdev_dev->in6 = in6addr_any;
2007
2008         file = fopen("/proc/net/if_inet6", "r");
2009         if (file != NULL) {
2010             const char *name = netdev_get_name(netdev_);
2011             while (fgets(line, sizeof line, file)) {
2012                 struct in6_addr in6_tmp;
2013                 char ifname[16 + 1];
2014                 if (parse_if_inet6_line(line, &in6_tmp, ifname)
2015                     && !strcmp(name, ifname))
2016                 {
2017                     netdev_dev->in6 = in6_tmp;
2018                     break;
2019                 }
2020             }
2021             fclose(file);
2022         }
2023         netdev_dev->cache_valid |= VALID_IN6;
2024     }
2025     *in6 = netdev_dev->in6;
2026     return 0;
2027 }
2028
2029 static void
2030 make_in4_sockaddr(struct sockaddr *sa, struct in_addr addr)
2031 {
2032     struct sockaddr_in sin;
2033     memset(&sin, 0, sizeof sin);
2034     sin.sin_family = AF_INET;
2035     sin.sin_addr = addr;
2036     sin.sin_port = 0;
2037
2038     memset(sa, 0, sizeof *sa);
2039     memcpy(sa, &sin, sizeof sin);
2040 }
2041
2042 static int
2043 do_set_addr(struct netdev *netdev,
2044             int ioctl_nr, const char *ioctl_name, struct in_addr addr)
2045 {
2046     struct ifreq ifr;
2047     ovs_strzcpy(ifr.ifr_name, netdev_get_name(netdev), sizeof ifr.ifr_name);
2048     make_in4_sockaddr(&ifr.ifr_addr, addr);
2049
2050     return netdev_linux_do_ioctl(netdev_get_name(netdev), &ifr, ioctl_nr,
2051                                  ioctl_name);
2052 }
2053
2054 /* Adds 'router' as a default IP gateway. */
2055 static int
2056 netdev_linux_add_router(struct netdev *netdev OVS_UNUSED, struct in_addr router)
2057 {
2058     struct in_addr any = { INADDR_ANY };
2059     struct rtentry rt;
2060     int error;
2061
2062     memset(&rt, 0, sizeof rt);
2063     make_in4_sockaddr(&rt.rt_dst, any);
2064     make_in4_sockaddr(&rt.rt_gateway, router);
2065     make_in4_sockaddr(&rt.rt_genmask, any);
2066     rt.rt_flags = RTF_UP | RTF_GATEWAY;
2067     error = ioctl(af_inet_sock, SIOCADDRT, &rt) < 0 ? errno : 0;
2068     if (error) {
2069         VLOG_WARN("ioctl(SIOCADDRT): %s", strerror(error));
2070     }
2071     return error;
2072 }
2073
2074 static int
2075 netdev_linux_get_next_hop(const struct in_addr *host, struct in_addr *next_hop,
2076                           char **netdev_name)
2077 {
2078     static const char fn[] = "/proc/net/route";
2079     FILE *stream;
2080     char line[256];
2081     int ln;
2082
2083     *netdev_name = NULL;
2084     stream = fopen(fn, "r");
2085     if (stream == NULL) {
2086         VLOG_WARN_RL(&rl, "%s: open failed: %s", fn, strerror(errno));
2087         return errno;
2088     }
2089
2090     ln = 0;
2091     while (fgets(line, sizeof line, stream)) {
2092         if (++ln >= 2) {
2093             char iface[17];
2094             ovs_be32 dest, gateway, mask;
2095             int refcnt, metric, mtu;
2096             unsigned int flags, use, window, irtt;
2097
2098             if (sscanf(line,
2099                        "%16s %"SCNx32" %"SCNx32" %04X %d %u %d %"SCNx32
2100                        " %d %u %u\n",
2101                        iface, &dest, &gateway, &flags, &refcnt,
2102                        &use, &metric, &mask, &mtu, &window, &irtt) != 11) {
2103
2104                 VLOG_WARN_RL(&rl, "%s: could not parse line %d: %s",
2105                         fn, ln, line);
2106                 continue;
2107             }
2108             if (!(flags & RTF_UP)) {
2109                 /* Skip routes that aren't up. */
2110                 continue;
2111             }
2112
2113             /* The output of 'dest', 'mask', and 'gateway' were given in
2114              * network byte order, so we don't need need any endian
2115              * conversions here. */
2116             if ((dest & mask) == (host->s_addr & mask)) {
2117                 if (!gateway) {
2118                     /* The host is directly reachable. */
2119                     next_hop->s_addr = 0;
2120                 } else {
2121                     /* To reach the host, we must go through a gateway. */
2122                     next_hop->s_addr = gateway;
2123                 }
2124                 *netdev_name = xstrdup(iface);
2125                 fclose(stream);
2126                 return 0;
2127             }
2128         }
2129     }
2130
2131     fclose(stream);
2132     return ENXIO;
2133 }
2134
2135 static int
2136 netdev_linux_get_status(const struct netdev *netdev, struct shash *sh)
2137 {
2138     struct ethtool_drvinfo drvinfo;
2139     int error;
2140
2141     memset(&drvinfo, 0, sizeof drvinfo);
2142     error = netdev_linux_do_ethtool(netdev_get_name(netdev),
2143                                     (struct ethtool_cmd *)&drvinfo,
2144                                     ETHTOOL_GDRVINFO,
2145                                     "ETHTOOL_GDRVINFO");
2146     if (!error) {
2147         shash_add(sh, "driver_name", xstrdup(drvinfo.driver));
2148         shash_add(sh, "driver_version", xstrdup(drvinfo.version));
2149         shash_add(sh, "firmware_version", xstrdup(drvinfo.fw_version));
2150     }
2151
2152     return error;
2153 }
2154
2155 /* Looks up the ARP table entry for 'ip' on 'netdev'.  If one exists and can be
2156  * successfully retrieved, it stores the corresponding MAC address in 'mac' and
2157  * returns 0.  Otherwise, it returns a positive errno value; in particular,
2158  * ENXIO indicates that there is not ARP table entry for 'ip' on 'netdev'. */
2159 static int
2160 netdev_linux_arp_lookup(const struct netdev *netdev,
2161                         ovs_be32 ip, uint8_t mac[ETH_ADDR_LEN])
2162 {
2163     struct arpreq r;
2164     struct sockaddr_in sin;
2165     int retval;
2166
2167     memset(&r, 0, sizeof r);
2168     memset(&sin, 0, sizeof sin);
2169     sin.sin_family = AF_INET;
2170     sin.sin_addr.s_addr = ip;
2171     sin.sin_port = 0;
2172     memcpy(&r.arp_pa, &sin, sizeof sin);
2173     r.arp_ha.sa_family = ARPHRD_ETHER;
2174     r.arp_flags = 0;
2175     ovs_strzcpy(r.arp_dev, netdev_get_name(netdev), sizeof r.arp_dev);
2176     COVERAGE_INC(netdev_arp_lookup);
2177     retval = ioctl(af_inet_sock, SIOCGARP, &r) < 0 ? errno : 0;
2178     if (!retval) {
2179         memcpy(mac, r.arp_ha.sa_data, ETH_ADDR_LEN);
2180     } else if (retval != ENXIO) {
2181         VLOG_WARN_RL(&rl, "%s: could not look up ARP entry for "IP_FMT": %s",
2182                      netdev_get_name(netdev), IP_ARGS(&ip), strerror(retval));
2183     }
2184     return retval;
2185 }
2186
2187 static int
2188 nd_to_iff_flags(enum netdev_flags nd)
2189 {
2190     int iff = 0;
2191     if (nd & NETDEV_UP) {
2192         iff |= IFF_UP;
2193     }
2194     if (nd & NETDEV_PROMISC) {
2195         iff |= IFF_PROMISC;
2196     }
2197     return iff;
2198 }
2199
2200 static int
2201 iff_to_nd_flags(int iff)
2202 {
2203     enum netdev_flags nd = 0;
2204     if (iff & IFF_UP) {
2205         nd |= NETDEV_UP;
2206     }
2207     if (iff & IFF_PROMISC) {
2208         nd |= NETDEV_PROMISC;
2209     }
2210     return nd;
2211 }
2212
2213 static int
2214 netdev_linux_update_flags(struct netdev *netdev, enum netdev_flags off,
2215                           enum netdev_flags on, enum netdev_flags *old_flagsp)
2216 {
2217     int old_flags, new_flags;
2218     int error;
2219
2220     error = get_flags(netdev, &old_flags);
2221     if (!error) {
2222         *old_flagsp = iff_to_nd_flags(old_flags);
2223         new_flags = (old_flags & ~nd_to_iff_flags(off)) | nd_to_iff_flags(on);
2224         if (new_flags != old_flags) {
2225             error = set_flags(netdev, new_flags);
2226         }
2227     }
2228     return error;
2229 }
2230
2231 static unsigned int
2232 netdev_linux_change_seq(const struct netdev *netdev)
2233 {
2234     return netdev_dev_linux_cast(netdev_get_dev(netdev))->change_seq;
2235 }
2236
2237 #define NETDEV_LINUX_CLASS(NAME, CREATE, GET_STATS, SET_STATS)  \
2238 {                                                               \
2239     NAME,                                                       \
2240                                                                 \
2241     netdev_linux_init,                                          \
2242     netdev_linux_run,                                           \
2243     netdev_linux_wait,                                          \
2244                                                                 \
2245     CREATE,                                                     \
2246     netdev_linux_destroy,                                       \
2247     NULL,                       /* get_config */                \
2248     NULL,                       /* set_config */                \
2249                                                                 \
2250     netdev_linux_open,                                          \
2251     netdev_linux_close,                                         \
2252                                                                 \
2253     netdev_linux_listen,                                        \
2254     netdev_linux_recv,                                          \
2255     netdev_linux_recv_wait,                                     \
2256     netdev_linux_drain,                                         \
2257                                                                 \
2258     netdev_linux_send,                                          \
2259     netdev_linux_send_wait,                                     \
2260                                                                 \
2261     netdev_linux_set_etheraddr,                                 \
2262     netdev_linux_get_etheraddr,                                 \
2263     netdev_linux_get_mtu,                                       \
2264     netdev_linux_set_mtu,                                       \
2265     netdev_linux_get_ifindex,                                   \
2266     netdev_linux_get_carrier,                                   \
2267     netdev_linux_get_carrier_resets,                            \
2268     netdev_linux_set_miimon_interval,                           \
2269     GET_STATS,                                                  \
2270     SET_STATS,                                                  \
2271                                                                 \
2272     netdev_linux_get_features,                                  \
2273     netdev_linux_set_advertisements,                            \
2274                                                                 \
2275     netdev_linux_set_policing,                                  \
2276     netdev_linux_get_qos_types,                                 \
2277     netdev_linux_get_qos_capabilities,                          \
2278     netdev_linux_get_qos,                                       \
2279     netdev_linux_set_qos,                                       \
2280     netdev_linux_get_queue,                                     \
2281     netdev_linux_set_queue,                                     \
2282     netdev_linux_delete_queue,                                  \
2283     netdev_linux_get_queue_stats,                               \
2284     netdev_linux_dump_queues,                                   \
2285     netdev_linux_dump_queue_stats,                              \
2286                                                                 \
2287     netdev_linux_get_in4,                                       \
2288     netdev_linux_set_in4,                                       \
2289     netdev_linux_get_in6,                                       \
2290     netdev_linux_add_router,                                    \
2291     netdev_linux_get_next_hop,                                  \
2292     netdev_linux_get_status,                                    \
2293     netdev_linux_arp_lookup,                                    \
2294                                                                 \
2295     netdev_linux_update_flags,                                  \
2296                                                                 \
2297     netdev_linux_change_seq                                     \
2298 }
2299
2300 const struct netdev_class netdev_linux_class =
2301     NETDEV_LINUX_CLASS(
2302         "system",
2303         netdev_linux_create,
2304         netdev_linux_get_stats,
2305         NULL);                  /* set_stats */
2306
2307 const struct netdev_class netdev_tap_class =
2308     NETDEV_LINUX_CLASS(
2309         "tap",
2310         netdev_linux_create_tap,
2311         netdev_pseudo_get_stats,
2312         NULL);                  /* set_stats */
2313
2314 const struct netdev_class netdev_internal_class =
2315     NETDEV_LINUX_CLASS(
2316         "internal",
2317         netdev_linux_create,
2318         netdev_pseudo_get_stats,
2319         netdev_vport_set_stats);
2320 \f
2321 /* HTB traffic control class. */
2322
2323 #define HTB_N_QUEUES 0xf000
2324
2325 struct htb {
2326     struct tc tc;
2327     unsigned int max_rate;      /* In bytes/s. */
2328 };
2329
2330 struct htb_class {
2331     struct tc_queue tc_queue;
2332     unsigned int min_rate;      /* In bytes/s. */
2333     unsigned int max_rate;      /* In bytes/s. */
2334     unsigned int burst;         /* In bytes. */
2335     unsigned int priority;      /* Lower values are higher priorities. */
2336 };
2337
2338 static struct htb *
2339 htb_get__(const struct netdev *netdev)
2340 {
2341     struct netdev_dev_linux *netdev_dev =
2342                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
2343     return CONTAINER_OF(netdev_dev->tc, struct htb, tc);
2344 }
2345
2346 static void
2347 htb_install__(struct netdev *netdev, uint64_t max_rate)
2348 {
2349     struct netdev_dev_linux *netdev_dev =
2350                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
2351     struct htb *htb;
2352
2353     htb = xmalloc(sizeof *htb);
2354     tc_init(&htb->tc, &tc_ops_htb);
2355     htb->max_rate = max_rate;
2356
2357     netdev_dev->tc = &htb->tc;
2358 }
2359
2360 /* Create an HTB qdisc.
2361  *
2362  * Equivalent to "tc qdisc add dev <dev> root handle 1: htb default 1". */
2363 static int
2364 htb_setup_qdisc__(struct netdev *netdev)
2365 {
2366     size_t opt_offset;
2367     struct tc_htb_glob opt;
2368     struct ofpbuf request;
2369     struct tcmsg *tcmsg;
2370
2371     tc_del_qdisc(netdev);
2372
2373     tcmsg = tc_make_request(netdev, RTM_NEWQDISC,
2374                             NLM_F_EXCL | NLM_F_CREATE, &request);
2375     if (!tcmsg) {
2376         return ENODEV;
2377     }
2378     tcmsg->tcm_handle = tc_make_handle(1, 0);
2379     tcmsg->tcm_parent = TC_H_ROOT;
2380
2381     nl_msg_put_string(&request, TCA_KIND, "htb");
2382
2383     memset(&opt, 0, sizeof opt);
2384     opt.rate2quantum = 10;
2385     opt.version = 3;
2386     opt.defcls = 1;
2387
2388     opt_offset = nl_msg_start_nested(&request, TCA_OPTIONS);
2389     nl_msg_put_unspec(&request, TCA_HTB_INIT, &opt, sizeof opt);
2390     nl_msg_end_nested(&request, opt_offset);
2391
2392     return tc_transact(&request, NULL);
2393 }
2394
2395 /* Equivalent to "tc class replace <dev> classid <handle> parent <parent> htb
2396  * rate <min_rate>bps ceil <max_rate>bps burst <burst>b prio <priority>". */
2397 static int
2398 htb_setup_class__(struct netdev *netdev, unsigned int handle,
2399                   unsigned int parent, struct htb_class *class)
2400 {
2401     size_t opt_offset;
2402     struct tc_htb_opt opt;
2403     struct ofpbuf request;
2404     struct tcmsg *tcmsg;
2405     int error;
2406     int mtu;
2407
2408     error = netdev_get_mtu(netdev, &mtu);
2409     if (error) {
2410         VLOG_WARN_RL(&rl, "cannot set up HTB on device %s that lacks MTU",
2411                      netdev_get_name(netdev));
2412         return error;
2413     }
2414
2415     memset(&opt, 0, sizeof opt);
2416     tc_fill_rate(&opt.rate, class->min_rate, mtu);
2417     tc_fill_rate(&opt.ceil, class->max_rate, mtu);
2418     opt.buffer = tc_calc_buffer(opt.rate.rate, mtu, class->burst);
2419     opt.cbuffer = tc_calc_buffer(opt.ceil.rate, mtu, class->burst);
2420     opt.prio = class->priority;
2421
2422     tcmsg = tc_make_request(netdev, RTM_NEWTCLASS, NLM_F_CREATE, &request);
2423     if (!tcmsg) {
2424         return ENODEV;
2425     }
2426     tcmsg->tcm_handle = handle;
2427     tcmsg->tcm_parent = parent;
2428
2429     nl_msg_put_string(&request, TCA_KIND, "htb");
2430     opt_offset = nl_msg_start_nested(&request, TCA_OPTIONS);
2431     nl_msg_put_unspec(&request, TCA_HTB_PARMS, &opt, sizeof opt);
2432     tc_put_rtab(&request, TCA_HTB_RTAB, &opt.rate);
2433     tc_put_rtab(&request, TCA_HTB_CTAB, &opt.ceil);
2434     nl_msg_end_nested(&request, opt_offset);
2435
2436     error = tc_transact(&request, NULL);
2437     if (error) {
2438         VLOG_WARN_RL(&rl, "failed to replace %s class %u:%u, parent %u:%u, "
2439                      "min_rate=%u max_rate=%u burst=%u prio=%u (%s)",
2440                      netdev_get_name(netdev),
2441                      tc_get_major(handle), tc_get_minor(handle),
2442                      tc_get_major(parent), tc_get_minor(parent),
2443                      class->min_rate, class->max_rate,
2444                      class->burst, class->priority, strerror(error));
2445     }
2446     return error;
2447 }
2448
2449 /* Parses Netlink attributes in 'options' for HTB parameters and stores a
2450  * description of them into 'details'.  The description complies with the
2451  * specification given in the vswitch database documentation for linux-htb
2452  * queue details. */
2453 static int
2454 htb_parse_tca_options__(struct nlattr *nl_options, struct htb_class *class)
2455 {
2456     static const struct nl_policy tca_htb_policy[] = {
2457         [TCA_HTB_PARMS] = { .type = NL_A_UNSPEC, .optional = false,
2458                             .min_len = sizeof(struct tc_htb_opt) },
2459     };
2460
2461     struct nlattr *attrs[ARRAY_SIZE(tca_htb_policy)];
2462     const struct tc_htb_opt *htb;
2463
2464     if (!nl_parse_nested(nl_options, tca_htb_policy,
2465                          attrs, ARRAY_SIZE(tca_htb_policy))) {
2466         VLOG_WARN_RL(&rl, "failed to parse HTB class options");
2467         return EPROTO;
2468     }
2469
2470     htb = nl_attr_get(attrs[TCA_HTB_PARMS]);
2471     class->min_rate = htb->rate.rate;
2472     class->max_rate = htb->ceil.rate;
2473     class->burst = tc_ticks_to_bytes(htb->rate.rate, htb->buffer);
2474     class->priority = htb->prio;
2475     return 0;
2476 }
2477
2478 static int
2479 htb_parse_tcmsg__(struct ofpbuf *tcmsg, unsigned int *queue_id,
2480                   struct htb_class *options,
2481                   struct netdev_queue_stats *stats)
2482 {
2483     struct nlattr *nl_options;
2484     unsigned int handle;
2485     int error;
2486
2487     error = tc_parse_class(tcmsg, &handle, &nl_options, stats);
2488     if (!error && queue_id) {
2489         unsigned int major = tc_get_major(handle);
2490         unsigned int minor = tc_get_minor(handle);
2491         if (major == 1 && minor > 0 && minor <= HTB_N_QUEUES) {
2492             *queue_id = minor - 1;
2493         } else {
2494             error = EPROTO;
2495         }
2496     }
2497     if (!error && options) {
2498         error = htb_parse_tca_options__(nl_options, options);
2499     }
2500     return error;
2501 }
2502
2503 static void
2504 htb_parse_qdisc_details__(struct netdev *netdev,
2505                           const struct shash *details, struct htb_class *hc)
2506 {
2507     const char *max_rate_s;
2508
2509     max_rate_s = shash_find_data(details, "max-rate");
2510     hc->max_rate = max_rate_s ? strtoull(max_rate_s, NULL, 10) / 8 : 0;
2511     if (!hc->max_rate) {
2512         uint32_t current;
2513
2514         netdev_get_features(netdev, &current, NULL, NULL, NULL);
2515         hc->max_rate = netdev_features_to_bps(current) / 8;
2516     }
2517     hc->min_rate = hc->max_rate;
2518     hc->burst = 0;
2519     hc->priority = 0;
2520 }
2521
2522 static int
2523 htb_parse_class_details__(struct netdev *netdev,
2524                           const struct shash *details, struct htb_class *hc)
2525 {
2526     const struct htb *htb = htb_get__(netdev);
2527     const char *min_rate_s = shash_find_data(details, "min-rate");
2528     const char *max_rate_s = shash_find_data(details, "max-rate");
2529     const char *burst_s = shash_find_data(details, "burst");
2530     const char *priority_s = shash_find_data(details, "priority");
2531     int mtu, error;
2532
2533     error = netdev_get_mtu(netdev, &mtu);
2534     if (error) {
2535         VLOG_WARN_RL(&rl, "cannot parse HTB class on device %s that lacks MTU",
2536                      netdev_get_name(netdev));
2537         return error;
2538     }
2539
2540     /* HTB requires at least an mtu sized min-rate to send any traffic even
2541      * on uncongested links. */
2542     hc->min_rate = min_rate_s ? strtoull(min_rate_s, NULL, 10) / 8 : 0;
2543     hc->min_rate = MAX(hc->min_rate, mtu);
2544     hc->min_rate = MIN(hc->min_rate, htb->max_rate);
2545
2546     /* max-rate */
2547     hc->max_rate = (max_rate_s
2548                     ? strtoull(max_rate_s, NULL, 10) / 8
2549                     : htb->max_rate);
2550     hc->max_rate = MAX(hc->max_rate, hc->min_rate);
2551     hc->max_rate = MIN(hc->max_rate, htb->max_rate);
2552
2553     /* burst
2554      *
2555      * According to hints in the documentation that I've read, it is important
2556      * that 'burst' be at least as big as the largest frame that might be
2557      * transmitted.  Also, making 'burst' a bit bigger than necessary is OK,
2558      * but having it a bit too small is a problem.  Since netdev_get_mtu()
2559      * doesn't include the Ethernet header, we need to add at least 14 (18?) to
2560      * the MTU.  We actually add 64, instead of 14, as a guard against
2561      * additional headers get tacked on somewhere that we're not aware of. */
2562     hc->burst = burst_s ? strtoull(burst_s, NULL, 10) / 8 : 0;
2563     hc->burst = MAX(hc->burst, mtu + 64);
2564
2565     /* priority */
2566     hc->priority = priority_s ? strtoul(priority_s, NULL, 10) : 0;
2567
2568     return 0;
2569 }
2570
2571 static int
2572 htb_query_class__(const struct netdev *netdev, unsigned int handle,
2573                   unsigned int parent, struct htb_class *options,
2574                   struct netdev_queue_stats *stats)
2575 {
2576     struct ofpbuf *reply;
2577     int error;
2578
2579     error = tc_query_class(netdev, handle, parent, &reply);
2580     if (!error) {
2581         error = htb_parse_tcmsg__(reply, NULL, options, stats);
2582         ofpbuf_delete(reply);
2583     }
2584     return error;
2585 }
2586
2587 static int
2588 htb_tc_install(struct netdev *netdev, const struct shash *details)
2589 {
2590     int error;
2591
2592     error = htb_setup_qdisc__(netdev);
2593     if (!error) {
2594         struct htb_class hc;
2595
2596         htb_parse_qdisc_details__(netdev, details, &hc);
2597         error = htb_setup_class__(netdev, tc_make_handle(1, 0xfffe),
2598                                   tc_make_handle(1, 0), &hc);
2599         if (!error) {
2600             htb_install__(netdev, hc.max_rate);
2601         }
2602     }
2603     return error;
2604 }
2605
2606 static struct htb_class *
2607 htb_class_cast__(const struct tc_queue *queue)
2608 {
2609     return CONTAINER_OF(queue, struct htb_class, tc_queue);
2610 }
2611
2612 static void
2613 htb_update_queue__(struct netdev *netdev, unsigned int queue_id,
2614                    const struct htb_class *hc)
2615 {
2616     struct htb *htb = htb_get__(netdev);
2617     size_t hash = hash_int(queue_id, 0);
2618     struct tc_queue *queue;
2619     struct htb_class *hcp;
2620
2621     queue = tc_find_queue__(netdev, queue_id, hash);
2622     if (queue) {
2623         hcp = htb_class_cast__(queue);
2624     } else {
2625         hcp = xmalloc(sizeof *hcp);
2626         queue = &hcp->tc_queue;
2627         queue->queue_id = queue_id;
2628         hmap_insert(&htb->tc.queues, &queue->hmap_node, hash);
2629     }
2630
2631     hcp->min_rate = hc->min_rate;
2632     hcp->max_rate = hc->max_rate;
2633     hcp->burst = hc->burst;
2634     hcp->priority = hc->priority;
2635 }
2636
2637 static int
2638 htb_tc_load(struct netdev *netdev, struct ofpbuf *nlmsg OVS_UNUSED)
2639 {
2640     struct ofpbuf msg;
2641     struct nl_dump dump;
2642     struct htb_class hc;
2643
2644     /* Get qdisc options. */
2645     hc.max_rate = 0;
2646     htb_query_class__(netdev, tc_make_handle(1, 0xfffe), 0, &hc, NULL);
2647     htb_install__(netdev, hc.max_rate);
2648
2649     /* Get queues. */
2650     if (!start_queue_dump(netdev, &dump)) {
2651         return ENODEV;
2652     }
2653     while (nl_dump_next(&dump, &msg)) {
2654         unsigned int queue_id;
2655
2656         if (!htb_parse_tcmsg__(&msg, &queue_id, &hc, NULL)) {
2657             htb_update_queue__(netdev, queue_id, &hc);
2658         }
2659     }
2660     nl_dump_done(&dump);
2661
2662     return 0;
2663 }
2664
2665 static void
2666 htb_tc_destroy(struct tc *tc)
2667 {
2668     struct htb *htb = CONTAINER_OF(tc, struct htb, tc);
2669     struct htb_class *hc, *next;
2670
2671     HMAP_FOR_EACH_SAFE (hc, next, tc_queue.hmap_node, &htb->tc.queues) {
2672         hmap_remove(&htb->tc.queues, &hc->tc_queue.hmap_node);
2673         free(hc);
2674     }
2675     tc_destroy(tc);
2676     free(htb);
2677 }
2678
2679 static int
2680 htb_qdisc_get(const struct netdev *netdev, struct shash *details)
2681 {
2682     const struct htb *htb = htb_get__(netdev);
2683     shash_add(details, "max-rate", xasprintf("%llu", 8ULL * htb->max_rate));
2684     return 0;
2685 }
2686
2687 static int
2688 htb_qdisc_set(struct netdev *netdev, const struct shash *details)
2689 {
2690     struct htb_class hc;
2691     int error;
2692
2693     htb_parse_qdisc_details__(netdev, details, &hc);
2694     error = htb_setup_class__(netdev, tc_make_handle(1, 0xfffe),
2695                               tc_make_handle(1, 0), &hc);
2696     if (!error) {
2697         htb_get__(netdev)->max_rate = hc.max_rate;
2698     }
2699     return error;
2700 }
2701
2702 static int
2703 htb_class_get(const struct netdev *netdev OVS_UNUSED,
2704               const struct tc_queue *queue, struct shash *details)
2705 {
2706     const struct htb_class *hc = htb_class_cast__(queue);
2707
2708     shash_add(details, "min-rate", xasprintf("%llu", 8ULL * hc->min_rate));
2709     if (hc->min_rate != hc->max_rate) {
2710         shash_add(details, "max-rate", xasprintf("%llu", 8ULL * hc->max_rate));
2711     }
2712     shash_add(details, "burst", xasprintf("%llu", 8ULL * hc->burst));
2713     if (hc->priority) {
2714         shash_add(details, "priority", xasprintf("%u", hc->priority));
2715     }
2716     return 0;
2717 }
2718
2719 static int
2720 htb_class_set(struct netdev *netdev, unsigned int queue_id,
2721               const struct shash *details)
2722 {
2723     struct htb_class hc;
2724     int error;
2725
2726     error = htb_parse_class_details__(netdev, details, &hc);
2727     if (error) {
2728         return error;
2729     }
2730
2731     error = htb_setup_class__(netdev, tc_make_handle(1, queue_id + 1),
2732                               tc_make_handle(1, 0xfffe), &hc);
2733     if (error) {
2734         return error;
2735     }
2736
2737     htb_update_queue__(netdev, queue_id, &hc);
2738     return 0;
2739 }
2740
2741 static int
2742 htb_class_delete(struct netdev *netdev, struct tc_queue *queue)
2743 {
2744     struct htb_class *hc = htb_class_cast__(queue);
2745     struct htb *htb = htb_get__(netdev);
2746     int error;
2747
2748     error = tc_delete_class(netdev, tc_make_handle(1, queue->queue_id + 1));
2749     if (!error) {
2750         hmap_remove(&htb->tc.queues, &hc->tc_queue.hmap_node);
2751         free(hc);
2752     }
2753     return error;
2754 }
2755
2756 static int
2757 htb_class_get_stats(const struct netdev *netdev, const struct tc_queue *queue,
2758                     struct netdev_queue_stats *stats)
2759 {
2760     return htb_query_class__(netdev, tc_make_handle(1, queue->queue_id + 1),
2761                              tc_make_handle(1, 0xfffe), NULL, stats);
2762 }
2763
2764 static int
2765 htb_class_dump_stats(const struct netdev *netdev OVS_UNUSED,
2766                      const struct ofpbuf *nlmsg,
2767                      netdev_dump_queue_stats_cb *cb, void *aux)
2768 {
2769     struct netdev_queue_stats stats;
2770     unsigned int handle, major, minor;
2771     int error;
2772
2773     error = tc_parse_class(nlmsg, &handle, NULL, &stats);
2774     if (error) {
2775         return error;
2776     }
2777
2778     major = tc_get_major(handle);
2779     minor = tc_get_minor(handle);
2780     if (major == 1 && minor > 0 && minor <= HTB_N_QUEUES) {
2781         (*cb)(minor - 1, &stats, aux);
2782     }
2783     return 0;
2784 }
2785
2786 static const struct tc_ops tc_ops_htb = {
2787     "htb",                      /* linux_name */
2788     "linux-htb",                /* ovs_name */
2789     HTB_N_QUEUES,               /* n_queues */
2790     htb_tc_install,
2791     htb_tc_load,
2792     htb_tc_destroy,
2793     htb_qdisc_get,
2794     htb_qdisc_set,
2795     htb_class_get,
2796     htb_class_set,
2797     htb_class_delete,
2798     htb_class_get_stats,
2799     htb_class_dump_stats
2800 };
2801 \f
2802 /* "linux-hfsc" traffic control class. */
2803
2804 #define HFSC_N_QUEUES 0xf000
2805
2806 struct hfsc {
2807     struct tc tc;
2808     uint32_t max_rate;
2809 };
2810
2811 struct hfsc_class {
2812     struct tc_queue tc_queue;
2813     uint32_t min_rate;
2814     uint32_t max_rate;
2815 };
2816
2817 static struct hfsc *
2818 hfsc_get__(const struct netdev *netdev)
2819 {
2820     struct netdev_dev_linux *netdev_dev;
2821     netdev_dev = netdev_dev_linux_cast(netdev_get_dev(netdev));
2822     return CONTAINER_OF(netdev_dev->tc, struct hfsc, tc);
2823 }
2824
2825 static struct hfsc_class *
2826 hfsc_class_cast__(const struct tc_queue *queue)
2827 {
2828     return CONTAINER_OF(queue, struct hfsc_class, tc_queue);
2829 }
2830
2831 static void
2832 hfsc_install__(struct netdev *netdev, uint32_t max_rate)
2833 {
2834     struct netdev_dev_linux * netdev_dev;
2835     struct hfsc *hfsc;
2836
2837     netdev_dev = netdev_dev_linux_cast(netdev_get_dev(netdev));
2838     hfsc = xmalloc(sizeof *hfsc);
2839     tc_init(&hfsc->tc, &tc_ops_hfsc);
2840     hfsc->max_rate = max_rate;
2841     netdev_dev->tc = &hfsc->tc;
2842 }
2843
2844 static void
2845 hfsc_update_queue__(struct netdev *netdev, unsigned int queue_id,
2846                     const struct hfsc_class *hc)
2847 {
2848     size_t hash;
2849     struct hfsc *hfsc;
2850     struct hfsc_class *hcp;
2851     struct tc_queue *queue;
2852
2853     hfsc = hfsc_get__(netdev);
2854     hash = hash_int(queue_id, 0);
2855
2856     queue = tc_find_queue__(netdev, queue_id, hash);
2857     if (queue) {
2858         hcp = hfsc_class_cast__(queue);
2859     } else {
2860         hcp             = xmalloc(sizeof *hcp);
2861         queue           = &hcp->tc_queue;
2862         queue->queue_id = queue_id;
2863         hmap_insert(&hfsc->tc.queues, &queue->hmap_node, hash);
2864     }
2865
2866     hcp->min_rate = hc->min_rate;
2867     hcp->max_rate = hc->max_rate;
2868 }
2869
2870 static int
2871 hfsc_parse_tca_options__(struct nlattr *nl_options, struct hfsc_class *class)
2872 {
2873     const struct tc_service_curve *rsc, *fsc, *usc;
2874     static const struct nl_policy tca_hfsc_policy[] = {
2875         [TCA_HFSC_RSC] = {
2876             .type      = NL_A_UNSPEC,
2877             .optional  = false,
2878             .min_len   = sizeof(struct tc_service_curve),
2879         },
2880         [TCA_HFSC_FSC] = {
2881             .type      = NL_A_UNSPEC,
2882             .optional  = false,
2883             .min_len   = sizeof(struct tc_service_curve),
2884         },
2885         [TCA_HFSC_USC] = {
2886             .type      = NL_A_UNSPEC,
2887             .optional  = false,
2888             .min_len   = sizeof(struct tc_service_curve),
2889         },
2890     };
2891     struct nlattr *attrs[ARRAY_SIZE(tca_hfsc_policy)];
2892
2893     if (!nl_parse_nested(nl_options, tca_hfsc_policy,
2894                          attrs, ARRAY_SIZE(tca_hfsc_policy))) {
2895         VLOG_WARN_RL(&rl, "failed to parse HFSC class options");
2896         return EPROTO;
2897     }
2898
2899     rsc = nl_attr_get(attrs[TCA_HFSC_RSC]);
2900     fsc = nl_attr_get(attrs[TCA_HFSC_FSC]);
2901     usc = nl_attr_get(attrs[TCA_HFSC_USC]);
2902
2903     if (rsc->m1 != 0 || rsc->d != 0 ||
2904         fsc->m1 != 0 || fsc->d != 0 ||
2905         usc->m1 != 0 || usc->d != 0) {
2906         VLOG_WARN_RL(&rl, "failed to parse HFSC class options. "
2907                      "Non-linear service curves are not supported.");
2908         return EPROTO;
2909     }
2910
2911     if (rsc->m2 != fsc->m2) {
2912         VLOG_WARN_RL(&rl, "failed to parse HFSC class options. "
2913                      "Real-time service curves are not supported ");
2914         return EPROTO;
2915     }
2916
2917     if (rsc->m2 > usc->m2) {
2918         VLOG_WARN_RL(&rl, "failed to parse HFSC class options. "
2919                      "Min-rate service curve is greater than "
2920                      "the max-rate service curve.");
2921         return EPROTO;
2922     }
2923
2924     class->min_rate = fsc->m2;
2925     class->max_rate = usc->m2;
2926     return 0;
2927 }
2928
2929 static int
2930 hfsc_parse_tcmsg__(struct ofpbuf *tcmsg, unsigned int *queue_id,
2931                    struct hfsc_class *options,
2932                    struct netdev_queue_stats *stats)
2933 {
2934     int error;
2935     unsigned int handle;
2936     struct nlattr *nl_options;
2937
2938     error = tc_parse_class(tcmsg, &handle, &nl_options, stats);
2939     if (error) {
2940         return error;
2941     }
2942
2943     if (queue_id) {
2944         unsigned int major, minor;
2945
2946         major = tc_get_major(handle);
2947         minor = tc_get_minor(handle);
2948         if (major == 1 && minor > 0 && minor <= HFSC_N_QUEUES) {
2949             *queue_id = minor - 1;
2950         } else {
2951             return EPROTO;
2952         }
2953     }
2954
2955     if (options) {
2956         error = hfsc_parse_tca_options__(nl_options, options);
2957     }
2958
2959     return error;
2960 }
2961
2962 static int
2963 hfsc_query_class__(const struct netdev *netdev, unsigned int handle,
2964                    unsigned int parent, struct hfsc_class *options,
2965                    struct netdev_queue_stats *stats)
2966 {
2967     int error;
2968     struct ofpbuf *reply;
2969
2970     error = tc_query_class(netdev, handle, parent, &reply);
2971     if (error) {
2972         return error;
2973     }
2974
2975     error = hfsc_parse_tcmsg__(reply, NULL, options, stats);
2976     ofpbuf_delete(reply);
2977     return error;
2978 }
2979
2980 static void
2981 hfsc_parse_qdisc_details__(struct netdev *netdev, const struct shash *details,
2982                            struct hfsc_class *class)
2983 {
2984     uint32_t max_rate;
2985     const char *max_rate_s;
2986
2987     max_rate_s = shash_find_data(details, "max-rate");
2988     max_rate   = max_rate_s ? strtoull(max_rate_s, NULL, 10) / 8 : 0;
2989
2990     if (!max_rate) {
2991         uint32_t current;
2992
2993         netdev_get_features(netdev, &current, NULL, NULL, NULL);
2994         max_rate = netdev_features_to_bps(current) / 8;
2995     }
2996
2997     class->min_rate = max_rate;
2998     class->max_rate = max_rate;
2999 }
3000
3001 static int
3002 hfsc_parse_class_details__(struct netdev *netdev,
3003                            const struct shash *details,
3004                            struct hfsc_class * class)
3005 {
3006     const struct hfsc *hfsc;
3007     uint32_t min_rate, max_rate;
3008     const char *min_rate_s, *max_rate_s;
3009
3010     hfsc       = hfsc_get__(netdev);
3011     min_rate_s = shash_find_data(details, "min-rate");
3012     max_rate_s = shash_find_data(details, "max-rate");
3013
3014     min_rate = min_rate_s ? strtoull(min_rate_s, NULL, 10) / 8 : 0;
3015     min_rate = MAX(min_rate, 1);
3016     min_rate = MIN(min_rate, hfsc->max_rate);
3017
3018     max_rate = (max_rate_s
3019                 ? strtoull(max_rate_s, NULL, 10) / 8
3020                 : hfsc->max_rate);
3021     max_rate = MAX(max_rate, min_rate);
3022     max_rate = MIN(max_rate, hfsc->max_rate);
3023
3024     class->min_rate = min_rate;
3025     class->max_rate = max_rate;
3026
3027     return 0;
3028 }
3029
3030 /* Create an HFSC qdisc.
3031  *
3032  * Equivalent to "tc qdisc add dev <dev> root handle 1: hfsc default 1". */
3033 static int
3034 hfsc_setup_qdisc__(struct netdev * netdev)
3035 {
3036     struct tcmsg *tcmsg;
3037     struct ofpbuf request;
3038     struct tc_hfsc_qopt opt;
3039
3040     tc_del_qdisc(netdev);
3041
3042     tcmsg = tc_make_request(netdev, RTM_NEWQDISC,
3043                             NLM_F_EXCL | NLM_F_CREATE, &request);
3044
3045     if (!tcmsg) {
3046         return ENODEV;
3047     }
3048
3049     tcmsg->tcm_handle = tc_make_handle(1, 0);
3050     tcmsg->tcm_parent = TC_H_ROOT;
3051
3052     memset(&opt, 0, sizeof opt);
3053     opt.defcls = 1;
3054
3055     nl_msg_put_string(&request, TCA_KIND, "hfsc");
3056     nl_msg_put_unspec(&request, TCA_OPTIONS, &opt, sizeof opt);
3057
3058     return tc_transact(&request, NULL);
3059 }
3060
3061 /* Create an HFSC class.
3062  *
3063  * Equivalent to "tc class add <dev> parent <parent> classid <handle> hfsc
3064  * sc rate <min_rate> ul rate <max_rate>" */
3065 static int
3066 hfsc_setup_class__(struct netdev *netdev, unsigned int handle,
3067                    unsigned int parent, struct hfsc_class *class)
3068 {
3069     int error;
3070     size_t opt_offset;
3071     struct tcmsg *tcmsg;
3072     struct ofpbuf request;
3073     struct tc_service_curve min, max;
3074
3075     tcmsg = tc_make_request(netdev, RTM_NEWTCLASS, NLM_F_CREATE, &request);
3076
3077     if (!tcmsg) {
3078         return ENODEV;
3079     }
3080
3081     tcmsg->tcm_handle = handle;
3082     tcmsg->tcm_parent = parent;
3083
3084     min.m1 = 0;
3085     min.d  = 0;
3086     min.m2 = class->min_rate;
3087
3088     max.m1 = 0;
3089     max.d  = 0;
3090     max.m2 = class->max_rate;
3091
3092     nl_msg_put_string(&request, TCA_KIND, "hfsc");
3093     opt_offset = nl_msg_start_nested(&request, TCA_OPTIONS);
3094     nl_msg_put_unspec(&request, TCA_HFSC_RSC, &min, sizeof min);
3095     nl_msg_put_unspec(&request, TCA_HFSC_FSC, &min, sizeof min);
3096     nl_msg_put_unspec(&request, TCA_HFSC_USC, &max, sizeof max);
3097     nl_msg_end_nested(&request, opt_offset);
3098
3099     error = tc_transact(&request, NULL);
3100     if (error) {
3101         VLOG_WARN_RL(&rl, "failed to replace %s class %u:%u, parent %u:%u, "
3102                      "min-rate %ubps, max-rate %ubps (%s)",
3103                      netdev_get_name(netdev),
3104                      tc_get_major(handle), tc_get_minor(handle),
3105                      tc_get_major(parent), tc_get_minor(parent),
3106                      class->min_rate, class->max_rate, strerror(error));
3107     }
3108
3109     return error;
3110 }
3111
3112 static int
3113 hfsc_tc_install(struct netdev *netdev, const struct shash *details)
3114 {
3115     int error;
3116     struct hfsc_class class;
3117
3118     error = hfsc_setup_qdisc__(netdev);
3119
3120     if (error) {
3121         return error;
3122     }
3123
3124     hfsc_parse_qdisc_details__(netdev, details, &class);
3125     error = hfsc_setup_class__(netdev, tc_make_handle(1, 0xfffe),
3126                                tc_make_handle(1, 0), &class);
3127
3128     if (error) {
3129         return error;
3130     }
3131
3132     hfsc_install__(netdev, class.max_rate);
3133     return 0;
3134 }
3135
3136 static int
3137 hfsc_tc_load(struct netdev *netdev, struct ofpbuf *nlmsg OVS_UNUSED)
3138 {
3139     struct ofpbuf msg;
3140     struct nl_dump dump;
3141     struct hfsc_class hc;
3142
3143     hc.max_rate = 0;
3144     hfsc_query_class__(netdev, tc_make_handle(1, 0xfffe), 0, &hc, NULL);
3145     hfsc_install__(netdev, hc.max_rate);
3146
3147     if (!start_queue_dump(netdev, &dump)) {
3148         return ENODEV;
3149     }
3150
3151     while (nl_dump_next(&dump, &msg)) {
3152         unsigned int queue_id;
3153
3154         if (!hfsc_parse_tcmsg__(&msg, &queue_id, &hc, NULL)) {
3155             hfsc_update_queue__(netdev, queue_id, &hc);
3156         }
3157     }
3158
3159     nl_dump_done(&dump);
3160     return 0;
3161 }
3162
3163 static void
3164 hfsc_tc_destroy(struct tc *tc)
3165 {
3166     struct hfsc *hfsc;
3167     struct hfsc_class *hc, *next;
3168
3169     hfsc = CONTAINER_OF(tc, struct hfsc, tc);
3170
3171     HMAP_FOR_EACH_SAFE (hc, next, tc_queue.hmap_node, &hfsc->tc.queues) {
3172         hmap_remove(&hfsc->tc.queues, &hc->tc_queue.hmap_node);
3173         free(hc);
3174     }
3175
3176     tc_destroy(tc);
3177     free(hfsc);
3178 }
3179
3180 static int
3181 hfsc_qdisc_get(const struct netdev *netdev, struct shash *details)
3182 {
3183     const struct hfsc *hfsc;
3184     hfsc = hfsc_get__(netdev);
3185     shash_add(details, "max-rate", xasprintf("%llu", 8ULL * hfsc->max_rate));
3186     return 0;
3187 }
3188
3189 static int
3190 hfsc_qdisc_set(struct netdev *netdev, const struct shash *details)
3191 {
3192     int error;
3193     struct hfsc_class class;
3194
3195     hfsc_parse_qdisc_details__(netdev, details, &class);
3196     error = hfsc_setup_class__(netdev, tc_make_handle(1, 0xfffe),
3197                                tc_make_handle(1, 0), &class);
3198
3199     if (!error) {
3200         hfsc_get__(netdev)->max_rate = class.max_rate;
3201     }
3202
3203     return error;
3204 }
3205
3206 static int
3207 hfsc_class_get(const struct netdev *netdev OVS_UNUSED,
3208               const struct tc_queue *queue, struct shash *details)
3209 {
3210     const struct hfsc_class *hc;
3211
3212     hc = hfsc_class_cast__(queue);
3213     shash_add(details, "min-rate", xasprintf("%llu", 8ULL * hc->min_rate));
3214     if (hc->min_rate != hc->max_rate) {
3215         shash_add(details, "max-rate", xasprintf("%llu", 8ULL * hc->max_rate));
3216     }
3217     return 0;
3218 }
3219
3220 static int
3221 hfsc_class_set(struct netdev *netdev, unsigned int queue_id,
3222                const struct shash *details)
3223 {
3224     int error;
3225     struct hfsc_class class;
3226
3227     error = hfsc_parse_class_details__(netdev, details, &class);
3228     if (error) {
3229         return error;
3230     }
3231
3232     error = hfsc_setup_class__(netdev, tc_make_handle(1, queue_id + 1),
3233                                tc_make_handle(1, 0xfffe), &class);
3234     if (error) {
3235         return error;
3236     }
3237
3238     hfsc_update_queue__(netdev, queue_id, &class);
3239     return 0;
3240 }
3241
3242 static int
3243 hfsc_class_delete(struct netdev *netdev, struct tc_queue *queue)
3244 {
3245     int error;
3246     struct hfsc *hfsc;
3247     struct hfsc_class *hc;
3248
3249     hc   = hfsc_class_cast__(queue);
3250     hfsc = hfsc_get__(netdev);
3251
3252     error = tc_delete_class(netdev, tc_make_handle(1, queue->queue_id + 1));
3253     if (!error) {
3254         hmap_remove(&hfsc->tc.queues, &hc->tc_queue.hmap_node);
3255         free(hc);
3256     }
3257     return error;
3258 }
3259
3260 static int
3261 hfsc_class_get_stats(const struct netdev *netdev, const struct tc_queue *queue,
3262                      struct netdev_queue_stats *stats)
3263 {
3264     return hfsc_query_class__(netdev, tc_make_handle(1, queue->queue_id + 1),
3265                              tc_make_handle(1, 0xfffe), NULL, stats);
3266 }
3267
3268 static int
3269 hfsc_class_dump_stats(const struct netdev *netdev OVS_UNUSED,
3270                       const struct ofpbuf *nlmsg,
3271                       netdev_dump_queue_stats_cb *cb, void *aux)
3272 {
3273     struct netdev_queue_stats stats;
3274     unsigned int handle, major, minor;
3275     int error;
3276
3277     error = tc_parse_class(nlmsg, &handle, NULL, &stats);
3278     if (error) {
3279         return error;
3280     }
3281
3282     major = tc_get_major(handle);
3283     minor = tc_get_minor(handle);
3284     if (major == 1 && minor > 0 && minor <= HFSC_N_QUEUES) {
3285         (*cb)(minor - 1, &stats, aux);
3286     }
3287     return 0;
3288 }
3289
3290 static const struct tc_ops tc_ops_hfsc = {
3291     "hfsc",                     /* linux_name */
3292     "linux-hfsc",               /* ovs_name */
3293     HFSC_N_QUEUES,              /* n_queues */
3294     hfsc_tc_install,            /* tc_install */
3295     hfsc_tc_load,               /* tc_load */
3296     hfsc_tc_destroy,            /* tc_destroy */
3297     hfsc_qdisc_get,             /* qdisc_get */
3298     hfsc_qdisc_set,             /* qdisc_set */
3299     hfsc_class_get,             /* class_get */
3300     hfsc_class_set,             /* class_set */
3301     hfsc_class_delete,          /* class_delete */
3302     hfsc_class_get_stats,       /* class_get_stats */
3303     hfsc_class_dump_stats       /* class_dump_stats */
3304 };
3305 \f
3306 /* "linux-default" traffic control class.
3307  *
3308  * This class represents the default, unnamed Linux qdisc.  It corresponds to
3309  * the "" (empty string) QoS type in the OVS database. */
3310
3311 static void
3312 default_install__(struct netdev *netdev)
3313 {
3314     struct netdev_dev_linux *netdev_dev =
3315                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
3316     static struct tc *tc;
3317
3318     if (!tc) {
3319         tc = xmalloc(sizeof *tc);
3320         tc_init(tc, &tc_ops_default);
3321     }
3322     netdev_dev->tc = tc;
3323 }
3324
3325 static int
3326 default_tc_install(struct netdev *netdev,
3327                    const struct shash *details OVS_UNUSED)
3328 {
3329     default_install__(netdev);
3330     return 0;
3331 }
3332
3333 static int
3334 default_tc_load(struct netdev *netdev, struct ofpbuf *nlmsg OVS_UNUSED)
3335 {
3336     default_install__(netdev);
3337     return 0;
3338 }
3339
3340 static const struct tc_ops tc_ops_default = {
3341     NULL,                       /* linux_name */
3342     "",                         /* ovs_name */
3343     0,                          /* n_queues */
3344     default_tc_install,
3345     default_tc_load,
3346     NULL,                       /* tc_destroy */
3347     NULL,                       /* qdisc_get */
3348     NULL,                       /* qdisc_set */
3349     NULL,                       /* class_get */
3350     NULL,                       /* class_set */
3351     NULL,                       /* class_delete */
3352     NULL,                       /* class_get_stats */
3353     NULL                        /* class_dump_stats */
3354 };
3355 \f
3356 /* "linux-other" traffic control class.
3357  *
3358  * */
3359
3360 static int
3361 other_tc_load(struct netdev *netdev, struct ofpbuf *nlmsg OVS_UNUSED)
3362 {
3363     struct netdev_dev_linux *netdev_dev =
3364                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
3365     static struct tc *tc;
3366
3367     if (!tc) {
3368         tc = xmalloc(sizeof *tc);
3369         tc_init(tc, &tc_ops_other);
3370     }
3371     netdev_dev->tc = tc;
3372     return 0;
3373 }
3374
3375 static const struct tc_ops tc_ops_other = {
3376     NULL,                       /* linux_name */
3377     "linux-other",              /* ovs_name */
3378     0,                          /* n_queues */
3379     NULL,                       /* tc_install */
3380     other_tc_load,
3381     NULL,                       /* tc_destroy */
3382     NULL,                       /* qdisc_get */
3383     NULL,                       /* qdisc_set */
3384     NULL,                       /* class_get */
3385     NULL,                       /* class_set */
3386     NULL,                       /* class_delete */
3387     NULL,                       /* class_get_stats */
3388     NULL                        /* class_dump_stats */
3389 };
3390 \f
3391 /* Traffic control. */
3392
3393 /* Number of kernel "tc" ticks per second. */
3394 static double ticks_per_s;
3395
3396 /* Number of kernel "jiffies" per second.  This is used for the purpose of
3397  * computing buffer sizes.  Generally kernel qdiscs need to be able to buffer
3398  * one jiffy's worth of data.
3399  *
3400  * There are two possibilities here:
3401  *
3402  *    - 'buffer_hz' is the kernel's real timer tick rate, a small number in the
3403  *      approximate range of 100 to 1024.  That means that we really need to
3404  *      make sure that the qdisc can buffer that much data.
3405  *
3406  *    - 'buffer_hz' is an absurdly large number.  That means that the kernel
3407  *      has finely granular timers and there's no need to fudge additional room
3408  *      for buffers.  (There's no extra effort needed to implement that: the
3409  *      large 'buffer_hz' is used as a divisor, so practically any number will
3410  *      come out as 0 in the division.  Small integer results in the case of
3411  *      really high dividends won't have any real effect anyhow.)
3412  */
3413 static unsigned int buffer_hz;
3414
3415 /* Returns tc handle 'major':'minor'. */
3416 static unsigned int
3417 tc_make_handle(unsigned int major, unsigned int minor)
3418 {
3419     return TC_H_MAKE(major << 16, minor);
3420 }
3421
3422 /* Returns the major number from 'handle'. */
3423 static unsigned int
3424 tc_get_major(unsigned int handle)
3425 {
3426     return TC_H_MAJ(handle) >> 16;
3427 }
3428
3429 /* Returns the minor number from 'handle'. */
3430 static unsigned int
3431 tc_get_minor(unsigned int handle)
3432 {
3433     return TC_H_MIN(handle);
3434 }
3435
3436 static struct tcmsg *
3437 tc_make_request(const struct netdev *netdev, int type, unsigned int flags,
3438                 struct ofpbuf *request)
3439 {
3440     struct tcmsg *tcmsg;
3441     int ifindex;
3442     int error;
3443
3444     error = get_ifindex(netdev, &ifindex);
3445     if (error) {
3446         return NULL;
3447     }
3448
3449     ofpbuf_init(request, 512);
3450     nl_msg_put_nlmsghdr(request, sizeof *tcmsg, type, NLM_F_REQUEST | flags);
3451     tcmsg = ofpbuf_put_zeros(request, sizeof *tcmsg);
3452     tcmsg->tcm_family = AF_UNSPEC;
3453     tcmsg->tcm_ifindex = ifindex;
3454     /* Caller should fill in tcmsg->tcm_handle. */
3455     /* Caller should fill in tcmsg->tcm_parent. */
3456
3457     return tcmsg;
3458 }
3459
3460 static int
3461 tc_transact(struct ofpbuf *request, struct ofpbuf **replyp)
3462 {
3463     int error = nl_sock_transact(rtnl_sock, request, replyp);
3464     ofpbuf_uninit(request);
3465     return error;
3466 }
3467
3468 /* Adds or deletes a root ingress qdisc on 'netdev'.  We use this for
3469  * policing configuration.
3470  *
3471  * This function is equivalent to running the following when 'add' is true:
3472  *     /sbin/tc qdisc add dev <devname> handle ffff: ingress
3473  *
3474  * This function is equivalent to running the following when 'add' is false:
3475  *     /sbin/tc qdisc del dev <devname> handle ffff: ingress
3476  *
3477  * The configuration and stats may be seen with the following command:
3478  *     /sbin/tc -s qdisc show dev <devname>
3479  *
3480  * Returns 0 if successful, otherwise a positive errno value.
3481  */
3482 static int
3483 tc_add_del_ingress_qdisc(struct netdev *netdev, bool add)
3484 {
3485     struct ofpbuf request;
3486     struct tcmsg *tcmsg;
3487     int error;
3488     int type = add ? RTM_NEWQDISC : RTM_DELQDISC;
3489     int flags = add ? NLM_F_EXCL | NLM_F_CREATE : 0;
3490
3491     tcmsg = tc_make_request(netdev, type, flags, &request);
3492     if (!tcmsg) {
3493         return ENODEV;
3494     }
3495     tcmsg->tcm_handle = tc_make_handle(0xffff, 0);
3496     tcmsg->tcm_parent = TC_H_INGRESS;
3497     nl_msg_put_string(&request, TCA_KIND, "ingress");
3498     nl_msg_put_unspec(&request, TCA_OPTIONS, NULL, 0);
3499
3500     error = tc_transact(&request, NULL);
3501     if (error) {
3502         /* If we're deleting the qdisc, don't worry about some of the
3503          * error conditions. */
3504         if (!add && (error == ENOENT || error == EINVAL)) {
3505             return 0;
3506         }
3507         return error;
3508     }
3509
3510     return 0;
3511 }
3512
3513 /* Adds a policer to 'netdev' with a rate of 'kbits_rate' and a burst size
3514  * of 'kbits_burst'.
3515  *
3516  * This function is equivalent to running:
3517  *     /sbin/tc filter add dev <devname> parent ffff: protocol all prio 49
3518  *              basic police rate <kbits_rate>kbit burst <kbits_burst>k
3519  *              mtu 65535 drop
3520  *
3521  * The configuration and stats may be seen with the following command:
3522  *     /sbin/tc -s filter show <devname> eth0 parent ffff:
3523  *
3524  * Returns 0 if successful, otherwise a positive errno value.
3525  */
3526 static int
3527 tc_add_policer(struct netdev *netdev, int kbits_rate, int kbits_burst)
3528 {
3529     struct tc_police tc_police;
3530     struct ofpbuf request;
3531     struct tcmsg *tcmsg;
3532     size_t basic_offset;
3533     size_t police_offset;
3534     int error;
3535     int mtu = 65535;
3536
3537     memset(&tc_police, 0, sizeof tc_police);
3538     tc_police.action = TC_POLICE_SHOT;
3539     tc_police.mtu = mtu;
3540     tc_fill_rate(&tc_police.rate, kbits_rate/8 * 1000, mtu);
3541     tc_police.burst = tc_bytes_to_ticks(tc_police.rate.rate,
3542                                         kbits_burst * 1024);
3543
3544     tcmsg = tc_make_request(netdev, RTM_NEWTFILTER,
3545                             NLM_F_EXCL | NLM_F_CREATE, &request);
3546     if (!tcmsg) {
3547         return ENODEV;
3548     }
3549     tcmsg->tcm_parent = tc_make_handle(0xffff, 0);
3550     tcmsg->tcm_info = tc_make_handle(49,
3551                                      (OVS_FORCE uint16_t) htons(ETH_P_ALL));
3552
3553     nl_msg_put_string(&request, TCA_KIND, "basic");
3554     basic_offset = nl_msg_start_nested(&request, TCA_OPTIONS);
3555     police_offset = nl_msg_start_nested(&request, TCA_BASIC_POLICE);
3556     nl_msg_put_unspec(&request, TCA_POLICE_TBF, &tc_police, sizeof tc_police);
3557     tc_put_rtab(&request, TCA_POLICE_RATE, &tc_police.rate);
3558     nl_msg_end_nested(&request, police_offset);
3559     nl_msg_end_nested(&request, basic_offset);
3560
3561     error = tc_transact(&request, NULL);
3562     if (error) {
3563         return error;
3564     }
3565
3566     return 0;
3567 }
3568
3569 static void
3570 read_psched(void)
3571 {
3572     /* The values in psched are not individually very meaningful, but they are
3573      * important.  The tables below show some values seen in the wild.
3574      *
3575      * Some notes:
3576      *
3577      *   - "c" has always been a constant 1000000 since at least Linux 2.4.14.
3578      *     (Before that, there are hints that it was 1000000000.)
3579      *
3580      *   - "d" can be unrealistically large, see the comment on 'buffer_hz'
3581      *     above.
3582      *
3583      *                        /proc/net/psched
3584      *     -----------------------------------
3585      * [1] 000c8000 000f4240 000f4240 00000064
3586      * [2] 000003e8 00000400 000f4240 3b9aca00
3587      * [3] 000003e8 00000400 000f4240 3b9aca00
3588      * [4] 000003e8 00000400 000f4240 00000064
3589      * [5] 000003e8 00000040 000f4240 3b9aca00
3590      * [6] 000003e8 00000040 000f4240 000000f9
3591      *
3592      *           a         b          c             d ticks_per_s     buffer_hz
3593      *     ------- --------- ---------- ------------- ----------- -------------
3594      * [1] 819,200 1,000,000  1,000,000           100     819,200           100
3595      * [2]   1,000     1,024  1,000,000 1,000,000,000     976,562 1,000,000,000
3596      * [3]   1,000     1,024  1,000,000 1,000,000,000     976,562 1,000,000,000
3597      * [4]   1,000     1,024  1,000,000           100     976,562           100
3598      * [5]   1,000        64  1,000,000 1,000,000,000  15,625,000 1,000,000,000
3599      * [6]   1,000        64  1,000,000           249  15,625,000           249
3600      *
3601      * [1] 2.6.18-128.1.6.el5.xs5.5.0.505.1024xen from XenServer 5.5.0-24648p
3602      * [2] 2.6.26-1-686-bigmem from Debian lenny
3603      * [3] 2.6.26-2-sparc64 from Debian lenny
3604      * [4] 2.6.27.42-0.1.1.xs5.6.810.44.111163xen from XenServer 5.6.810-31078p
3605      * [5] 2.6.32.21.22 (approx.) from Ubuntu 10.04 on VMware Fusion
3606      * [6] 2.6.34 from kernel.org on KVM
3607      */
3608     static const char fn[] = "/proc/net/psched";
3609     unsigned int a, b, c, d;
3610     FILE *stream;
3611
3612     ticks_per_s = 1.0;
3613     buffer_hz = 100;
3614
3615     stream = fopen(fn, "r");
3616     if (!stream) {
3617         VLOG_WARN("%s: open failed: %s", fn, strerror(errno));
3618         return;
3619     }
3620
3621     if (fscanf(stream, "%x %x %x %x", &a, &b, &c, &d) != 4) {
3622         VLOG_WARN("%s: read failed", fn);
3623         fclose(stream);
3624         return;
3625     }
3626     VLOG_DBG("%s: psched parameters are: %u %u %u %u", fn, a, b, c, d);
3627     fclose(stream);
3628
3629     if (!a || !c) {
3630         VLOG_WARN("%s: invalid scheduler parameters", fn);
3631         return;
3632     }
3633
3634     ticks_per_s = (double) a * c / b;
3635     if (c == 1000000) {
3636         buffer_hz = d;
3637     } else {
3638         VLOG_WARN("%s: unexpected psched parameters: %u %u %u %u",
3639                   fn, a, b, c, d);
3640     }
3641     VLOG_DBG("%s: ticks_per_s=%f buffer_hz=%u", fn, ticks_per_s, buffer_hz);
3642 }
3643
3644 /* Returns the number of bytes that can be transmitted in 'ticks' ticks at a
3645  * rate of 'rate' bytes per second. */
3646 static unsigned int
3647 tc_ticks_to_bytes(unsigned int rate, unsigned int ticks)
3648 {
3649     if (!buffer_hz) {
3650         read_psched();
3651     }
3652     return (rate * ticks) / ticks_per_s;
3653 }
3654
3655 /* Returns the number of ticks that it would take to transmit 'size' bytes at a
3656  * rate of 'rate' bytes per second. */
3657 static unsigned int
3658 tc_bytes_to_ticks(unsigned int rate, unsigned int size)
3659 {
3660     if (!buffer_hz) {
3661         read_psched();
3662     }
3663     return rate ? ((unsigned long long int) ticks_per_s * size) / rate : 0;
3664 }
3665
3666 /* Returns the number of bytes that need to be reserved for qdisc buffering at
3667  * a transmission rate of 'rate' bytes per second. */
3668 static unsigned int
3669 tc_buffer_per_jiffy(unsigned int rate)
3670 {
3671     if (!buffer_hz) {
3672         read_psched();
3673     }
3674     return rate / buffer_hz;
3675 }
3676
3677 /* Given Netlink 'msg' that describes a qdisc, extracts the name of the qdisc,
3678  * e.g. "htb", into '*kind' (if it is nonnull).  If 'options' is nonnull,
3679  * extracts 'msg''s TCA_OPTIONS attributes into '*options' if it is present or
3680  * stores NULL into it if it is absent.
3681  *
3682  * '*kind' and '*options' point into 'msg', so they are owned by whoever owns
3683  * 'msg'.
3684  *
3685  * Returns 0 if successful, otherwise a positive errno value. */
3686 static int
3687 tc_parse_qdisc(const struct ofpbuf *msg, const char **kind,
3688                struct nlattr **options)
3689 {
3690     static const struct nl_policy tca_policy[] = {
3691         [TCA_KIND] = { .type = NL_A_STRING, .optional = false },
3692         [TCA_OPTIONS] = { .type = NL_A_NESTED, .optional = true },
3693     };
3694     struct nlattr *ta[ARRAY_SIZE(tca_policy)];
3695
3696     if (!nl_policy_parse(msg, NLMSG_HDRLEN + sizeof(struct tcmsg),
3697                          tca_policy, ta, ARRAY_SIZE(ta))) {
3698         VLOG_WARN_RL(&rl, "failed to parse qdisc message");
3699         goto error;
3700     }
3701
3702     if (kind) {
3703         *kind = nl_attr_get_string(ta[TCA_KIND]);
3704     }
3705
3706     if (options) {
3707         *options = ta[TCA_OPTIONS];
3708     }
3709
3710     return 0;
3711
3712 error:
3713     if (kind) {
3714         *kind = NULL;
3715     }
3716     if (options) {
3717         *options = NULL;
3718     }
3719     return EPROTO;
3720 }
3721
3722 /* Given Netlink 'msg' that describes a class, extracts the queue ID (e.g. the
3723  * minor number of its class ID) into '*queue_id', its TCA_OPTIONS attribute
3724  * into '*options', and its queue statistics into '*stats'.  Any of the output
3725  * arguments may be null.
3726  *
3727  * Returns 0 if successful, otherwise a positive errno value. */
3728 static int
3729 tc_parse_class(const struct ofpbuf *msg, unsigned int *handlep,
3730                struct nlattr **options, struct netdev_queue_stats *stats)
3731 {
3732     static const struct nl_policy tca_policy[] = {
3733         [TCA_OPTIONS] = { .type = NL_A_NESTED, .optional = false },
3734         [TCA_STATS2] = { .type = NL_A_NESTED, .optional = false },
3735     };
3736     struct nlattr *ta[ARRAY_SIZE(tca_policy)];
3737
3738     if (!nl_policy_parse(msg, NLMSG_HDRLEN + sizeof(struct tcmsg),
3739                          tca_policy, ta, ARRAY_SIZE(ta))) {
3740         VLOG_WARN_RL(&rl, "failed to parse class message");
3741         goto error;
3742     }
3743
3744     if (handlep) {
3745         struct tcmsg *tc = ofpbuf_at_assert(msg, NLMSG_HDRLEN, sizeof *tc);
3746         *handlep = tc->tcm_handle;
3747     }
3748
3749     if (options) {
3750         *options = ta[TCA_OPTIONS];
3751     }
3752
3753     if (stats) {
3754         const struct gnet_stats_queue *gsq;
3755         struct gnet_stats_basic gsb;
3756
3757         static const struct nl_policy stats_policy[] = {
3758             [TCA_STATS_BASIC] = { .type = NL_A_UNSPEC, .optional = false,
3759                                   .min_len = sizeof gsb },
3760             [TCA_STATS_QUEUE] = { .type = NL_A_UNSPEC, .optional = false,
3761                                   .min_len = sizeof *gsq },
3762         };
3763         struct nlattr *sa[ARRAY_SIZE(stats_policy)];
3764
3765         if (!nl_parse_nested(ta[TCA_STATS2], stats_policy,
3766                              sa, ARRAY_SIZE(sa))) {
3767             VLOG_WARN_RL(&rl, "failed to parse class stats");
3768             goto error;
3769         }
3770
3771         /* Alignment issues screw up the length of struct gnet_stats_basic on
3772          * some arch/bitsize combinations.  Newer versions of Linux have a
3773          * struct gnet_stats_basic_packed, but we can't depend on that.  The
3774          * easiest thing to do is just to make a copy. */
3775         memset(&gsb, 0, sizeof gsb);
3776         memcpy(&gsb, nl_attr_get(sa[TCA_STATS_BASIC]),
3777                MIN(nl_attr_get_size(sa[TCA_STATS_BASIC]), sizeof gsb));
3778         stats->tx_bytes = gsb.bytes;
3779         stats->tx_packets = gsb.packets;
3780
3781         gsq = nl_attr_get(sa[TCA_STATS_QUEUE]);
3782         stats->tx_errors = gsq->drops;
3783     }
3784
3785     return 0;
3786
3787 error:
3788     if (options) {
3789         *options = NULL;
3790     }
3791     if (stats) {
3792         memset(stats, 0, sizeof *stats);
3793     }
3794     return EPROTO;
3795 }
3796
3797 /* Queries the kernel for class with identifier 'handle' and parent 'parent'
3798  * on 'netdev'. */
3799 static int
3800 tc_query_class(const struct netdev *netdev,
3801                unsigned int handle, unsigned int parent,
3802                struct ofpbuf **replyp)
3803 {
3804     struct ofpbuf request;
3805     struct tcmsg *tcmsg;
3806     int error;
3807
3808     tcmsg = tc_make_request(netdev, RTM_GETTCLASS, NLM_F_ECHO, &request);
3809     if (!tcmsg) {
3810         return ENODEV;
3811     }
3812     tcmsg->tcm_handle = handle;
3813     tcmsg->tcm_parent = parent;
3814
3815     error = tc_transact(&request, replyp);
3816     if (error) {
3817         VLOG_WARN_RL(&rl, "query %s class %u:%u (parent %u:%u) failed (%s)",
3818                      netdev_get_name(netdev),
3819                      tc_get_major(handle), tc_get_minor(handle),
3820                      tc_get_major(parent), tc_get_minor(parent),
3821                      strerror(error));
3822     }
3823     return error;
3824 }
3825
3826 /* Equivalent to "tc class del dev <name> handle <handle>". */
3827 static int
3828 tc_delete_class(const struct netdev *netdev, unsigned int handle)
3829 {
3830     struct ofpbuf request;
3831     struct tcmsg *tcmsg;
3832     int error;
3833
3834     tcmsg = tc_make_request(netdev, RTM_DELTCLASS, 0, &request);
3835     if (!tcmsg) {
3836         return ENODEV;
3837     }
3838     tcmsg->tcm_handle = handle;
3839     tcmsg->tcm_parent = 0;
3840
3841     error = tc_transact(&request, NULL);
3842     if (error) {
3843         VLOG_WARN_RL(&rl, "delete %s class %u:%u failed (%s)",
3844                      netdev_get_name(netdev),
3845                      tc_get_major(handle), tc_get_minor(handle),
3846                      strerror(error));
3847     }
3848     return error;
3849 }
3850
3851 /* Equivalent to "tc qdisc del dev <name> root". */
3852 static int
3853 tc_del_qdisc(struct netdev *netdev)
3854 {
3855     struct netdev_dev_linux *netdev_dev =
3856                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
3857     struct ofpbuf request;
3858     struct tcmsg *tcmsg;
3859     int error;
3860
3861     tcmsg = tc_make_request(netdev, RTM_DELQDISC, 0, &request);
3862     if (!tcmsg) {
3863         return ENODEV;
3864     }
3865     tcmsg->tcm_handle = tc_make_handle(1, 0);
3866     tcmsg->tcm_parent = TC_H_ROOT;
3867
3868     error = tc_transact(&request, NULL);
3869     if (error == EINVAL) {
3870         /* EINVAL probably means that the default qdisc was in use, in which
3871          * case we've accomplished our purpose. */
3872         error = 0;
3873     }
3874     if (!error && netdev_dev->tc) {
3875         if (netdev_dev->tc->ops->tc_destroy) {
3876             netdev_dev->tc->ops->tc_destroy(netdev_dev->tc);
3877         }
3878         netdev_dev->tc = NULL;
3879     }
3880     return error;
3881 }
3882
3883 /* If 'netdev''s qdisc type and parameters are not yet known, queries the
3884  * kernel to determine what they are.  Returns 0 if successful, otherwise a
3885  * positive errno value. */
3886 static int
3887 tc_query_qdisc(const struct netdev *netdev)
3888 {
3889     struct netdev_dev_linux *netdev_dev =
3890                                 netdev_dev_linux_cast(netdev_get_dev(netdev));
3891     struct ofpbuf request, *qdisc;
3892     const struct tc_ops *ops;
3893     struct tcmsg *tcmsg;
3894     int load_error;
3895     int error;
3896
3897     if (netdev_dev->tc) {
3898         return 0;
3899     }
3900
3901     /* This RTM_GETQDISC is crafted to avoid OOPSing kernels that do not have
3902      * commit 53b0f08 "net_sched: Fix qdisc_notify()", which is anything before
3903      * 2.6.35 without that fix backported to it.
3904      *
3905      * To avoid the OOPS, we must not make a request that would attempt to dump
3906      * a "built-in" qdisc, that is, the default pfifo_fast qdisc or one of a
3907      * few others.  There are a few ways that I can see to do this, but most of
3908      * them seem to be racy (and if you lose the race the kernel OOPSes).  The
3909      * technique chosen here is to assume that any non-default qdisc that we
3910      * create will have a class with handle 1:0.  The built-in qdiscs only have
3911      * a class with handle 0:0.
3912      *
3913      * We could check for Linux 2.6.35+ and use a more straightforward method
3914      * there. */
3915     tcmsg = tc_make_request(netdev, RTM_GETQDISC, NLM_F_ECHO, &request);
3916     if (!tcmsg) {
3917         return ENODEV;
3918     }
3919     tcmsg->tcm_handle = tc_make_handle(1, 0);
3920     tcmsg->tcm_parent = 0;
3921
3922     /* Figure out what tc class to instantiate. */
3923     error = tc_transact(&request, &qdisc);
3924     if (!error) {
3925         const char *kind;
3926
3927         error = tc_parse_qdisc(qdisc, &kind, NULL);
3928         if (error) {
3929             ops = &tc_ops_other;
3930         } else {
3931             ops = tc_lookup_linux_name(kind);
3932             if (!ops) {
3933                 static struct vlog_rate_limit rl2 = VLOG_RATE_LIMIT_INIT(1, 1);
3934                 VLOG_INFO_RL(&rl2, "unknown qdisc \"%s\"", kind);
3935
3936                 ops = &tc_ops_other;
3937             }
3938         }
3939     } else if (error == ENOENT) {
3940         /* Either it's a built-in qdisc, or it's a qdisc set up by some
3941          * other entity that doesn't have a handle 1:0.  We will assume
3942          * that it's the system default qdisc. */
3943         ops = &tc_ops_default;
3944         error = 0;
3945     } else {
3946         /* Who knows?  Maybe the device got deleted. */
3947         VLOG_WARN_RL(&rl, "query %s qdisc failed (%s)",
3948                      netdev_get_name(netdev), strerror(error));
3949         ops = &tc_ops_other;
3950     }
3951
3952     /* Instantiate it. */
3953     load_error = ops->tc_load((struct netdev *) netdev, qdisc);
3954     assert((load_error == 0) == (netdev_dev->tc != NULL));
3955     ofpbuf_delete(qdisc);
3956
3957     return error ? error : load_error;
3958 }
3959
3960 /* Linux traffic control uses tables with 256 entries ("rtab" tables) to
3961    approximate the time to transmit packets of various lengths.  For an MTU of
3962    256 or less, each entry is exact; for an MTU of 257 through 512, each entry
3963    represents two possible packet lengths; for a MTU of 513 through 1024, four
3964    possible lengths; and so on.
3965
3966    Returns, for the specified 'mtu', the number of bits that packet lengths
3967    need to be shifted right to fit within such a 256-entry table. */
3968 static int
3969 tc_calc_cell_log(unsigned int mtu)
3970 {
3971     int cell_log;
3972
3973     if (!mtu) {
3974         mtu = ETH_PAYLOAD_MAX;
3975     }
3976     mtu += ETH_HEADER_LEN + VLAN_HEADER_LEN;
3977
3978     for (cell_log = 0; mtu >= 256; cell_log++) {
3979         mtu >>= 1;
3980     }
3981
3982     return cell_log;
3983 }
3984
3985 /* Initializes 'rate' properly for a rate of 'Bps' bytes per second with an MTU
3986  * of 'mtu'. */
3987 static void
3988 tc_fill_rate(struct tc_ratespec *rate, uint64_t Bps, int mtu)
3989 {
3990     memset(rate, 0, sizeof *rate);
3991     rate->cell_log = tc_calc_cell_log(mtu);
3992     /* rate->overhead = 0; */           /* New in 2.6.24, not yet in some */
3993     /* rate->cell_align = 0; */         /* distro headers. */
3994     rate->mpu = ETH_TOTAL_MIN;
3995     rate->rate = Bps;
3996 }
3997
3998 /* Appends to 'msg' an "rtab" table for the specified 'rate' as a Netlink
3999  * attribute of the specified "type".
4000  *
4001  * See tc_calc_cell_log() above for a description of "rtab"s. */
4002 static void
4003 tc_put_rtab(struct ofpbuf *msg, uint16_t type, const struct tc_ratespec *rate)
4004 {
4005     uint32_t *rtab;
4006     unsigned int i;
4007
4008     rtab = nl_msg_put_unspec_uninit(msg, type, TC_RTAB_SIZE);
4009     for (i = 0; i < TC_RTAB_SIZE / sizeof *rtab; i++) {
4010         unsigned packet_size = (i + 1) << rate->cell_log;
4011         if (packet_size < rate->mpu) {
4012             packet_size = rate->mpu;
4013         }
4014         rtab[i] = tc_bytes_to_ticks(rate->rate, packet_size);
4015     }
4016 }
4017
4018 /* Calculates the proper value of 'buffer' or 'cbuffer' in HTB options given a
4019  * rate of 'Bps' bytes per second, the specified 'mtu', and a user-requested
4020  * burst size of 'burst_bytes'.  (If no value was requested, a 'burst_bytes' of
4021  * 0 is fine.) */
4022 static int
4023 tc_calc_buffer(unsigned int Bps, int mtu, uint64_t burst_bytes)
4024 {
4025     unsigned int min_burst = tc_buffer_per_jiffy(Bps) + mtu;
4026     return tc_bytes_to_ticks(Bps, MAX(burst_bytes, min_burst));
4027 }
4028 \f
4029 /* Linux-only functions declared in netdev-linux.h  */
4030
4031 /* Returns a fd for an AF_INET socket or a negative errno value. */
4032 int
4033 netdev_linux_get_af_inet_sock(void)
4034 {
4035     int error = netdev_linux_init();
4036     return error ? -error : af_inet_sock;
4037 }
4038
4039 /* Modifies the 'flag' bit in ethtool's flags field for 'netdev'.  If
4040  * 'enable' is true, the bit is set.  Otherwise, it is cleared. */
4041 int
4042 netdev_linux_ethtool_set_flag(struct netdev *netdev, uint32_t flag,
4043                               const char *flag_name, bool enable)
4044 {
4045     const char *netdev_name = netdev_get_name(netdev);
4046     struct ethtool_value evalue;
4047     uint32_t new_flags;
4048     int error;
4049
4050     memset(&evalue, 0, sizeof evalue);
4051     error = netdev_linux_do_ethtool(netdev_name,
4052                                     (struct ethtool_cmd *)&evalue,
4053                                     ETHTOOL_GFLAGS, "ETHTOOL_GFLAGS");
4054     if (error) {
4055         return error;
4056     }
4057
4058     evalue.data = new_flags = (evalue.data & ~flag) | (enable ? flag : 0);
4059     error = netdev_linux_do_ethtool(netdev_name,
4060                                     (struct ethtool_cmd *)&evalue,
4061                                     ETHTOOL_SFLAGS, "ETHTOOL_SFLAGS");
4062     if (error) {
4063         return error;
4064     }
4065
4066     memset(&evalue, 0, sizeof evalue);
4067     error = netdev_linux_do_ethtool(netdev_name,
4068                                     (struct ethtool_cmd *)&evalue,
4069                                     ETHTOOL_GFLAGS, "ETHTOOL_GFLAGS");
4070     if (error) {
4071         return error;
4072     }
4073
4074     if (new_flags != evalue.data) {
4075         VLOG_WARN_RL(&rl, "attempt to %s ethtool %s flag on network "
4076                      "device %s failed", enable ? "enable" : "disable",
4077                      flag_name, netdev_name);
4078         return EOPNOTSUPP;
4079     }
4080
4081     return 0;
4082 }
4083 \f
4084 /* Utility functions. */
4085
4086 /* Copies 'src' into 'dst', performing format conversion in the process. */
4087 static void
4088 netdev_stats_from_rtnl_link_stats(struct netdev_stats *dst,
4089                                   const struct rtnl_link_stats *src)
4090 {
4091     dst->rx_packets = src->rx_packets;
4092     dst->tx_packets = src->tx_packets;
4093     dst->rx_bytes = src->rx_bytes;
4094     dst->tx_bytes = src->tx_bytes;
4095     dst->rx_errors = src->rx_errors;
4096     dst->tx_errors = src->tx_errors;
4097     dst->rx_dropped = src->rx_dropped;
4098     dst->tx_dropped = src->tx_dropped;
4099     dst->multicast = src->multicast;
4100     dst->collisions = src->collisions;
4101     dst->rx_length_errors = src->rx_length_errors;
4102     dst->rx_over_errors = src->rx_over_errors;
4103     dst->rx_crc_errors = src->rx_crc_errors;
4104     dst->rx_frame_errors = src->rx_frame_errors;
4105     dst->rx_fifo_errors = src->rx_fifo_errors;
4106     dst->rx_missed_errors = src->rx_missed_errors;
4107     dst->tx_aborted_errors = src->tx_aborted_errors;
4108     dst->tx_carrier_errors = src->tx_carrier_errors;
4109     dst->tx_fifo_errors = src->tx_fifo_errors;
4110     dst->tx_heartbeat_errors = src->tx_heartbeat_errors;
4111     dst->tx_window_errors = src->tx_window_errors;
4112 }
4113
4114 static int
4115 get_stats_via_netlink(int ifindex, struct netdev_stats *stats)
4116 {
4117     /* Policy for RTNLGRP_LINK messages.
4118      *
4119      * There are *many* more fields in these messages, but currently we only
4120      * care about these fields. */
4121     static const struct nl_policy rtnlgrp_link_policy[] = {
4122         [IFLA_IFNAME] = { .type = NL_A_STRING, .optional = false },
4123         [IFLA_STATS] = { .type = NL_A_UNSPEC, .optional = true,
4124                          .min_len = sizeof(struct rtnl_link_stats) },
4125     };
4126
4127     struct ofpbuf request;
4128     struct ofpbuf *reply;
4129     struct ifinfomsg *ifi;
4130     struct nlattr *attrs[ARRAY_SIZE(rtnlgrp_link_policy)];
4131     int error;
4132
4133     ofpbuf_init(&request, 0);
4134     nl_msg_put_nlmsghdr(&request, sizeof *ifi, RTM_GETLINK, NLM_F_REQUEST);
4135     ifi = ofpbuf_put_zeros(&request, sizeof *ifi);
4136     ifi->ifi_family = PF_UNSPEC;
4137     ifi->ifi_index = ifindex;
4138     error = nl_sock_transact(rtnl_sock, &request, &reply);
4139     ofpbuf_uninit(&request);
4140     if (error) {
4141         return error;
4142     }
4143
4144     if (!nl_policy_parse(reply, NLMSG_HDRLEN + sizeof(struct ifinfomsg),
4145                          rtnlgrp_link_policy,
4146                          attrs, ARRAY_SIZE(rtnlgrp_link_policy))) {
4147         ofpbuf_delete(reply);
4148         return EPROTO;
4149     }
4150
4151     if (!attrs[IFLA_STATS]) {
4152         VLOG_WARN_RL(&rl, "RTM_GETLINK reply lacks stats");
4153         ofpbuf_delete(reply);
4154         return EPROTO;
4155     }
4156
4157     netdev_stats_from_rtnl_link_stats(stats, nl_attr_get(attrs[IFLA_STATS]));
4158
4159     ofpbuf_delete(reply);
4160
4161     return 0;
4162 }
4163
4164 static int
4165 get_stats_via_proc(const char *netdev_name, struct netdev_stats *stats)
4166 {
4167     static const char fn[] = "/proc/net/dev";
4168     char line[1024];
4169     FILE *stream;
4170     int ln;
4171
4172     stream = fopen(fn, "r");
4173     if (!stream) {
4174         VLOG_WARN_RL(&rl, "%s: open failed: %s", fn, strerror(errno));
4175         return errno;
4176     }
4177
4178     ln = 0;
4179     while (fgets(line, sizeof line, stream)) {
4180         if (++ln >= 3) {
4181             char devname[16];
4182 #define X64 "%"SCNu64
4183             if (sscanf(line,
4184                        " %15[^:]:"
4185                        X64 X64 X64 X64 X64 X64 X64 "%*u"
4186                        X64 X64 X64 X64 X64 X64 X64 "%*u",
4187                        devname,
4188                        &stats->rx_bytes,
4189                        &stats->rx_packets,
4190                        &stats->rx_errors,
4191                        &stats->rx_dropped,
4192                        &stats->rx_fifo_errors,
4193                        &stats->rx_frame_errors,
4194                        &stats->multicast,
4195                        &stats->tx_bytes,
4196                        &stats->tx_packets,
4197                        &stats->tx_errors,
4198                        &stats->tx_dropped,
4199                        &stats->tx_fifo_errors,
4200                        &stats->collisions,
4201                        &stats->tx_carrier_errors) != 15) {
4202                 VLOG_WARN_RL(&rl, "%s:%d: parse error", fn, ln);
4203             } else if (!strcmp(devname, netdev_name)) {
4204                 stats->rx_length_errors = UINT64_MAX;
4205                 stats->rx_over_errors = UINT64_MAX;
4206                 stats->rx_crc_errors = UINT64_MAX;
4207                 stats->rx_missed_errors = UINT64_MAX;
4208                 stats->tx_aborted_errors = UINT64_MAX;
4209                 stats->tx_heartbeat_errors = UINT64_MAX;
4210                 stats->tx_window_errors = UINT64_MAX;
4211                 fclose(stream);
4212                 return 0;
4213             }
4214         }
4215     }
4216     VLOG_WARN_RL(&rl, "%s: no stats for %s", fn, netdev_name);
4217     fclose(stream);
4218     return ENODEV;
4219 }
4220
4221 static int
4222 get_carrier_via_sysfs(const char *name, bool *carrier)
4223 {
4224     char line[8];
4225     int retval;
4226
4227     int error = 0;
4228     char *fn = NULL;
4229     int fd = -1;
4230
4231     *carrier = false;
4232
4233     fn = xasprintf("/sys/class/net/%s/carrier", name);
4234     fd = open(fn, O_RDONLY);
4235     if (fd < 0) {
4236         error = errno;
4237         VLOG_WARN_RL(&rl, "%s: open failed: %s", fn, strerror(error));
4238         goto exit;
4239     }
4240
4241     retval = read(fd, line, sizeof line);
4242     if (retval < 0) {
4243         error = errno;
4244         if (error == EINVAL) {
4245             /* This is the normal return value when we try to check carrier if
4246              * the network device is not up. */
4247         } else {
4248             VLOG_WARN_RL(&rl, "%s: read failed: %s", fn, strerror(error));
4249         }
4250         goto exit;
4251     } else if (retval == 0) {
4252         error = EPROTO;
4253         VLOG_WARN_RL(&rl, "%s: unexpected end of file", fn);
4254         goto exit;
4255     }
4256
4257     if (line[0] != '0' && line[0] != '1') {
4258         error = EPROTO;
4259         VLOG_WARN_RL(&rl, "%s: value is %c (expected 0 or 1)", fn, line[0]);
4260         goto exit;
4261     }
4262     *carrier = line[0] != '0';
4263     error = 0;
4264
4265 exit:
4266     if (fd >= 0) {
4267         close(fd);
4268     }
4269     free(fn);
4270     return error;
4271 }
4272
4273 static int
4274 get_flags(const struct netdev *netdev, int *flags)
4275 {
4276     struct ifreq ifr;
4277     int error;
4278
4279     error = netdev_linux_do_ioctl(netdev_get_name(netdev), &ifr, SIOCGIFFLAGS,
4280                                   "SIOCGIFFLAGS");
4281     *flags = ifr.ifr_flags;
4282     return error;
4283 }
4284
4285 static int
4286 set_flags(struct netdev *netdev, int flags)
4287 {
4288     struct ifreq ifr;
4289
4290     ifr.ifr_flags = flags;
4291     return netdev_linux_do_ioctl(netdev_get_name(netdev), &ifr, SIOCSIFFLAGS,
4292                                  "SIOCSIFFLAGS");
4293 }
4294
4295 static int
4296 do_get_ifindex(const char *netdev_name)
4297 {
4298     struct ifreq ifr;
4299
4300     ovs_strzcpy(ifr.ifr_name, netdev_name, sizeof ifr.ifr_name);
4301     COVERAGE_INC(netdev_get_ifindex);
4302     if (ioctl(af_inet_sock, SIOCGIFINDEX, &ifr) < 0) {
4303         VLOG_WARN_RL(&rl, "ioctl(SIOCGIFINDEX) on %s device failed: %s",
4304                      netdev_name, strerror(errno));
4305         return -errno;
4306     }
4307     return ifr.ifr_ifindex;
4308 }
4309
4310 static int
4311 get_ifindex(const struct netdev *netdev_, int *ifindexp)
4312 {
4313     struct netdev_dev_linux *netdev_dev =
4314                                 netdev_dev_linux_cast(netdev_get_dev(netdev_));
4315     *ifindexp = 0;
4316     if (!(netdev_dev->cache_valid & VALID_IFINDEX)) {
4317         int ifindex = do_get_ifindex(netdev_get_name(netdev_));
4318         if (ifindex < 0) {
4319             return -ifindex;
4320         }
4321         netdev_dev->cache_valid |= VALID_IFINDEX;
4322         netdev_dev->ifindex = ifindex;
4323     }
4324     *ifindexp = netdev_dev->ifindex;
4325     return 0;
4326 }
4327
4328 static int
4329 get_etheraddr(const char *netdev_name, uint8_t ea[ETH_ADDR_LEN])
4330 {
4331     struct ifreq ifr;
4332     int hwaddr_family;
4333
4334     memset(&ifr, 0, sizeof ifr);
4335     ovs_strzcpy(ifr.ifr_name, netdev_name, sizeof ifr.ifr_name);
4336     COVERAGE_INC(netdev_get_hwaddr);
4337     if (ioctl(af_inet_sock, SIOCGIFHWADDR, &ifr) < 0) {
4338         /* ENODEV probably means that a vif disappeared asynchronously and
4339          * hasn't been removed from the database yet, so reduce the log level
4340          * to INFO for that case. */
4341         VLOG(errno == ENODEV ? VLL_INFO : VLL_ERR,
4342              "ioctl(SIOCGIFHWADDR) on %s device failed: %s",
4343              netdev_name, strerror(errno));
4344         return errno;
4345     }
4346     hwaddr_family = ifr.ifr_hwaddr.sa_family;
4347     if (hwaddr_family != AF_UNSPEC && hwaddr_family != ARPHRD_ETHER) {
4348         VLOG_WARN("%s device has unknown hardware address family %d",
4349                   netdev_name, hwaddr_family);
4350     }
4351     memcpy(ea, ifr.ifr_hwaddr.sa_data, ETH_ADDR_LEN);
4352     return 0;
4353 }
4354
4355 static int
4356 set_etheraddr(const char *netdev_name, int hwaddr_family,
4357               const uint8_t mac[ETH_ADDR_LEN])
4358 {
4359     struct ifreq ifr;
4360
4361     memset(&ifr, 0, sizeof ifr);
4362     ovs_strzcpy(ifr.ifr_name, netdev_name, sizeof ifr.ifr_name);
4363     ifr.ifr_hwaddr.sa_family = hwaddr_family;
4364     memcpy(ifr.ifr_hwaddr.sa_data, mac, ETH_ADDR_LEN);
4365     COVERAGE_INC(netdev_set_hwaddr);
4366     if (ioctl(af_inet_sock, SIOCSIFHWADDR, &ifr) < 0) {
4367         VLOG_ERR("ioctl(SIOCSIFHWADDR) on %s device failed: %s",
4368                  netdev_name, strerror(errno));
4369         return errno;
4370     }
4371     return 0;
4372 }
4373
4374 static int
4375 netdev_linux_do_ethtool(const char *name, struct ethtool_cmd *ecmd,
4376                         int cmd, const char *cmd_name)
4377 {
4378     struct ifreq ifr;
4379
4380     memset(&ifr, 0, sizeof ifr);
4381     ovs_strzcpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
4382     ifr.ifr_data = (caddr_t) ecmd;
4383
4384     ecmd->cmd = cmd;
4385     COVERAGE_INC(netdev_ethtool);
4386     if (ioctl(af_inet_sock, SIOCETHTOOL, &ifr) == 0) {
4387         return 0;
4388     } else {
4389         if (errno != EOPNOTSUPP) {
4390             VLOG_WARN_RL(&rl, "ethtool command %s on network device %s "
4391                          "failed: %s", cmd_name, name, strerror(errno));
4392         } else {
4393             /* The device doesn't support this operation.  That's pretty
4394              * common, so there's no point in logging anything. */
4395         }
4396         return errno;
4397     }
4398 }
4399
4400 static int
4401 netdev_linux_do_ioctl(const char *name, struct ifreq *ifr, int cmd,
4402                       const char *cmd_name)
4403 {
4404     ovs_strzcpy(ifr->ifr_name, name, sizeof ifr->ifr_name);
4405     if (ioctl(af_inet_sock, cmd, ifr) == -1) {
4406         VLOG_DBG_RL(&rl, "%s: ioctl(%s) failed: %s", name, cmd_name,
4407                      strerror(errno));
4408         return errno;
4409     }
4410     return 0;
4411 }
4412
4413 static int
4414 netdev_linux_get_ipv4(const struct netdev *netdev, struct in_addr *ip,
4415                       int cmd, const char *cmd_name)
4416 {
4417     struct ifreq ifr;
4418     int error;
4419
4420     ifr.ifr_addr.sa_family = AF_INET;
4421     error = netdev_linux_do_ioctl(netdev_get_name(netdev), &ifr, cmd, cmd_name);
4422     if (!error) {
4423         const struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr;
4424         *ip = sin->sin_addr;
4425     }
4426     return error;
4427 }
4428
4429 /* Returns an AF_PACKET raw socket or a negative errno value. */
4430 static int
4431 af_packet_sock(void)
4432 {
4433     static int sock = INT_MIN;
4434
4435     if (sock == INT_MIN) {
4436         sock = socket(AF_PACKET, SOCK_RAW, 0);
4437         if (sock >= 0) {
4438             set_nonblocking(sock);
4439         } else {
4440             sock = -errno;
4441             VLOG_ERR("failed to create packet socket: %s", strerror(errno));
4442         }
4443     }
4444
4445     return sock;
4446 }