• Oliver Hartkopp's avatar
    can: canxl: add virtual CAN network identifier support · c83c22ec
    Oliver Hartkopp authored
    CAN XL data frames contain an 8-bit virtual CAN network identifier (VCID).
    A VCID value of zero represents an 'untagged' CAN XL frame.
    
    To receive and send these optional VCIDs via CAN_RAW sockets a new socket
    option CAN_RAW_XL_VCID_OPTS is introduced to define/access VCID content:
    
    - tx: set the outgoing VCID value by the kernel (one fixed 8-bit value)
    - tx: pass through VCID values from the user space (e.g. for traffic replay)
    - rx: apply VCID receive filter (value/mask) to be passed to the user space
    
    With the 'tx pass through' option CAN_RAW_XL_VCID_TX_PASS all valid VCID
    values can be sent, e.g. to replay full qualified CAN XL traffic.
    
    The VCID value provided for the CAN_RAW_XL_VCID_TX_SET option will
    override the VCID value in the struct canxl_frame.prio defined for
    CAN_RAW_XL_VCID_TX_PASS when both flags are set.
    
    With a rx_vcid_mask of zero all possible VCID values (0x00 - 0xFF) are
    passed to the user space when the CAN_RAW_XL_VCID_RX_FILTER flag is set.
    Without this flag only untagged CAN XL frames (VCID = 0x00) are delivered
    to the user space (default).
    
    The 8-bit VCID is stored inside the CAN XL prio element (only in CAN XL
    frames!) to not interfere with other CAN content or the CAN filters
    provided by the CAN_RAW sockets and kernel infrastruture.
    Signed-off-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
    Link: https://lore.kernel.org/all/20240212213550.18516-1-socketcan@hartkopp.netSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    c83c22ec
af_can.c 24.5 KB