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