• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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