History

mptcp: add netlink-based PM

Expose a new netlink family to userspace to control the PM, setting: - list of local addresses to be signalled. - list of local addresses used to created subflows. - maximum number of add_addr option to react When the msk is fully established, the PM netlink attempts to announce the 'signal' list via the ADD_ADDR option. Since we currently lack the ADD_ADDR echo (and related event) only the first addr is sent. After exhausting the 'announce' list, the PM tries to create subflow for each addr in 'local' list, waiting for each connection to be completed before attempting the next one. Idea is to add an additional PM hook for ADD_ADDR echo, to allow the PM netlink announcing multiple addresses, in sequence.

Paolo Abeni committed 6 years ago

Commit 01cacb01 parent fc518955 files · +928 −2Browse files

Showing the changes to include/uapi/linux (1 of 5 files). Show all

Unified · Split

include/uapi/linux/mptcp.h+54−0
@@ -32,4 +32,58 @@ enum { · 31 unmodified lines
32};32};
33 33
34#define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1)34#define MPTCP_SUBFLOW_ATTR_MAX (__MPTCP_SUBFLOW_ATTR_MAX - 1)
35
36/* netlink interface */
37#define MPTCP_PM_NAME "mptcp_pm"
38#define MPTCP_PM_CMD_GRP_NAME "mptcp_pm_cmds"
39#define MPTCP_PM_VER 0x1
40
41/*
42 * ATTR types defined for MPTCP
43 */
44enum {
45 MPTCP_PM_ATTR_UNSPEC,
46
47 MPTCP_PM_ATTR_ADDR, /* nested address */
48 MPTCP_PM_ATTR_RCV_ADD_ADDRS, /* u32 */
49 MPTCP_PM_ATTR_SUBFLOWS, /* u32 */
50
51 __MPTCP_PM_ATTR_MAX
52};
53
54#define MPTCP_PM_ATTR_MAX (__MPTCP_PM_ATTR_MAX - 1)
55
56enum {
57 MPTCP_PM_ADDR_ATTR_UNSPEC,
58
59 MPTCP_PM_ADDR_ATTR_FAMILY, /* u16 */
60 MPTCP_PM_ADDR_ATTR_ID, /* u8 */
61 MPTCP_PM_ADDR_ATTR_ADDR4, /* struct in_addr */
62 MPTCP_PM_ADDR_ATTR_ADDR6, /* struct in6_addr */
63 MPTCP_PM_ADDR_ATTR_PORT, /* u16 */
64 MPTCP_PM_ADDR_ATTR_FLAGS, /* u32 */
65 MPTCP_PM_ADDR_ATTR_IF_IDX, /* s32 */
66
67 __MPTCP_PM_ADDR_ATTR_MAX
68};
69
70#define MPTCP_PM_ADDR_ATTR_MAX (__MPTCP_PM_ADDR_ATTR_MAX - 1)
71
72#define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0)
73#define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1)
74#define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2)
75
76enum {
77 MPTCP_PM_CMD_UNSPEC,
78
79 MPTCP_PM_CMD_ADD_ADDR,
80 MPTCP_PM_CMD_DEL_ADDR,
81 MPTCP_PM_CMD_GET_ADDR,
82 MPTCP_PM_CMD_FLUSH_ADDRS,
83 MPTCP_PM_CMD_SET_LIMITS,
84 MPTCP_PM_CMD_GET_LIMITS,
85
86 __MPTCP_PM_CMD_AFTER_LAST
87};
88
35#endif /* _UAPI_MPTCP_H */89#endif /* _UAPI_MPTCP_H */