On 16.02.2011 21:04, Wolfgang Grandegger wrote:
> On 02/16/2011 08:00 PM, Oliver Hartkopp wrote:
>> On 16.02.2011 09:10, Wolfgang Grandegger wrote:


>>> But wrong termination may result in other errors as well and there I
>>> think it could not be used reliably for the purpose you describe above.
>>
>> Ok. But i think we could leave it as-is. I don't think it's worth to break 
>> the
>> definition here.
> 
> I prefer the clean solution. I don't think it's worth to keep it in the
> CAN id. It will just confuse users.

Is also OK for me.

Would you suggest to reuse the bit-value from CAN_ERR_ACK (0x0020U) for
CAN_ERR_ACTIVE then? I've done this in my suggested patch below.

>> For that reason i would prefer to have the CAN_ERR_ACTIVE bit *only* in the
>> CAN-ID status bits and not in the detailed data[1] (CAN_ERR_CTRL_ACTIVE) as
>> you and Kurt suggested.
> 
> OK, but then I would drop CAN_ERR_CTRL_ACTIVE.

Yes, thanks. That was my intention.

>>> We then could or even should add a version information into the error
>>> message. I think data[5] could be used for that purpose.
>>
>> It's like having the CAN core version information where Dave was complaining
>> when it gone Mainline. Who should check version numbers and maintain all 
>> this?
> 
> This would allow users already using the error flags to easily migrate
> to the new and changed error types. My idea here is:
> 
>       cf->data[5] = CAN_ERR_VERSION;
> 
> Also candump could use it to avoid displaying rubbish with old kernels.

Hm - maybe then it's better to retrieve the Kernel version with uname(2) ...

> 
> Furthermore I would like to use:
> 
>   s/CAN_ERR_PROT_OVERLOAD/CAN_ERR_PROT_CRC/
> 
> for the CRC errors.

ok.

>>
>>     CAN_ERR_ACK(can_id) and CAN_ERR_PROT_ACK(data[2])
>>
>> are set together. But who cares?
> 
> Me, see above.

ok.

> 
>> CAN_ERR_BUSERROR(can_id) could be defined as the or-ed value from
>>
>>     (CAN_ERR_LOSTARB | CAN_ERR_PROT | CAN_ERR_CRTL)
> 
> What do you mean here. Currently CAN_ERR_BUSERROR behave like
> CAN_ERR_PROT but bus errors are *not* state changes or lostarb errors.
> In principle we could define:
> 
>   #define CAN_ERR_BUSERROR CAN_ERR_PROT
> 
> But maybe we leave it as is to allowing for other protocol violations
> which are not classical bus errors.

ok.

So the final error.h patch would look like this then:

diff --git a/include/linux/can/error.h b/include/linux/can/error.h
index d4127fd..f9245e5 100644
--- a/include/linux/can/error.h
+++ b/include/linux/can/error.h
@@ -22,7 +22,7 @@
 #define CAN_ERR_CRTL         0x00000004U /* controller problems / data[1]    */
 #define CAN_ERR_PROT         0x00000008U /* protocol violations / data[2..3] */
 #define CAN_ERR_TRX          0x00000010U /* transceiver status  / data[4]    */
-#define CAN_ERR_ACK          0x00000020U /* received no ACK on transmission */
+#define CAN_ERR_ACTIVE       0x00000020U /* controller (self) recovered */
 #define CAN_ERR_BUSOFF       0x00000040U /* bus off */
 #define CAN_ERR_BUSERROR     0x00000080U /* bus error (may flood!) */
 #define CAN_ERR_RESTARTED    0x00000100U /* controller restarted */
@@ -49,8 +49,8 @@
 #define CAN_ERR_PROT_STUFF       0x04 /* bit stuffing error */
 #define CAN_ERR_PROT_BIT0        0x08 /* unable to send dominant bit */
 #define CAN_ERR_PROT_BIT1        0x10 /* unable to send recessive bit */
-#define CAN_ERR_PROT_OVERLOAD    0x20 /* bus overload */
-#define CAN_ERR_PROT_ACTIVE      0x40 /* active error announcement */
+#define CAN_ERR_PROT_CRC         0x20 /* CRC error */
+#define CAN_ERR_PROT_ACK         0x40 /* received no ACK on transmission */
 #define CAN_ERR_PROT_TX          0x80 /* error occured on transmission */
 
 /* error in CAN protocol (location) / data[3] */

Right?

> I started writing the patch and realized that we need some more
> clarification and cleanup. Next point is how we increment the
> stats->[r|t]x_error counters? It's not done consistently and it's not
> even possible to assign the direction of bus errors properly. Have a
> look to the drivers to realizes the mess. Should we do that at all? We
> have our own stats of CAN errors:
> 
>   struct can_device_stats {
>         __u32 bus_error;        /* Bus errors */
>         __u32 error_warning;    /* Changes to error warning state */
>         __u32 error_passive;    /* Changes to error passive state */
>         __u32 bus_off;          /* Changes to bus off state */
>         __u32 arbitration_lost; /* Arbitration lost errors */
>         __u32 restarts;         /* CAN controller re-starts */
>   };
> 
> I tend to drop touching the network stats completely. What do you and
> others think.

Using the common network stats would have the advantage, that you can easily
see problems with standard tools like 'ifconfig' or 'cat /proc/net/dev'

But maybe a cleanup is needed anyway ;-)

Regards,
Oliver
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to