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