On Wed, 2016-02-17 at 21:32 +0100, Andrew Lunn wrote:
> Some PHY devices contain a simple packet generator. Features vary, but
> often they can be used to generate packets of different sizes,
> different contents, with or without errors, and with different inter
> packet gaps. Add support to the core ethtool code to support this.
[...]
> --- a/include/uapi/linux/ethtool.h
> +++ b/include/uapi/linux/ethtool.h
> @@ -1167,6 +1167,31 @@ struct ethtool_ts_info {
> __u32 rx_reserved[3];
> };
>
> +enum ethtool_phy_pkg_gen_flags {
> + ETH_PKT_RANDOM = (1 << 0),
> + ETH_PKT_ERROR = (1 << 1),
What kind of error? CRC error, FEC error, symbol error?
> +};
> +
> +/**
> + * struct ethtool_phy_pkt_get - command to request the phy to generate
> packets.
> + * @cmd: command number = %ETHTOOL_PHY_PKT_GEN
> + * @count: number of packets to generate
> + * @len: length of generated packets
> + * @ipg: inter packet gap in bytes.
What if the PHY doesn't allow varying the IPG? Should there be a way
to find out what its supported IPG is, or to request the default value?
Similarly, should there be a way to find out the minimum/maximum length it
supports?
> + * @flags: a bitmask of flags from &enum ethtool_phy_pkg_gen_flags
> + *
> + * PHY drivers may not support all of these parameters. If the
> + * requested parameter value cannot be supported an error should be
> + * returned.
Should, or must?
How does userland tell when the PHY has finished? Should it be
possible to cancel this (similar to ETHTOOL_PHYS_ID)?
What should happen if the stack tries to send a packet while the PHY is
in this mode? Is it discarded? Should the driver indicate carrier-off
so that this is obvious?
[...]
> --- a/net/core/ethtool.c
> +++ b/net/core/ethtool.c
> @@ -1541,6 +1541,25 @@ static int ethtool_get_phy_stats(struct net_device
> *dev, void __user *useraddr)
> return ret;
> }
>
> +static int ethtool_phy_pkt_gen(struct net_device *dev, void __user *useraddr)
> +{
> + struct phy_device *phydev = dev->phydev;
> + struct ethtool_phy_pkt_gen pkt_gen;
> + int err;
> +
> + if (!phydev || !phydev->drv->pkt_gen)
> + return -EOPNOTSUPP;
[...]
Why should this be tied to phylib? Nothing else in the ethtool
interface is.
Ben.
--
Ben Hutchings
Lowery's Law:
If it jams, force it. If it breaks, it needed replacing anyway.
signature.asc
Description: This is a digitally signed message part
