diff options
-rw-r--r-- | include/linux/ethtool.h | 4 | ||||
-rw-r--r-- | net/core/ethtool.c | 55 |
2 files changed, 0 insertions, 59 deletions
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index d901714120a3..da5b2de99ae4 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
@@ -859,8 +859,6 @@ static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings) | |||
859 | * @reset: Reset (part of) the device, as specified by a bitmask of | 859 | * @reset: Reset (part of) the device, as specified by a bitmask of |
860 | * flags from &enum ethtool_reset_flags. Returns a negative | 860 | * flags from &enum ethtool_reset_flags. Returns a negative |
861 | * error code or zero. | 861 | * error code or zero. |
862 | * @set_rx_ntuple: Set an RX n-tuple rule. Returns a negative error code | ||
863 | * or zero. | ||
864 | * @get_rxfh_indir_size: Get the size of the RX flow hash indirection table. | 862 | * @get_rxfh_indir_size: Get the size of the RX flow hash indirection table. |
865 | * Returns zero if not supported for this specific device. | 863 | * Returns zero if not supported for this specific device. |
866 | * @get_rxfh_indir: Get the contents of the RX flow hash indirection table. | 864 | * @get_rxfh_indir: Get the contents of the RX flow hash indirection table. |
@@ -929,8 +927,6 @@ struct ethtool_ops { | |||
929 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); | 927 | int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); |
930 | int (*flash_device)(struct net_device *, struct ethtool_flash *); | 928 | int (*flash_device)(struct net_device *, struct ethtool_flash *); |
931 | int (*reset)(struct net_device *, u32 *); | 929 | int (*reset)(struct net_device *, u32 *); |
932 | int (*set_rx_ntuple)(struct net_device *, | ||
933 | struct ethtool_rx_ntuple *); | ||
934 | u32 (*get_rxfh_indir_size)(struct net_device *); | 930 | u32 (*get_rxfh_indir_size)(struct net_device *); |
935 | int (*get_rxfh_indir)(struct net_device *, u32 *); | 931 | int (*get_rxfh_indir)(struct net_device *, u32 *); |
936 | int (*set_rxfh_indir)(struct net_device *, const u32 *); | 932 | int (*set_rxfh_indir)(struct net_device *, const u32 *); |
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index e88b80d41f73..921aa2b4b415 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c | |||
@@ -631,58 +631,6 @@ out: | |||
631 | return ret; | 631 | return ret; |
632 | } | 632 | } |
633 | 633 | ||
634 | /* | ||
635 | * ethtool does not (or did not) set masks for flow parameters that are | ||
636 | * not specified, so if both value and mask are 0 then this must be | ||
637 | * treated as equivalent to a mask with all bits set. Implement that | ||
638 | * here rather than in drivers. | ||
639 | */ | ||
640 | static void rx_ntuple_fix_masks(struct ethtool_rx_ntuple_flow_spec *fs) | ||
641 | { | ||
642 | struct ethtool_tcpip4_spec *entry = &fs->h_u.tcp_ip4_spec; | ||
643 | struct ethtool_tcpip4_spec *mask = &fs->m_u.tcp_ip4_spec; | ||
644 | |||
645 | if (fs->flow_type != TCP_V4_FLOW && | ||
646 | fs->flow_type != UDP_V4_FLOW && | ||
647 | fs->flow_type != SCTP_V4_FLOW) | ||
648 | return; | ||
649 | |||
650 | if (!(entry->ip4src | mask->ip4src)) | ||
651 | mask->ip4src = htonl(0xffffffff); | ||
652 | if (!(entry->ip4dst | mask->ip4dst)) | ||
653 | mask->ip4dst = htonl(0xffffffff); | ||
654 | if (!(entry->psrc | mask->psrc)) | ||
655 | mask->psrc = htons(0xffff); | ||
656 | if (!(entry->pdst | mask->pdst)) | ||
657 | mask->pdst = htons(0xffff); | ||
658 | if (!(entry->tos | mask->tos)) | ||
659 | mask->tos = 0xff; | ||
660 | if (!(fs->vlan_tag | fs->vlan_tag_mask)) | ||
661 | fs->vlan_tag_mask = 0xffff; | ||
662 | if (!(fs->data | fs->data_mask)) | ||
663 | fs->data_mask = 0xffffffffffffffffULL; | ||
664 | } | ||
665 | |||
666 | static noinline_for_stack int ethtool_set_rx_ntuple(struct net_device *dev, | ||
667 | void __user *useraddr) | ||
668 | { | ||
669 | struct ethtool_rx_ntuple cmd; | ||
670 | const struct ethtool_ops *ops = dev->ethtool_ops; | ||
671 | |||
672 | if (!ops->set_rx_ntuple) | ||
673 | return -EOPNOTSUPP; | ||
674 | |||
675 | if (!(dev->features & NETIF_F_NTUPLE)) | ||
676 | return -EINVAL; | ||
677 | |||
678 | if (copy_from_user(&cmd, useraddr, sizeof(cmd))) | ||
679 | return -EFAULT; | ||
680 | |||
681 | rx_ntuple_fix_masks(&cmd.fs); | ||
682 | |||
683 | return ops->set_rx_ntuple(dev, &cmd); | ||
684 | } | ||
685 | |||
686 | static int ethtool_get_regs(struct net_device *dev, char __user *useraddr) | 634 | static int ethtool_get_regs(struct net_device *dev, char __user *useraddr) |
687 | { | 635 | { |
688 | struct ethtool_regs regs; | 636 | struct ethtool_regs regs; |
@@ -1495,9 +1443,6 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) | |||
1495 | case ETHTOOL_RESET: | 1443 | case ETHTOOL_RESET: |
1496 | rc = ethtool_reset(dev, useraddr); | 1444 | rc = ethtool_reset(dev, useraddr); |
1497 | break; | 1445 | break; |
1498 | case ETHTOOL_SRXNTUPLE: | ||
1499 | rc = ethtool_set_rx_ntuple(dev, useraddr); | ||
1500 | break; | ||
1501 | case ETHTOOL_GSSET_INFO: | 1446 | case ETHTOOL_GSSET_INFO: |
1502 | rc = ethtool_get_sset_info(dev, useraddr); | 1447 | rc = ethtool_get_sset_info(dev, useraddr); |
1503 | break; | 1448 | break; |