1132db935SJakub Kicinski.. SPDX-License-Identifier: GPL-2.0 2132db935SJakub Kicinski 3132db935SJakub Kicinski============ 4132db935SJakub KicinskiRmnet Driver 5132db935SJakub Kicinski============ 6132db935SJakub Kicinski 7132db935SJakub Kicinski1. Introduction 8132db935SJakub Kicinski=============== 9132db935SJakub Kicinski 10132db935SJakub Kicinskirmnet driver is used for supporting the Multiplexing and aggregation 11132db935SJakub KicinskiProtocol (MAP). This protocol is used by all recent chipsets using Qualcomm 12132db935SJakub KicinskiTechnologies, Inc. modems. 13132db935SJakub Kicinski 14132db935SJakub KicinskiThis driver can be used to register onto any physical network device in 15132db935SJakub KicinskiIP mode. Physical transports include USB, HSIC, PCIe and IP accelerator. 16132db935SJakub Kicinski 17132db935SJakub KicinskiMultiplexing allows for creation of logical netdevices (rmnet devices) to 18132db935SJakub Kicinskihandle multiple private data networks (PDN) like a default internet, tethering, 19132db935SJakub Kicinskimultimedia messaging service (MMS) or IP media subsystem (IMS). Hardware sends 20132db935SJakub Kicinskipackets with MAP headers to rmnet. Based on the multiplexer id, rmnet 21132db935SJakub Kicinskiroutes to the appropriate PDN after removing the MAP header. 22132db935SJakub Kicinski 23132db935SJakub KicinskiAggregation is required to achieve high data rates. This involves hardware 24132db935SJakub Kicinskisending aggregated bunch of MAP frames. rmnet driver will de-aggregate 25132db935SJakub Kicinskithese MAP frames and send them to appropriate PDN's. 26132db935SJakub Kicinski 27132db935SJakub Kicinski2. Packet format 28132db935SJakub Kicinski================ 29132db935SJakub Kicinski 30710b797cSSharath Chandra Vurukalaa. MAP packet v1 (data / control) 31132db935SJakub Kicinski 32710b797cSSharath Chandra VurukalaMAP header fields are in big endian format. 33132db935SJakub Kicinski 34132db935SJakub KicinskiPacket format:: 35132db935SJakub Kicinski 36132db935SJakub Kicinski Bit 0 1 2-7 8-15 16-31 37132db935SJakub Kicinski Function Command / Data Reserved Pad Multiplexer ID Payload length 38710b797cSSharath Chandra Vurukala 39132db935SJakub Kicinski Bit 32-x 40710b797cSSharath Chandra Vurukala Function Raw bytes 41132db935SJakub Kicinski 42132db935SJakub KicinskiCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command 43710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data 44132db935SJakub Kicinskipackets are standard IP packets. 45132db935SJakub Kicinski 46710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received. 47132db935SJakub Kicinski 48710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to 49710b797cSSharath Chandra Vurukalaensure 4 byte alignment. 50132db935SJakub Kicinski 51132db935SJakub KicinskiMultiplexer ID is to indicate the PDN on which data has to be sent. 52132db935SJakub Kicinski 53132db935SJakub KicinskiPayload length includes the padding length but does not include MAP header 54132db935SJakub Kicinskilength. 55132db935SJakub Kicinski 56710b797cSSharath Chandra Vurukalab. Map packet v4 (data / control) 57710b797cSSharath Chandra Vurukala 58710b797cSSharath Chandra VurukalaMAP header fields are in big endian format. 59710b797cSSharath Chandra Vurukala 60710b797cSSharath Chandra VurukalaPacket format:: 61710b797cSSharath Chandra Vurukala 62710b797cSSharath Chandra Vurukala Bit 0 1 2-7 8-15 16-31 63710b797cSSharath Chandra Vurukala Function Command / Data Reserved Pad Multiplexer ID Payload length 64710b797cSSharath Chandra Vurukala 65710b797cSSharath Chandra Vurukala Bit 32-(x-33) (x-32)-x 66710b797cSSharath Chandra Vurukala Function Raw bytes Checksum offload header 67710b797cSSharath Chandra Vurukala 68710b797cSSharath Chandra VurukalaCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command 69710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data 70710b797cSSharath Chandra Vurukalapackets are standard IP packets. 71710b797cSSharath Chandra Vurukala 72710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received. 73710b797cSSharath Chandra Vurukala 74710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to 75710b797cSSharath Chandra Vurukalaensure 4 byte alignment. 76710b797cSSharath Chandra Vurukala 77710b797cSSharath Chandra VurukalaMultiplexer ID is to indicate the PDN on which data has to be sent. 78710b797cSSharath Chandra Vurukala 79710b797cSSharath Chandra VurukalaPayload length includes the padding length but does not include MAP header 80710b797cSSharath Chandra Vurukalalength. 81710b797cSSharath Chandra Vurukala 82710b797cSSharath Chandra VurukalaChecksum offload header, has the information about the checksum processing done 83710b797cSSharath Chandra Vurukalaby the hardware.Checksum offload header fields are in big endian format. 84710b797cSSharath Chandra Vurukala 85710b797cSSharath Chandra VurukalaPacket format:: 86710b797cSSharath Chandra Vurukala 87710b797cSSharath Chandra Vurukala Bit 0-14 15 16-31 88710b797cSSharath Chandra Vurukala Function Reserved Valid Checksum start offset 89710b797cSSharath Chandra Vurukala 90710b797cSSharath Chandra Vurukala Bit 31-47 48-64 91710b797cSSharath Chandra Vurukala Function Checksum length Checksum value 92710b797cSSharath Chandra Vurukala 93710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received. 94710b797cSSharath Chandra Vurukala 95710b797cSSharath Chandra VurukalaValid bit indicates whether the partial checksum is calculated and is valid. 96710b797cSSharath Chandra VurukalaSet to 1, if its is valid. Set to 0 otherwise. 97710b797cSSharath Chandra Vurukala 98710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to 99710b797cSSharath Chandra Vurukalaensure 4 byte alignment. 100710b797cSSharath Chandra Vurukala 101710b797cSSharath Chandra VurukalaChecksum start offset, Indicates the offset in bytes from the beginning of the 102710b797cSSharath Chandra VurukalaIP header, from which modem computed checksum. 103710b797cSSharath Chandra Vurukala 104710b797cSSharath Chandra VurukalaChecksum length is the Length in bytes starting from CKSUM_START_OFFSET, 105710b797cSSharath Chandra Vurukalaover which checksum is computed. 106710b797cSSharath Chandra Vurukala 107710b797cSSharath Chandra VurukalaChecksum value, indicates the checksum computed. 108710b797cSSharath Chandra Vurukala 109710b797cSSharath Chandra Vurukalac. MAP packet v5 (data / control) 110710b797cSSharath Chandra Vurukala 111710b797cSSharath Chandra VurukalaMAP header fields are in big endian format. 112710b797cSSharath Chandra Vurukala 113710b797cSSharath Chandra VurukalaPacket format:: 114710b797cSSharath Chandra Vurukala 115710b797cSSharath Chandra Vurukala Bit 0 1 2-7 8-15 16-31 116710b797cSSharath Chandra Vurukala Function Command / Data Next header Pad Multiplexer ID Payload length 117710b797cSSharath Chandra Vurukala 118710b797cSSharath Chandra Vurukala Bit 32-x 119710b797cSSharath Chandra Vurukala Function Raw bytes 120710b797cSSharath Chandra Vurukala 121710b797cSSharath Chandra VurukalaCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command 122710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data 123710b797cSSharath Chandra Vurukalapackets are standard IP packets. 124710b797cSSharath Chandra Vurukala 125710b797cSSharath Chandra VurukalaNext header is used to indicate the presence of another header, currently is 126710b797cSSharath Chandra Vurukalalimited to checksum header. 127710b797cSSharath Chandra Vurukala 128710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to 129710b797cSSharath Chandra Vurukalaensure 4 byte alignment. 130710b797cSSharath Chandra Vurukala 131710b797cSSharath Chandra VurukalaMultiplexer ID is to indicate the PDN on which data has to be sent. 132710b797cSSharath Chandra Vurukala 133710b797cSSharath Chandra VurukalaPayload length includes the padding length but does not include MAP header 134710b797cSSharath Chandra Vurukalalength. 135710b797cSSharath Chandra Vurukala 136710b797cSSharath Chandra Vurukalad. Checksum offload header v5 137710b797cSSharath Chandra Vurukala 138710b797cSSharath Chandra VurukalaChecksum offload header fields are in big endian format. 139710b797cSSharath Chandra Vurukala 140710b797cSSharath Chandra Vurukala Bit 0 - 6 7 8-15 16-31 141710b797cSSharath Chandra Vurukala Function Header Type Next Header Checksum Valid Reserved 142710b797cSSharath Chandra Vurukala 143710b797cSSharath Chandra VurukalaHeader Type is to indicate the type of header, this usually is set to CHECKSUM 144710b797cSSharath Chandra Vurukala 145710b797cSSharath Chandra VurukalaHeader types 146710b797cSSharath Chandra Vurukala= ========================================== 147710b797cSSharath Chandra Vurukala0 Reserved 148710b797cSSharath Chandra Vurukala1 Reserved 149710b797cSSharath Chandra Vurukala2 checksum header 150710b797cSSharath Chandra Vurukala 151710b797cSSharath Chandra VurukalaChecksum Valid is to indicate whether the header checksum is valid. Value of 1 152710b797cSSharath Chandra Vurukalaimplies that checksum is calculated on this packet and is valid, value of 0 153710b797cSSharath Chandra Vurukalaindicates that the calculated packet checksum is invalid. 154710b797cSSharath Chandra Vurukala 155710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received. 156710b797cSSharath Chandra Vurukala 157710b797cSSharath Chandra Vurukalae. MAP packet v1/v5 (command specific):: 158132db935SJakub Kicinski 159132db935SJakub Kicinski Bit 0 1 2-7 8 - 15 16 - 31 160132db935SJakub Kicinski Function Command Reserved Pad Multiplexer ID Payload length 161132db935SJakub Kicinski Bit 32 - 39 40 - 45 46 - 47 48 - 63 162132db935SJakub Kicinski Function Command name Reserved Command Type Reserved 163132db935SJakub Kicinski Bit 64 - 95 164132db935SJakub Kicinski Function Transaction ID 165132db935SJakub Kicinski Bit 96 - 127 166132db935SJakub Kicinski Function Command data 167132db935SJakub Kicinski 168132db935SJakub KicinskiCommand 1 indicates disabling flow while 2 is enabling flow 169132db935SJakub Kicinski 170132db935SJakub KicinskiCommand types 171132db935SJakub Kicinski 172132db935SJakub Kicinski= ========================================== 173132db935SJakub Kicinski0 for MAP command request 174132db935SJakub Kicinski1 is to acknowledge the receipt of a command 175132db935SJakub Kicinski2 is for unsupported commands 176132db935SJakub Kicinski3 is for error during processing of commands 177132db935SJakub Kicinski= ========================================== 178132db935SJakub Kicinski 179710b797cSSharath Chandra Vurukalaf. Aggregation 180132db935SJakub Kicinski 181132db935SJakub KicinskiAggregation is multiple MAP packets (can be data or command) delivered to 182132db935SJakub Kicinskirmnet in a single linear skb. rmnet will process the individual 183132db935SJakub Kicinskipackets and either ACK the MAP command or deliver the IP packet to the 184132db935SJakub Kicinskinetwork stack as needed 185132db935SJakub Kicinski 186132db935SJakub KicinskiMAP header|IP Packet|Optional padding|MAP header|IP Packet|Optional padding.... 187132db935SJakub Kicinski 188132db935SJakub KicinskiMAP header|IP Packet|Optional padding|MAP header|Command Packet|Optional pad... 189132db935SJakub Kicinski 190132db935SJakub Kicinski3. Userspace configuration 191132db935SJakub Kicinski========================== 192132db935SJakub Kicinski 193*26b32974SSubash Abhinov Kasiviswanathanrmnet userspace configuration is done through netlink using iproute2 194*26b32974SSubash Abhinov Kasiviswanathanhttps://git.kernel.org/pub/scm/network/iproute2/iproute2.git/ 195132db935SJakub Kicinski 196*26b32974SSubash Abhinov KasiviswanathanThe driver uses rtnl_link_ops for communication. 197