Linux USB
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: Lorenzo Colitti <lorenzo@google.com>
Cc: linux-usb@vger.kernel.org, balbi@kernel.org, zenczykowski@gmail.com
Subject: Re: [PATCH v2] usb: gadget: u_ether: support configuring interface names.
Date: Wed, 13 Jan 2021 17:20:45 +0100	[thread overview]
Message-ID: <X/8d3bI5HP4FYnge@kroah.com> (raw)
In-Reply-To: <20210113154550.789244-1-lorenzo@google.com>

On Thu, Jan 14, 2021 at 12:45:50AM +0900, Lorenzo Colitti wrote:
> This patch allows the administrator to configure the interface
> name of a function using u_ether (e.g., eem, ncm, rndis).
> 
> Currently, all such interfaces, regardless of function type, are
> always called usb0, usb1, etc. This makes it very cumbersome to
> use more than one such type at a time, because userspace cannnot
> easily tell the interfaces apart and apply the right
> configuration to each one. Interface renaming in userspace based
> on driver doesn't help, because the interfaces all have the same
> driver. Without this patch, doing this require hacks/workarounds
> such as setting fixed MAC addresses on the functions, and then
> renaming by MAC address, or scraping configfs after each
> interface is created to find out what it is.
> 
> Setting the interface name is done by writing to the same
> "ifname" configfs attribute that reports the interface name after
> the function is bound. The write must contain an interface
> pattern such as "usb%d" (which will cause the net core to pick
> the next available interface name starting with "usb").
> This patch does not allow writing an exact interface name (as
> opposed to a pattern) because if the interface already exists at
> bind time, the bind will fail and the whole gadget will fail to
> activate. This could be allowed in a future patch.
> 
> For compatibility with current userspace, when reading an ifname
> that has not currently been set, the result is still "(unnamed
> net_device)". Once a write to ifname happens, then reading ifname
> will return whatever was last written.
> 
> Tested by configuring an rndis function and an ncm function on
> the same gadget, and writing "rndis%d" to ifname on the rndis
> function and "ncm%d" to ifname on the ncm function. When the
> gadget was bound, the rndis interface was rndis0 and the ncm
> interface was ncm0.
> 
> Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
> ---
>  Documentation/usb/gadget-testing.rst          | 30 +++++++--------
>  drivers/usb/gadget/function/u_ether.c         | 37 +++++++++++++++++--
>  drivers/usb/gadget/function/u_ether.h         | 12 ++++++
>  .../usb/gadget/function/u_ether_configfs.h    | 15 +++++++-
>  4 files changed, 75 insertions(+), 19 deletions(-)
> 
> diff --git a/Documentation/usb/gadget-testing.rst b/Documentation/usb/gadget-testing.rst
> index 2eeb3e9299e4..2085e7b24eeb 100644
> --- a/Documentation/usb/gadget-testing.rst
> +++ b/Documentation/usb/gadget-testing.rst
> @@ -91,9 +91,9 @@ The ECM function provides these attributes in its function directory:
>  
>  and after creating the functions/ecm.<instance name> they contain default
>  values: qmult is 5, dev_addr and host_addr are randomly selected.
> -Except for ifname they can be written to until the function is linked to a
> -configuration. The ifname is read-only and contains the name of the interface
> -which was assigned by the net core, e. g. usb0.
> +The ifname can be written to if the function is not bound. A write must be an
> +interface pattern such as "usb%d", which will cause the net core to choose the
> +next free usbX interface. By default, it is set to "usb%d".
>  
>  Testing the ECM function
>  ------------------------
> @@ -131,9 +131,9 @@ The ECM subset function provides these attributes in its function directory:
>  
>  and after creating the functions/ecm.<instance name> they contain default
>  values: qmult is 5, dev_addr and host_addr are randomly selected.
> -Except for ifname they can be written to until the function is linked to a
> -configuration. The ifname is read-only and contains the name of the interface
> -which was assigned by the net core, e. g. usb0.
> +The ifname can be written to if the function is not bound. A write must be an
> +interface pattern such as "usb%d", which will cause the net core to choose the
> +next free usbX interface. By default, it is set to "usb%d".
>  
>  Testing the ECM subset function
>  -------------------------------
> @@ -171,9 +171,9 @@ The EEM function provides these attributes in its function directory:
>  
>  and after creating the functions/eem.<instance name> they contain default
>  values: qmult is 5, dev_addr and host_addr are randomly selected.
> -Except for ifname they can be written to until the function is linked to a
> -configuration. The ifname is read-only and contains the name of the interface
> -which was assigned by the net core, e. g. usb0.
> +The ifname can be written to if the function is not bound. A write must be an
> +interface pattern such as "usb%d", which will cause the net core to choose the
> +next free usbX interface. By default, it is set to "usb%d".
>  
>  Testing the EEM function
>  ------------------------
> @@ -453,9 +453,9 @@ The NCM function provides these attributes in its function directory:
>  
>  and after creating the functions/ncm.<instance name> they contain default
>  values: qmult is 5, dev_addr and host_addr are randomly selected.
> -Except for ifname they can be written to until the function is linked to a
> -configuration. The ifname is read-only and contains the name of the interface
> -which was assigned by the net core, e. g. usb0.
> +The ifname can be written to if the function is not bound. A write must be an
> +interface pattern such as "usb%d", which will cause the net core to choose the
> +next free usbX interface. By default, it is set to "usb%d".
>  
>  Testing the NCM function
>  ------------------------
> @@ -591,9 +591,9 @@ The RNDIS function provides these attributes in its function directory:
>  
>  and after creating the functions/rndis.<instance name> they contain default
>  values: qmult is 5, dev_addr and host_addr are randomly selected.
> -Except for ifname they can be written to until the function is linked to a
> -configuration. The ifname is read-only and contains the name of the interface
> -which was assigned by the net core, e. g. usb0.
> +The ifname can be written to if the function is not bound. A write must be an
> +interface pattern such as "usb%d", which will cause the net core to choose the
> +next free usbX interface. By default, it is set to "usb%d".
>  
>  Testing the RNDIS function
>  --------------------------
> diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
> index c019f2b0c0af..a4ade7983402 100644
> --- a/drivers/usb/gadget/function/u_ether.c
> +++ b/drivers/usb/gadget/function/u_ether.c
> @@ -78,8 +78,9 @@ struct eth_dev {
>  	unsigned long		todo;
>  #define	WORK_RX_MEMORY		0
>  
> -	bool			zlp;
> -	bool			no_skb_reserve;
> +	bool			zlp:1;
> +	bool			no_skb_reserve:1;
> +	bool			ifname_set:1;

Not to be a pain, but "bool var:1"?  What's wrong with just a bool
itself?  gcc is known to have issues with setting/clearing bit fields
like this, and there is no size issues here with this device, adding one
more byte is just fine.

So just add:
	bool		ifname_set;
please.

thanks,

greg k-h

  reply	other threads:[~2021-01-13 16:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-13 15:45 [PATCH v2] usb: gadget: u_ether: support configuring interface names Lorenzo Colitti
2021-01-13 16:20 ` Greg KH [this message]
2021-01-13 23:43   ` Lorenzo Colitti

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=X/8d3bI5HP4FYnge@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=balbi@kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=lorenzo@google.com \
    --cc=zenczykowski@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox