diff --git a/include/openvswitch/automake.mk b/include/openvswitch/automake.mk
index 17beb2d..86c836c 100644
--- a/include/openvswitch/automake.mk
+++ b/include/openvswitch/automake.mk
@@ -7,6 +7,7 @@ openvswitchinclude_HEADERS = \
 	include/openvswitch/list.h \
 	include/openvswitch/match.h \
 	include/openvswitch/meta-flow.h \
+	include/openvswitch/netdev.h \
 	include/openvswitch/ofpbuf.h \
 	include/openvswitch/ofp-errors.h \
 	include/openvswitch/ofp-parse.h \
diff --git a/include/openvswitch/netdev.h b/include/openvswitch/netdev.h
new file mode 100644
index 0000000..fa5e8f2
--- /dev/null
+++ b/include/openvswitch/netdev.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef OPENVSWITCH_NETDEV_H
+#define OPENVSWITCH_NETDEV_H 1
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+struct netdev;
+
+/* Network device statistics.
+ *
+ * Values of unsupported statistics are set to all-1-bits (UINT64_MAX). */
+struct netdev_stats {
+    uint64_t rx_packets;        /* Total packets received. */
+    uint64_t tx_packets;        /* Total packets transmitted. */
+    uint64_t rx_bytes;          /* Total bytes received. */
+    uint64_t tx_bytes;          /* Total bytes transmitted. */
+    uint64_t rx_errors;         /* Bad packets received. */
+    uint64_t tx_errors;         /* Packet transmit problems. */
+    uint64_t rx_dropped;        /* No buffer space. */
+    uint64_t tx_dropped;        /* No buffer space. */
+    uint64_t multicast;         /* Multicast packets received. */
+    uint64_t collisions;
+
+    /* Detailed receive errors. */
+    uint64_t rx_length_errors;
+    uint64_t rx_over_errors;    /* Receiver ring buff overflow. */
+    uint64_t rx_crc_errors;     /* Recved pkt with crc error. */
+    uint64_t rx_frame_errors;   /* Recv'd frame alignment error. */
+    uint64_t rx_fifo_errors;    /* Recv'r fifo overrun . */
+    uint64_t rx_missed_errors;  /* Receiver missed packet. */
+
+    /* Detailed transmit errors. */
+    uint64_t tx_aborted_errors;
+    uint64_t tx_carrier_errors;
+    uint64_t tx_fifo_errors;
+    uint64_t tx_heartbeat_errors;
+    uint64_t tx_window_errors;
+};
+
+/* Features. */
+enum netdev_features {
+    NETDEV_F_10MB_HD =    1 << 0,  /* 10 Mb half-duplex rate support. */
+    NETDEV_F_10MB_FD =    1 << 1,  /* 10 Mb full-duplex rate support. */
+    NETDEV_F_100MB_HD =   1 << 2,  /* 100 Mb half-duplex rate support. */
+    NETDEV_F_100MB_FD =   1 << 3,  /* 100 Mb full-duplex rate support. */
+    NETDEV_F_1GB_HD =     1 << 4,  /* 1 Gb half-duplex rate support. */
+    NETDEV_F_1GB_FD =     1 << 5,  /* 1 Gb full-duplex rate support. */
+    NETDEV_F_10GB_FD =    1 << 6,  /* 10 Gb full-duplex rate support. */
+    NETDEV_F_40GB_FD =    1 << 7,  /* 40 Gb full-duplex rate support. */
+    NETDEV_F_100GB_FD =   1 << 8,  /* 100 Gb full-duplex rate support. */
+    NETDEV_F_1TB_FD =     1 << 9,  /* 1 Tb full-duplex rate support. */
+    NETDEV_F_OTHER =      1 << 10, /* Other rate, not in the list. */
+    NETDEV_F_COPPER =     1 << 11, /* Copper medium. */
+    NETDEV_F_FIBER =      1 << 12, /* Fiber medium. */
+    NETDEV_F_AUTONEG =    1 << 13, /* Auto-negotiation. */
+    NETDEV_F_PAUSE =      1 << 14, /* Pause. */
+    NETDEV_F_PAUSE_ASYM = 1 << 15, /* Asymmetric pause. */
+};
+
+int netdev_get_features(const struct netdev *,
+                        enum netdev_features *current,
+                        enum netdev_features *advertised,
+                        enum netdev_features *supported,
+                        enum netdev_features *peer);
+uint64_t netdev_features_to_bps(enum netdev_features features,
+                                uint64_t default_bps);
+bool netdev_features_is_full_duplex(enum netdev_features features);
+int netdev_set_advertisements(struct netdev *, enum netdev_features advertise);
+
+#endif /* netdev.h */
diff --git a/lib/netdev.h b/lib/netdev.h
index a81989e..63fb394 100644
--- a/lib/netdev.h
+++ b/lib/netdev.h
@@ -17,9 +17,7 @@
 #ifndef NETDEV_H
 #define NETDEV_H 1
 
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
+#include "openvswitch/netdev.h"
 #include "openvswitch/types.h"
 #include "packets.h"
 #include "flow.h"
