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