1 /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ 2 /* 3 * Copyright (c) 2018, The Linux Foundation. All rights reserved. 4 */ 5 6 #ifndef _RMNET_DATA_H_ 7 #define _RMNET_DATA_H_ 8 9 /* Constants */ 10 #define RMNET_LOCAL_LOGICAL_ENDPOINT -1 11 12 #define RMNET_EGRESS_FORMAT__RESERVED__ (1<<0) 13 #define RMNET_EGRESS_FORMAT_MAP (1<<1) 14 #define RMNET_EGRESS_FORMAT_AGGREGATION (1<<2) 15 #define RMNET_EGRESS_FORMAT_MUXING (1<<3) 16 #define RMNET_EGRESS_FORMAT_MAP_CKSUMV3 (1<<4) 17 #define RMNET_EGRESS_FORMAT_MAP_CKSUMV4 (1<<5) 18 19 #define RMNET_INGRESS_FIX_ETHERNET (1<<0) 20 #define RMNET_INGRESS_FORMAT_MAP (1<<1) 21 #define RMNET_INGRESS_FORMAT_DEAGGREGATION (1<<2) 22 #define RMNET_INGRESS_FORMAT_DEMUXING (1<<3) 23 #define RMNET_INGRESS_FORMAT_MAP_COMMANDS (1<<4) 24 #define RMNET_INGRESS_FORMAT_MAP_CKSUMV3 (1<<5) 25 #define RMNET_INGRESS_FORMAT_MAP_CKSUMV4 (1<<6) 26 27 /* Netlink API */ 28 #define RMNET_NETLINK_PROTO 31 29 #define RMNET_MAX_STR_LEN 16 30 #define RMNET_NL_DATA_MAX_LEN 64 31 32 #define RMNET_NETLINK_MSG_COMMAND 0 33 #define RMNET_NETLINK_MSG_RETURNCODE 1 34 #define RMNET_NETLINK_MSG_RETURNDATA 2 35 36 struct rmnet_nl_msg_s { 37 uint16_t reserved; 38 uint16_t message_type; 39 uint16_t reserved2:14; 40 uint16_t crd:2; 41 union { 42 uint16_t arg_length; 43 uint16_t return_code; 44 }; 45 union { 46 uint8_t data[RMNET_NL_DATA_MAX_LEN]; 47 struct { 48 uint8_t dev[RMNET_MAX_STR_LEN]; 49 uint32_t flags; 50 uint16_t agg_size; 51 uint16_t agg_count; 52 uint8_t tail_spacing; 53 } data_format; 54 struct { 55 uint8_t dev[RMNET_MAX_STR_LEN]; 56 int32_t ep_id; 57 uint8_t operating_mode; 58 uint8_t next_dev[RMNET_MAX_STR_LEN]; 59 } local_ep_config; 60 struct { 61 uint32_t id; 62 uint8_t vnd_name[RMNET_MAX_STR_LEN]; 63 } vnd; 64 struct { 65 uint32_t id; 66 uint32_t map_flow_id; 67 uint32_t tc_flow_id; 68 } flow_control; 69 }; 70 }; 71 72 enum rmnet_netlink_message_types_e { 73 /* RMNET_NETLINK_ASSOCIATE_NETWORK_DEVICE - Register RMNET data driver 74 * on a particular device. 75 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 76 * Returns: status code 77 */ 78 RMNET_NETLINK_ASSOCIATE_NETWORK_DEVICE, 79 80 /* RMNET_NETLINK_UNASSOCIATE_NETWORK_DEVICE - Unregister RMNET data 81 * driver on a particular 82 * device. 83 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 84 * Returns: status code 85 */ 86 RMNET_NETLINK_UNASSOCIATE_NETWORK_DEVICE, 87 88 /* RMNET_NETLINK_GET_NETWORK_DEVICE_ASSOCIATED - Get if RMNET data 89 * driver is registered on a 90 * particular device. 91 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 92 * Returns: 1 if registered, 0 if not 93 */ 94 RMNET_NETLINK_GET_NETWORK_DEVICE_ASSOCIATED, 95 96 /* RMNET_NETLINK_SET_LINK_EGRESS_DATA_FORMAT - Sets the egress data 97 * format for a particular 98 * link. 99 * Args: uint32_t egress_flags 100 * char[] dev_name: Null terminated ASCII string, max length: 15 101 * Returns: status code 102 */ 103 RMNET_NETLINK_SET_LINK_EGRESS_DATA_FORMAT, 104 105 /* RMNET_NETLINK_GET_LINK_EGRESS_DATA_FORMAT - Gets the egress data 106 * format for a particular 107 * link. 108 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 109 * Returns: 4-bytes data: uint32_t egress_flags 110 */ 111 RMNET_NETLINK_GET_LINK_EGRESS_DATA_FORMAT, 112 113 /* RMNET_NETLINK_SET_LINK_INGRESS_DATA_FORMAT - Sets the ingress data 114 * format for a particular 115 * link. 116 * Args: uint32_t ingress_flags 117 * char[] dev_name: Null terminated ASCII string, max length: 15 118 * Returns: status code 119 */ 120 RMNET_NETLINK_SET_LINK_INGRESS_DATA_FORMAT, 121 122 /* RMNET_NETLINK_GET_LINK_INGRESS_DATA_FORMAT - Gets the ingress data 123 * format for a particular 124 * link. 125 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 126 * Returns: 4-bytes data: uint32_t ingress_flags 127 */ 128 RMNET_NETLINK_GET_LINK_INGRESS_DATA_FORMAT, 129 130 /* RMNET_NETLINK_SET_LOGICAL_EP_CONFIG - Sets the logical endpoint 131 * configuration for a particular 132 * link. 133 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 134 * int32_t logical_ep_id, valid values are -1 through 31 135 * uint8_t rmnet_mode: one of none, vnd, bridged 136 * char[] egress_dev_name: Egress device if operating in bridge mode 137 * Returns: status code 138 */ 139 RMNET_NETLINK_SET_LOGICAL_EP_CONFIG, 140 141 /* RMNET_NETLINK_UNSET_LOGICAL_EP_CONFIG - Un-sets the logical endpoint 142 * configuration for a particular 143 * link. 144 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 145 * int32_t logical_ep_id, valid values are -1 through 31 146 * Returns: status code 147 */ 148 RMNET_NETLINK_UNSET_LOGICAL_EP_CONFIG, 149 150 /* RMNET_NETLINK_GET_LOGICAL_EP_CONFIG - Gets the logical endpoint 151 * configuration for a particular 152 * link. 153 * Args: char[] dev_name: Null terminated ASCII string, max length: 15 154 * int32_t logical_ep_id, valid values are -1 through 31 155 * Returns: uint8_t rmnet_mode: one of none, vnd, bridged 156 * char[] egress_dev_name: Egress device 157 */ 158 RMNET_NETLINK_GET_LOGICAL_EP_CONFIG, 159 160 /* RMNET_NETLINK_NEW_VND - Creates a new virtual network device node 161 * Args: int32_t node number 162 * Returns: status code 163 */ 164 RMNET_NETLINK_NEW_VND, 165 166 /* RMNET_NETLINK_NEW_VND_WITH_PREFIX - Creates a new virtual network 167 * device node with the specified 168 * prefix for the device name 169 * Args: int32_t node number 170 * char[] vnd_name - Use as prefix 171 * Returns: status code 172 */ 173 RMNET_NETLINK_NEW_VND_WITH_PREFIX, 174 175 /* RMNET_NETLINK_GET_VND_NAME - Gets the string name of a VND from ID 176 * Args: int32_t node number 177 * Returns: char[] vnd_name 178 */ 179 RMNET_NETLINK_GET_VND_NAME, 180 181 /* RMNET_NETLINK_FREE_VND - Removes virtual network device node 182 * Args: int32_t node number 183 * Returns: status code 184 */ 185 RMNET_NETLINK_FREE_VND, 186 187 /* RMNET_NETLINK_ADD_VND_TC_FLOW - Add flow control handle on VND 188 * Args: int32_t node number 189 * uint32_t MAP Flow Handle 190 * uint32_t TC Flow Handle 191 * Returns: status code 192 */ 193 RMNET_NETLINK_ADD_VND_TC_FLOW, 194 195 /* RMNET_NETLINK_DEL_VND_TC_FLOW - Removes flow control handle on VND 196 * Args: int32_t node number 197 * uint32_t MAP Flow Handle 198 * Returns: status code 199 */ 200 RMNET_NETLINK_DEL_VND_TC_FLOW, 201 202 /* 203 * RMNET_NETLINK_NEW_VND_WITH_NAME - Creates a new virtual network 204 * device node with the specified 205 * device name 206 * Args: int32_t node number 207 * char[] vnd_name - Use as name 208 * Returns: status code 209 */ 210 RMNET_NETLINK_NEW_VND_WITH_NAME 211 }; 212 #define RMNET_NETLINK_NEW_VND_WITH_NAME RMNET_NETLINK_NEW_VND_WITH_NAME 213 214 enum rmnet_config_endpoint_modes_e { 215 /* Pass the frame up the stack with no modifications to skb->dev */ 216 RMNET_EPMODE_NONE, 217 /* Replace skb->dev to a virtual rmnet device and pass up the stack */ 218 RMNET_EPMODE_VND, 219 /* Pass the frame directly to another device with dev_queue_xmit(). */ 220 RMNET_EPMODE_BRIDGE, 221 /* Must be the last item in the list */ 222 RMNET_EPMODE_LENGTH 223 }; 224 225 enum rmnet_config_return_codes_e { 226 RMNET_CONFIG_OK, 227 RMNET_CONFIG_UNKNOWN_MESSAGE, 228 RMNET_CONFIG_UNKNOWN_ERROR, 229 RMNET_CONFIG_NOMEM, 230 RMNET_CONFIG_DEVICE_IN_USE, 231 RMNET_CONFIG_INVALID_REQUEST, 232 RMNET_CONFIG_NO_SUCH_DEVICE, 233 RMNET_CONFIG_BAD_ARGUMENTS, 234 RMNET_CONFIG_BAD_EGRESS_DEVICE, 235 RMNET_CONFIG_TC_HANDLE_FULL 236 }; 237 238 #endif /* _RMNET_DATA_H_ */ 239