@@ -62,7 +60,6 @@ extern "C" {
  */
 
 struct dp_packet;
-struct netdev;
 struct netdev_class;
 struct netdev_rxq;
 struct netdev_saved_flags;
@@ -73,37 +70,6 @@ struct smap;
 struct sset;
 struct ovs_action_push_tnl;
 
-/* Network device statistics.
- *
- * Values of unsupported statistics are set to all-1-bits (UINT64_MAX). */
-struct netdev_stats {
-    uint64_t rx_packets;        /* Total packets received. */
-    uint64_t tx_packets;        /* Total packets transmitted. */
-    uint64_t rx_bytes;          /* Total bytes received. */
-    uint64_t tx_bytes;          /* Total bytes transmitted. */
-    uint64_t rx_errors;         /* Bad packets received. */
-    uint64_t tx_errors;         /* Packet transmit problems. */
-    uint64_t rx_dropped;        /* No buffer space. */
-    uint64_t tx_dropped;        /* No buffer space. */
-    uint64_t multicast;         /* Multicast packets received. */
-    uint64_t collisions;
-
-    /* Detailed receive errors. */
-    uint64_t rx_length_errors;
-    uint64_t rx_over_errors;    /* Receiver ring buff overflow. */
-    uint64_t rx_crc_errors;     /* Recved pkt with crc error. */
-    uint64_t rx_frame_errors;   /* Recv'd frame alignment error. */
-    uint64_t rx_fifo_errors;    /* Recv'r fifo overrun . */
-    uint64_t rx_missed_errors;  /* Receiver missed packet. */
-
-    /* Detailed transmit errors. */
-    uint64_t tx_aborted_errors;
-    uint64_t tx_carrier_errors;
-    uint64_t tx_fifo_errors;
-    uint64_t tx_heartbeat_errors;
-    uint64_t tx_window_errors;
-};
-
 /* Configuration specific to tunnels. */
 struct netdev_tunnel_config {
     bool in_key_present;
@@ -204,36 +170,6 @@ bool netdev_get_carrier(const struct netdev *);
 long long int netdev_get_carrier_resets(const struct netdev *);
 int netdev_set_miimon_interval(struct netdev *, long long int interval);
 
-/* Features. */
-enum netdev_features {
-    NETDEV_F_10MB_HD =    1 << 0,  /* 10 Mb half-duplex rate support. */
-    NETDEV_F_10MB_FD =    1 << 1,  /* 10 Mb full-duplex rate support. */
-    NETDEV_F_100MB_HD =   1 << 2,  /* 100 Mb half-duplex rate support. */
-    NETDEV_F_100MB_FD =   1 << 3,  /* 100 Mb full-duplex rate support. */
-    NETDEV_F_1GB_HD =     1 << 4,  /* 1 Gb half-duplex rate support. */
-    NETDEV_F_1GB_FD =     1 << 5,  /* 1 Gb full-duplex rate support. */
-    NETDEV_F_10GB_FD =    1 << 6,  /* 10 Gb full-duplex rate support. */
-    NETDEV_F_40GB_FD =    1 << 7,  /* 40 Gb full-duplex rate support. */
-    NETDEV_F_100GB_FD =   1 << 8,  /* 100 Gb full-duplex rate support. */
-    NETDEV_F_1TB_FD =     1 << 9,  /* 1 Tb full-duplex rate support. */
-    NETDEV_F_OTHER =      1 << 10, /* Other rate, not in the list. */
-    NETDEV_F_COPPER =     1 << 11, /* Copper medium. */
-    NETDEV_F_FIBER =      1 << 12, /* Fiber medium. */
-    NETDEV_F_AUTONEG =    1 << 13, /* Auto-negotiation. */
-    NETDEV_F_PAUSE =      1 << 14, /* Pause. */
-    NETDEV_F_PAUSE_ASYM = 1 << 15, /* Asymmetric pause. */
-};
-
-int netdev_get_features(const struct netdev *,
-                        enum netdev_features *current,
-                        enum netdev_features *advertised,
-                        enum netdev_features *supported,
-                        enum netdev_features *peer);
-uint64_t netdev_features_to_bps(enum netdev_features features,
-                                uint64_t default_bps);
-bool netdev_features_is_full_duplex(enum netdev_features features);
-int netdev_set_advertisements(struct netdev *, enum netdev_features advertise);
-
 /* Flags. */
 enum netdev_flags {
     NETDEV_UP = 0x0001,         /* Device enabled? */
