can: gw: support modification of Classical CAN DLCs
authorOliver Hartkopp <socketcan@hartkopp.net>
Thu, 19 Nov 2020 08:49:21 +0000 (09:49 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 20 Nov 2020 11:05:14 +0000 (12:05 +0100)
commit94c23097f991cd4568388564b3d2816b0b83f924
treec206200379d41453f89e3d1293d7d87f6bddf324
parent396b3cedc9cf54bf6266a89150136d72af7fcb1e
can: gw: support modification of Classical CAN DLCs

Add support for data length code modifications for Classical CAN.

The netlink configuration interface always allowed to pass any value
that fits into a byte, therefore only the modification process had to be
extended to handle the raw DLC represenation of Classical CAN frames.

When a DLC value from 0 .. F is provided for Classical CAN frame
modifications the 'len' value is modified as-is with the exception that
potentially existing 9 .. F DLC values in the len8_dlc element are moved
to the 'len' element for the modification operation by mod_retrieve_ccdlc().

After the modification the Classical CAN frame DLC information is brought
back into the correct format by mod_store_ccdlc() which is filling 'len'
and 'len8_dlc' accordingly.

Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://lore.kernel.org/r/20201119084921.2621-1-socketcan@hartkopp.net
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
include/uapi/linux/can/gw.h
net/can/gw.c