aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h239
1 files changed, 165 insertions, 74 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 5a96a1a406e9..d4a4d9867794 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -39,9 +39,11 @@
39 39
40#include <linux/device.h> 40#include <linux/device.h>
41#include <linux/percpu.h> 41#include <linux/percpu.h>
42#include <linux/rculist.h>
42#include <linux/dmaengine.h> 43#include <linux/dmaengine.h>
43#include <linux/workqueue.h> 44#include <linux/workqueue.h>
44 45
46#include <linux/ethtool.h>
45#include <net/net_namespace.h> 47#include <net/net_namespace.h>
46#include <net/dsa.h> 48#include <net/dsa.h>
47#ifdef CONFIG_DCB 49#ifdef CONFIG_DCB
@@ -49,7 +51,6 @@
49#endif 51#endif
50 52
51struct vlan_group; 53struct vlan_group;
52struct ethtool_ops;
53struct netpoll_info; 54struct netpoll_info;
54/* 802.11 specific */ 55/* 802.11 specific */
55struct wireless_dev; 56struct wireless_dev;
@@ -210,6 +211,24 @@ struct dev_addr_list
210#define dmi_users da_users 211#define dmi_users da_users
211#define dmi_gusers da_gusers 212#define dmi_gusers da_gusers
212 213
214struct netdev_hw_addr {
215 struct list_head list;
216 unsigned char addr[MAX_ADDR_LEN];
217 unsigned char type;
218#define NETDEV_HW_ADDR_T_LAN 1
219#define NETDEV_HW_ADDR_T_SAN 2
220#define NETDEV_HW_ADDR_T_SLAVE 3
221#define NETDEV_HW_ADDR_T_UNICAST 4
222 int refcount;
223 bool synced;
224 struct rcu_head rcu_head;
225};
226
227struct netdev_hw_addr_list {
228 struct list_head list;
229 int count;
230};
231
213struct hh_cache 232struct hh_cache
214{ 233{
215 struct hh_cache *hh_next; /* Next entry */ 234 struct hh_cache *hh_next; /* Next entry */
@@ -447,12 +466,25 @@ enum netdev_queue_state_t
447}; 466};
448 467
449struct netdev_queue { 468struct netdev_queue {
469/*
470 * read mostly part
471 */
450 struct net_device *dev; 472 struct net_device *dev;
451 struct Qdisc *qdisc; 473 struct Qdisc *qdisc;
452 unsigned long state; 474 unsigned long state;
453 spinlock_t _xmit_lock;
454 int xmit_lock_owner;
455 struct Qdisc *qdisc_sleeping; 475 struct Qdisc *qdisc_sleeping;
476/*
477 * write mostly part
478 */
479 spinlock_t _xmit_lock ____cacheline_aligned_in_smp;
480 int xmit_lock_owner;
481 /*
482 * please use this field instead of dev->trans_start
483 */
484 unsigned long trans_start;
485 unsigned long tx_bytes;
486 unsigned long tx_packets;
487 unsigned long tx_dropped;
456} ____cacheline_aligned_in_smp; 488} ____cacheline_aligned_in_smp;
457 489
458 490
@@ -670,7 +702,9 @@ struct net_device
670#define NETIF_F_GRO 16384 /* Generic receive offload */ 702#define NETIF_F_GRO 16384 /* Generic receive offload */
671#define NETIF_F_LRO 32768 /* large receive offload */ 703#define NETIF_F_LRO 32768 /* large receive offload */
672 704
705/* the GSO_MASK reserves bits 16 through 23 */
673#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ 706#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */
707#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */
674 708
675 /* Segmentation offload features */ 709 /* Segmentation offload features */
676#define NETIF_F_GSO_SHIFT 16 710#define NETIF_F_GSO_SHIFT 16
@@ -747,10 +781,10 @@ struct net_device
747 unsigned char addr_len; /* hardware address length */ 781 unsigned char addr_len; /* hardware address length */
748 unsigned short dev_id; /* for shared network cards */ 782 unsigned short dev_id; /* for shared network cards */
749 783
750 spinlock_t addr_list_lock; 784 struct netdev_hw_addr_list uc; /* Secondary unicast
751 struct dev_addr_list *uc_list; /* Secondary unicast mac addresses */ 785 mac addresses */
752 int uc_count; /* Number of installed ucasts */
753 int uc_promisc; 786 int uc_promisc;
787 spinlock_t addr_list_lock;
754 struct dev_addr_list *mc_list; /* Multicast mac addresses */ 788 struct dev_addr_list *mc_list; /* Multicast mac addresses */
755 int mc_count; /* Number of installed mcasts */ 789 int mc_count; /* Number of installed mcasts */
756 unsigned int promiscuity; 790 unsigned int promiscuity;
@@ -776,8 +810,12 @@ struct net_device
776 */ 810 */
777 unsigned long last_rx; /* Time of last Rx */ 811 unsigned long last_rx; /* Time of last Rx */
778 /* Interface address info used in eth_type_trans() */ 812 /* Interface address info used in eth_type_trans() */
779 unsigned char dev_addr[MAX_ADDR_LEN]; /* hw address, (before bcast 813 unsigned char *dev_addr; /* hw address, (before bcast
780 because most packets are unicast) */ 814 because most packets are
815 unicast) */
816
817 struct netdev_hw_addr_list dev_addrs; /* list of device
818 hw addresses */
781 819
782 unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */ 820 unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
783 821
@@ -797,6 +835,11 @@ struct net_device
797 * One part is mostly used on xmit path (device) 835 * One part is mostly used on xmit path (device)
798 */ 836 */
799 /* These may be needed for future network-power-down code. */ 837 /* These may be needed for future network-power-down code. */
838
839 /*
840 * trans_start here is expensive for high speed devices on SMP,
841 * please use netdev_queue->trans_start instead.
842 */
800 unsigned long trans_start; /* Time (in jiffies) of last Tx */ 843 unsigned long trans_start; /* Time (in jiffies) of last Tx */
801 844
802 int watchdog_timeo; /* used by dev_watchdog() */ 845 int watchdog_timeo; /* used by dev_watchdog() */
@@ -867,49 +910,10 @@ struct net_device
867 /* max exchange id for FCoE LRO by ddp */ 910 /* max exchange id for FCoE LRO by ddp */
868 unsigned int fcoe_ddp_xid; 911 unsigned int fcoe_ddp_xid;
869#endif 912#endif
870
871#ifdef CONFIG_COMPAT_NET_DEV_OPS
872 struct {
873 int (*init)(struct net_device *dev);
874 void (*uninit)(struct net_device *dev);
875 int (*open)(struct net_device *dev);
876 int (*stop)(struct net_device *dev);
877 int (*hard_start_xmit) (struct sk_buff *skb,
878 struct net_device *dev);
879 u16 (*select_queue)(struct net_device *dev,
880 struct sk_buff *skb);
881 void (*change_rx_flags)(struct net_device *dev,
882 int flags);
883 void (*set_rx_mode)(struct net_device *dev);
884 void (*set_multicast_list)(struct net_device *dev);
885 int (*set_mac_address)(struct net_device *dev,
886 void *addr);
887 int (*validate_addr)(struct net_device *dev);
888 int (*do_ioctl)(struct net_device *dev,
889 struct ifreq *ifr, int cmd);
890 int (*set_config)(struct net_device *dev,
891 struct ifmap *map);
892 int (*change_mtu)(struct net_device *dev, int new_mtu);
893 int (*neigh_setup)(struct net_device *dev,
894 struct neigh_parms *);
895 void (*tx_timeout) (struct net_device *dev);
896 struct net_device_stats* (*get_stats)(struct net_device *dev);
897 void (*vlan_rx_register)(struct net_device *dev,
898 struct vlan_group *grp);
899 void (*vlan_rx_add_vid)(struct net_device *dev,
900 unsigned short vid);
901 void (*vlan_rx_kill_vid)(struct net_device *dev,
902 unsigned short vid);
903#ifdef CONFIG_NET_POLL_CONTROLLER
904 void (*poll_controller)(struct net_device *dev);
905#endif
906 };
907#endif
908}; 913};
909#define to_net_dev(d) container_of(d, struct net_device, dev) 914#define to_net_dev(d) container_of(d, struct net_device, dev)
910 915
911#define NETDEV_ALIGN 32 916#define NETDEV_ALIGN 32
912#define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1)
913 917
914static inline 918static inline
915struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev, 919struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev,
@@ -980,9 +984,7 @@ static inline bool netdev_uses_trailer_tags(struct net_device *dev)
980 */ 984 */
981static inline void *netdev_priv(const struct net_device *dev) 985static inline void *netdev_priv(const struct net_device *dev)
982{ 986{
983 return (char *)dev + ((sizeof(struct net_device) 987 return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN);
984 + NETDEV_ALIGN_CONST)
985 & ~NETDEV_ALIGN_CONST);
986} 988}
987 989
988/* Set the sysfs physical device reference for the network logical device 990/* Set the sysfs physical device reference for the network logical device
@@ -1012,6 +1014,12 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
1012void netif_napi_del(struct napi_struct *napi); 1014void netif_napi_del(struct napi_struct *napi);
1013 1015
1014struct napi_gro_cb { 1016struct napi_gro_cb {
1017 /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */
1018 void *frag0;
1019
1020 /* Length of frag0. */
1021 unsigned int frag0_len;
1022
1015 /* This indicates where we are processing relative to skb->data. */ 1023 /* This indicates where we are processing relative to skb->data. */
1016 int data_offset; 1024 int data_offset;
1017 1025
@@ -1047,14 +1055,6 @@ struct packet_type {
1047 struct list_head list; 1055 struct list_head list;
1048}; 1056};
1049 1057
1050struct napi_gro_fraginfo {
1051 skb_frag_t frags[MAX_SKB_FRAGS];
1052 unsigned int nr_frags;
1053 unsigned int ip_summed;
1054 unsigned int len;
1055 __wsum csum;
1056};
1057
1058#include <linux/interrupt.h> 1058#include <linux/interrupt.h>
1059#include <linux/notifier.h> 1059#include <linux/notifier.h>
1060 1060
@@ -1119,9 +1119,9 @@ extern int dev_restart(struct net_device *dev);
1119#ifdef CONFIG_NETPOLL_TRAP 1119#ifdef CONFIG_NETPOLL_TRAP
1120extern int netpoll_trap(void); 1120extern int netpoll_trap(void);
1121#endif 1121#endif
1122extern void *skb_gro_header(struct sk_buff *skb, unsigned int hlen);
1123extern int skb_gro_receive(struct sk_buff **head, 1122extern int skb_gro_receive(struct sk_buff **head,
1124 struct sk_buff *skb); 1123 struct sk_buff *skb);
1124extern void skb_gro_reset_offset(struct sk_buff *skb);
1125 1125
1126static inline unsigned int skb_gro_offset(const struct sk_buff *skb) 1126static inline unsigned int skb_gro_offset(const struct sk_buff *skb)
1127{ 1127{
@@ -1138,16 +1138,34 @@ static inline void skb_gro_pull(struct sk_buff *skb, unsigned int len)
1138 NAPI_GRO_CB(skb)->data_offset += len; 1138 NAPI_GRO_CB(skb)->data_offset += len;
1139} 1139}
1140 1140
1141static inline void skb_gro_reset_offset(struct sk_buff *skb) 1141static inline void *skb_gro_header_fast(struct sk_buff *skb,
1142 unsigned int offset)
1143{
1144 return NAPI_GRO_CB(skb)->frag0 + offset;
1145}
1146
1147static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen)
1148{
1149 return NAPI_GRO_CB(skb)->frag0_len < hlen;
1150}
1151
1152static inline void *skb_gro_header_slow(struct sk_buff *skb, unsigned int hlen,
1153 unsigned int offset)
1142{ 1154{
1143 NAPI_GRO_CB(skb)->data_offset = 0; 1155 NAPI_GRO_CB(skb)->frag0 = NULL;
1156 NAPI_GRO_CB(skb)->frag0_len = 0;
1157 return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL;
1144} 1158}
1145 1159
1146static inline void *skb_gro_mac_header(struct sk_buff *skb) 1160static inline void *skb_gro_mac_header(struct sk_buff *skb)
1147{ 1161{
1148 return skb_mac_header(skb) < skb->data ? skb_mac_header(skb) : 1162 return NAPI_GRO_CB(skb)->frag0 ?: skb_mac_header(skb);
1149 page_address(skb_shinfo(skb)->frags[0].page) + 1163}
1150 skb_shinfo(skb)->frags[0].page_offset; 1164
1165static inline void *skb_gro_network_header(struct sk_buff *skb)
1166{
1167 return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) +
1168 skb_network_offset(skb);
1151} 1169}
1152 1170
1153static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev, 1171static inline int dev_hard_header(struct sk_buff *skb, struct net_device *dev,
@@ -1442,12 +1460,18 @@ extern int napi_gro_receive(struct napi_struct *napi,
1442 struct sk_buff *skb); 1460 struct sk_buff *skb);
1443extern void napi_reuse_skb(struct napi_struct *napi, 1461extern void napi_reuse_skb(struct napi_struct *napi,
1444 struct sk_buff *skb); 1462 struct sk_buff *skb);
1445extern struct sk_buff * napi_fraginfo_skb(struct napi_struct *napi, 1463extern struct sk_buff * napi_get_frags(struct napi_struct *napi);
1446 struct napi_gro_fraginfo *info);
1447extern int napi_frags_finish(struct napi_struct *napi, 1464extern int napi_frags_finish(struct napi_struct *napi,
1448 struct sk_buff *skb, int ret); 1465 struct sk_buff *skb, int ret);
1449extern int napi_gro_frags(struct napi_struct *napi, 1466extern struct sk_buff * napi_frags_skb(struct napi_struct *napi);
1450 struct napi_gro_fraginfo *info); 1467extern int napi_gro_frags(struct napi_struct *napi);
1468
1469static inline void napi_free_frags(struct napi_struct *napi)
1470{
1471 kfree_skb(napi->skb);
1472 napi->skb = NULL;
1473}
1474
1451extern void netif_nit_deliver(struct sk_buff *skb); 1475extern void netif_nit_deliver(struct sk_buff *skb);
1452extern int dev_valid_name(const char *name); 1476extern int dev_valid_name(const char *name);
1453extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *); 1477extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *);
@@ -1514,6 +1538,8 @@ static inline int netif_carrier_ok(const struct net_device *dev)
1514 return !test_bit(__LINK_STATE_NOCARRIER, &dev->state); 1538 return !test_bit(__LINK_STATE_NOCARRIER, &dev->state);
1515} 1539}
1516 1540
1541extern unsigned long dev_trans_start(struct net_device *dev);
1542
1517extern void __netdev_watchdog_up(struct net_device *dev); 1543extern void __netdev_watchdog_up(struct net_device *dev);
1518 1544
1519extern void netif_carrier_on(struct net_device *dev); 1545extern void netif_carrier_on(struct net_device *dev);
@@ -1671,6 +1697,12 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq)
1671 spin_unlock_bh(&txq->_xmit_lock); 1697 spin_unlock_bh(&txq->_xmit_lock);
1672} 1698}
1673 1699
1700static inline void txq_trans_update(struct netdev_queue *txq)
1701{
1702 if (txq->xmit_lock_owner != -1)
1703 txq->trans_start = jiffies;
1704}
1705
1674/** 1706/**
1675 * netif_tx_lock - grab network device transmit lock 1707 * netif_tx_lock - grab network device transmit lock
1676 * @dev: network device 1708 * @dev: network device
@@ -1778,6 +1810,13 @@ static inline void netif_addr_unlock_bh(struct net_device *dev)
1778 spin_unlock_bh(&dev->addr_list_lock); 1810 spin_unlock_bh(&dev->addr_list_lock);
1779} 1811}
1780 1812
1813/*
1814 * dev_addrs walker. Should be used only for read access. Call with
1815 * rcu_read_lock held.
1816 */
1817#define for_each_dev_addr(dev, ha) \
1818 list_for_each_entry_rcu(ha, &dev->dev_addrs.list, list)
1819
1781/* These functions live elsewhere (drivers/net/net_init.c, but related) */ 1820/* These functions live elsewhere (drivers/net/net_init.c, but related) */
1782 1821
1783extern void ether_setup(struct net_device *dev); 1822extern void ether_setup(struct net_device *dev);
@@ -1790,11 +1829,24 @@ extern struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
1790 alloc_netdev_mq(sizeof_priv, name, setup, 1) 1829 alloc_netdev_mq(sizeof_priv, name, setup, 1)
1791extern int register_netdev(struct net_device *dev); 1830extern int register_netdev(struct net_device *dev);
1792extern void unregister_netdev(struct net_device *dev); 1831extern void unregister_netdev(struct net_device *dev);
1832
1833/* Functions used for device addresses handling */
1834extern int dev_addr_add(struct net_device *dev, unsigned char *addr,
1835 unsigned char addr_type);
1836extern int dev_addr_del(struct net_device *dev, unsigned char *addr,
1837 unsigned char addr_type);
1838extern int dev_addr_add_multiple(struct net_device *to_dev,
1839 struct net_device *from_dev,
1840 unsigned char addr_type);
1841extern int dev_addr_del_multiple(struct net_device *to_dev,
1842 struct net_device *from_dev,
1843 unsigned char addr_type);
1844
1793/* Functions used for secondary unicast and multicast support */ 1845/* Functions used for secondary unicast and multicast support */
1794extern void dev_set_rx_mode(struct net_device *dev); 1846extern void dev_set_rx_mode(struct net_device *dev);
1795extern void __dev_set_rx_mode(struct net_device *dev); 1847extern void __dev_set_rx_mode(struct net_device *dev);
1796extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); 1848extern int dev_unicast_delete(struct net_device *dev, void *addr);
1797extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); 1849extern int dev_unicast_add(struct net_device *dev, void *addr);
1798extern int dev_unicast_sync(struct net_device *to, struct net_device *from); 1850extern int dev_unicast_sync(struct net_device *to, struct net_device *from);
1799extern void dev_unicast_unsync(struct net_device *to, struct net_device *from); 1851extern void dev_unicast_unsync(struct net_device *to, struct net_device *from);
1800extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); 1852extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all);
@@ -1856,15 +1908,14 @@ static inline int net_gso_ok(int features, int gso_type)
1856 1908
1857static inline int skb_gso_ok(struct sk_buff *skb, int features) 1909static inline int skb_gso_ok(struct sk_buff *skb, int features)
1858{ 1910{
1859 return net_gso_ok(features, skb_shinfo(skb)->gso_type); 1911 return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
1912 (!skb_has_frags(skb) || (features & NETIF_F_FRAGLIST));
1860} 1913}
1861 1914
1862static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb) 1915static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
1863{ 1916{
1864 return skb_is_gso(skb) && 1917 return skb_is_gso(skb) &&
1865 (!skb_gso_ok(skb, dev->features) || 1918 (!skb_gso_ok(skb, dev->features) ||
1866 (skb_shinfo(skb)->frag_list &&
1867 !(dev->features & NETIF_F_FRAGLIST)) ||
1868 unlikely(skb->ip_summed != CHECKSUM_PARTIAL)); 1919 unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
1869} 1920}
1870 1921
@@ -1874,6 +1925,16 @@ static inline void netif_set_gso_max_size(struct net_device *dev,
1874 dev->gso_max_size = size; 1925 dev->gso_max_size = size;
1875} 1926}
1876 1927
1928static inline void skb_bond_set_mac_by_master(struct sk_buff *skb,
1929 struct net_device *master)
1930{
1931 if (skb->pkt_type == PACKET_HOST) {
1932 u16 *dest = (u16 *) eth_hdr(skb)->h_dest;
1933
1934 memcpy(dest, master->dev_addr, ETH_ALEN);
1935 }
1936}
1937
1877/* On bonding slaves other than the currently active slave, suppress 1938/* On bonding slaves other than the currently active slave, suppress
1878 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and 1939 * duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and
1879 * ARP on active-backup slaves with arp_validate enabled. 1940 * ARP on active-backup slaves with arp_validate enabled.
@@ -1887,6 +1948,14 @@ static inline int skb_bond_should_drop(struct sk_buff *skb)
1887 if (master->priv_flags & IFF_MASTER_ARPMON) 1948 if (master->priv_flags & IFF_MASTER_ARPMON)
1888 dev->last_rx = jiffies; 1949 dev->last_rx = jiffies;
1889 1950
1951 if ((master->priv_flags & IFF_MASTER_ALB) && master->br_port) {
1952 /* Do address unmangle. The local destination address
1953 * will be always the one master has. Provides the right
1954 * functionality in a bridge.
1955 */
1956 skb_bond_set_mac_by_master(skb, master);
1957 }
1958
1890 if (dev->priv_flags & IFF_SLAVE_INACTIVE) { 1959 if (dev->priv_flags & IFF_SLAVE_INACTIVE) {
1891 if ((dev->priv_flags & IFF_SLAVE_NEEDARP) && 1960 if ((dev->priv_flags & IFF_SLAVE_NEEDARP) &&
1892 skb->protocol == __cpu_to_be16(ETH_P_ARP)) 1961 skb->protocol == __cpu_to_be16(ETH_P_ARP))
@@ -1908,6 +1977,28 @@ static inline int skb_bond_should_drop(struct sk_buff *skb)
1908} 1977}
1909 1978
1910extern struct pernet_operations __net_initdata loopback_net_ops; 1979extern struct pernet_operations __net_initdata loopback_net_ops;
1980
1981static inline int dev_ethtool_get_settings(struct net_device *dev,
1982 struct ethtool_cmd *cmd)
1983{
1984 if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings)
1985 return -EOPNOTSUPP;
1986 return dev->ethtool_ops->get_settings(dev, cmd);
1987}
1988
1989static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev)
1990{
1991 if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum)
1992 return 0;
1993 return dev->ethtool_ops->get_rx_csum(dev);
1994}
1995
1996static inline u32 dev_ethtool_get_flags(struct net_device *dev)
1997{
1998 if (!dev->ethtool_ops || !dev->ethtool_ops->get_flags)
1999 return 0;
2000 return dev->ethtool_ops->get_flags(dev);
2001}
1911#endif /* __KERNEL__ */ 2002#endif /* __KERNEL__ */
1912 2003
1913#endif /* _LINUX_DEV_H */ 2004#endif /* _LINUX_NETDEVICE_H */