Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only
0002  * Copyright (c) 2013-2019, 2021 The Linux Foundation. All rights reserved.
0003  */
0004 
0005 #ifndef _LINUX_IF_RMNET_H_
0006 #define _LINUX_IF_RMNET_H_
0007 
0008 #include <linux/types.h>
0009 
0010 struct rmnet_map_header {
0011     u8 flags;           /* MAP_CMD_FLAG, MAP_PAD_LEN_MASK */
0012     u8 mux_id;
0013     __be16 pkt_len;         /* Length of packet, including pad */
0014 }  __aligned(1);
0015 
0016 /* rmnet_map_header flags field:
0017  *  PAD_LEN:      number of pad bytes following packet data
0018  *  CMD:      1 = packet contains a MAP command; 0 = packet contains data
0019  *  NEXT_HEADER: 1 = packet contains V5 CSUM header 0 = no V5 CSUM header
0020  */
0021 #define MAP_PAD_LEN_MASK        GENMASK(5, 0)
0022 #define MAP_NEXT_HEADER_FLAG        BIT(6)
0023 #define MAP_CMD_FLAG            BIT(7)
0024 
0025 struct rmnet_map_dl_csum_trailer {
0026     u8 reserved1;
0027     u8 flags;           /* MAP_CSUM_DL_VALID_FLAG */
0028     __be16 csum_start_offset;
0029     __be16 csum_length;
0030     __sum16 csum_value;
0031 } __aligned(1);
0032 
0033 /* rmnet_map_dl_csum_trailer flags field:
0034  *  VALID:  1 = checksum and length valid; 0 = ignore them
0035  */
0036 #define MAP_CSUM_DL_VALID_FLAG      BIT(0)
0037 
0038 struct rmnet_map_ul_csum_header {
0039     __be16 csum_start_offset;
0040     __be16 csum_info;       /* MAP_CSUM_UL_* */
0041 } __aligned(1);
0042 
0043 /* csum_info field:
0044  *  OFFSET: where (offset in bytes) to insert computed checksum
0045  *  UDP:    1 = UDP checksum (zero checkum means no checksum)
0046  *  ENABLED:    1 = checksum computation requested
0047  */
0048 #define MAP_CSUM_UL_OFFSET_MASK     GENMASK(13, 0)
0049 #define MAP_CSUM_UL_UDP_FLAG        BIT(14)
0050 #define MAP_CSUM_UL_ENABLED_FLAG    BIT(15)
0051 
0052 /* MAP CSUM headers */
0053 struct rmnet_map_v5_csum_header {
0054     u8 header_info;
0055     u8 csum_info;
0056     __be16 reserved;
0057 } __aligned(1);
0058 
0059 /* v5 header_info field
0060  * NEXT_HEADER: represents whether there is any next header
0061  * HEADER_TYPE: represents the type of this header
0062  *
0063  * csum_info field
0064  * CSUM_VALID_OR_REQ:
0065  * 1 = for UL, checksum computation is requested.
0066  * 1 = for DL, validated the checksum and has found it valid
0067  */
0068 
0069 #define MAPV5_HDRINFO_NXT_HDR_FLAG  BIT(0)
0070 #define MAPV5_HDRINFO_HDR_TYPE_FMASK    GENMASK(7, 1)
0071 #define MAPV5_CSUMINFO_VALID_FLAG   BIT(7)
0072 
0073 #define RMNET_MAP_HEADER_TYPE_CSUM_OFFLOAD 2
0074 #endif /* !(_LINUX_IF_RMNET_H_) */