mptcpd
Multipath TCP Daemon
path_manager.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: BSD-3-Clause
10 #ifndef MPTCPD_PRIVATE_PATH_MANAGER_H
11 #define MPTCPD_PRIVATE_PATH_MANAGER_H
12 
13 #include <mptcpd/types.h>
14 
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 struct sockaddr;
21 
22 struct l_genl;
23 struct l_genl_family;
24 struct l_queue;
25 struct l_timeout;
26 
27 struct mptcpd_netlink_pm;
28 struct mptcpd_addr_info;
29 struct mptcpd_limit;
30 struct mptcpd_nm;
31 struct mptcpd_idm;
32 struct mptcpd_lm;
33 
43 struct mptcpd_pm
44 {
49  struct mptcpd_config const *config;
50 
53 
55  struct l_genl *genl;
56 
58  unsigned int id;
59 
66  struct l_genl_family *family;
67 
75  struct l_timeout *timeout;
76 
84  struct mptcpd_nm *nm;
85 
92  struct mptcpd_idm *idm;
93 
102  struct mptcpd_lm *lm;
103 
105  struct l_queue *event_ops;
106 };
107 
108 // -------------------------------------------------------------------
109 
116 {
118  struct mptcpd_pm_ops const *ops;
119 
121  void *user_data;
122 };
123 
134 {
157  int (*add_addr)(struct mptcpd_pm *pm,
158  struct sockaddr *addr,
159  mptcpd_aid_t id,
160  mptcpd_token_t token);
161 
174  int (*remove_addr)(struct mptcpd_pm *pm,
175  struct sockaddr const *addr,
176  mptcpd_aid_t id,
177  mptcpd_token_t token);
178 
198  int (*add_subflow)(struct mptcpd_pm *pm,
199  mptcpd_token_t token,
200  mptcpd_aid_t local_address_id,
201  mptcpd_aid_t remote_address_id,
202  struct sockaddr const *local_addr,
203  struct sockaddr const *remote_addr,
204  bool backup);
205 
219  int (*remove_subflow)(struct mptcpd_pm *pm,
220  mptcpd_token_t token,
221  struct sockaddr const *local_addr,
222  struct sockaddr const *remote_addr);
223 
239  int (*set_backup)(struct mptcpd_pm *pm,
240  mptcpd_token_t token,
241  struct sockaddr const *local_addr,
242  struct sockaddr const *remote_addr,
243  bool backup);
244 };
245 
255 {
274  int (*add_addr)(struct mptcpd_pm *pm,
275  struct sockaddr const *addr,
276  mptcpd_aid_t id,
277  uint32_t flags,
278  int index);
279 
289  int (*remove_addr)(struct mptcpd_pm *pm,
290  mptcpd_aid_t address_id);
291 
300 
317  int (*get_addr)(struct mptcpd_pm *pm,
319  mptcpd_kpm_get_addr_cb_t callback,
320  void *data,
321  mptcpd_complete_func_t complete);
322 
340  int (*dump_addrs)(struct mptcpd_pm *pm,
341  mptcpd_kpm_get_addr_cb_t callback,
342  void *data,
343  mptcpd_complete_func_t complete);
344 
355  int (*flush_addrs)(struct mptcpd_pm *pm);
356 
367  int (*set_limits)(struct mptcpd_pm *pm,
368  struct mptcpd_limit const *limits,
369  size_t len);
370 
383  int (*get_limits)(struct mptcpd_pm *pm,
384  mptcpd_pm_get_limits_cb callback,
385  void *data);
386 
397  int (*set_flags)(struct mptcpd_pm *pm,
398  struct sockaddr const *addr,
399  mptcpd_flags_t flags);
400 };
401 
402 
403 #ifdef __cplusplus
404 }
405 #endif
406 
407 #endif /* MPTCPD_PRIVATE_PATH_MANAGER_H */
408 
409 /*
410  Local Variables:
411  c-file-style: "linux"
412  End:
413 */
Information associated with a network address.
Definition: addr_info.h:32
mptcpd configuration parameters
Definition: configuration.h:29
Internal mptcpd address ID manager data.
Definition: id_manager.c:53
Kernel-side MPTCP path management netlink commands.
Definition: path_manager.h:255
int(* get_addr)(struct mptcpd_pm *pm, mptcpd_aid_t id, mptcpd_kpm_get_addr_cb_t callback, void *data, mptcpd_complete_func_t complete)
Get network address corresponding to an address ID.
Definition: path_manager.h:317
int(* dump_addrs)(struct mptcpd_pm *pm, mptcpd_kpm_get_addr_cb_t callback, void *data, mptcpd_complete_func_t complete)
Dump list of network addresses.
Definition: path_manager.h:340
int(* add_addr)(struct mptcpd_pm *pm, struct sockaddr const *addr, mptcpd_aid_t id, uint32_t flags, int index)
Advertise new network address to peers.
Definition: path_manager.h:274
int(* set_limits)(struct mptcpd_pm *pm, struct mptcpd_limit const *limits, size_t len)
Set MPTCP resource limits.
Definition: path_manager.h:367
int(* set_flags)(struct mptcpd_pm *pm, struct sockaddr const *addr, mptcpd_flags_t flags)
Set MPTCP flags for a local IP address.
Definition: path_manager.h:397
int(* flush_addrs)(struct mptcpd_pm *pm)
Flush MPTCP addresses.
Definition: path_manager.h:355
int(* get_limits)(struct mptcpd_pm *pm, mptcpd_pm_get_limits_cb callback, void *data)
Get MPTCP resource limits.
Definition: path_manager.h:383
int(* remove_addr)(struct mptcpd_pm *pm, mptcpd_aid_t address_id)
Stop advertising network address to peers.
Definition: path_manager.h:289
MPTCP resource type/limit pair.
Definition: types.h:100
Internal mptcpd listern manager data.
Definition: listener_manager.c:49
Data needed to run the network monitor.
Definition: network_monitor.c:72
MPTCP path management generic netlink command functions.
Definition: path_manager.h:134
int(* remove_subflow)(struct mptcpd_pm *pm, mptcpd_token_t token, struct sockaddr const *local_addr, struct sockaddr const *remote_addr)
Remove a subflow.
Definition: path_manager.h:219
int(* remove_addr)(struct mptcpd_pm *pm, struct sockaddr const *addr, mptcpd_aid_t id, mptcpd_token_t token)
Stop advertising network address to peers.
Definition: path_manager.h:174
int(* add_addr)(struct mptcpd_pm *pm, struct sockaddr *addr, mptcpd_aid_t id, mptcpd_token_t token)
Advertise new network address to peers.
Definition: path_manager.h:157
int(* add_subflow)(struct mptcpd_pm *pm, mptcpd_token_t token, mptcpd_aid_t local_address_id, mptcpd_aid_t remote_address_id, struct sockaddr const *local_addr, struct sockaddr const *remote_addr, bool backup)
Create a new subflow.
Definition: path_manager.h:198
int(* set_backup)(struct mptcpd_pm *pm, mptcpd_token_t token, struct sockaddr const *local_addr, struct sockaddr const *remote_addr, bool backup)
Set priority of a subflow.
Definition: path_manager.h:239
Path manager event tracking operations.
Definition: path_manager.h:40
Data needed to run the path manager.
Definition: path_manager.h:44
struct l_queue * event_ops
List of pm_ops_info objects.
Definition: path_manager.h:105
struct l_timeout * timeout
"mptcp" generic netlink family timeout object.
Definition: path_manager.h:75
unsigned int id
MPTCP generic netlink multicast notification ID.
Definition: path_manager.h:58
struct mptcpd_lm * lm
MPTCP listener manager.
Definition: path_manager.h:102
struct l_genl * genl
Core ELL generic netlink object.
Definition: path_manager.h:55
struct mptcpd_config const * config
Mptcpd configuration.
Definition: path_manager.h:49
struct mptcpd_nm * nm
Network device monitor.
Definition: path_manager.h:84
struct l_genl_family * family
MPTCP generic netlink family.
Definition: path_manager.h:66
struct mptcpd_idm * idm
MPTCP address ID manager.
Definition: path_manager.h:92
struct mptcpd_netlink_pm const * netlink_pm
Kernel MPTCP generic netlink path manager details.
Definition: path_manager.h:52
Path manager event tracking callback information.
Definition: path_manager.h:116
struct mptcpd_pm_ops const * ops
Path manager event tracking operations.
Definition: path_manager.h:118
void * user_data
Data passed to the event tracking operations.
Definition: path_manager.h:121
mptcpd user space path manager attribute types.
void(* mptcpd_kpm_get_addr_cb_t)(struct mptcpd_addr_info const *info, void *callback_data)
Type of function called when an address is available.
Definition: types.h:121
uint32_t mptcpd_flags_t
MPTCP flags type.
Definition: types.h:51
void(* mptcpd_pm_get_limits_cb)(struct mptcpd_limit const *limits, size_t len, void *callback_data)
Type of function called when MPTCP resource limits are available.
Definition: types.h:163
uint32_t mptcpd_token_t
MPTCP connection token type.
Definition: types.h:26
void(* mptcpd_complete_func_t)(void *user_data)
Type of function called on asynchronous call completion.
Definition: types.h:147
uint8_t mptcpd_aid_t
MPTCP address ID type.
Definition: types.h:29