can: isotp: support dynamic flow control parameters
authorOliver Hartkopp <socketcan@hartkopp.net>
Fri, 8 Dec 2023 16:57:29 +0000 (17:57 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 12 Feb 2024 15:55:40 +0000 (16:55 +0100)
The ISO15765-2 standard supports to take the PDUs communication parameters
blocksize (BS) and Separation Time minimum (STmin) either from the first
received flow control (FC) "static" or from every received FC "dynamic".

Add a new CAN_ISOTP_DYN_FC_PARMS flag to support dynamic FC parameters.

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

index 439c982f7e811b51dc36ed6dc35bc89f94e16e9c..6cde62371b6fbbc6791b5159348e957e2aecc22e 100644 (file)
@@ -137,6 +137,7 @@ struct can_isotp_ll_options {
 #define CAN_ISOTP_WAIT_TX_DONE 0x0400  /* wait for tx completion */
 #define CAN_ISOTP_SF_BROADCAST 0x0800  /* 1-to-N functional addressing */
 #define CAN_ISOTP_CF_BROADCAST 0x1000  /* 1-to-N transmission w/o FC */
+#define CAN_ISOTP_DYN_FC_PARMS 0x2000  /* dynamic FC parameters BS/STmin */
 
 /* protocol machine default values */
 
index d1c6f206f42950963f1f3121cc152424eb6bd210..25bac0fafc8305b8fe5cd3649f2ef103fec97aae 100644 (file)
@@ -381,8 +381,9 @@ static int isotp_rcv_fc(struct isotp_sock *so, struct canfd_frame *cf, int ae)
                return 1;
        }
 
-       /* get communication parameters only from the first FC frame */
-       if (so->tx.state == ISOTP_WAIT_FIRST_FC) {
+       /* get static/dynamic communication params from first/every FC frame */
+       if (so->tx.state == ISOTP_WAIT_FIRST_FC ||
+           so->opt.flags & CAN_ISOTP_DYN_FC_PARMS) {
                so->txfc.bs = cf->data[ae + 1];
                so->txfc.stmin = cf->data[ae + 2];