2021-07-21 13:57:24

by Andre Naujoks

[permalink] [raw]
Subject: [PATCH] Expose Peak USB device id in sysfs via phys_port_name.

The Peak USB CAN adapters can be assigned a device id via the Peak
provided tools (pcan-settings). This id can currently not be set by the
upstream kernel drivers, but some devices expose this id already.

The id can be used for consistent naming of CAN interfaces regardless of
order of attachment or recognition on the system. The classical CAN Peak
USB adapters expose this id via bcdDevice (combined with another value)
on USB-level in the sysfs tree and this value is then available in
ID_REVISION from udev. This is not a feasible approach, when a single
USB device offers more than one CAN-interface, like e.g. the PCAN-USB
Pro FD devices.

This patch exposes those ids via the, up to now unused, netdevice sysfs
attribute phys_port_name as a simple decimal ASCII representation of the
id. phys_port_id was not used, since the default print functions from
net/core/net-sysfs.c output a hex-encoded binary value, which is
overkill for a one-byte device id, like this one.
---
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index e8f43ed90b72..f6cbb01a58cc 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -408,6 +408,21 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
return NETDEV_TX_OK;
}

+static int peak_usb_ndo_get_phys_port_name(struct net_device *netdev,
+ char *name, size_t len)
+{
+ const struct peak_usb_device *dev = netdev_priv(netdev);
+ int err;
+
+ err = snprintf(name, len, "%u", dev->device_number);
+
+ if (err >= len || err <= 0) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/*
* start the CAN interface.
* Rx and Tx urbs are allocated here. Rx urbs are submitted here.
@@ -769,6 +784,7 @@ static const struct net_device_ops peak_usb_netdev_ops = {
.ndo_stop = peak_usb_ndo_stop,
.ndo_start_xmit = peak_usb_ndo_start_xmit,
.ndo_change_mtu = can_change_mtu,
+ .ndo_get_phys_port_name = peak_usb_ndo_get_phys_port_name,
};

/*
--
2.32.0


2021-07-21 14:00:55

by Pavel Skripkin

[permalink] [raw]
Subject: Re: [PATCH] Expose Peak USB device id in sysfs via phys_port_name.

On Wed, 21 Jul 2021 14:40:47 +0200
Andre Naujoks <[email protected]> wrote:

> The Peak USB CAN adapters can be assigned a device id via the Peak
> provided tools (pcan-settings). This id can currently not be set by
> the upstream kernel drivers, but some devices expose this id already.
>
> The id can be used for consistent naming of CAN interfaces regardless
> of order of attachment or recognition on the system. The classical
> CAN Peak USB adapters expose this id via bcdDevice (combined with
> another value) on USB-level in the sysfs tree and this value is then
> available in ID_REVISION from udev. This is not a feasible approach,
> when a single USB device offers more than one CAN-interface, like
> e.g. the PCAN-USB Pro FD devices.
>
> This patch exposes those ids via the, up to now unused, netdevice
> sysfs attribute phys_port_name as a simple decimal ASCII
> representation of the id. phys_port_id was not used, since the
> default print functions from net/core/net-sysfs.c output a
> hex-encoded binary value, which is overkill for a one-byte device id,
> like this one.


Hi, Andre!

You should add Signed-off-by tag to the patch


With regards,
Pavel Skripkin

2021-07-21 14:01:38

by Andre Naujoks

[permalink] [raw]
Subject: [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.

The Peak USB CAN adapters can be assigned a device id via the Peak
provided tools (pcan-settings). This id can currently not be set by the
upstream kernel drivers, but some devices expose this id already.

The id can be used for consistent naming of CAN interfaces regardless of
order of attachment or recognition on the system. The classical CAN Peak
USB adapters expose this id via bcdDevice (combined with another value)
on USB-level in the sysfs tree and this value is then available in
ID_REVISION from udev. This is not a feasible approach, when a single
USB device offers more than one CAN-interface, like e.g. the PCAN-USB
Pro FD devices.

This patch exposes those ids via the, up to now unused, netdevice sysfs
attribute phys_port_name as a simple decimal ASCII representation of the
id. phys_port_id was not used, since the default print functions from
net/core/net-sysfs.c output a hex-encoded binary value, which is
overkill for a one-byte device id, like this one.

Signed-off-by: Andre Naujoks <[email protected]>
---
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index e8f43ed90b72..f6cbb01a58cc 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -408,6 +408,21 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
return NETDEV_TX_OK;
}

+static int peak_usb_ndo_get_phys_port_name(struct net_device *netdev,
+ char *name, size_t len)
+{
+ const struct peak_usb_device *dev = netdev_priv(netdev);
+ int err;
+
+ err = snprintf(name, len, "%u", dev->device_number);
+
+ if (err >= len || err <= 0) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/*
* start the CAN interface.
* Rx and Tx urbs are allocated here. Rx urbs are submitted here.
@@ -769,6 +784,7 @@ static const struct net_device_ops peak_usb_netdev_ops = {
.ndo_stop = peak_usb_ndo_stop,
.ndo_start_xmit = peak_usb_ndo_start_xmit,
.ndo_change_mtu = can_change_mtu,
+ .ndo_get_phys_port_name = peak_usb_ndo_get_phys_port_name,
};

/*
--
2.32.0

2021-07-21 18:23:03

by Stéphane Grosjean

[permalink] [raw]
Subject: RE: [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.

Hi,

The display and the possibility to change this "device_number" is a current modification of the peak_usb driver. This modification will offer this possibility for all CAN - USB interfaces of PEAK-System.

However, it is planned to create new R/W entries for this (under /sys/class/net/canX/...) as is already the case in other USB - CAN interface drivers.

? St?phane


De : Andre Naujoks <[email protected]>
Envoy? : mercredi 21 juillet 2021 14:59
? : Wolfgang Grandegger <[email protected]>; Marc Kleine-Budde <[email protected]>; David S. Miller <[email protected]>; Jakub Kicinski <[email protected]>; St?phane Grosjean <[email protected]>; Vincent Mailhol <[email protected]>; Gustavo A. R. Silva <[email protected]>; Pavel Skripkin <[email protected]>; Colin Ian King <[email protected]>; Andre Naujoks <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Objet : [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.

The Peak USB CAN adapters can be assigned a device id via the Peak
provided tools (pcan-settings). This id can currently not be set by the
upstream kernel drivers, but some devices expose this id already.

The id can be used for consistent naming of CAN interfaces regardless of
order of attachment or recognition on the system. The classical CAN Peak
USB adapters expose this id via bcdDevice (combined with another value)
on USB-level in the sysfs tree and this value is then available in
ID_REVISION from udev. This is not a feasible approach, when a single
USB device offers more than one CAN-interface, like e.g. the PCAN-USB
Pro FD devices.

This patch exposes those ids via the, up to now unused, netdevice sysfs
attribute phys_port_name as a simple decimal ASCII representation of the
id. phys_port_id was not used, since the default print functions from
net/core/net-sysfs.c output a hex-encoded binary value, which is
overkill for a one-byte device id, like this one.

Signed-off-by: Andre Naujoks <[email protected]>
---
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index e8f43ed90b72..f6cbb01a58cc 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -408,6 +408,21 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
return NETDEV_TX_OK;
}

+static int peak_usb_ndo_get_phys_port_name(struct net_device *netdev,
+ char *name, size_t len)
+{
+ const struct peak_usb_device *dev = netdev_priv(netdev);
+ int err;
+
+ err = snprintf(name, len, "%u", dev->device_number);
+
+ if (err >= len || err <= 0) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/*
* start the CAN interface.
* Rx and Tx urbs are allocated here. Rx urbs are submitted here.
@@ -769,6 +784,7 @@ static const struct net_device_ops peak_usb_netdev_ops = {
.ndo_stop = peak_usb_ndo_stop,
.ndo_start_xmit = peak_usb_ndo_start_xmit,
.ndo_change_mtu = can_change_mtu,
+ .ndo_get_phys_port_name = peak_usb_ndo_get_phys_port_name,
};

/*
--
2.32.0

--
PEAK-System Technik GmbH
Sitz der Gesellschaft Darmstadt - HRB 9183
Geschaeftsfuehrung: Alexander Gach / Uwe Wilhelm
Unsere Datenschutzerklaerung mit wichtigen Hinweisen
zur Behandlung personenbezogener Daten finden Sie unter
http://www.peak-system.com/Datenschutz.483.0.html

2021-07-21 18:29:18

by Andre Naujoks

[permalink] [raw]
Subject: Re: [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.

Am 21.07.21 um 15:29 schrieb St?phane Grosjean:
> Hi,
>
> The display and the possibility to change this "device_number" is a current modification of the peak_usb driver. This modification will offer this possibility for all CAN - USB interfaces of PEAK-System.

Hi.

By "current modification" you mean something not yet public? Do you have
a time frame for when you are planning to make it public? I'd really
like to use this :-)

>
> However, it is planned to create new R/W entries for this (under /sys/class/net/canX/...) as is already the case in other USB - CAN interface drivers.

I'd be fine with that. I just chose something, that was already
available and looked as if it made the most sense without breaking anything.

Thanks for the reply!
Andre

>
> ? St?phane
>
>
> De : Andre Naujoks <[email protected]>
> Envoy? : mercredi 21 juillet 2021 14:59
> ? : Wolfgang Grandegger <[email protected]>; Marc Kleine-Budde <[email protected]>; David S. Miller <[email protected]>; Jakub Kicinski <[email protected]>; St?phane Grosjean <[email protected]>; Vincent Mailhol <[email protected]>; Gustavo A. R. Silva <[email protected]>; Pavel Skripkin <[email protected]>; Colin Ian King <[email protected]>; Andre Naujoks <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
> Objet : [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.
>
> The Peak USB CAN adapters can be assigned a device id via the Peak
> provided tools (pcan-settings). This id can currently not be set by the
> upstream kernel drivers, but some devices expose this id already.
>
> The id can be used for consistent naming of CAN interfaces regardless of
> order of attachment or recognition on the system. The classical CAN Peak
> USB adapters expose this id via bcdDevice (combined with another value)
> on USB-level in the sysfs tree and this value is then available in
> ID_REVISION from udev. This is not a feasible approach, when a single
> USB device offers more than one CAN-interface, like e.g. the PCAN-USB
> Pro FD devices.
>
> This patch exposes those ids via the, up to now unused, netdevice sysfs
> attribute phys_port_name as a simple decimal ASCII representation of the
> id. phys_port_id was not used, since the default print functions from
> net/core/net-sysfs.c output a hex-encoded binary value, which is
> overkill for a one-byte device id, like this one.
>
> Signed-off-by: Andre Naujoks <[email protected]>
> ---
> drivers/net/can/usb/peak_usb/pcan_usb_core.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
> index e8f43ed90b72..f6cbb01a58cc 100644
> --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
> +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
> @@ -408,6 +408,21 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
> return NETDEV_TX_OK;
> }
>
> +static int peak_usb_ndo_get_phys_port_name(struct net_device *netdev,
> + char *name, size_t len)
> +{
> + const struct peak_usb_device *dev = netdev_priv(netdev);
> + int err;
> +
> + err = snprintf(name, len, "%u", dev->device_number);
> +
> + if (err >= len || err <= 0) {
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> /*
> * start the CAN interface.
> * Rx and Tx urbs are allocated here. Rx urbs are submitted here.
> @@ -769,6 +784,7 @@ static const struct net_device_ops peak_usb_netdev_ops = {
> .ndo_stop = peak_usb_ndo_stop,
> .ndo_start_xmit = peak_usb_ndo_start_xmit,
> .ndo_change_mtu = can_change_mtu,
> + .ndo_get_phys_port_name = peak_usb_ndo_get_phys_port_name,
> };
>
> /*
> --
> 2.32.0
>
> --
> PEAK-System Technik GmbH
> Sitz der Gesellschaft Darmstadt - HRB 9183
> Geschaeftsfuehrung: Alexander Gach / Uwe Wilhelm
> Unsere Datenschutzerklaerung mit wichtigen Hinweisen
> zur Behandlung personenbezogener Daten finden Sie unter
> http://www.peak-system.com/Datenschutz.483.0.html
>

2021-07-23 07:35:45

by Andre Naujoks

[permalink] [raw]
Subject: Re: [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.

Am 23.07.21 um 09:24 schrieb St?phane Grosjean:
> Hi,
>
> We plan to send the patches during the next month.

Thank you for the info! Sounds great. I'm looking forward to it.

Best Regards
Andre

>
> Regards,
>
> ? St?phane
>
>
> ------------------------------------------------------------------------
> *De :* Andre Naujoks <[email protected]>
> *Envoy? :* mercredi 21 juillet 2021 15:39
> *? :* St?phane Grosjean <[email protected]>; Wolfgang
> Grandegger <[email protected]>; Marc Kleine-Budde <[email protected]>;
> David S. Miller <[email protected]>; Jakub Kicinski <[email protected]>;
> Vincent Mailhol <[email protected]>; Gustavo A. R. Silva
> <[email protected]>; Pavel Skripkin <[email protected]>; Colin
> Ian King <[email protected]>; [email protected]
> <[email protected]>; [email protected]
> <[email protected]>; [email protected]
> <[email protected]>
> *Objet :* Re: [PATCH v2] Expose Peak USB device id in sysfs via
> phys_port_name.
> Am 21.07.21 um 15:29 schrieb St?phane Grosjean:
>> Hi,
>>
>> The display and the possibility to change this "device_number" is a current modification of the peak_usb driver. This modification will offer this possibility for all CAN - USB interfaces of PEAK-System.
>
> Hi.
>
> By "current modification" you mean something not yet public? Do you have
> a time frame for when you are planning to make it public? I'd really
> like to use this :-)
>
>>
>> However, it is planned to create new R/W entries for this (under /sys/class/net/canX/...) as is already the case in other USB - CAN interface drivers.
>
> I'd be fine with that. I just chose something, that was already
> available and looked as if it made the most sense without breaking anything.
>
> Thanks for the reply!
> ?? Andre
>
>>
>> ? St?phane
>>
>>
>> De : Andre Naujoks <[email protected]>
>> Envoy? : mercredi 21 juillet 2021 14:59
>> ? : Wolfgang Grandegger <[email protected]>; Marc Kleine-Budde <[email protected]>; David S. Miller <[email protected]>; Jakub Kicinski <[email protected]>; St?phane Grosjean <[email protected]>; Vincent Mailhol <[email protected]>; Gustavo A. R. Silva <[email protected]>; Pavel Skripkin
> <[email protected]>; Colin Ian King <[email protected]>; Andre
> Naujoks <[email protected]>; [email protected]
> <[email protected]>; [email protected]
> <[email protected]>; [email protected]
> <[email protected]>
>> Objet : [PATCH v2] Expose Peak USB device id in sysfs via phys_port_name.
>>
>> The Peak USB CAN adapters can be assigned a device id via the Peak
>> provided tools (pcan-settings). This id can currently not be set by the
>> upstream kernel drivers, but some devices expose this id already.
>>
>> The id can be used for consistent naming of CAN interfaces regardless of
>> order of attachment or recognition on the system. The classical CAN Peak
>> USB adapters expose this id via bcdDevice (combined with another value)
>> on USB-level in the sysfs tree and this value is then available in
>> ID_REVISION from udev. This is not a feasible approach, when a single
>> USB device offers more than one CAN-interface, like e.g. the PCAN-USB
>> Pro FD devices.
>>
>> This patch exposes those ids via the, up to now unused, netdevice sysfs
>> attribute phys_port_name as a simple decimal ASCII representation of the
>> id. phys_port_id was not used, since the default print functions from
>> net/core/net-sysfs.c output a hex-encoded binary value, which is
>> overkill for a one-byte device id, like this one.
>>
>> Signed-off-by: Andre Naujoks <[email protected]>
>> ---
>>?? drivers/net/can/usb/peak_usb/pcan_usb_core.c | 16 ++++++++++++++++
>>?? 1 file changed, 16 insertions(+)
>>
>> diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
>> index e8f43ed90b72..f6cbb01a58cc 100644
>> --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
>> +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
>> @@ -408,6 +408,21 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb,
>>?????????? return NETDEV_TX_OK;
>>?? }
>>
>> +static int peak_usb_ndo_get_phys_port_name(struct net_device *netdev,
>> +????????????????????????????????????????? char *name, size_t len)
>> +{
>> +?????? const struct peak_usb_device *dev = netdev_priv(netdev);
>> +?????? int err;
>> +
>> +?????? err = snprintf(name, len, "%u", dev->device_number);
>> +
>> +?????? if (err >= len || err <= 0) {
>> +?????????????? return -EINVAL;
>> +?????? }
>> +
>> +?????? return 0;
>> +}
>> +
>>?? /*
>>??? * start the CAN interface.
>>??? * Rx and Tx urbs are allocated here. Rx urbs are submitted here.
>> @@ -769,6 +784,7 @@ static const struct net_device_ops peak_usb_netdev_ops = {
>>?????????? .ndo_stop = peak_usb_ndo_stop,
>>?????????? .ndo_start_xmit = peak_usb_ndo_start_xmit,
>>?????????? .ndo_change_mtu = can_change_mtu,
>> +?????? .ndo_get_phys_port_name = peak_usb_ndo_get_phys_port_name,
>>?? };
>>
>>?? /*
>> --
>> 2.32.0
>>
>> --
>> PEAK-System Technik GmbH
>> Sitz der Gesellschaft Darmstadt - HRB 9183
>> Geschaeftsfuehrung: Alexander Gach / Uwe Wilhelm
>> Unsere Datenschutzerklaerung mit wichtigen Hinweisen
>> zur Behandlung personenbezogener Daten finden Sie unter
>> http://www.peak-system.com/Datenschutz.483.0.html
> <http://www.peak-system.com/Datenschutz.483.0.html>
>>
>
>
> --
> PEAK-System Technik GmbH
> Sitz der Gesellschaft Darmstadt - HRB 9183
> Geschaeftsfuehrung: Alexander Gach / Uwe Wilhelm
> Unsere Datenschutzerklaerung mit wichtigen Hinweisen
> zur Behandlung personenbezogener Daten finden Sie unter
> http://www.peak-system.com/Datenschutz.483.0.html