2 * net/core/ethtool.c - Ethtool ioctl handler
3 * Copyright (c) 2003 Matthew Wilcox <matthew@wil.cx>
5 * This file is where we call all the ethtool_ops commands to get
6 * the information ethtool needs.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
14 #include <linux/module.h>
15 #include <linux/types.h>
16 #include <linux/capability.h>
17 #include <linux/errno.h>
18 #include <linux/ethtool.h>
19 #include <linux/netdevice.h>
20 #include <linux/bitops.h>
21 #include <linux/uaccess.h>
22 #include <linux/vmalloc.h>
23 #include <linux/slab.h>
26 * Some useful ethtool_ops methods that're device independent.
27 * If we find that all drivers want to do the same thing here,
28 * we can turn these into dev_() function calls.
31 u32
ethtool_op_get_link(struct net_device
*dev
)
33 return netif_carrier_ok(dev
) ? 1 : 0;
35 EXPORT_SYMBOL(ethtool_op_get_link
);
37 u32
ethtool_op_get_tx_csum(struct net_device
*dev
)
39 return (dev
->features
& NETIF_F_ALL_CSUM
) != 0;
41 EXPORT_SYMBOL(ethtool_op_get_tx_csum
);
43 int ethtool_op_set_tx_csum(struct net_device
*dev
, u32 data
)
46 dev
->features
|= NETIF_F_IP_CSUM
;
48 dev
->features
&= ~NETIF_F_IP_CSUM
;
52 EXPORT_SYMBOL(ethtool_op_set_tx_csum
);
54 int ethtool_op_set_tx_hw_csum(struct net_device
*dev
, u32 data
)
57 dev
->features
|= NETIF_F_HW_CSUM
;
59 dev
->features
&= ~NETIF_F_HW_CSUM
;
63 EXPORT_SYMBOL(ethtool_op_set_tx_hw_csum
);
65 int ethtool_op_set_tx_ipv6_csum(struct net_device
*dev
, u32 data
)
68 dev
->features
|= NETIF_F_IP_CSUM
| NETIF_F_IPV6_CSUM
;
70 dev
->features
&= ~(NETIF_F_IP_CSUM
| NETIF_F_IPV6_CSUM
);
74 EXPORT_SYMBOL(ethtool_op_set_tx_ipv6_csum
);
76 u32
ethtool_op_get_sg(struct net_device
*dev
)
78 return (dev
->features
& NETIF_F_SG
) != 0;
80 EXPORT_SYMBOL(ethtool_op_get_sg
);
82 int ethtool_op_set_sg(struct net_device
*dev
, u32 data
)
85 dev
->features
|= NETIF_F_SG
;
87 dev
->features
&= ~NETIF_F_SG
;
91 EXPORT_SYMBOL(ethtool_op_set_sg
);
93 u32
ethtool_op_get_tso(struct net_device
*dev
)
95 return (dev
->features
& NETIF_F_TSO
) != 0;
97 EXPORT_SYMBOL(ethtool_op_get_tso
);
99 int ethtool_op_set_tso(struct net_device
*dev
, u32 data
)
102 dev
->features
|= NETIF_F_TSO
;
104 dev
->features
&= ~NETIF_F_TSO
;
108 EXPORT_SYMBOL(ethtool_op_set_tso
);
110 u32
ethtool_op_get_ufo(struct net_device
*dev
)
112 return (dev
->features
& NETIF_F_UFO
) != 0;
114 EXPORT_SYMBOL(ethtool_op_get_ufo
);
116 int ethtool_op_set_ufo(struct net_device
*dev
, u32 data
)
119 dev
->features
|= NETIF_F_UFO
;
121 dev
->features
&= ~NETIF_F_UFO
;
124 EXPORT_SYMBOL(ethtool_op_set_ufo
);
126 /* the following list of flags are the same as their associated
127 * NETIF_F_xxx values in include/linux/netdevice.h
129 static const u32 flags_dup_features
=
130 (ETH_FLAG_LRO
| ETH_FLAG_RXVLAN
| ETH_FLAG_TXVLAN
| ETH_FLAG_NTUPLE
|
133 u32
ethtool_op_get_flags(struct net_device
*dev
)
135 /* in the future, this function will probably contain additional
136 * handling for flags which are not so easily handled
137 * by a simple masking operation
140 return dev
->features
& flags_dup_features
;
142 EXPORT_SYMBOL(ethtool_op_get_flags
);
144 /* Check if device can enable (or disable) particular feature coded in "data"
145 * argument. Flags "supported" describe features that can be toggled by device.
146 * If feature can not be toggled, it state (enabled or disabled) must match
147 * hardcoded device features state, otherwise flags are marked as invalid.
149 bool ethtool_invalid_flags(struct net_device
*dev
, u32 data
, u32 supported
)
151 u32 features
= dev
->features
& flags_dup_features
;
152 /* "data" can contain only flags_dup_features bits,
153 * see __ethtool_set_flags */
155 return (features
& ~supported
) != (data
& ~supported
);
157 EXPORT_SYMBOL(ethtool_invalid_flags
);
159 int ethtool_op_set_flags(struct net_device
*dev
, u32 data
, u32 supported
)
161 if (ethtool_invalid_flags(dev
, data
, supported
))
164 dev
->features
= ((dev
->features
& ~flags_dup_features
) |
165 (data
& flags_dup_features
));
168 EXPORT_SYMBOL(ethtool_op_set_flags
);
170 void ethtool_ntuple_flush(struct net_device
*dev
)
172 struct ethtool_rx_ntuple_flow_spec_container
*fsc
, *f
;
174 list_for_each_entry_safe(fsc
, f
, &dev
->ethtool_ntuple_list
.list
, list
) {
175 list_del(&fsc
->list
);
178 dev
->ethtool_ntuple_list
.count
= 0;
180 EXPORT_SYMBOL(ethtool_ntuple_flush
);
182 /* Handlers for each ethtool command */
184 #define ETHTOOL_DEV_FEATURE_WORDS 1
186 static void ethtool_get_features_compat(struct net_device
*dev
,
187 struct ethtool_get_features_block
*features
)
189 if (!dev
->ethtool_ops
)
192 /* getting RX checksum */
193 if (dev
->ethtool_ops
->get_rx_csum
)
194 if (dev
->ethtool_ops
->get_rx_csum(dev
))
195 features
[0].active
|= NETIF_F_RXCSUM
;
197 /* mark legacy-changeable features */
198 if (dev
->ethtool_ops
->set_sg
)
199 features
[0].available
|= NETIF_F_SG
;
200 if (dev
->ethtool_ops
->set_tx_csum
)
201 features
[0].available
|= NETIF_F_ALL_CSUM
;
202 if (dev
->ethtool_ops
->set_tso
)
203 features
[0].available
|= NETIF_F_ALL_TSO
;
204 if (dev
->ethtool_ops
->set_rx_csum
)
205 features
[0].available
|= NETIF_F_RXCSUM
;
206 if (dev
->ethtool_ops
->set_flags
)
207 features
[0].available
|= flags_dup_features
;
210 static int ethtool_set_feature_compat(struct net_device
*dev
,
211 int (*legacy_set
)(struct net_device
*, u32
),
212 struct ethtool_set_features_block
*features
, u32 mask
)
219 if (!(features
[0].valid
& mask
))
222 features
[0].valid
&= ~mask
;
224 do_set
= !!(features
[0].requested
& mask
);
226 if (legacy_set(dev
, do_set
) < 0)
228 "Legacy feature change (%s) failed for 0x%08x\n",
229 do_set
? "set" : "clear", mask
);
234 static int ethtool_set_features_compat(struct net_device
*dev
,
235 struct ethtool_set_features_block
*features
)
239 if (!dev
->ethtool_ops
)
242 compat
= ethtool_set_feature_compat(dev
, dev
->ethtool_ops
->set_sg
,
243 features
, NETIF_F_SG
);
244 compat
|= ethtool_set_feature_compat(dev
, dev
->ethtool_ops
->set_tx_csum
,
245 features
, NETIF_F_ALL_CSUM
);
246 compat
|= ethtool_set_feature_compat(dev
, dev
->ethtool_ops
->set_tso
,
247 features
, NETIF_F_ALL_TSO
);
248 compat
|= ethtool_set_feature_compat(dev
, dev
->ethtool_ops
->set_rx_csum
,
249 features
, NETIF_F_RXCSUM
);
250 compat
|= ethtool_set_feature_compat(dev
, dev
->ethtool_ops
->set_flags
,
251 features
, flags_dup_features
);
256 static int ethtool_get_features(struct net_device
*dev
, void __user
*useraddr
)
258 struct ethtool_gfeatures cmd
= {
259 .cmd
= ETHTOOL_GFEATURES
,
260 .size
= ETHTOOL_DEV_FEATURE_WORDS
,
262 struct ethtool_get_features_block features
[ETHTOOL_DEV_FEATURE_WORDS
] = {
264 .available
= dev
->hw_features
,
265 .requested
= dev
->wanted_features
,
266 .active
= dev
->features
,
267 .never_changed
= NETIF_F_NEVER_CHANGE
,
270 u32 __user
*sizeaddr
;
273 ethtool_get_features_compat(dev
, features
);
275 sizeaddr
= useraddr
+ offsetof(struct ethtool_gfeatures
, size
);
276 if (get_user(copy_size
, sizeaddr
))
279 if (copy_size
> ETHTOOL_DEV_FEATURE_WORDS
)
280 copy_size
= ETHTOOL_DEV_FEATURE_WORDS
;
282 if (copy_to_user(useraddr
, &cmd
, sizeof(cmd
)))
284 useraddr
+= sizeof(cmd
);
285 if (copy_to_user(useraddr
, features
, copy_size
* sizeof(*features
)))
291 static int ethtool_set_features(struct net_device
*dev
, void __user
*useraddr
)
293 struct ethtool_sfeatures cmd
;
294 struct ethtool_set_features_block features
[ETHTOOL_DEV_FEATURE_WORDS
];
297 if (copy_from_user(&cmd
, useraddr
, sizeof(cmd
)))
299 useraddr
+= sizeof(cmd
);
301 if (cmd
.size
!= ETHTOOL_DEV_FEATURE_WORDS
)
304 if (copy_from_user(features
, useraddr
, sizeof(features
)))
307 if (features
[0].valid
& ~NETIF_F_ETHTOOL_BITS
)
310 if (ethtool_set_features_compat(dev
, features
))
311 ret
|= ETHTOOL_F_COMPAT
;
313 if (features
[0].valid
& ~dev
->hw_features
) {
314 features
[0].valid
&= dev
->hw_features
;
315 ret
|= ETHTOOL_F_UNSUPPORTED
;
318 dev
->wanted_features
&= ~features
[0].valid
;
319 dev
->wanted_features
|= features
[0].valid
& features
[0].requested
;
320 netdev_update_features(dev
);
322 if ((dev
->wanted_features
^ dev
->features
) & features
[0].valid
)
323 ret
|= ETHTOOL_F_WISH
;
328 static const char netdev_features_strings
[ETHTOOL_DEV_FEATURE_WORDS
* 32][ETH_GSTRING_LEN
] = {
329 /* NETIF_F_SG */ "tx-scatter-gather",
330 /* NETIF_F_IP_CSUM */ "tx-checksum-ipv4",
331 /* NETIF_F_NO_CSUM */ "tx-checksum-unneeded",
332 /* NETIF_F_HW_CSUM */ "tx-checksum-ip-generic",
333 /* NETIF_F_IPV6_CSUM */ "tx_checksum-ipv6",
334 /* NETIF_F_HIGHDMA */ "highdma",
335 /* NETIF_F_FRAGLIST */ "tx-scatter-gather-fraglist",
336 /* NETIF_F_HW_VLAN_TX */ "tx-vlan-hw-insert",
338 /* NETIF_F_HW_VLAN_RX */ "rx-vlan-hw-parse",
339 /* NETIF_F_HW_VLAN_FILTER */ "rx-vlan-filter",
340 /* NETIF_F_VLAN_CHALLENGED */ "vlan-challenged",
341 /* NETIF_F_GSO */ "tx-generic-segmentation",
342 /* NETIF_F_LLTX */ "tx-lockless",
343 /* NETIF_F_NETNS_LOCAL */ "netns-local",
344 /* NETIF_F_GRO */ "rx-gro",
345 /* NETIF_F_LRO */ "rx-lro",
347 /* NETIF_F_TSO */ "tx-tcp-segmentation",
348 /* NETIF_F_UFO */ "tx-udp-fragmentation",
349 /* NETIF_F_GSO_ROBUST */ "tx-gso-robust",
350 /* NETIF_F_TSO_ECN */ "tx-tcp-ecn-segmentation",
351 /* NETIF_F_TSO6 */ "tx-tcp6-segmentation",
352 /* NETIF_F_FSO */ "tx-fcoe-segmentation",
356 /* NETIF_F_FCOE_CRC */ "tx-checksum-fcoe-crc",
357 /* NETIF_F_SCTP_CSUM */ "tx-checksum-sctp",
358 /* NETIF_F_FCOE_MTU */ "fcoe-mtu",
359 /* NETIF_F_NTUPLE */ "rx-ntuple-filter",
360 /* NETIF_F_RXHASH */ "rx-hashing",
361 /* NETIF_F_RXCSUM */ "rx-checksum",
366 static int __ethtool_get_sset_count(struct net_device
*dev
, int sset
)
368 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
370 if (sset
== ETH_SS_FEATURES
)
371 return ARRAY_SIZE(netdev_features_strings
);
373 if (ops
&& ops
->get_sset_count
&& ops
->get_strings
)
374 return ops
->get_sset_count(dev
, sset
);
379 static void __ethtool_get_strings(struct net_device
*dev
,
380 u32 stringset
, u8
*data
)
382 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
384 if (stringset
== ETH_SS_FEATURES
)
385 memcpy(data
, netdev_features_strings
,
386 sizeof(netdev_features_strings
));
388 /* ops->get_strings is valid because checked earlier */
389 ops
->get_strings(dev
, stringset
, data
);
392 static u32
ethtool_get_feature_mask(u32 eth_cmd
)
394 /* feature masks of legacy discrete ethtool ops */
397 case ETHTOOL_GTXCSUM
:
398 case ETHTOOL_STXCSUM
:
399 return NETIF_F_ALL_CSUM
| NETIF_F_SCTP_CSUM
;
400 case ETHTOOL_GRXCSUM
:
401 case ETHTOOL_SRXCSUM
:
402 return NETIF_F_RXCSUM
;
408 return NETIF_F_ALL_TSO
;
423 static void *__ethtool_get_one_feature_actor(struct net_device
*dev
, u32 ethcmd
)
425 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
431 case ETHTOOL_GTXCSUM
:
432 return ops
->get_tx_csum
;
433 case ETHTOOL_GRXCSUM
:
434 return ops
->get_rx_csum
;
446 static u32
__ethtool_get_rx_csum_oldbug(struct net_device
*dev
)
448 return !!(dev
->features
& NETIF_F_ALL_CSUM
);
451 static int ethtool_get_one_feature(struct net_device
*dev
,
452 char __user
*useraddr
, u32 ethcmd
)
454 u32 mask
= ethtool_get_feature_mask(ethcmd
);
455 struct ethtool_value edata
= {
457 .data
= !!(dev
->features
& mask
),
460 /* compatibility with discrete get_ ops */
461 if (!(dev
->hw_features
& mask
)) {
462 u32 (*actor
)(struct net_device
*);
464 actor
= __ethtool_get_one_feature_actor(dev
, ethcmd
);
466 /* bug compatibility with old get_rx_csum */
467 if (ethcmd
== ETHTOOL_GRXCSUM
&& !actor
)
468 actor
= __ethtool_get_rx_csum_oldbug
;
471 edata
.data
= actor(dev
);
474 if (copy_to_user(useraddr
, &edata
, sizeof(edata
)))
479 static int __ethtool_set_tx_csum(struct net_device
*dev
, u32 data
);
480 static int __ethtool_set_rx_csum(struct net_device
*dev
, u32 data
);
481 static int __ethtool_set_sg(struct net_device
*dev
, u32 data
);
482 static int __ethtool_set_tso(struct net_device
*dev
, u32 data
);
483 static int __ethtool_set_ufo(struct net_device
*dev
, u32 data
);
485 static int ethtool_set_one_feature(struct net_device
*dev
,
486 void __user
*useraddr
, u32 ethcmd
)
488 struct ethtool_value edata
;
491 if (copy_from_user(&edata
, useraddr
, sizeof(edata
)))
494 mask
= ethtool_get_feature_mask(ethcmd
);
495 mask
&= dev
->hw_features
;
498 dev
->wanted_features
|= mask
;
500 dev
->wanted_features
&= ~mask
;
502 netdev_update_features(dev
);
506 /* Driver is not converted to ndo_fix_features or does not
507 * support changing this offload. In the latter case it won't
508 * have corresponding ethtool_ops field set.
510 * Following part is to be removed after all drivers advertise
511 * their changeable features in netdev->hw_features and stop
512 * using discrete offload setting ops.
516 case ETHTOOL_STXCSUM
:
517 return __ethtool_set_tx_csum(dev
, edata
.data
);
518 case ETHTOOL_SRXCSUM
:
519 return __ethtool_set_rx_csum(dev
, edata
.data
);
521 return __ethtool_set_sg(dev
, edata
.data
);
523 return __ethtool_set_tso(dev
, edata
.data
);
525 return __ethtool_set_ufo(dev
, edata
.data
);
531 int __ethtool_set_flags(struct net_device
*dev
, u32 data
)
535 if (data
& ~flags_dup_features
)
538 /* legacy set_flags() op */
539 if (dev
->ethtool_ops
->set_flags
) {
540 if (unlikely(dev
->hw_features
& flags_dup_features
))
542 "driver BUG: mixed hw_features and set_flags()\n");
543 return dev
->ethtool_ops
->set_flags(dev
, data
);
546 /* allow changing only bits set in hw_features */
547 changed
= (data
^ dev
->wanted_features
) & flags_dup_features
;
548 if (changed
& ~dev
->hw_features
)
549 return (changed
& dev
->hw_features
) ? -EINVAL
: -EOPNOTSUPP
;
551 dev
->wanted_features
=
552 (dev
->wanted_features
& ~changed
) | data
;
554 netdev_update_features(dev
);
559 static int ethtool_get_settings(struct net_device
*dev
, void __user
*useraddr
)
561 struct ethtool_cmd cmd
= { .cmd
= ETHTOOL_GSET
};
564 if (!dev
->ethtool_ops
->get_settings
)
567 err
= dev
->ethtool_ops
->get_settings(dev
, &cmd
);
571 if (copy_to_user(useraddr
, &cmd
, sizeof(cmd
)))
576 static int ethtool_set_settings(struct net_device
*dev
, void __user
*useraddr
)
578 struct ethtool_cmd cmd
;
580 if (!dev
->ethtool_ops
->set_settings
)
583 if (copy_from_user(&cmd
, useraddr
, sizeof(cmd
)))
586 return dev
->ethtool_ops
->set_settings(dev
, &cmd
);
589 static noinline_for_stack
int ethtool_get_drvinfo(struct net_device
*dev
,
590 void __user
*useraddr
)
592 struct ethtool_drvinfo info
;
593 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
595 memset(&info
, 0, sizeof(info
));
596 info
.cmd
= ETHTOOL_GDRVINFO
;
597 if (ops
&& ops
->get_drvinfo
) {
598 ops
->get_drvinfo(dev
, &info
);
599 } else if (dev
->dev
.parent
&& dev
->dev
.parent
->driver
) {
600 strlcpy(info
.bus_info
, dev_name(dev
->dev
.parent
),
601 sizeof(info
.bus_info
));
602 strlcpy(info
.driver
, dev
->dev
.parent
->driver
->name
,
603 sizeof(info
.driver
));
609 * this method of obtaining string set info is deprecated;
610 * Use ETHTOOL_GSSET_INFO instead.
612 if (ops
&& ops
->get_sset_count
) {
615 rc
= ops
->get_sset_count(dev
, ETH_SS_TEST
);
617 info
.testinfo_len
= rc
;
618 rc
= ops
->get_sset_count(dev
, ETH_SS_STATS
);
621 rc
= ops
->get_sset_count(dev
, ETH_SS_PRIV_FLAGS
);
623 info
.n_priv_flags
= rc
;
625 if (ops
&& ops
->get_regs_len
)
626 info
.regdump_len
= ops
->get_regs_len(dev
);
627 if (ops
&& ops
->get_eeprom_len
)
628 info
.eedump_len
= ops
->get_eeprom_len(dev
);
630 if (copy_to_user(useraddr
, &info
, sizeof(info
)))
635 static noinline_for_stack
int ethtool_get_sset_info(struct net_device
*dev
,
636 void __user
*useraddr
)
638 struct ethtool_sset_info info
;
640 int i
, idx
= 0, n_bits
= 0, ret
, rc
;
641 u32
*info_buf
= NULL
;
643 if (copy_from_user(&info
, useraddr
, sizeof(info
)))
646 /* store copy of mask, because we zero struct later on */
647 sset_mask
= info
.sset_mask
;
651 /* calculate size of return buffer */
652 n_bits
= hweight64(sset_mask
);
654 memset(&info
, 0, sizeof(info
));
655 info
.cmd
= ETHTOOL_GSSET_INFO
;
657 info_buf
= kzalloc(n_bits
* sizeof(u32
), GFP_USER
);
662 * fill return buffer based on input bitmask and successful
663 * get_sset_count return
665 for (i
= 0; i
< 64; i
++) {
666 if (!(sset_mask
& (1ULL << i
)))
669 rc
= __ethtool_get_sset_count(dev
, i
);
671 info
.sset_mask
|= (1ULL << i
);
672 info_buf
[idx
++] = rc
;
677 if (copy_to_user(useraddr
, &info
, sizeof(info
)))
680 useraddr
+= offsetof(struct ethtool_sset_info
, data
);
681 if (copy_to_user(useraddr
, info_buf
, idx
* sizeof(u32
)))
691 static noinline_for_stack
int ethtool_set_rxnfc(struct net_device
*dev
,
692 u32 cmd
, void __user
*useraddr
)
694 struct ethtool_rxnfc info
;
695 size_t info_size
= sizeof(info
);
697 if (!dev
->ethtool_ops
->set_rxnfc
)
700 /* struct ethtool_rxnfc was originally defined for
701 * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
702 * members. User-space might still be using that
704 if (cmd
== ETHTOOL_SRXFH
)
705 info_size
= (offsetof(struct ethtool_rxnfc
, data
) +
708 if (copy_from_user(&info
, useraddr
, info_size
))
711 return dev
->ethtool_ops
->set_rxnfc(dev
, &info
);
714 static noinline_for_stack
int ethtool_get_rxnfc(struct net_device
*dev
,
715 u32 cmd
, void __user
*useraddr
)
717 struct ethtool_rxnfc info
;
718 size_t info_size
= sizeof(info
);
719 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
721 void *rule_buf
= NULL
;
726 /* struct ethtool_rxnfc was originally defined for
727 * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
728 * members. User-space might still be using that
730 if (cmd
== ETHTOOL_GRXFH
)
731 info_size
= (offsetof(struct ethtool_rxnfc
, data
) +
734 if (copy_from_user(&info
, useraddr
, info_size
))
737 if (info
.cmd
== ETHTOOL_GRXCLSRLALL
) {
738 if (info
.rule_cnt
> 0) {
739 if (info
.rule_cnt
<= KMALLOC_MAX_SIZE
/ sizeof(u32
))
740 rule_buf
= kzalloc(info
.rule_cnt
* sizeof(u32
),
747 ret
= ops
->get_rxnfc(dev
, &info
, rule_buf
);
752 if (copy_to_user(useraddr
, &info
, info_size
))
756 useraddr
+= offsetof(struct ethtool_rxnfc
, rule_locs
);
757 if (copy_to_user(useraddr
, rule_buf
,
758 info
.rule_cnt
* sizeof(u32
)))
769 static noinline_for_stack
int ethtool_get_rxfh_indir(struct net_device
*dev
,
770 void __user
*useraddr
)
772 struct ethtool_rxfh_indir
*indir
;
777 if (!dev
->ethtool_ops
->get_rxfh_indir
)
780 if (copy_from_user(&table_size
,
781 useraddr
+ offsetof(struct ethtool_rxfh_indir
, size
),
786 (KMALLOC_MAX_SIZE
- sizeof(*indir
)) / sizeof(*indir
->ring_index
))
788 full_size
= sizeof(*indir
) + sizeof(*indir
->ring_index
) * table_size
;
789 indir
= kzalloc(full_size
, GFP_USER
);
793 indir
->cmd
= ETHTOOL_GRXFHINDIR
;
794 indir
->size
= table_size
;
795 ret
= dev
->ethtool_ops
->get_rxfh_indir(dev
, indir
);
799 if (copy_to_user(useraddr
, indir
, full_size
))
807 static noinline_for_stack
int ethtool_set_rxfh_indir(struct net_device
*dev
,
808 void __user
*useraddr
)
810 struct ethtool_rxfh_indir
*indir
;
815 if (!dev
->ethtool_ops
->set_rxfh_indir
)
818 if (copy_from_user(&table_size
,
819 useraddr
+ offsetof(struct ethtool_rxfh_indir
, size
),
824 (KMALLOC_MAX_SIZE
- sizeof(*indir
)) / sizeof(*indir
->ring_index
))
826 full_size
= sizeof(*indir
) + sizeof(*indir
->ring_index
) * table_size
;
827 indir
= kmalloc(full_size
, GFP_USER
);
831 if (copy_from_user(indir
, useraddr
, full_size
)) {
836 ret
= dev
->ethtool_ops
->set_rxfh_indir(dev
, indir
);
843 static void __rx_ntuple_filter_add(struct ethtool_rx_ntuple_list
*list
,
844 struct ethtool_rx_ntuple_flow_spec
*spec
,
845 struct ethtool_rx_ntuple_flow_spec_container
*fsc
)
848 /* don't add filters forever */
849 if (list
->count
>= ETHTOOL_MAX_NTUPLE_LIST_ENTRY
) {
850 /* free the container */
855 /* Copy the whole filter over */
856 fsc
->fs
.flow_type
= spec
->flow_type
;
857 memcpy(&fsc
->fs
.h_u
, &spec
->h_u
, sizeof(spec
->h_u
));
858 memcpy(&fsc
->fs
.m_u
, &spec
->m_u
, sizeof(spec
->m_u
));
860 fsc
->fs
.vlan_tag
= spec
->vlan_tag
;
861 fsc
->fs
.vlan_tag_mask
= spec
->vlan_tag_mask
;
862 fsc
->fs
.data
= spec
->data
;
863 fsc
->fs
.data_mask
= spec
->data_mask
;
864 fsc
->fs
.action
= spec
->action
;
866 /* add to the list */
867 list_add_tail_rcu(&fsc
->list
, &list
->list
);
872 * ethtool does not (or did not) set masks for flow parameters that are
873 * not specified, so if both value and mask are 0 then this must be
874 * treated as equivalent to a mask with all bits set. Implement that
875 * here rather than in drivers.
877 static void rx_ntuple_fix_masks(struct ethtool_rx_ntuple_flow_spec
*fs
)
879 struct ethtool_tcpip4_spec
*entry
= &fs
->h_u
.tcp_ip4_spec
;
880 struct ethtool_tcpip4_spec
*mask
= &fs
->m_u
.tcp_ip4_spec
;
882 if (fs
->flow_type
!= TCP_V4_FLOW
&&
883 fs
->flow_type
!= UDP_V4_FLOW
&&
884 fs
->flow_type
!= SCTP_V4_FLOW
)
887 if (!(entry
->ip4src
| mask
->ip4src
))
888 mask
->ip4src
= htonl(0xffffffff);
889 if (!(entry
->ip4dst
| mask
->ip4dst
))
890 mask
->ip4dst
= htonl(0xffffffff);
891 if (!(entry
->psrc
| mask
->psrc
))
892 mask
->psrc
= htons(0xffff);
893 if (!(entry
->pdst
| mask
->pdst
))
894 mask
->pdst
= htons(0xffff);
895 if (!(entry
->tos
| mask
->tos
))
897 if (!(fs
->vlan_tag
| fs
->vlan_tag_mask
))
898 fs
->vlan_tag_mask
= 0xffff;
899 if (!(fs
->data
| fs
->data_mask
))
900 fs
->data_mask
= 0xffffffffffffffffULL
;
903 static noinline_for_stack
int ethtool_set_rx_ntuple(struct net_device
*dev
,
904 void __user
*useraddr
)
906 struct ethtool_rx_ntuple cmd
;
907 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
908 struct ethtool_rx_ntuple_flow_spec_container
*fsc
= NULL
;
911 if (!(dev
->features
& NETIF_F_NTUPLE
))
914 if (copy_from_user(&cmd
, useraddr
, sizeof(cmd
)))
917 rx_ntuple_fix_masks(&cmd
.fs
);
920 * Cache filter in dev struct for GET operation only if
921 * the underlying driver doesn't have its own GET operation, and
922 * only if the filter was added successfully. First make sure we
923 * can allocate the filter, then continue if successful.
925 if (!ops
->get_rx_ntuple
) {
926 fsc
= kmalloc(sizeof(*fsc
), GFP_ATOMIC
);
931 ret
= ops
->set_rx_ntuple(dev
, &cmd
);
937 if (!ops
->get_rx_ntuple
)
938 __rx_ntuple_filter_add(&dev
->ethtool_ntuple_list
, &cmd
.fs
, fsc
);
943 static int ethtool_get_rx_ntuple(struct net_device
*dev
, void __user
*useraddr
)
945 struct ethtool_gstrings gstrings
;
946 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
947 struct ethtool_rx_ntuple_flow_spec_container
*fsc
;
950 int ret
, i
, num_strings
= 0;
952 if (!ops
->get_sset_count
)
955 if (copy_from_user(&gstrings
, useraddr
, sizeof(gstrings
)))
958 ret
= ops
->get_sset_count(dev
, gstrings
.string_set
);
964 data
= kzalloc(gstrings
.len
* ETH_GSTRING_LEN
, GFP_USER
);
968 if (ops
->get_rx_ntuple
) {
969 /* driver-specific filter grab */
970 ret
= ops
->get_rx_ntuple(dev
, gstrings
.string_set
, data
);
974 /* default ethtool filter grab */
977 list_for_each_entry(fsc
, &dev
->ethtool_ntuple_list
.list
, list
) {
978 sprintf(p
, "Filter %d:\n", i
);
979 p
+= ETH_GSTRING_LEN
;
982 switch (fsc
->fs
.flow_type
) {
984 sprintf(p
, "\tFlow Type: TCP\n");
985 p
+= ETH_GSTRING_LEN
;
989 sprintf(p
, "\tFlow Type: UDP\n");
990 p
+= ETH_GSTRING_LEN
;
994 sprintf(p
, "\tFlow Type: SCTP\n");
995 p
+= ETH_GSTRING_LEN
;
999 sprintf(p
, "\tFlow Type: AH ESP\n");
1000 p
+= ETH_GSTRING_LEN
;
1004 sprintf(p
, "\tFlow Type: ESP\n");
1005 p
+= ETH_GSTRING_LEN
;
1009 sprintf(p
, "\tFlow Type: Raw IP\n");
1010 p
+= ETH_GSTRING_LEN
;
1014 sprintf(p
, "\tFlow Type: IPv4\n");
1015 p
+= ETH_GSTRING_LEN
;
1019 sprintf(p
, "\tFlow Type: Unknown\n");
1020 p
+= ETH_GSTRING_LEN
;
1022 goto unknown_filter
;
1025 /* now the rest of the filters */
1026 switch (fsc
->fs
.flow_type
) {
1030 sprintf(p
, "\tSrc IP addr: 0x%x\n",
1031 fsc
->fs
.h_u
.tcp_ip4_spec
.ip4src
);
1032 p
+= ETH_GSTRING_LEN
;
1034 sprintf(p
, "\tSrc IP mask: 0x%x\n",
1035 fsc
->fs
.m_u
.tcp_ip4_spec
.ip4src
);
1036 p
+= ETH_GSTRING_LEN
;
1038 sprintf(p
, "\tDest IP addr: 0x%x\n",
1039 fsc
->fs
.h_u
.tcp_ip4_spec
.ip4dst
);
1040 p
+= ETH_GSTRING_LEN
;
1042 sprintf(p
, "\tDest IP mask: 0x%x\n",
1043 fsc
->fs
.m_u
.tcp_ip4_spec
.ip4dst
);
1044 p
+= ETH_GSTRING_LEN
;
1046 sprintf(p
, "\tSrc Port: %d, mask: 0x%x\n",
1047 fsc
->fs
.h_u
.tcp_ip4_spec
.psrc
,
1048 fsc
->fs
.m_u
.tcp_ip4_spec
.psrc
);
1049 p
+= ETH_GSTRING_LEN
;
1051 sprintf(p
, "\tDest Port: %d, mask: 0x%x\n",
1052 fsc
->fs
.h_u
.tcp_ip4_spec
.pdst
,
1053 fsc
->fs
.m_u
.tcp_ip4_spec
.pdst
);
1054 p
+= ETH_GSTRING_LEN
;
1056 sprintf(p
, "\tTOS: %d, mask: 0x%x\n",
1057 fsc
->fs
.h_u
.tcp_ip4_spec
.tos
,
1058 fsc
->fs
.m_u
.tcp_ip4_spec
.tos
);
1059 p
+= ETH_GSTRING_LEN
;
1062 case AH_ESP_V4_FLOW
:
1064 sprintf(p
, "\tSrc IP addr: 0x%x\n",
1065 fsc
->fs
.h_u
.ah_ip4_spec
.ip4src
);
1066 p
+= ETH_GSTRING_LEN
;
1068 sprintf(p
, "\tSrc IP mask: 0x%x\n",
1069 fsc
->fs
.m_u
.ah_ip4_spec
.ip4src
);
1070 p
+= ETH_GSTRING_LEN
;
1072 sprintf(p
, "\tDest IP addr: 0x%x\n",
1073 fsc
->fs
.h_u
.ah_ip4_spec
.ip4dst
);
1074 p
+= ETH_GSTRING_LEN
;
1076 sprintf(p
, "\tDest IP mask: 0x%x\n",
1077 fsc
->fs
.m_u
.ah_ip4_spec
.ip4dst
);
1078 p
+= ETH_GSTRING_LEN
;
1080 sprintf(p
, "\tSPI: %d, mask: 0x%x\n",
1081 fsc
->fs
.h_u
.ah_ip4_spec
.spi
,
1082 fsc
->fs
.m_u
.ah_ip4_spec
.spi
);
1083 p
+= ETH_GSTRING_LEN
;
1085 sprintf(p
, "\tTOS: %d, mask: 0x%x\n",
1086 fsc
->fs
.h_u
.ah_ip4_spec
.tos
,
1087 fsc
->fs
.m_u
.ah_ip4_spec
.tos
);
1088 p
+= ETH_GSTRING_LEN
;
1092 sprintf(p
, "\tSrc IP addr: 0x%x\n",
1093 fsc
->fs
.h_u
.usr_ip4_spec
.ip4src
);
1094 p
+= ETH_GSTRING_LEN
;
1096 sprintf(p
, "\tSrc IP mask: 0x%x\n",
1097 fsc
->fs
.m_u
.usr_ip4_spec
.ip4src
);
1098 p
+= ETH_GSTRING_LEN
;
1100 sprintf(p
, "\tDest IP addr: 0x%x\n",
1101 fsc
->fs
.h_u
.usr_ip4_spec
.ip4dst
);
1102 p
+= ETH_GSTRING_LEN
;
1104 sprintf(p
, "\tDest IP mask: 0x%x\n",
1105 fsc
->fs
.m_u
.usr_ip4_spec
.ip4dst
);
1106 p
+= ETH_GSTRING_LEN
;
1110 sprintf(p
, "\tSrc IP addr: 0x%x\n",
1111 fsc
->fs
.h_u
.usr_ip4_spec
.ip4src
);
1112 p
+= ETH_GSTRING_LEN
;
1114 sprintf(p
, "\tSrc IP mask: 0x%x\n",
1115 fsc
->fs
.m_u
.usr_ip4_spec
.ip4src
);
1116 p
+= ETH_GSTRING_LEN
;
1118 sprintf(p
, "\tDest IP addr: 0x%x\n",
1119 fsc
->fs
.h_u
.usr_ip4_spec
.ip4dst
);
1120 p
+= ETH_GSTRING_LEN
;
1122 sprintf(p
, "\tDest IP mask: 0x%x\n",
1123 fsc
->fs
.m_u
.usr_ip4_spec
.ip4dst
);
1124 p
+= ETH_GSTRING_LEN
;
1126 sprintf(p
, "\tL4 bytes: 0x%x, mask: 0x%x\n",
1127 fsc
->fs
.h_u
.usr_ip4_spec
.l4_4_bytes
,
1128 fsc
->fs
.m_u
.usr_ip4_spec
.l4_4_bytes
);
1129 p
+= ETH_GSTRING_LEN
;
1131 sprintf(p
, "\tTOS: %d, mask: 0x%x\n",
1132 fsc
->fs
.h_u
.usr_ip4_spec
.tos
,
1133 fsc
->fs
.m_u
.usr_ip4_spec
.tos
);
1134 p
+= ETH_GSTRING_LEN
;
1136 sprintf(p
, "\tIP Version: %d, mask: 0x%x\n",
1137 fsc
->fs
.h_u
.usr_ip4_spec
.ip_ver
,
1138 fsc
->fs
.m_u
.usr_ip4_spec
.ip_ver
);
1139 p
+= ETH_GSTRING_LEN
;
1141 sprintf(p
, "\tProtocol: %d, mask: 0x%x\n",
1142 fsc
->fs
.h_u
.usr_ip4_spec
.proto
,
1143 fsc
->fs
.m_u
.usr_ip4_spec
.proto
);
1144 p
+= ETH_GSTRING_LEN
;
1148 sprintf(p
, "\tVLAN: %d, mask: 0x%x\n",
1149 fsc
->fs
.vlan_tag
, fsc
->fs
.vlan_tag_mask
);
1150 p
+= ETH_GSTRING_LEN
;
1152 sprintf(p
, "\tUser-defined: 0x%Lx\n", fsc
->fs
.data
);
1153 p
+= ETH_GSTRING_LEN
;
1155 sprintf(p
, "\tUser-defined mask: 0x%Lx\n", fsc
->fs
.data_mask
);
1156 p
+= ETH_GSTRING_LEN
;
1158 if (fsc
->fs
.action
== ETHTOOL_RXNTUPLE_ACTION_DROP
)
1159 sprintf(p
, "\tAction: Drop\n");
1161 sprintf(p
, "\tAction: Direct to queue %d\n",
1163 p
+= ETH_GSTRING_LEN
;
1169 /* indicate to userspace how many strings we actually have */
1170 gstrings
.len
= num_strings
;
1172 if (copy_to_user(useraddr
, &gstrings
, sizeof(gstrings
)))
1174 useraddr
+= sizeof(gstrings
);
1175 if (copy_to_user(useraddr
, data
, gstrings
.len
* ETH_GSTRING_LEN
))
1184 static int ethtool_get_regs(struct net_device
*dev
, char __user
*useraddr
)
1186 struct ethtool_regs regs
;
1187 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
1191 if (!ops
->get_regs
|| !ops
->get_regs_len
)
1194 if (copy_from_user(®s
, useraddr
, sizeof(regs
)))
1197 reglen
= ops
->get_regs_len(dev
);
1198 if (regs
.len
> reglen
)
1201 regbuf
= vzalloc(reglen
);
1205 ops
->get_regs(dev
, ®s
, regbuf
);
1208 if (copy_to_user(useraddr
, ®s
, sizeof(regs
)))
1210 useraddr
+= offsetof(struct ethtool_regs
, data
);
1211 if (copy_to_user(useraddr
, regbuf
, regs
.len
))
1220 static int ethtool_reset(struct net_device
*dev
, char __user
*useraddr
)
1222 struct ethtool_value reset
;
1225 if (!dev
->ethtool_ops
->reset
)
1228 if (copy_from_user(&reset
, useraddr
, sizeof(reset
)))
1231 ret
= dev
->ethtool_ops
->reset(dev
, &reset
.data
);
1235 if (copy_to_user(useraddr
, &reset
, sizeof(reset
)))
1240 static int ethtool_get_wol(struct net_device
*dev
, char __user
*useraddr
)
1242 struct ethtool_wolinfo wol
= { .cmd
= ETHTOOL_GWOL
};
1244 if (!dev
->ethtool_ops
->get_wol
)
1247 dev
->ethtool_ops
->get_wol(dev
, &wol
);
1249 if (copy_to_user(useraddr
, &wol
, sizeof(wol
)))
1254 static int ethtool_set_wol(struct net_device
*dev
, char __user
*useraddr
)
1256 struct ethtool_wolinfo wol
;
1258 if (!dev
->ethtool_ops
->set_wol
)
1261 if (copy_from_user(&wol
, useraddr
, sizeof(wol
)))
1264 return dev
->ethtool_ops
->set_wol(dev
, &wol
);
1267 static int ethtool_nway_reset(struct net_device
*dev
)
1269 if (!dev
->ethtool_ops
->nway_reset
)
1272 return dev
->ethtool_ops
->nway_reset(dev
);
1275 static int ethtool_get_link(struct net_device
*dev
, char __user
*useraddr
)
1277 struct ethtool_value edata
= { .cmd
= ETHTOOL_GLINK
};
1279 if (!dev
->ethtool_ops
->get_link
)
1282 edata
.data
= netif_running(dev
) && dev
->ethtool_ops
->get_link(dev
);
1284 if (copy_to_user(useraddr
, &edata
, sizeof(edata
)))
1289 static int ethtool_get_eeprom(struct net_device
*dev
, void __user
*useraddr
)
1291 struct ethtool_eeprom eeprom
;
1292 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
1293 void __user
*userbuf
= useraddr
+ sizeof(eeprom
);
1294 u32 bytes_remaining
;
1298 if (!ops
->get_eeprom
|| !ops
->get_eeprom_len
)
1301 if (copy_from_user(&eeprom
, useraddr
, sizeof(eeprom
)))
1304 /* Check for wrap and zero */
1305 if (eeprom
.offset
+ eeprom
.len
<= eeprom
.offset
)
1308 /* Check for exceeding total eeprom len */
1309 if (eeprom
.offset
+ eeprom
.len
> ops
->get_eeprom_len(dev
))
1312 data
= kmalloc(PAGE_SIZE
, GFP_USER
);
1316 bytes_remaining
= eeprom
.len
;
1317 while (bytes_remaining
> 0) {
1318 eeprom
.len
= min(bytes_remaining
, (u32
)PAGE_SIZE
);
1320 ret
= ops
->get_eeprom(dev
, &eeprom
, data
);
1323 if (copy_to_user(userbuf
, data
, eeprom
.len
)) {
1327 userbuf
+= eeprom
.len
;
1328 eeprom
.offset
+= eeprom
.len
;
1329 bytes_remaining
-= eeprom
.len
;
1332 eeprom
.len
= userbuf
- (useraddr
+ sizeof(eeprom
));
1333 eeprom
.offset
-= eeprom
.len
;
1334 if (copy_to_user(useraddr
, &eeprom
, sizeof(eeprom
)))
1341 static int ethtool_set_eeprom(struct net_device
*dev
, void __user
*useraddr
)
1343 struct ethtool_eeprom eeprom
;
1344 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
1345 void __user
*userbuf
= useraddr
+ sizeof(eeprom
);
1346 u32 bytes_remaining
;
1350 if (!ops
->set_eeprom
|| !ops
->get_eeprom_len
)
1353 if (copy_from_user(&eeprom
, useraddr
, sizeof(eeprom
)))
1356 /* Check for wrap and zero */
1357 if (eeprom
.offset
+ eeprom
.len
<= eeprom
.offset
)
1360 /* Check for exceeding total eeprom len */
1361 if (eeprom
.offset
+ eeprom
.len
> ops
->get_eeprom_len(dev
))
1364 data
= kmalloc(PAGE_SIZE
, GFP_USER
);
1368 bytes_remaining
= eeprom
.len
;
1369 while (bytes_remaining
> 0) {
1370 eeprom
.len
= min(bytes_remaining
, (u32
)PAGE_SIZE
);
1372 if (copy_from_user(data
, userbuf
, eeprom
.len
)) {
1376 ret
= ops
->set_eeprom(dev
, &eeprom
, data
);
1379 userbuf
+= eeprom
.len
;
1380 eeprom
.offset
+= eeprom
.len
;
1381 bytes_remaining
-= eeprom
.len
;
1388 static noinline_for_stack
int ethtool_get_coalesce(struct net_device
*dev
,
1389 void __user
*useraddr
)
1391 struct ethtool_coalesce coalesce
= { .cmd
= ETHTOOL_GCOALESCE
};
1393 if (!dev
->ethtool_ops
->get_coalesce
)
1396 dev
->ethtool_ops
->get_coalesce(dev
, &coalesce
);
1398 if (copy_to_user(useraddr
, &coalesce
, sizeof(coalesce
)))
1403 static noinline_for_stack
int ethtool_set_coalesce(struct net_device
*dev
,
1404 void __user
*useraddr
)
1406 struct ethtool_coalesce coalesce
;
1408 if (!dev
->ethtool_ops
->set_coalesce
)
1411 if (copy_from_user(&coalesce
, useraddr
, sizeof(coalesce
)))
1414 return dev
->ethtool_ops
->set_coalesce(dev
, &coalesce
);
1417 static int ethtool_get_ringparam(struct net_device
*dev
, void __user
*useraddr
)
1419 struct ethtool_ringparam ringparam
= { .cmd
= ETHTOOL_GRINGPARAM
};
1421 if (!dev
->ethtool_ops
->get_ringparam
)
1424 dev
->ethtool_ops
->get_ringparam(dev
, &ringparam
);
1426 if (copy_to_user(useraddr
, &ringparam
, sizeof(ringparam
)))
1431 static int ethtool_set_ringparam(struct net_device
*dev
, void __user
*useraddr
)
1433 struct ethtool_ringparam ringparam
;
1435 if (!dev
->ethtool_ops
->set_ringparam
)
1438 if (copy_from_user(&ringparam
, useraddr
, sizeof(ringparam
)))
1441 return dev
->ethtool_ops
->set_ringparam(dev
, &ringparam
);
1444 static int ethtool_get_pauseparam(struct net_device
*dev
, void __user
*useraddr
)
1446 struct ethtool_pauseparam pauseparam
= { ETHTOOL_GPAUSEPARAM
};
1448 if (!dev
->ethtool_ops
->get_pauseparam
)
1451 dev
->ethtool_ops
->get_pauseparam(dev
, &pauseparam
);
1453 if (copy_to_user(useraddr
, &pauseparam
, sizeof(pauseparam
)))
1458 static int ethtool_set_pauseparam(struct net_device
*dev
, void __user
*useraddr
)
1460 struct ethtool_pauseparam pauseparam
;
1462 if (!dev
->ethtool_ops
->set_pauseparam
)
1465 if (copy_from_user(&pauseparam
, useraddr
, sizeof(pauseparam
)))
1468 return dev
->ethtool_ops
->set_pauseparam(dev
, &pauseparam
);
1471 static int __ethtool_set_sg(struct net_device
*dev
, u32 data
)
1475 if (!dev
->ethtool_ops
->set_sg
)
1478 if (data
&& !(dev
->features
& NETIF_F_ALL_CSUM
))
1481 if (!data
&& dev
->ethtool_ops
->set_tso
) {
1482 err
= dev
->ethtool_ops
->set_tso(dev
, 0);
1487 if (!data
&& dev
->ethtool_ops
->set_ufo
) {
1488 err
= dev
->ethtool_ops
->set_ufo(dev
, 0);
1492 return dev
->ethtool_ops
->set_sg(dev
, data
);
1495 static int __ethtool_set_tx_csum(struct net_device
*dev
, u32 data
)
1499 if (!dev
->ethtool_ops
->set_tx_csum
)
1502 if (!data
&& dev
->ethtool_ops
->set_sg
) {
1503 err
= __ethtool_set_sg(dev
, 0);
1508 return dev
->ethtool_ops
->set_tx_csum(dev
, data
);
1511 static int __ethtool_set_rx_csum(struct net_device
*dev
, u32 data
)
1513 if (!dev
->ethtool_ops
->set_rx_csum
)
1517 dev
->features
&= ~NETIF_F_GRO
;
1519 return dev
->ethtool_ops
->set_rx_csum(dev
, data
);
1522 static int __ethtool_set_tso(struct net_device
*dev
, u32 data
)
1524 if (!dev
->ethtool_ops
->set_tso
)
1527 if (data
&& !(dev
->features
& NETIF_F_SG
))
1530 return dev
->ethtool_ops
->set_tso(dev
, data
);
1533 static int __ethtool_set_ufo(struct net_device
*dev
, u32 data
)
1535 if (!dev
->ethtool_ops
->set_ufo
)
1537 if (data
&& !(dev
->features
& NETIF_F_SG
))
1539 if (data
&& !((dev
->features
& NETIF_F_GEN_CSUM
) ||
1540 (dev
->features
& (NETIF_F_IP_CSUM
|NETIF_F_IPV6_CSUM
))
1541 == (NETIF_F_IP_CSUM
|NETIF_F_IPV6_CSUM
)))
1543 return dev
->ethtool_ops
->set_ufo(dev
, data
);
1546 static int ethtool_self_test(struct net_device
*dev
, char __user
*useraddr
)
1548 struct ethtool_test test
;
1549 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
1553 if (!ops
->self_test
|| !ops
->get_sset_count
)
1556 test_len
= ops
->get_sset_count(dev
, ETH_SS_TEST
);
1559 WARN_ON(test_len
== 0);
1561 if (copy_from_user(&test
, useraddr
, sizeof(test
)))
1564 test
.len
= test_len
;
1565 data
= kmalloc(test_len
* sizeof(u64
), GFP_USER
);
1569 ops
->self_test(dev
, &test
, data
);
1572 if (copy_to_user(useraddr
, &test
, sizeof(test
)))
1574 useraddr
+= sizeof(test
);
1575 if (copy_to_user(useraddr
, data
, test
.len
* sizeof(u64
)))
1584 static int ethtool_get_strings(struct net_device
*dev
, void __user
*useraddr
)
1586 struct ethtool_gstrings gstrings
;
1590 if (copy_from_user(&gstrings
, useraddr
, sizeof(gstrings
)))
1593 ret
= __ethtool_get_sset_count(dev
, gstrings
.string_set
);
1599 data
= kmalloc(gstrings
.len
* ETH_GSTRING_LEN
, GFP_USER
);
1603 __ethtool_get_strings(dev
, gstrings
.string_set
, data
);
1606 if (copy_to_user(useraddr
, &gstrings
, sizeof(gstrings
)))
1608 useraddr
+= sizeof(gstrings
);
1609 if (copy_to_user(useraddr
, data
, gstrings
.len
* ETH_GSTRING_LEN
))
1618 static int ethtool_phys_id(struct net_device
*dev
, void __user
*useraddr
)
1620 struct ethtool_value id
;
1622 if (!dev
->ethtool_ops
->phys_id
)
1625 if (copy_from_user(&id
, useraddr
, sizeof(id
)))
1628 return dev
->ethtool_ops
->phys_id(dev
, id
.data
);
1631 static int ethtool_get_stats(struct net_device
*dev
, void __user
*useraddr
)
1633 struct ethtool_stats stats
;
1634 const struct ethtool_ops
*ops
= dev
->ethtool_ops
;
1638 if (!ops
->get_ethtool_stats
|| !ops
->get_sset_count
)
1641 n_stats
= ops
->get_sset_count(dev
, ETH_SS_STATS
);
1644 WARN_ON(n_stats
== 0);
1646 if (copy_from_user(&stats
, useraddr
, sizeof(stats
)))
1649 stats
.n_stats
= n_stats
;
1650 data
= kmalloc(n_stats
* sizeof(u64
), GFP_USER
);
1654 ops
->get_ethtool_stats(dev
, &stats
, data
);
1657 if (copy_to_user(useraddr
, &stats
, sizeof(stats
)))
1659 useraddr
+= sizeof(stats
);
1660 if (copy_to_user(useraddr
, data
, stats
.n_stats
* sizeof(u64
)))
1669 static int ethtool_get_perm_addr(struct net_device
*dev
, void __user
*useraddr
)
1671 struct ethtool_perm_addr epaddr
;
1673 if (copy_from_user(&epaddr
, useraddr
, sizeof(epaddr
)))
1676 if (epaddr
.size
< dev
->addr_len
)
1678 epaddr
.size
= dev
->addr_len
;
1680 if (copy_to_user(useraddr
, &epaddr
, sizeof(epaddr
)))
1682 useraddr
+= sizeof(epaddr
);
1683 if (copy_to_user(useraddr
, dev
->perm_addr
, epaddr
.size
))
1688 static int ethtool_get_value(struct net_device
*dev
, char __user
*useraddr
,
1689 u32 cmd
, u32 (*actor
)(struct net_device
*))
1691 struct ethtool_value edata
= { .cmd
= cmd
};
1696 edata
.data
= actor(dev
);
1698 if (copy_to_user(useraddr
, &edata
, sizeof(edata
)))
1703 static int ethtool_set_value_void(struct net_device
*dev
, char __user
*useraddr
,
1704 void (*actor
)(struct net_device
*, u32
))
1706 struct ethtool_value edata
;
1711 if (copy_from_user(&edata
, useraddr
, sizeof(edata
)))
1714 actor(dev
, edata
.data
);
1718 static int ethtool_set_value(struct net_device
*dev
, char __user
*useraddr
,
1719 int (*actor
)(struct net_device
*, u32
))
1721 struct ethtool_value edata
;
1726 if (copy_from_user(&edata
, useraddr
, sizeof(edata
)))
1729 return actor(dev
, edata
.data
);
1732 static noinline_for_stack
int ethtool_flash_device(struct net_device
*dev
,
1733 char __user
*useraddr
)
1735 struct ethtool_flash efl
;
1737 if (copy_from_user(&efl
, useraddr
, sizeof(efl
)))
1740 if (!dev
->ethtool_ops
->flash_device
)
1743 return dev
->ethtool_ops
->flash_device(dev
, &efl
);
1746 /* The main entry point in this file. Called from net/core/dev.c */
1748 int dev_ethtool(struct net
*net
, struct ifreq
*ifr
)
1750 struct net_device
*dev
= __dev_get_by_name(net
, ifr
->ifr_name
);
1751 void __user
*useraddr
= ifr
->ifr_data
;
1756 if (!dev
|| !netif_device_present(dev
))
1759 if (copy_from_user(ðcmd
, useraddr
, sizeof(ethcmd
)))
1762 if (!dev
->ethtool_ops
) {
1763 /* ETHTOOL_GDRVINFO does not require any driver support.
1764 * It is also unprivileged and does not change anything,
1765 * so we can take a shortcut to it. */
1766 if (ethcmd
== ETHTOOL_GDRVINFO
)
1767 return ethtool_get_drvinfo(dev
, useraddr
);
1772 /* Allow some commands to be done by anyone */
1775 case ETHTOOL_GDRVINFO
:
1776 case ETHTOOL_GMSGLVL
:
1777 case ETHTOOL_GCOALESCE
:
1778 case ETHTOOL_GRINGPARAM
:
1779 case ETHTOOL_GPAUSEPARAM
:
1780 case ETHTOOL_GRXCSUM
:
1781 case ETHTOOL_GTXCSUM
:
1783 case ETHTOOL_GSTRINGS
:
1785 case ETHTOOL_GPERMADDR
:
1789 case ETHTOOL_GFLAGS
:
1790 case ETHTOOL_GPFLAGS
:
1792 case ETHTOOL_GRXRINGS
:
1793 case ETHTOOL_GRXCLSRLCNT
:
1794 case ETHTOOL_GRXCLSRULE
:
1795 case ETHTOOL_GRXCLSRLALL
:
1796 case ETHTOOL_GFEATURES
:
1799 if (!capable(CAP_NET_ADMIN
))
1803 if (dev
->ethtool_ops
->begin
) {
1804 rc
= dev
->ethtool_ops
->begin(dev
);
1808 old_features
= dev
->features
;
1812 rc
= ethtool_get_settings(dev
, useraddr
);
1815 rc
= ethtool_set_settings(dev
, useraddr
);
1817 case ETHTOOL_GDRVINFO
:
1818 rc
= ethtool_get_drvinfo(dev
, useraddr
);
1821 rc
= ethtool_get_regs(dev
, useraddr
);
1824 rc
= ethtool_get_wol(dev
, useraddr
);
1827 rc
= ethtool_set_wol(dev
, useraddr
);
1829 case ETHTOOL_GMSGLVL
:
1830 rc
= ethtool_get_value(dev
, useraddr
, ethcmd
,
1831 dev
->ethtool_ops
->get_msglevel
);
1833 case ETHTOOL_SMSGLVL
:
1834 rc
= ethtool_set_value_void(dev
, useraddr
,
1835 dev
->ethtool_ops
->set_msglevel
);
1837 case ETHTOOL_NWAY_RST
:
1838 rc
= ethtool_nway_reset(dev
);
1841 rc
= ethtool_get_link(dev
, useraddr
);
1843 case ETHTOOL_GEEPROM
:
1844 rc
= ethtool_get_eeprom(dev
, useraddr
);
1846 case ETHTOOL_SEEPROM
:
1847 rc
= ethtool_set_eeprom(dev
, useraddr
);
1849 case ETHTOOL_GCOALESCE
:
1850 rc
= ethtool_get_coalesce(dev
, useraddr
);
1852 case ETHTOOL_SCOALESCE
:
1853 rc
= ethtool_set_coalesce(dev
, useraddr
);
1855 case ETHTOOL_GRINGPARAM
:
1856 rc
= ethtool_get_ringparam(dev
, useraddr
);
1858 case ETHTOOL_SRINGPARAM
:
1859 rc
= ethtool_set_ringparam(dev
, useraddr
);
1861 case ETHTOOL_GPAUSEPARAM
:
1862 rc
= ethtool_get_pauseparam(dev
, useraddr
);
1864 case ETHTOOL_SPAUSEPARAM
:
1865 rc
= ethtool_set_pauseparam(dev
, useraddr
);
1868 rc
= ethtool_self_test(dev
, useraddr
);
1870 case ETHTOOL_GSTRINGS
:
1871 rc
= ethtool_get_strings(dev
, useraddr
);
1873 case ETHTOOL_PHYS_ID
:
1874 rc
= ethtool_phys_id(dev
, useraddr
);
1876 case ETHTOOL_GSTATS
:
1877 rc
= ethtool_get_stats(dev
, useraddr
);
1879 case ETHTOOL_GPERMADDR
:
1880 rc
= ethtool_get_perm_addr(dev
, useraddr
);
1882 case ETHTOOL_GFLAGS
:
1883 rc
= ethtool_get_value(dev
, useraddr
, ethcmd
,
1884 (dev
->ethtool_ops
->get_flags
?
1885 dev
->ethtool_ops
->get_flags
:
1886 ethtool_op_get_flags
));
1888 case ETHTOOL_SFLAGS
:
1889 rc
= ethtool_set_value(dev
, useraddr
, __ethtool_set_flags
);
1891 case ETHTOOL_GPFLAGS
:
1892 rc
= ethtool_get_value(dev
, useraddr
, ethcmd
,
1893 dev
->ethtool_ops
->get_priv_flags
);
1895 case ETHTOOL_SPFLAGS
:
1896 rc
= ethtool_set_value(dev
, useraddr
,
1897 dev
->ethtool_ops
->set_priv_flags
);
1900 case ETHTOOL_GRXRINGS
:
1901 case ETHTOOL_GRXCLSRLCNT
:
1902 case ETHTOOL_GRXCLSRULE
:
1903 case ETHTOOL_GRXCLSRLALL
:
1904 rc
= ethtool_get_rxnfc(dev
, ethcmd
, useraddr
);
1907 case ETHTOOL_SRXCLSRLDEL
:
1908 case ETHTOOL_SRXCLSRLINS
:
1909 rc
= ethtool_set_rxnfc(dev
, ethcmd
, useraddr
);
1911 case ETHTOOL_FLASHDEV
:
1912 rc
= ethtool_flash_device(dev
, useraddr
);
1915 rc
= ethtool_reset(dev
, useraddr
);
1917 case ETHTOOL_SRXNTUPLE
:
1918 rc
= ethtool_set_rx_ntuple(dev
, useraddr
);
1920 case ETHTOOL_GRXNTUPLE
:
1921 rc
= ethtool_get_rx_ntuple(dev
, useraddr
);
1923 case ETHTOOL_GSSET_INFO
:
1924 rc
= ethtool_get_sset_info(dev
, useraddr
);
1926 case ETHTOOL_GRXFHINDIR
:
1927 rc
= ethtool_get_rxfh_indir(dev
, useraddr
);
1929 case ETHTOOL_SRXFHINDIR
:
1930 rc
= ethtool_set_rxfh_indir(dev
, useraddr
);
1932 case ETHTOOL_GFEATURES
:
1933 rc
= ethtool_get_features(dev
, useraddr
);
1935 case ETHTOOL_SFEATURES
:
1936 rc
= ethtool_set_features(dev
, useraddr
);
1938 case ETHTOOL_GTXCSUM
:
1939 case ETHTOOL_GRXCSUM
:
1945 rc
= ethtool_get_one_feature(dev
, useraddr
, ethcmd
);
1947 case ETHTOOL_STXCSUM
:
1948 case ETHTOOL_SRXCSUM
:
1954 rc
= ethtool_set_one_feature(dev
, useraddr
, ethcmd
);
1960 if (dev
->ethtool_ops
->complete
)
1961 dev
->ethtool_ops
->complete(dev
);
1963 if (old_features
!= dev
->features
)
1964 netdev_features_change(dev
);