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