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