... | ... | ||
---|---|---|---|
34 | 34 | ||
35 | The behaviour when there are no errors should then not be modified. | 35 | The behaviour when there are no errors should then not be modified. |
36 | 36 | ||
37 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 37 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
38 | --- | 38 | --- |
39 | Changes in v3: | ||
40 | - Patch 11: a variable was no longer assigned in pm_userspace.c, but | ||
41 | still used in this patch (and no longer in the next one). (Geliang) | ||
42 | - Rebased on top of the latest net-next. | ||
43 | - Link to v2: https://lore.kernel.org/r/20250117-net-next-mptcp-pm-misc-cleanup-2-v2-0-61d4fe0586e8@kernel.org | ||
44 | |||
39 | Changes in v2: | 45 | Changes in v2: |
40 | - Patch 11: a variable was no longer assigned, but still used in this | 46 | - Patch 11: a variable was no longer assigned in pm_netlink.c, but still |
41 | patch (and no longer used in the next one). (Simon) | 47 | used in this patch (and no longer in the next one). (Simon) |
42 | - I hope it is OK to have this series in parallel of "mptcp: sysctl: add | ||
43 | syn_retrans_before_tcp_fallback", we had 16 patches left in the queue :) | ||
44 | - Link to v1: https://lore.kernel.org/r/20250116-net-next-mptcp-pm-misc-cleanup-2-v1-0-c0b43f18fe06@kernel.org | 48 | - Link to v1: https://lore.kernel.org/r/20250116-net-next-mptcp-pm-misc-cleanup-2-v1-0-c0b43f18fe06@kernel.org |
45 | 49 | ||
46 | --- | 50 | --- |
47 | Geliang Tang (9): | 51 | Geliang Tang (9): |
48 | mptcp: pm: drop info of userspace_pm_remove_id_zero_address | 52 | mptcp: pm: drop info of userspace_pm_remove_id_zero_address |
... | ... | ||
67 | net/mptcp/pm_netlink.c | 129 ++++++++++------------------- | 71 | net/mptcp/pm_netlink.c | 129 ++++++++++------------------- |
68 | net/mptcp/pm_userspace.c | 209 +++++++++++++++++++++-------------------------- | 72 | net/mptcp/pm_userspace.c | 209 +++++++++++++++++++++-------------------------- |
69 | net/mptcp/protocol.h | 14 ++-- | 73 | net/mptcp/protocol.h | 14 ++-- |
70 | 4 files changed, 225 insertions(+), 213 deletions(-) | 74 | 4 files changed, 225 insertions(+), 213 deletions(-) |
71 | --- | 75 | --- |
72 | base-commit: 7d2eba0f83a59d360ed1e77ed2778101a6e3c4a1 | 76 | base-commit: 26db4dbb747813b5946aff31485873f071a10332 |
73 | change-id: 20250116-net-next-mptcp-pm-misc-cleanup-2-b0f50eff8084 | 77 | change-id: 20250116-net-next-mptcp-pm-misc-cleanup-2-b0f50eff8084 |
74 | 78 | ||
75 | Best regards, | 79 | Best regards, |
76 | -- | 80 | -- |
77 | Matthieu Baerts (NGI0) <matttbe@kernel.org> | 81 | Matthieu Baerts (NGI0) <matttbe@kernel.org> | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | The only use of 'info' parameter of userspace_pm_remove_id_zero_address() | 3 | The only use of 'info' parameter of userspace_pm_remove_id_zero_address() |
4 | is to set an error message into it. | 4 | is to set an error message into it. |
5 | 5 | ||
6 | Plus, this helper will only fail when it cannot find any subflows with a | 6 | Plus, this helper will only fail when it cannot find any subflows with a |
7 | local address ID 0. | 7 | local address ID 0. |
8 | 8 | ||
9 | This patch drops this parameter and sets the error message where this | 9 | This patch drops this parameter and sets the error message where this |
10 | function is called in mptcp_pm_nl_remove_doit(). | 10 | function is called in mptcp_pm_nl_remove_doit(). |
11 | 11 | ||
12 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 12 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
13 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 13 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
14 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 14 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
15 | --- | 15 | --- |
16 | net/mptcp/pm_userspace.c | 15 ++++++++------- | 16 | net/mptcp/pm_userspace.c | 15 ++++++++------- |
17 | 1 file changed, 8 insertions(+), 7 deletions(-) | 17 | 1 file changed, 8 insertions(+), 7 deletions(-) |
18 | 18 | ||
19 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 19 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
20 | index XXXXXXX..XXXXXXX 100644 | 20 | index XXXXXXX..XXXXXXX 100644 |
21 | --- a/net/mptcp/pm_userspace.c | 21 | --- a/net/mptcp/pm_userspace.c |
22 | +++ b/net/mptcp/pm_userspace.c | 22 | +++ b/net/mptcp/pm_userspace.c |
23 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) | 23 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) |
24 | return err; | 24 | return err; |
25 | } | 25 | } |
26 | 26 | ||
27 | -static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk, | 27 | -static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk, |
28 | - struct genl_info *info) | 28 | - struct genl_info *info) |
29 | +static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk) | 29 | +static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk) |
30 | { | 30 | { |
31 | struct mptcp_rm_list list = { .nr = 0 }; | 31 | struct mptcp_rm_list list = { .nr = 0 }; |
32 | struct mptcp_subflow_context *subflow; | 32 | struct mptcp_subflow_context *subflow; |
33 | @@ -XXX,XX +XXX,XX @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk, | 33 | @@ -XXX,XX +XXX,XX @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk, |
34 | break; | 34 | break; |
35 | } | 35 | } |
36 | } | 36 | } |
37 | - if (!has_id_0) { | 37 | - if (!has_id_0) { |
38 | - GENL_SET_ERR_MSG(info, "address with id 0 not found"); | 38 | - GENL_SET_ERR_MSG(info, "address with id 0 not found"); |
39 | + if (!has_id_0) | 39 | + if (!has_id_0) |
40 | goto remove_err; | 40 | goto remove_err; |
41 | - } | 41 | - } |
42 | 42 | ||
43 | list.ids[list.nr++] = 0; | 43 | list.ids[list.nr++] = 0; |
44 | 44 | ||
45 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | 45 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) |
46 | sk = (struct sock *)msk; | 46 | sk = (struct sock *)msk; |
47 | 47 | ||
48 | if (id_val == 0) { | 48 | if (id_val == 0) { |
49 | - err = mptcp_userspace_pm_remove_id_zero_address(msk, info); | 49 | - err = mptcp_userspace_pm_remove_id_zero_address(msk, info); |
50 | + err = mptcp_userspace_pm_remove_id_zero_address(msk); | 50 | + err = mptcp_userspace_pm_remove_id_zero_address(msk); |
51 | goto out; | 51 | goto out; |
52 | } | 52 | } |
53 | 53 | ||
54 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | 54 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) |
55 | spin_lock_bh(&msk->pm.lock); | 55 | spin_lock_bh(&msk->pm.lock); |
56 | match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); | 56 | match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); |
57 | if (!match) { | 57 | if (!match) { |
58 | - GENL_SET_ERR_MSG(info, "address with specified id not found"); | 58 | - GENL_SET_ERR_MSG(info, "address with specified id not found"); |
59 | spin_unlock_bh(&msk->pm.lock); | 59 | spin_unlock_bh(&msk->pm.lock); |
60 | release_sock(sk); | 60 | release_sock(sk); |
61 | goto out; | 61 | goto out; |
62 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | 62 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) |
63 | 63 | ||
64 | err = 0; | 64 | err = 0; |
65 | out: | 65 | out: |
66 | + if (err) | 66 | + if (err) |
67 | + GENL_SET_ERR_MSG_FMT(info, | 67 | + GENL_SET_ERR_MSG_FMT(info, |
68 | + "address with id %u not found", | 68 | + "address with id %u not found", |
69 | + id_val); | 69 | + id_val); |
70 | + | 70 | + |
71 | sock_put(sk); | 71 | sock_put(sk); |
72 | return err; | 72 | return err; |
73 | } | 73 | } |
74 | 74 | ||
75 | -- | 75 | -- |
76 | 2.47.1 | 76 | 2.47.1 | diff view generated by jsdifflib |
1 | Since its introduction in commit 892f396c8e68 ("mptcp: netlink: issue | 1 | Since its introduction in commit 892f396c8e68 ("mptcp: netlink: issue |
---|---|---|---|
2 | MP_PRIO signals from userspace PMs"), it was mandatory to specify the | 2 | MP_PRIO signals from userspace PMs"), it was mandatory to specify the |
3 | remote address, because of the 'if (rem->addr.family == AF_UNSPEC)' | 3 | remote address, because of the 'if (rem->addr.family == AF_UNSPEC)' |
4 | check done later one. | 4 | check done later one. |
5 | 5 | ||
6 | In theory, this attribute can be optional, but it sounds better to be | 6 | In theory, this attribute can be optional, but it sounds better to be |
7 | precise to avoid sending the MP_PRIO on the wrong subflow, e.g. if there | 7 | precise to avoid sending the MP_PRIO on the wrong subflow, e.g. if there |
8 | are multiple subflows attached to the same local ID. This can be relaxed | 8 | are multiple subflows attached to the same local ID. This can be relaxed |
9 | later on if there is a need to act on multiple subflows with one | 9 | later on if there is a need to act on multiple subflows with one |
10 | command. | 10 | command. |
11 | 11 | ||
12 | For the moment, the check to see if attr_rem is NULL can be removed, | 12 | For the moment, the check to see if attr_rem is NULL can be removed, |
13 | because mptcp_pm_parse_entry() will do this check as well, no need to do | 13 | because mptcp_pm_parse_entry() will do this check as well, no need to do |
14 | that differently here. | 14 | that differently here. |
15 | 15 | ||
16 | Reviewed-by: Geliang Tang <geliang@kernel.org> | 16 | Reviewed-by: Geliang Tang <geliang@kernel.org> |
17 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 17 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
18 | --- | 18 | --- |
19 | net/mptcp/pm_userspace.c | 8 +++----- | 19 | net/mptcp/pm_userspace.c | 8 +++----- |
20 | 1 file changed, 3 insertions(+), 5 deletions(-) | 20 | 1 file changed, 3 insertions(+), 5 deletions(-) |
21 | 21 | ||
22 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 22 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
23 | index XXXXXXX..XXXXXXX 100644 | 23 | index XXXXXXX..XXXXXXX 100644 |
24 | --- a/net/mptcp/pm_userspace.c | 24 | --- a/net/mptcp/pm_userspace.c |
25 | +++ b/net/mptcp/pm_userspace.c | 25 | +++ b/net/mptcp/pm_userspace.c |
26 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 26 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
27 | if (ret < 0) | 27 | if (ret < 0) |
28 | goto set_flags_err; | 28 | goto set_flags_err; |
29 | 29 | ||
30 | - if (attr_rem) { | 30 | - if (attr_rem) { |
31 | - ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); | 31 | - ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); |
32 | - if (ret < 0) | 32 | - if (ret < 0) |
33 | - goto set_flags_err; | 33 | - goto set_flags_err; |
34 | - } | 34 | - } |
35 | + ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); | 35 | + ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); |
36 | + if (ret < 0) | 36 | + if (ret < 0) |
37 | + goto set_flags_err; | 37 | + goto set_flags_err; |
38 | 38 | ||
39 | if (loc.addr.family == AF_UNSPEC || | 39 | if (loc.addr.family == AF_UNSPEC || |
40 | rem.addr.family == AF_UNSPEC) { | 40 | rem.addr.family == AF_UNSPEC) { |
41 | 41 | ||
42 | -- | 42 | -- |
43 | 2.47.1 | 43 | 2.47.1 | diff view generated by jsdifflib |
1 | Some errors reported by the userspace PM were vague: "this or that is | 1 | Some errors reported by the userspace PM were vague: "this or that is |
---|---|---|---|
2 | invalid". | 2 | invalid". |
3 | 3 | ||
4 | It is easier for the userspace to know which part is wrong, instead of | 4 | It is easier for the userspace to know which part is wrong, instead of |
5 | having to guess that. | 5 | having to guess that. |
6 | 6 | ||
7 | While at it, in mptcp_userspace_pm_set_flags() move the parsing after | 7 | While at it, in mptcp_userspace_pm_set_flags() move the parsing after |
8 | the check linked to the local attribute. | 8 | the check linked to the local attribute. |
9 | 9 | ||
10 | Reviewed-by: Geliang Tang <geliang@kernel.org> | 10 | Reviewed-by: Geliang Tang <geliang@kernel.org> |
11 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 11 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
12 | --- | 12 | --- |
13 | net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++++++------- | 13 | net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++++++------- |
14 | 1 file changed, 24 insertions(+), 7 deletions(-) | 14 | 1 file changed, 24 insertions(+), 7 deletions(-) |
15 | 15 | ||
16 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 16 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
17 | index XXXXXXX..XXXXXXX 100644 | 17 | index XXXXXXX..XXXXXXX 100644 |
18 | --- a/net/mptcp/pm_userspace.c | 18 | --- a/net/mptcp/pm_userspace.c |
19 | +++ b/net/mptcp/pm_userspace.c | 19 | +++ b/net/mptcp/pm_userspace.c |
20 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) | 20 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) |
21 | goto announce_err; | 21 | goto announce_err; |
22 | } | 22 | } |
23 | 23 | ||
24 | - if (addr_val.addr.id == 0 || !(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { | 24 | - if (addr_val.addr.id == 0 || !(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { |
25 | - GENL_SET_ERR_MSG(info, "invalid addr id or flags"); | 25 | - GENL_SET_ERR_MSG(info, "invalid addr id or flags"); |
26 | + if (addr_val.addr.id == 0) { | 26 | + if (addr_val.addr.id == 0) { |
27 | + GENL_SET_ERR_MSG(info, "invalid addr id"); | 27 | + GENL_SET_ERR_MSG(info, "invalid addr id"); |
28 | + err = -EINVAL; | 28 | + err = -EINVAL; |
29 | + goto announce_err; | 29 | + goto announce_err; |
30 | + } | 30 | + } |
31 | + | 31 | + |
32 | + if (!(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { | 32 | + if (!(addr_val.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { |
33 | + GENL_SET_ERR_MSG(info, "invalid addr flags"); | 33 | + GENL_SET_ERR_MSG(info, "invalid addr flags"); |
34 | err = -EINVAL; | 34 | err = -EINVAL; |
35 | goto announce_err; | 35 | goto announce_err; |
36 | } | 36 | } |
37 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 37 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
38 | goto destroy_err; | 38 | goto destroy_err; |
39 | } | 39 | } |
40 | 40 | ||
41 | - if (!addr_l.addr.port || !addr_r.port) { | 41 | - if (!addr_l.addr.port || !addr_r.port) { |
42 | - GENL_SET_ERR_MSG(info, "missing local or remote port"); | 42 | - GENL_SET_ERR_MSG(info, "missing local or remote port"); |
43 | + if (!addr_l.addr.port) { | 43 | + if (!addr_l.addr.port) { |
44 | + GENL_SET_ERR_MSG(info, "missing local port"); | 44 | + GENL_SET_ERR_MSG(info, "missing local port"); |
45 | + err = -EINVAL; | 45 | + err = -EINVAL; |
46 | + goto destroy_err; | 46 | + goto destroy_err; |
47 | + } | 47 | + } |
48 | + | 48 | + |
49 | + if (!addr_r.port) { | 49 | + if (!addr_r.port) { |
50 | + GENL_SET_ERR_MSG(info, "missing remote port"); | 50 | + GENL_SET_ERR_MSG(info, "missing remote port"); |
51 | err = -EINVAL; | 51 | err = -EINVAL; |
52 | goto destroy_err; | 52 | goto destroy_err; |
53 | } | 53 | } |
54 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 54 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
55 | if (ret < 0) | 55 | if (ret < 0) |
56 | goto set_flags_err; | 56 | goto set_flags_err; |
57 | 57 | ||
58 | + if (loc.addr.family == AF_UNSPEC) { | 58 | + if (loc.addr.family == AF_UNSPEC) { |
59 | + GENL_SET_ERR_MSG(info, "invalid local address family"); | 59 | + GENL_SET_ERR_MSG(info, "invalid local address family"); |
60 | + ret = -EINVAL; | 60 | + ret = -EINVAL; |
61 | + goto set_flags_err; | 61 | + goto set_flags_err; |
62 | + } | 62 | + } |
63 | + | 63 | + |
64 | ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); | 64 | ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); |
65 | if (ret < 0) | 65 | if (ret < 0) |
66 | goto set_flags_err; | 66 | goto set_flags_err; |
67 | 67 | ||
68 | - if (loc.addr.family == AF_UNSPEC || | 68 | - if (loc.addr.family == AF_UNSPEC || |
69 | - rem.addr.family == AF_UNSPEC) { | 69 | - rem.addr.family == AF_UNSPEC) { |
70 | - GENL_SET_ERR_MSG(info, "invalid address families"); | 70 | - GENL_SET_ERR_MSG(info, "invalid address families"); |
71 | + if (rem.addr.family == AF_UNSPEC) { | 71 | + if (rem.addr.family == AF_UNSPEC) { |
72 | + GENL_SET_ERR_MSG(info, "invalid remote address family"); | 72 | + GENL_SET_ERR_MSG(info, "invalid remote address family"); |
73 | ret = -EINVAL; | 73 | ret = -EINVAL; |
74 | goto set_flags_err; | 74 | goto set_flags_err; |
75 | } | 75 | } |
76 | 76 | ||
77 | -- | 77 | -- |
78 | 2.47.1 | 78 | 2.47.1 | diff view generated by jsdifflib |
1 | Some error messages were: | 1 | Some error messages were: |
---|---|---|---|
2 | 2 | ||
3 | - too generic: "missing input", "invalid request" | 3 | - too generic: "missing input", "invalid request" |
4 | 4 | ||
5 | - not precise enough: "limit greater than maximum" but what's the max? | 5 | - not precise enough: "limit greater than maximum" but what's the max? |
6 | 6 | ||
7 | - missing: subflow not found, or connect error. | 7 | - missing: subflow not found, or connect error. |
8 | 8 | ||
9 | This can be easily improved by being more precise, or adding new error | 9 | This can be easily improved by being more precise, or adding new error |
10 | messages. | 10 | messages. |
11 | 11 | ||
12 | Reviewed-by: Geliang Tang <geliang@kernel.org> | 12 | Reviewed-by: Geliang Tang <geliang@kernel.org> |
13 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 13 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
14 | --- | 14 | --- |
15 | net/mptcp/pm_netlink.c | 6 ++++-- | 15 | net/mptcp/pm_netlink.c | 6 ++++-- |
16 | net/mptcp/pm_userspace.c | 10 +++++++++- | 16 | net/mptcp/pm_userspace.c | 10 +++++++++- |
17 | 2 files changed, 13 insertions(+), 3 deletions(-) | 17 | 2 files changed, 13 insertions(+), 3 deletions(-) |
18 | 18 | ||
19 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c | 19 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c |
20 | index XXXXXXX..XXXXXXX 100644 | 20 | index XXXXXXX..XXXXXXX 100644 |
21 | --- a/net/mptcp/pm_netlink.c | 21 | --- a/net/mptcp/pm_netlink.c |
22 | +++ b/net/mptcp/pm_netlink.c | 22 | +++ b/net/mptcp/pm_netlink.c |
23 | @@ -XXX,XX +XXX,XX @@ static int parse_limit(struct genl_info *info, int id, unsigned int *limit) | 23 | @@ -XXX,XX +XXX,XX @@ static int parse_limit(struct genl_info *info, int id, unsigned int *limit) |
24 | 24 | ||
25 | *limit = nla_get_u32(attr); | 25 | *limit = nla_get_u32(attr); |
26 | if (*limit > MPTCP_PM_ADDR_MAX) { | 26 | if (*limit > MPTCP_PM_ADDR_MAX) { |
27 | - GENL_SET_ERR_MSG(info, "limit greater than maximum"); | 27 | - GENL_SET_ERR_MSG(info, "limit greater than maximum"); |
28 | + NL_SET_ERR_MSG_ATTR_FMT(info->extack, attr, | 28 | + NL_SET_ERR_MSG_ATTR_FMT(info->extack, attr, |
29 | + "limit greater than maximum (%u)", | 29 | + "limit greater than maximum (%u)", |
30 | + MPTCP_PM_ADDR_MAX); | 30 | + MPTCP_PM_ADDR_MAX); |
31 | return -EINVAL; | 31 | return -EINVAL; |
32 | } | 32 | } |
33 | return 0; | 33 | return 0; |
34 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) | 34 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) |
35 | if (addr.addr.family == AF_UNSPEC) { | 35 | if (addr.addr.family == AF_UNSPEC) { |
36 | lookup_by_id = 1; | 36 | lookup_by_id = 1; |
37 | if (!addr.addr.id) { | 37 | if (!addr.addr.id) { |
38 | - GENL_SET_ERR_MSG(info, "missing required inputs"); | 38 | - GENL_SET_ERR_MSG(info, "missing required inputs"); |
39 | + GENL_SET_ERR_MSG(info, "missing address ID"); | 39 | + GENL_SET_ERR_MSG(info, "missing address ID"); |
40 | return -EOPNOTSUPP; | 40 | return -EOPNOTSUPP; |
41 | } | 41 | } |
42 | } | 42 | } |
43 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 43 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
44 | index XXXXXXX..XXXXXXX 100644 | 44 | index XXXXXXX..XXXXXXX 100644 |
45 | --- a/net/mptcp/pm_userspace.c | 45 | --- a/net/mptcp/pm_userspace.c |
46 | +++ b/net/mptcp/pm_userspace.c | 46 | +++ b/net/mptcp/pm_userspace.c |
47 | @@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in | 47 | @@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in |
48 | } | 48 | } |
49 | 49 | ||
50 | if (!mptcp_pm_is_userspace(msk)) { | 50 | if (!mptcp_pm_is_userspace(msk)) { |
51 | - GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); | 51 | - GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); |
52 | + GENL_SET_ERR_MSG(info, "userspace PM not selected"); | 52 | + GENL_SET_ERR_MSG(info, "userspace PM not selected"); |
53 | sock_put((struct sock *)msk); | 53 | sock_put((struct sock *)msk); |
54 | return NULL; | 54 | return NULL; |
55 | } | 55 | } |
56 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 56 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
57 | err = __mptcp_subflow_connect(sk, &local, &addr_r); | 57 | err = __mptcp_subflow_connect(sk, &local, &addr_r); |
58 | release_sock(sk); | 58 | release_sock(sk); |
59 | 59 | ||
60 | + if (err) | 60 | + if (err) |
61 | + GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err); | 61 | + GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err); |
62 | + | 62 | + |
63 | spin_lock_bh(&msk->pm.lock); | 63 | spin_lock_bh(&msk->pm.lock); |
64 | if (err) | 64 | if (err) |
65 | mptcp_userspace_pm_delete_local_addr(msk, &entry); | 65 | mptcp_userspace_pm_delete_local_addr(msk, &entry); |
66 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 66 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
67 | lock_sock(sk); | 67 | lock_sock(sk); |
68 | ssk = mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r); | 68 | ssk = mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r); |
69 | if (!ssk) { | 69 | if (!ssk) { |
70 | + GENL_SET_ERR_MSG(info, "subflow not found"); | 70 | + GENL_SET_ERR_MSG(info, "subflow not found"); |
71 | err = -ESRCH; | 71 | err = -ESRCH; |
72 | goto release_sock; | 72 | goto release_sock; |
73 | } | 73 | } |
74 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 74 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
75 | ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); | 75 | ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); |
76 | release_sock(sk); | 76 | release_sock(sk); |
77 | 77 | ||
78 | + /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */ | 78 | + /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */ |
79 | + if (ret < 0) | 79 | + if (ret < 0) |
80 | + GENL_SET_ERR_MSG(info, "subflow not found"); | 80 | + GENL_SET_ERR_MSG(info, "subflow not found"); |
81 | + | 81 | + |
82 | set_flags_err: | 82 | set_flags_err: |
83 | sock_put(sk); | 83 | sock_put(sk); |
84 | return ret; | 84 | return ret; |
85 | 85 | ||
86 | -- | 86 | -- |
87 | 2.47.1 | 87 | 2.47.1 | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | A more general way to check if MPTCP_PM_ATTR_* exists in 'info' | 3 | A more general way to check if MPTCP_PM_ATTR_* exists in 'info' |
4 | is to use GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_*) instead of | 4 | is to use GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_*) instead of |
5 | directly reading info->attrs[MPTCP_PM_ATTR_*] and then checking | 5 | directly reading info->attrs[MPTCP_PM_ATTR_*] and then checking |
6 | if it's NULL. | 6 | if it's NULL. |
7 | 7 | ||
8 | So this patch uses GENL_REQ_ATTR_CHECK() for userspace PM in | 8 | So this patch uses GENL_REQ_ATTR_CHECK() for userspace PM in |
9 | mptcp_pm_nl_announce_doit(), mptcp_pm_nl_remove_doit(), | 9 | mptcp_pm_nl_announce_doit(), mptcp_pm_nl_remove_doit(), |
10 | mptcp_pm_nl_subflow_create_doit(), mptcp_pm_nl_subflow_destroy_doit() | 10 | mptcp_pm_nl_subflow_create_doit(), mptcp_pm_nl_subflow_destroy_doit() |
11 | and mptcp_userspace_pm_get_sock(). | 11 | and mptcp_userspace_pm_get_sock(). |
12 | 12 | ||
13 | Suggested-by: Jakub Kicinski <kuba@kernel.org> | 13 | Suggested-by: Jakub Kicinski <kuba@kernel.org> |
14 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 14 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
15 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 15 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
16 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 16 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
17 | --- | 17 | --- |
18 | net/mptcp/pm_userspace.c | 41 +++++++++++++++++++---------------------- | 18 | net/mptcp/pm_userspace.c | 41 +++++++++++++++++++---------------------- |
19 | 1 file changed, 19 insertions(+), 22 deletions(-) | 19 | 1 file changed, 19 insertions(+), 22 deletions(-) |
20 | 20 | ||
21 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 21 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
22 | index XXXXXXX..XXXXXXX 100644 | 22 | index XXXXXXX..XXXXXXX 100644 |
23 | --- a/net/mptcp/pm_userspace.c | 23 | --- a/net/mptcp/pm_userspace.c |
24 | +++ b/net/mptcp/pm_userspace.c | 24 | +++ b/net/mptcp/pm_userspace.c |
25 | @@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, | 25 | @@ -XXX,XX +XXX,XX @@ bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, |
26 | 26 | ||
27 | static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info) | 27 | static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *info) |
28 | { | 28 | { |
29 | - struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; | 29 | - struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; |
30 | struct mptcp_sock *msk; | 30 | struct mptcp_sock *msk; |
31 | + struct nlattr *token; | 31 | + struct nlattr *token; |
32 | 32 | ||
33 | - if (!token) { | 33 | - if (!token) { |
34 | - GENL_SET_ERR_MSG(info, "missing required token"); | 34 | - GENL_SET_ERR_MSG(info, "missing required token"); |
35 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_TOKEN)) | 35 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_TOKEN)) |
36 | return NULL; | 36 | return NULL; |
37 | - } | 37 | - } |
38 | 38 | ||
39 | + token = info->attrs[MPTCP_PM_ATTR_TOKEN]; | 39 | + token = info->attrs[MPTCP_PM_ATTR_TOKEN]; |
40 | msk = mptcp_token_get_sock(genl_info_net(info), nla_get_u32(token)); | 40 | msk = mptcp_token_get_sock(genl_info_net(info), nla_get_u32(token)); |
41 | if (!msk) { | 41 | if (!msk) { |
42 | NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token"); | 42 | NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token"); |
43 | @@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in | 43 | @@ -XXX,XX +XXX,XX @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(const struct genl_info *in |
44 | 44 | ||
45 | int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) | 45 | int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) |
46 | { | 46 | { |
47 | - struct nlattr *addr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 47 | - struct nlattr *addr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
48 | struct mptcp_pm_addr_entry addr_val; | 48 | struct mptcp_pm_addr_entry addr_val; |
49 | struct mptcp_sock *msk; | 49 | struct mptcp_sock *msk; |
50 | + struct nlattr *addr; | 50 | + struct nlattr *addr; |
51 | int err = -EINVAL; | 51 | int err = -EINVAL; |
52 | struct sock *sk; | 52 | struct sock *sk; |
53 | 53 | ||
54 | - if (!addr) { | 54 | - if (!addr) { |
55 | - GENL_SET_ERR_MSG(info, "missing required address"); | 55 | - GENL_SET_ERR_MSG(info, "missing required address"); |
56 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR)) | 56 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR)) |
57 | return err; | 57 | return err; |
58 | - } | 58 | - } |
59 | 59 | ||
60 | msk = mptcp_userspace_pm_get_sock(info); | 60 | msk = mptcp_userspace_pm_get_sock(info); |
61 | if (!msk) | 61 | if (!msk) |
62 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) | 62 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) |
63 | 63 | ||
64 | sk = (struct sock *)msk; | 64 | sk = (struct sock *)msk; |
65 | 65 | ||
66 | + addr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 66 | + addr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
67 | err = mptcp_pm_parse_entry(addr, info, true, &addr_val); | 67 | err = mptcp_pm_parse_entry(addr, info, true, &addr_val); |
68 | if (err < 0) { | 68 | if (err < 0) { |
69 | GENL_SET_ERR_MSG(info, "error parsing local address"); | 69 | GENL_SET_ERR_MSG(info, "error parsing local address"); |
70 | @@ -XXX,XX +XXX,XX @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, | 70 | @@ -XXX,XX +XXX,XX @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, |
71 | 71 | ||
72 | int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | 72 | int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) |
73 | { | 73 | { |
74 | - struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; | 74 | - struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; |
75 | struct mptcp_pm_addr_entry *match; | 75 | struct mptcp_pm_addr_entry *match; |
76 | struct mptcp_sock *msk; | 76 | struct mptcp_sock *msk; |
77 | + struct nlattr *id; | 77 | + struct nlattr *id; |
78 | int err = -EINVAL; | 78 | int err = -EINVAL; |
79 | struct sock *sk; | 79 | struct sock *sk; |
80 | u8 id_val; | 80 | u8 id_val; |
81 | 81 | ||
82 | - if (!id) { | 82 | - if (!id) { |
83 | - GENL_SET_ERR_MSG(info, "missing required ID"); | 83 | - GENL_SET_ERR_MSG(info, "missing required ID"); |
84 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID)) | 84 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID)) |
85 | return err; | 85 | return err; |
86 | - } | 86 | - } |
87 | 87 | ||
88 | + id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; | 88 | + id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; |
89 | id_val = nla_get_u8(id); | 89 | id_val = nla_get_u8(id); |
90 | 90 | ||
91 | msk = mptcp_userspace_pm_get_sock(info); | 91 | msk = mptcp_userspace_pm_get_sock(info); |
92 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) | 92 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) |
93 | 93 | ||
94 | int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 94 | int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
95 | { | 95 | { |
96 | - struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 96 | - struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
97 | - struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 97 | - struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
98 | struct mptcp_pm_addr_entry entry = { 0 }; | 98 | struct mptcp_pm_addr_entry entry = { 0 }; |
99 | struct mptcp_addr_info addr_r; | 99 | struct mptcp_addr_info addr_r; |
100 | + struct nlattr *raddr, *laddr; | 100 | + struct nlattr *raddr, *laddr; |
101 | struct mptcp_pm_local local; | 101 | struct mptcp_pm_local local; |
102 | struct mptcp_sock *msk; | 102 | struct mptcp_sock *msk; |
103 | int err = -EINVAL; | 103 | int err = -EINVAL; |
104 | struct sock *sk; | 104 | struct sock *sk; |
105 | 105 | ||
106 | - if (!laddr || !raddr) { | 106 | - if (!laddr || !raddr) { |
107 | - GENL_SET_ERR_MSG(info, "missing required address(es)"); | 107 | - GENL_SET_ERR_MSG(info, "missing required address(es)"); |
108 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || | 108 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || |
109 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) | 109 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) |
110 | return err; | 110 | return err; |
111 | - } | 111 | - } |
112 | 112 | ||
113 | msk = mptcp_userspace_pm_get_sock(info); | 113 | msk = mptcp_userspace_pm_get_sock(info); |
114 | if (!msk) | 114 | if (!msk) |
115 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 115 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
116 | 116 | ||
117 | sk = (struct sock *)msk; | 117 | sk = (struct sock *)msk; |
118 | 118 | ||
119 | + laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 119 | + laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
120 | err = mptcp_pm_parse_entry(laddr, info, true, &entry); | 120 | err = mptcp_pm_parse_entry(laddr, info, true, &entry); |
121 | if (err < 0) { | 121 | if (err < 0) { |
122 | NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); | 122 | NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); |
123 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 123 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
124 | } | 124 | } |
125 | entry.flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW; | 125 | entry.flags |= MPTCP_PM_ADDR_FLAG_SUBFLOW; |
126 | 126 | ||
127 | + raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 127 | + raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
128 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); | 128 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); |
129 | if (err < 0) { | 129 | if (err < 0) { |
130 | NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); | 130 | NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); |
131 | @@ -XXX,XX +XXX,XX @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk, | 131 | @@ -XXX,XX +XXX,XX @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_sock *msk, |
132 | 132 | ||
133 | int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info) | 133 | int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info) |
134 | { | 134 | { |
135 | - struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 135 | - struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
136 | - struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 136 | - struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
137 | struct mptcp_pm_addr_entry addr_l; | 137 | struct mptcp_pm_addr_entry addr_l; |
138 | struct mptcp_addr_info addr_r; | 138 | struct mptcp_addr_info addr_r; |
139 | + struct nlattr *raddr, *laddr; | 139 | + struct nlattr *raddr, *laddr; |
140 | struct mptcp_sock *msk; | 140 | struct mptcp_sock *msk; |
141 | struct sock *sk, *ssk; | 141 | struct sock *sk, *ssk; |
142 | int err = -EINVAL; | 142 | int err = -EINVAL; |
143 | 143 | ||
144 | - if (!laddr || !raddr) { | 144 | - if (!laddr || !raddr) { |
145 | - GENL_SET_ERR_MSG(info, "missing required address(es)"); | 145 | - GENL_SET_ERR_MSG(info, "missing required address(es)"); |
146 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || | 146 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || |
147 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) | 147 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) |
148 | return err; | 148 | return err; |
149 | - } | 149 | - } |
150 | 150 | ||
151 | msk = mptcp_userspace_pm_get_sock(info); | 151 | msk = mptcp_userspace_pm_get_sock(info); |
152 | if (!msk) | 152 | if (!msk) |
153 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 153 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
154 | 154 | ||
155 | sk = (struct sock *)msk; | 155 | sk = (struct sock *)msk; |
156 | 156 | ||
157 | + laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 157 | + laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
158 | err = mptcp_pm_parse_entry(laddr, info, true, &addr_l); | 158 | err = mptcp_pm_parse_entry(laddr, info, true, &addr_l); |
159 | if (err < 0) { | 159 | if (err < 0) { |
160 | NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); | 160 | NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); |
161 | goto destroy_err; | 161 | goto destroy_err; |
162 | } | 162 | } |
163 | 163 | ||
164 | + raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 164 | + raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
165 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); | 165 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); |
166 | if (err < 0) { | 166 | if (err < 0) { |
167 | NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); | 167 | NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); |
168 | 168 | ||
169 | -- | 169 | -- |
170 | 2.47.1 | 170 | 2.47.1 | diff view generated by jsdifflib |
1 | mptcp_pm_parse_entry() and mptcp_pm_parse_addr() will already set a | 1 | mptcp_pm_parse_entry() and mptcp_pm_parse_addr() will already set a |
---|---|---|---|
2 | error message in case of parsing issue. | 2 | error message in case of parsing issue. |
3 | 3 | ||
4 | Then, no need to override this error message with another less precise | 4 | Then, no need to override this error message with another less precise |
5 | one: "error parsing address". | 5 | one: "error parsing address". |
6 | 6 | ||
7 | Reviewed-by: Geliang Tang <geliang@kernel.org> | 7 | Reviewed-by: Geliang Tang <geliang@kernel.org> |
8 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 8 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
9 | --- | 9 | --- |
10 | net/mptcp/pm_userspace.c | 20 +++++--------------- | 10 | net/mptcp/pm_userspace.c | 20 +++++--------------- |
11 | 1 file changed, 5 insertions(+), 15 deletions(-) | 11 | 1 file changed, 5 insertions(+), 15 deletions(-) |
12 | 12 | ||
13 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 13 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
14 | index XXXXXXX..XXXXXXX 100644 | 14 | index XXXXXXX..XXXXXXX 100644 |
15 | --- a/net/mptcp/pm_userspace.c | 15 | --- a/net/mptcp/pm_userspace.c |
16 | +++ b/net/mptcp/pm_userspace.c | 16 | +++ b/net/mptcp/pm_userspace.c |
17 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) | 17 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) |
18 | 18 | ||
19 | addr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 19 | addr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
20 | err = mptcp_pm_parse_entry(addr, info, true, &addr_val); | 20 | err = mptcp_pm_parse_entry(addr, info, true, &addr_val); |
21 | - if (err < 0) { | 21 | - if (err < 0) { |
22 | - GENL_SET_ERR_MSG(info, "error parsing local address"); | 22 | - GENL_SET_ERR_MSG(info, "error parsing local address"); |
23 | + if (err < 0) | 23 | + if (err < 0) |
24 | goto announce_err; | 24 | goto announce_err; |
25 | - } | 25 | - } |
26 | 26 | ||
27 | if (addr_val.addr.id == 0) { | 27 | if (addr_val.addr.id == 0) { |
28 | GENL_SET_ERR_MSG(info, "invalid addr id"); | 28 | GENL_SET_ERR_MSG(info, "invalid addr id"); |
29 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 29 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
30 | 30 | ||
31 | laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 31 | laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
32 | err = mptcp_pm_parse_entry(laddr, info, true, &entry); | 32 | err = mptcp_pm_parse_entry(laddr, info, true, &entry); |
33 | - if (err < 0) { | 33 | - if (err < 0) { |
34 | - NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); | 34 | - NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); |
35 | + if (err < 0) | 35 | + if (err < 0) |
36 | goto create_err; | 36 | goto create_err; |
37 | - } | 37 | - } |
38 | 38 | ||
39 | if (entry.flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { | 39 | if (entry.flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { |
40 | GENL_SET_ERR_MSG(info, "invalid addr flags"); | 40 | GENL_SET_ERR_MSG(info, "invalid addr flags"); |
41 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) | 41 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) |
42 | 42 | ||
43 | raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 43 | raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
44 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); | 44 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); |
45 | - if (err < 0) { | 45 | - if (err < 0) { |
46 | - NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); | 46 | - NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); |
47 | + if (err < 0) | 47 | + if (err < 0) |
48 | goto create_err; | 48 | goto create_err; |
49 | - } | 49 | - } |
50 | 50 | ||
51 | if (!mptcp_pm_addr_families_match(sk, &entry.addr, &addr_r)) { | 51 | if (!mptcp_pm_addr_families_match(sk, &entry.addr, &addr_r)) { |
52 | GENL_SET_ERR_MSG(info, "families mismatch"); | 52 | GENL_SET_ERR_MSG(info, "families mismatch"); |
53 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 53 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
54 | 54 | ||
55 | laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 55 | laddr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
56 | err = mptcp_pm_parse_entry(laddr, info, true, &addr_l); | 56 | err = mptcp_pm_parse_entry(laddr, info, true, &addr_l); |
57 | - if (err < 0) { | 57 | - if (err < 0) { |
58 | - NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); | 58 | - NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); |
59 | + if (err < 0) | 59 | + if (err < 0) |
60 | goto destroy_err; | 60 | goto destroy_err; |
61 | - } | 61 | - } |
62 | 62 | ||
63 | raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 63 | raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
64 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); | 64 | err = mptcp_pm_parse_addr(raddr, info, &addr_r); |
65 | - if (err < 0) { | 65 | - if (err < 0) { |
66 | - NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); | 66 | - NL_SET_ERR_MSG_ATTR(info->extack, raddr, "error parsing remote addr"); |
67 | + if (err < 0) | 67 | + if (err < 0) |
68 | goto destroy_err; | 68 | goto destroy_err; |
69 | - } | 69 | - } |
70 | 70 | ||
71 | #if IS_ENABLED(CONFIG_MPTCP_IPV6) | 71 | #if IS_ENABLED(CONFIG_MPTCP_IPV6) |
72 | if (addr_l.addr.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) { | 72 | if (addr_l.addr.family == AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) { |
73 | 73 | ||
74 | -- | 74 | -- |
75 | 2.47.1 | 75 | 2.47.1 | diff view generated by jsdifflib |
1 | mptcp_pm_parse_entry() will check if the given attribute is defined. If | 1 | mptcp_pm_parse_entry() will check if the given attribute is defined. If |
---|---|---|---|
2 | not, it will return a generic error: "missing address info". | 2 | not, it will return a generic error: "missing address info". |
3 | 3 | ||
4 | It might then not be clear for the userspace developer which attribute | 4 | It might then not be clear for the userspace developer which attribute |
5 | is missing, especially when the command takes multiple addresses. | 5 | is missing, especially when the command takes multiple addresses. |
6 | 6 | ||
7 | By using GENL_REQ_ATTR_CHECK(), the userspace will get a hint about | 7 | By using GENL_REQ_ATTR_CHECK(), the userspace will get a hint about |
8 | which attribute is missing, making thing clearer. Note that this is what | 8 | which attribute is missing, making thing clearer. Note that this is what |
9 | was already done for most of the other MPTCP NL commands, this patch | 9 | was already done for most of the other MPTCP NL commands, this patch |
10 | simply adds the missing ones. | 10 | simply adds the missing ones. |
11 | 11 | ||
12 | Reviewed-by: Geliang Tang <geliang@kernel.org> | 12 | Reviewed-by: Geliang Tang <geliang@kernel.org> |
13 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 13 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
14 | --- | 14 | --- |
15 | net/mptcp/pm_netlink.c | 24 ++++++++++++++++++++---- | 15 | net/mptcp/pm_netlink.c | 24 ++++++++++++++++++++---- |
16 | net/mptcp/pm_userspace.c | 15 ++++++++++++--- | 16 | net/mptcp/pm_userspace.c | 15 ++++++++++++--- |
17 | 2 files changed, 32 insertions(+), 7 deletions(-) | 17 | 2 files changed, 32 insertions(+), 7 deletions(-) |
18 | 18 | ||
19 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c | 19 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c |
20 | index XXXXXXX..XXXXXXX 100644 | 20 | index XXXXXXX..XXXXXXX 100644 |
21 | --- a/net/mptcp/pm_netlink.c | 21 | --- a/net/mptcp/pm_netlink.c |
22 | +++ b/net/mptcp/pm_netlink.c | 22 | +++ b/net/mptcp/pm_netlink.c |
23 | @@ -XXX,XX +XXX,XX @@ static bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr, | 23 | @@ -XXX,XX +XXX,XX @@ static bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr, |
24 | 24 | ||
25 | int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info) | 25 | int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, struct genl_info *info) |
26 | { | 26 | { |
27 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 27 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
28 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); | 28 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); |
29 | struct mptcp_pm_addr_entry addr, *entry; | 29 | struct mptcp_pm_addr_entry addr, *entry; |
30 | + struct nlattr *attr; | 30 | + struct nlattr *attr; |
31 | int ret; | 31 | int ret; |
32 | 32 | ||
33 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) | 33 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) |
34 | + return -EINVAL; | 34 | + return -EINVAL; |
35 | + | 35 | + |
36 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 36 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
37 | ret = mptcp_pm_parse_entry(attr, info, true, &addr); | 37 | ret = mptcp_pm_parse_entry(attr, info, true, &addr); |
38 | if (ret < 0) | 38 | if (ret < 0) |
39 | return ret; | 39 | return ret; |
40 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_remove_id_zero_address(struct net *net, | 40 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_remove_id_zero_address(struct net *net, |
41 | 41 | ||
42 | int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info) | 42 | int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, struct genl_info *info) |
43 | { | 43 | { |
44 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 44 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
45 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); | 45 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); |
46 | struct mptcp_pm_addr_entry addr, *entry; | 46 | struct mptcp_pm_addr_entry addr, *entry; |
47 | unsigned int addr_max; | 47 | unsigned int addr_max; |
48 | + struct nlattr *attr; | 48 | + struct nlattr *attr; |
49 | int ret; | 49 | int ret; |
50 | 50 | ||
51 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) | 51 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) |
52 | + return -EINVAL; | 52 | + return -EINVAL; |
53 | + | 53 | + |
54 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 54 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
55 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); | 55 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); |
56 | if (ret < 0) | 56 | if (ret < 0) |
57 | return ret; | 57 | return ret; |
58 | @@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb, | 58 | @@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb, |
59 | 59 | ||
60 | int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) | 60 | int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) |
61 | { | 61 | { |
62 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 62 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
63 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); | 63 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); |
64 | struct mptcp_pm_addr_entry addr, *entry; | 64 | struct mptcp_pm_addr_entry addr, *entry; |
65 | struct sk_buff *msg; | 65 | struct sk_buff *msg; |
66 | + struct nlattr *attr; | 66 | + struct nlattr *attr; |
67 | void *reply; | 67 | void *reply; |
68 | int ret; | 68 | int ret; |
69 | 69 | ||
70 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) | 70 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) |
71 | + return -EINVAL; | 71 | + return -EINVAL; |
72 | + | 72 | + |
73 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 73 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
74 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); | 74 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); |
75 | if (ret < 0) | 75 | if (ret < 0) |
76 | return ret; | 76 | return ret; |
77 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net, | 77 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net, |
78 | int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) | 78 | int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) |
79 | { | 79 | { |
80 | struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }; | 80 | struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }; |
81 | - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 81 | - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
82 | u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP | | 82 | u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP | |
83 | MPTCP_PM_ADDR_FLAG_FULLMESH; | 83 | MPTCP_PM_ADDR_FLAG_FULLMESH; |
84 | struct net *net = sock_net(skb->sk); | 84 | struct net *net = sock_net(skb->sk); |
85 | struct mptcp_pm_addr_entry *entry; | 85 | struct mptcp_pm_addr_entry *entry; |
86 | struct pm_nl_pernet *pernet; | 86 | struct pm_nl_pernet *pernet; |
87 | + struct nlattr *attr; | 87 | + struct nlattr *attr; |
88 | u8 lookup_by_id = 0; | 88 | u8 lookup_by_id = 0; |
89 | u8 bkup = 0; | 89 | u8 bkup = 0; |
90 | int ret; | 90 | int ret; |
91 | 91 | ||
92 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR)) | 92 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR)) |
93 | + return -EINVAL; | 93 | + return -EINVAL; |
94 | + | 94 | + |
95 | pernet = pm_nl_get_pernet(net); | 95 | pernet = pm_nl_get_pernet(net); |
96 | 96 | ||
97 | + attr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 97 | + attr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
98 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); | 98 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); |
99 | if (ret < 0) | 99 | if (ret < 0) |
100 | return ret; | 100 | return ret; |
101 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 101 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
102 | index XXXXXXX..XXXXXXX 100644 | 102 | index XXXXXXX..XXXXXXX 100644 |
103 | --- a/net/mptcp/pm_userspace.c | 103 | --- a/net/mptcp/pm_userspace.c |
104 | +++ b/net/mptcp/pm_userspace.c | 104 | +++ b/net/mptcp/pm_userspace.c |
105 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 105 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
106 | { | 106 | { |
107 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; | 107 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; |
108 | struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; | 108 | struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; |
109 | - struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 109 | - struct nlattr *attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
110 | - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 110 | - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
111 | struct mptcp_pm_addr_entry *entry; | 111 | struct mptcp_pm_addr_entry *entry; |
112 | + struct nlattr *attr, *attr_rem; | 112 | + struct nlattr *attr, *attr_rem; |
113 | struct mptcp_sock *msk; | 113 | struct mptcp_sock *msk; |
114 | int ret = -EINVAL; | 114 | int ret = -EINVAL; |
115 | struct sock *sk; | 115 | struct sock *sk; |
116 | u8 bkup = 0; | 116 | u8 bkup = 0; |
117 | 117 | ||
118 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || | 118 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) || |
119 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) | 119 | + GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE)) |
120 | + return ret; | 120 | + return ret; |
121 | + | 121 | + |
122 | msk = mptcp_userspace_pm_get_sock(info); | 122 | msk = mptcp_userspace_pm_get_sock(info); |
123 | if (!msk) | 123 | if (!msk) |
124 | return ret; | 124 | return ret; |
125 | 125 | ||
126 | sk = (struct sock *)msk; | 126 | sk = (struct sock *)msk; |
127 | 127 | ||
128 | + attr = info->attrs[MPTCP_PM_ATTR_ADDR]; | 128 | + attr = info->attrs[MPTCP_PM_ATTR_ADDR]; |
129 | ret = mptcp_pm_parse_entry(attr, info, false, &loc); | 129 | ret = mptcp_pm_parse_entry(attr, info, false, &loc); |
130 | if (ret < 0) | 130 | if (ret < 0) |
131 | goto set_flags_err; | 131 | goto set_flags_err; |
132 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 132 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
133 | goto set_flags_err; | 133 | goto set_flags_err; |
134 | } | 134 | } |
135 | 135 | ||
136 | + attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 136 | + attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
137 | ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); | 137 | ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); |
138 | if (ret < 0) | 138 | if (ret < 0) |
139 | goto set_flags_err; | 139 | goto set_flags_err; |
140 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, | 140 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, |
141 | int mptcp_userspace_pm_get_addr(struct sk_buff *skb, | 141 | int mptcp_userspace_pm_get_addr(struct sk_buff *skb, |
142 | struct genl_info *info) | 142 | struct genl_info *info) |
143 | { | 143 | { |
144 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 144 | - struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
145 | struct mptcp_pm_addr_entry addr, *entry; | 145 | struct mptcp_pm_addr_entry addr, *entry; |
146 | struct mptcp_sock *msk; | 146 | struct mptcp_sock *msk; |
147 | struct sk_buff *msg; | 147 | struct sk_buff *msg; |
148 | + struct nlattr *attr; | 148 | + struct nlattr *attr; |
149 | int ret = -EINVAL; | 149 | int ret = -EINVAL; |
150 | struct sock *sk; | 150 | struct sock *sk; |
151 | void *reply; | 151 | void *reply; |
152 | 152 | ||
153 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) | 153 | + if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) |
154 | + return ret; | 154 | + return ret; |
155 | + | 155 | + |
156 | msk = mptcp_userspace_pm_get_sock(info); | 156 | msk = mptcp_userspace_pm_get_sock(info); |
157 | if (!msk) | 157 | if (!msk) |
158 | return ret; | 158 | return ret; |
159 | 159 | ||
160 | sk = (struct sock *)msk; | 160 | sk = (struct sock *)msk; |
161 | 161 | ||
162 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | 162 | + attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; |
163 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); | 163 | ret = mptcp_pm_parse_entry(attr, info, false, &addr); |
164 | if (ret < 0) | 164 | if (ret < 0) |
165 | goto out; | 165 | goto out; |
166 | 166 | ||
167 | -- | 167 | -- |
168 | 2.47.1 | 168 | 2.47.1 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
76 | - GENL_SET_ERR_MSG(info, "address not found"); | 76 | - GENL_SET_ERR_MSG(info, "address not found"); |
77 | + NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found"); | 77 | + NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found"); |
78 | return -EINVAL; | 78 | return -EINVAL; |
79 | } | 79 | } |
80 | if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && | 80 | if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && |
81 | (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { | 81 | (entry->flags & (MPTCP_PM_ADDR_FLAG_SIGNAL | |
82 | MPTCP_PM_ADDR_FLAG_IMPLICIT))) { | ||
82 | spin_unlock_bh(&pernet->lock); | 83 | spin_unlock_bh(&pernet->lock); |
83 | - GENL_SET_ERR_MSG(info, "invalid addr flags"); | 84 | - GENL_SET_ERR_MSG(info, "invalid addr flags"); |
84 | + NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags"); | 85 | + NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags"); |
85 | return -EINVAL; | 86 | return -EINVAL; |
86 | } | 87 | } |
... | ... | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | Three netlink functions: | 3 | Three netlink functions: |
4 | 4 | ||
5 | mptcp_pm_nl_get_addr_doit() | 5 | mptcp_pm_nl_get_addr_doit() |
6 | mptcp_pm_nl_get_addr_dumpit() | 6 | mptcp_pm_nl_get_addr_dumpit() |
7 | mptcp_pm_nl_set_flags_doit() | 7 | mptcp_pm_nl_set_flags_doit() |
8 | 8 | ||
9 | are generic, implemented for each PM, in-kernel PM and userspace PM. It's | 9 | are generic, implemented for each PM, in-kernel PM and userspace PM. It's |
10 | clearer to move them from pm_netlink.c to pm.c. | 10 | clearer to move them from pm_netlink.c to pm.c. |
11 | 11 | ||
12 | And the linked three path manager wrappers | 12 | And the linked three path manager wrappers |
13 | 13 | ||
14 | mptcp_pm_get_addr() | 14 | mptcp_pm_get_addr() |
15 | mptcp_pm_dump_addr() | 15 | mptcp_pm_dump_addr() |
16 | mptcp_pm_set_flags() | 16 | mptcp_pm_set_flags() |
17 | 17 | ||
18 | can be changed as static functions, no need to export them in protocol.h. | 18 | can be changed as static functions, no need to export them in protocol.h. |
19 | 19 | ||
20 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 20 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
21 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 21 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
22 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 22 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
23 | --- | 23 | --- |
24 | net/mptcp/pm.c | 23 ++++++++++++++++++++--- | 24 | net/mptcp/pm.c | 23 ++++++++++++++++++++--- |
25 | net/mptcp/pm_netlink.c | 16 ---------------- | 25 | net/mptcp/pm_netlink.c | 16 ---------------- |
26 | net/mptcp/protocol.h | 3 --- | 26 | net/mptcp/protocol.h | 3 --- |
27 | 3 files changed, 20 insertions(+), 22 deletions(-) | 27 | 3 files changed, 20 insertions(+), 22 deletions(-) |
28 | 28 | ||
29 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c | 29 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c |
30 | index XXXXXXX..XXXXXXX 100644 | 30 | index XXXXXXX..XXXXXXX 100644 |
31 | --- a/net/mptcp/pm.c | 31 | --- a/net/mptcp/pm.c |
32 | +++ b/net/mptcp/pm.c | 32 | +++ b/net/mptcp/pm.c |
33 | @@ -XXX,XX +XXX,XX @@ | 33 | @@ -XXX,XX +XXX,XX @@ |
34 | #include "protocol.h" | 34 | #include "protocol.h" |
35 | 35 | ||
36 | #include "mib.h" | 36 | #include "mib.h" |
37 | +#include "mptcp_pm_gen.h" | 37 | +#include "mptcp_pm_gen.h" |
38 | 38 | ||
39 | /* path manager command handlers */ | 39 | /* path manager command handlers */ |
40 | 40 | ||
41 | @@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) | 41 | @@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) |
42 | return mptcp_pm_nl_is_backup(msk, &skc_local); | 42 | return mptcp_pm_nl_is_backup(msk, &skc_local); |
43 | } | 43 | } |
44 | 44 | ||
45 | -int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) | 45 | -int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) |
46 | +static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) | 46 | +static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) |
47 | { | 47 | { |
48 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) | 48 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) |
49 | return mptcp_userspace_pm_get_addr(skb, info); | 49 | return mptcp_userspace_pm_get_addr(skb, info); |
50 | return mptcp_pm_nl_get_addr(skb, info); | 50 | return mptcp_pm_nl_get_addr(skb, info); |
51 | } | 51 | } |
52 | 52 | ||
53 | -int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) | 53 | -int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) |
54 | +int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) | 54 | +int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) |
55 | +{ | 55 | +{ |
56 | + return mptcp_pm_get_addr(skb, info); | 56 | + return mptcp_pm_get_addr(skb, info); |
57 | +} | 57 | +} |
58 | + | 58 | + |
59 | +static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) | 59 | +static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) |
60 | { | 60 | { |
61 | const struct genl_info *info = genl_info_dump(cb); | 61 | const struct genl_info *info = genl_info_dump(cb); |
62 | 62 | ||
63 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) | 63 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) |
64 | return mptcp_pm_nl_dump_addr(msg, cb); | 64 | return mptcp_pm_nl_dump_addr(msg, cb); |
65 | } | 65 | } |
66 | 66 | ||
67 | -int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 67 | -int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
68 | +int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, | 68 | +int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, |
69 | + struct netlink_callback *cb) | 69 | + struct netlink_callback *cb) |
70 | +{ | 70 | +{ |
71 | + return mptcp_pm_dump_addr(msg, cb); | 71 | + return mptcp_pm_dump_addr(msg, cb); |
72 | +} | 72 | +} |
73 | + | 73 | + |
74 | +static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 74 | +static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
75 | { | 75 | { |
76 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) | 76 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) |
77 | return mptcp_userspace_pm_set_flags(skb, info); | 77 | return mptcp_userspace_pm_set_flags(skb, info); |
78 | return mptcp_pm_nl_set_flags(skb, info); | 78 | return mptcp_pm_nl_set_flags(skb, info); |
79 | } | 79 | } |
80 | 80 | ||
81 | +int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) | 81 | +int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) |
82 | +{ | 82 | +{ |
83 | + return mptcp_pm_set_flags(skb, info); | 83 | + return mptcp_pm_set_flags(skb, info); |
84 | +} | 84 | +} |
85 | + | 85 | + |
86 | void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) | 86 | void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) |
87 | { | 87 | { |
88 | struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); | 88 | struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); |
89 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c | 89 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c |
90 | index XXXXXXX..XXXXXXX 100644 | 90 | index XXXXXXX..XXXXXXX 100644 |
91 | --- a/net/mptcp/pm_netlink.c | 91 | --- a/net/mptcp/pm_netlink.c |
92 | +++ b/net/mptcp/pm_netlink.c | 92 | +++ b/net/mptcp/pm_netlink.c |
93 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) | 93 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) |
94 | return ret; | 94 | return ret; |
95 | } | 95 | } |
96 | 96 | ||
97 | -int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) | 97 | -int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) |
98 | -{ | 98 | -{ |
99 | - return mptcp_pm_get_addr(skb, info); | 99 | - return mptcp_pm_get_addr(skb, info); |
100 | -} | 100 | -} |
101 | - | 101 | - |
102 | int mptcp_pm_nl_dump_addr(struct sk_buff *msg, | 102 | int mptcp_pm_nl_dump_addr(struct sk_buff *msg, |
103 | struct netlink_callback *cb) | 103 | struct netlink_callback *cb) |
104 | { | 104 | { |
105 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, | 105 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, |
106 | return msg->len; | 106 | return msg->len; |
107 | } | 107 | } |
108 | 108 | ||
109 | -int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, | 109 | -int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, |
110 | - struct netlink_callback *cb) | 110 | - struct netlink_callback *cb) |
111 | -{ | 111 | -{ |
112 | - return mptcp_pm_dump_addr(msg, cb); | 112 | - return mptcp_pm_dump_addr(msg, cb); |
113 | -} | 113 | -} |
114 | - | 114 | - |
115 | static int parse_limit(struct genl_info *info, int id, unsigned int *limit) | 115 | static int parse_limit(struct genl_info *info, int id, unsigned int *limit) |
116 | { | 116 | { |
117 | struct nlattr *attr = info->attrs[id]; | 117 | struct nlattr *attr = info->attrs[id]; |
118 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) | 118 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) |
119 | return 0; | 119 | return 0; |
120 | } | 120 | } |
121 | 121 | ||
122 | -int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) | 122 | -int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) |
123 | -{ | 123 | -{ |
124 | - return mptcp_pm_set_flags(skb, info); | 124 | - return mptcp_pm_set_flags(skb, info); |
125 | -} | 125 | -} |
126 | - | 126 | - |
127 | static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gfp_t gfp) | 127 | static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gfp_t gfp) |
128 | { | 128 | { |
129 | genlmsg_multicast_netns(&mptcp_genl_family, net, | 129 | genlmsg_multicast_netns(&mptcp_genl_family, net, |
130 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h | 130 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h |
131 | index XXXXXXX..XXXXXXX 100644 | 131 | index XXXXXXX..XXXXXXX 100644 |
132 | --- a/net/mptcp/protocol.h | 132 | --- a/net/mptcp/protocol.h |
133 | +++ b/net/mptcp/protocol.h | 133 | +++ b/net/mptcp/protocol.h |
134 | @@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, | 134 | @@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, |
135 | const struct mptcp_addr_info *saddr); | 135 | const struct mptcp_addr_info *saddr); |
136 | bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, | 136 | bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, |
137 | const struct mptcp_addr_info *addr); | 137 | const struct mptcp_addr_info *addr); |
138 | -int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info); | 138 | -int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info); |
139 | int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); | 139 | int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); |
140 | int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info); | 140 | int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info); |
141 | int mptcp_pm_announce_addr(struct mptcp_sock *msk, | 141 | int mptcp_pm_announce_addr(struct mptcp_sock *msk, |
142 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_in | 142 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_in |
143 | bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); | 143 | bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); |
144 | bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); | 144 | bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); |
145 | bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); | 145 | bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); |
146 | -int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); | 146 | -int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); |
147 | int mptcp_pm_nl_dump_addr(struct sk_buff *msg, | 147 | int mptcp_pm_nl_dump_addr(struct sk_buff *msg, |
148 | struct netlink_callback *cb); | 148 | struct netlink_callback *cb); |
149 | int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, | 149 | int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, |
150 | struct netlink_callback *cb); | 150 | struct netlink_callback *cb); |
151 | -int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info); | 151 | -int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info); |
152 | int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info); | 152 | int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info); |
153 | int mptcp_userspace_pm_get_addr(struct sk_buff *skb, | 153 | int mptcp_userspace_pm_get_addr(struct sk_buff *skb, |
154 | struct genl_info *info); | 154 | struct genl_info *info); |
155 | 155 | ||
156 | -- | 156 | -- |
157 | 2.47.1 | 157 | 2.47.1 | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | The first parameters 'skb' of get_addr() interfaces are now useless | 3 | The first parameters 'skb' of get_addr() interfaces are now useless |
4 | since mptcp_userspace_pm_get_sock() helper is used. This patch drops | 4 | since mptcp_userspace_pm_get_sock() helper is used. This patch drops |
5 | these useless parameters of them. | 5 | these useless parameters of them. |
6 | 6 | ||
7 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 7 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
8 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 8 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
9 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 9 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
10 | --- | 10 | --- |
11 | net/mptcp/pm.c | 8 ++++---- | 11 | net/mptcp/pm.c | 8 ++++---- |
12 | net/mptcp/pm_netlink.c | 2 +- | 12 | net/mptcp/pm_netlink.c | 2 +- |
13 | net/mptcp/pm_userspace.c | 3 +-- | 13 | net/mptcp/pm_userspace.c | 3 +-- |
14 | net/mptcp/protocol.h | 5 ++--- | 14 | net/mptcp/protocol.h | 5 ++--- |
15 | 4 files changed, 8 insertions(+), 10 deletions(-) | 15 | 4 files changed, 8 insertions(+), 10 deletions(-) |
16 | 16 | ||
17 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c | 17 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c |
18 | index XXXXXXX..XXXXXXX 100644 | 18 | index XXXXXXX..XXXXXXX 100644 |
19 | --- a/net/mptcp/pm.c | 19 | --- a/net/mptcp/pm.c |
20 | +++ b/net/mptcp/pm.c | 20 | +++ b/net/mptcp/pm.c |
21 | @@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) | 21 | @@ -XXX,XX +XXX,XX @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) |
22 | return mptcp_pm_nl_is_backup(msk, &skc_local); | 22 | return mptcp_pm_nl_is_backup(msk, &skc_local); |
23 | } | 23 | } |
24 | 24 | ||
25 | -static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) | 25 | -static int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) |
26 | +static int mptcp_pm_get_addr(struct genl_info *info) | 26 | +static int mptcp_pm_get_addr(struct genl_info *info) |
27 | { | 27 | { |
28 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) | 28 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) |
29 | - return mptcp_userspace_pm_get_addr(skb, info); | 29 | - return mptcp_userspace_pm_get_addr(skb, info); |
30 | - return mptcp_pm_nl_get_addr(skb, info); | 30 | - return mptcp_pm_nl_get_addr(skb, info); |
31 | + return mptcp_userspace_pm_get_addr(info); | 31 | + return mptcp_userspace_pm_get_addr(info); |
32 | + return mptcp_pm_nl_get_addr(info); | 32 | + return mptcp_pm_nl_get_addr(info); |
33 | } | 33 | } |
34 | 34 | ||
35 | int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) | 35 | int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) |
36 | { | 36 | { |
37 | - return mptcp_pm_get_addr(skb, info); | 37 | - return mptcp_pm_get_addr(skb, info); |
38 | + return mptcp_pm_get_addr(info); | 38 | + return mptcp_pm_get_addr(info); |
39 | } | 39 | } |
40 | 40 | ||
41 | static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) | 41 | static int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) |
42 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c | 42 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c |
43 | index XXXXXXX..XXXXXXX 100644 | 43 | index XXXXXXX..XXXXXXX 100644 |
44 | --- a/net/mptcp/pm_netlink.c | 44 | --- a/net/mptcp/pm_netlink.c |
45 | +++ b/net/mptcp/pm_netlink.c | 45 | +++ b/net/mptcp/pm_netlink.c |
46 | @@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb, | 46 | @@ -XXX,XX +XXX,XX @@ int mptcp_nl_fill_addr(struct sk_buff *skb, |
47 | return -EMSGSIZE; | 47 | return -EMSGSIZE; |
48 | } | 48 | } |
49 | 49 | ||
50 | -int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) | 50 | -int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) |
51 | +int mptcp_pm_nl_get_addr(struct genl_info *info) | 51 | +int mptcp_pm_nl_get_addr(struct genl_info *info) |
52 | { | 52 | { |
53 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); | 53 | struct pm_nl_pernet *pernet = genl_info_pm_nl(info); |
54 | struct mptcp_pm_addr_entry addr, *entry; | 54 | struct mptcp_pm_addr_entry addr, *entry; |
55 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 55 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
56 | index XXXXXXX..XXXXXXX 100644 | 56 | index XXXXXXX..XXXXXXX 100644 |
57 | --- a/net/mptcp/pm_userspace.c | 57 | --- a/net/mptcp/pm_userspace.c |
58 | +++ b/net/mptcp/pm_userspace.c | 58 | +++ b/net/mptcp/pm_userspace.c |
59 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, | 59 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, |
60 | return ret; | 60 | return ret; |
61 | } | 61 | } |
62 | 62 | ||
63 | -int mptcp_userspace_pm_get_addr(struct sk_buff *skb, | 63 | -int mptcp_userspace_pm_get_addr(struct sk_buff *skb, |
64 | - struct genl_info *info) | 64 | - struct genl_info *info) |
65 | +int mptcp_userspace_pm_get_addr(struct genl_info *info) | 65 | +int mptcp_userspace_pm_get_addr(struct genl_info *info) |
66 | { | 66 | { |
67 | struct mptcp_pm_addr_entry addr, *entry; | 67 | struct mptcp_pm_addr_entry addr, *entry; |
68 | struct mptcp_sock *msk; | 68 | struct mptcp_sock *msk; |
69 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h | 69 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h |
70 | index XXXXXXX..XXXXXXX 100644 | 70 | index XXXXXXX..XXXXXXX 100644 |
71 | --- a/net/mptcp/protocol.h | 71 | --- a/net/mptcp/protocol.h |
72 | +++ b/net/mptcp/protocol.h | 72 | +++ b/net/mptcp/protocol.h |
73 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, | 73 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, |
74 | struct netlink_callback *cb); | 74 | struct netlink_callback *cb); |
75 | int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, | 75 | int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, |
76 | struct netlink_callback *cb); | 76 | struct netlink_callback *cb); |
77 | -int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info); | 77 | -int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info); |
78 | -int mptcp_userspace_pm_get_addr(struct sk_buff *skb, | 78 | -int mptcp_userspace_pm_get_addr(struct sk_buff *skb, |
79 | - struct genl_info *info); | 79 | - struct genl_info *info); |
80 | +int mptcp_pm_nl_get_addr(struct genl_info *info); | 80 | +int mptcp_pm_nl_get_addr(struct genl_info *info); |
81 | +int mptcp_userspace_pm_get_addr(struct genl_info *info); | 81 | +int mptcp_userspace_pm_get_addr(struct genl_info *info); |
82 | 82 | ||
83 | static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow) | 83 | static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflow) |
84 | { | 84 | { |
85 | 85 | ||
86 | -- | 86 | -- |
87 | 2.47.1 | 87 | 2.47.1 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
12 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 12 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
13 | --- | 13 | --- |
14 | v2: | 14 | v2: |
15 | - Fix 'attr' no longer being set in mptcp_pm_nl_get_addr(), but still | 15 | - Fix 'attr' no longer being set in mptcp_pm_nl_get_addr(), but still |
16 | used in this patch (no longer in the next one). (Simon) | 16 | used in this patch (no longer in the next one). (Simon) |
17 | v3: | ||
18 | - Same fix, but in mptcp_userspace_pm_get_addr(). | ||
17 | --- | 19 | --- |
18 | net/mptcp/pm.c | 20 ++++++++++++++++---- | 20 | net/mptcp/pm.c | 20 ++++++++++++++++---- |
19 | net/mptcp/pm_netlink.c | 16 ++++------------ | 21 | net/mptcp/pm_netlink.c | 16 ++++------------ |
20 | net/mptcp/pm_userspace.c | 14 +++----------- | 22 | net/mptcp/pm_userspace.c | 16 ++++------------ |
21 | net/mptcp/protocol.h | 4 ++-- | 23 | net/mptcp/protocol.h | 4 ++-- |
22 | 4 files changed, 25 insertions(+), 29 deletions(-) | 24 | 4 files changed, 26 insertions(+), 30 deletions(-) |
23 | 25 | ||
24 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c | 26 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c |
25 | index XXXXXXX..XXXXXXX 100644 | 27 | index XXXXXXX..XXXXXXX 100644 |
26 | --- a/net/mptcp/pm.c | 28 | --- a/net/mptcp/pm.c |
27 | +++ b/net/mptcp/pm.c | 29 | +++ b/net/mptcp/pm.c |
... | ... | ||
108 | 110 | ||
109 | -int mptcp_userspace_pm_get_addr(struct genl_info *info) | 111 | -int mptcp_userspace_pm_get_addr(struct genl_info *info) |
110 | +int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info) | 112 | +int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info) |
111 | { | 113 | { |
112 | - struct mptcp_pm_addr_entry addr, *entry; | 114 | - struct mptcp_pm_addr_entry addr, *entry; |
115 | + struct nlattr *attr = attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | ||
113 | + struct mptcp_pm_addr_entry *entry; | 116 | + struct mptcp_pm_addr_entry *entry; |
114 | struct mptcp_sock *msk; | 117 | struct mptcp_sock *msk; |
115 | struct sk_buff *msg; | 118 | struct sk_buff *msg; |
116 | struct nlattr *attr; | 119 | - struct nlattr *attr; |
117 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_get_addr(struct genl_info *info) | 120 | int ret = -EINVAL; |
118 | struct sock *sk; | 121 | struct sock *sk; |
119 | void *reply; | 122 | void *reply; |
120 | 123 | ||
121 | - if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) | 124 | - if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ENDPOINT_ADDR)) |
122 | - return ret; | 125 | - return ret; |
... | ... | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
177 | 177 | ||
178 | -int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info) | 178 | -int mptcp_userspace_pm_get_addr(u8 id, struct genl_info *info) |
179 | +int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, | 179 | +int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, |
180 | + struct genl_info *info) | 180 | + struct genl_info *info) |
181 | { | 181 | { |
182 | - struct nlattr *attr = attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR]; | ||
182 | struct mptcp_pm_addr_entry *entry; | 183 | struct mptcp_pm_addr_entry *entry; |
183 | struct mptcp_sock *msk; | 184 | struct mptcp_sock *msk; |
184 | - struct sk_buff *msg; | 185 | - struct sk_buff *msg; |
185 | - struct nlattr *attr; | ||
186 | int ret = -EINVAL; | 186 | int ret = -EINVAL; |
187 | struct sock *sk; | 187 | struct sock *sk; |
188 | - void *reply; | 188 | - void *reply; |
189 | 189 | ||
190 | msk = mptcp_userspace_pm_get_sock(info); | 190 | msk = mptcp_userspace_pm_get_sock(info); |
... | ... | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | The first parameter 'skb' in mptcp_pm_nl_set_flags() is only used to | 3 | The first parameter 'skb' in mptcp_pm_nl_set_flags() is only used to |
4 | obtained the network namespace, which can also be obtained through the | 4 | obtained the network namespace, which can also be obtained through the |
5 | second parameters 'info' by using genl_info_net() helper. | 5 | second parameters 'info' by using genl_info_net() helper. |
6 | 6 | ||
7 | This patch drops these useless parameters 'skb' in all three set_flags() | 7 | This patch drops these useless parameters 'skb' in all three set_flags() |
8 | interfaces. | 8 | interfaces. |
9 | 9 | ||
10 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 10 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
11 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 11 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
12 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 12 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
13 | --- | 13 | --- |
14 | net/mptcp/pm.c | 8 ++++---- | 14 | net/mptcp/pm.c | 8 ++++---- |
15 | net/mptcp/pm_netlink.c | 4 ++-- | 15 | net/mptcp/pm_netlink.c | 4 ++-- |
16 | net/mptcp/pm_userspace.c | 2 +- | 16 | net/mptcp/pm_userspace.c | 2 +- |
17 | net/mptcp/protocol.h | 4 ++-- | 17 | net/mptcp/protocol.h | 4 ++-- |
18 | 4 files changed, 9 insertions(+), 9 deletions(-) | 18 | 4 files changed, 9 insertions(+), 9 deletions(-) |
19 | 19 | ||
20 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c | 20 | diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c |
21 | index XXXXXXX..XXXXXXX 100644 | 21 | index XXXXXXX..XXXXXXX 100644 |
22 | --- a/net/mptcp/pm.c | 22 | --- a/net/mptcp/pm.c |
23 | +++ b/net/mptcp/pm.c | 23 | +++ b/net/mptcp/pm.c |
24 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, | 24 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, |
25 | return mptcp_pm_dump_addr(msg, cb); | 25 | return mptcp_pm_dump_addr(msg, cb); |
26 | } | 26 | } |
27 | 27 | ||
28 | -static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 28 | -static int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
29 | +static int mptcp_pm_set_flags(struct genl_info *info) | 29 | +static int mptcp_pm_set_flags(struct genl_info *info) |
30 | { | 30 | { |
31 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) | 31 | if (info->attrs[MPTCP_PM_ATTR_TOKEN]) |
32 | - return mptcp_userspace_pm_set_flags(skb, info); | 32 | - return mptcp_userspace_pm_set_flags(skb, info); |
33 | - return mptcp_pm_nl_set_flags(skb, info); | 33 | - return mptcp_pm_nl_set_flags(skb, info); |
34 | + return mptcp_userspace_pm_set_flags(info); | 34 | + return mptcp_userspace_pm_set_flags(info); |
35 | + return mptcp_pm_nl_set_flags(info); | 35 | + return mptcp_pm_nl_set_flags(info); |
36 | } | 36 | } |
37 | 37 | ||
38 | int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) | 38 | int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) |
39 | { | 39 | { |
40 | - return mptcp_pm_set_flags(skb, info); | 40 | - return mptcp_pm_set_flags(skb, info); |
41 | + return mptcp_pm_set_flags(info); | 41 | + return mptcp_pm_set_flags(info); |
42 | } | 42 | } |
43 | 43 | ||
44 | void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) | 44 | void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) |
45 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c | 45 | diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c |
46 | index XXXXXXX..XXXXXXX 100644 | 46 | index XXXXXXX..XXXXXXX 100644 |
47 | --- a/net/mptcp/pm_netlink.c | 47 | --- a/net/mptcp/pm_netlink.c |
48 | +++ b/net/mptcp/pm_netlink.c | 48 | +++ b/net/mptcp/pm_netlink.c |
49 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net, | 49 | @@ -XXX,XX +XXX,XX @@ static int mptcp_nl_set_flags(struct net *net, |
50 | return ret; | 50 | return ret; |
51 | } | 51 | } |
52 | 52 | ||
53 | -int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) | 53 | -int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) |
54 | +int mptcp_pm_nl_set_flags(struct genl_info *info) | 54 | +int mptcp_pm_nl_set_flags(struct genl_info *info) |
55 | { | 55 | { |
56 | struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }; | 56 | struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }; |
57 | u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP | | 57 | u8 changed, mask = MPTCP_PM_ADDR_FLAG_BACKUP | |
58 | MPTCP_PM_ADDR_FLAG_FULLMESH; | 58 | MPTCP_PM_ADDR_FLAG_FULLMESH; |
59 | - struct net *net = sock_net(skb->sk); | 59 | - struct net *net = sock_net(skb->sk); |
60 | + struct net *net = genl_info_net(info); | 60 | + struct net *net = genl_info_net(info); |
61 | struct mptcp_pm_addr_entry *entry; | 61 | struct mptcp_pm_addr_entry *entry; |
62 | struct pm_nl_pernet *pernet; | 62 | struct pm_nl_pernet *pernet; |
63 | struct nlattr *attr; | 63 | struct nlattr *attr; |
64 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 64 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
65 | index XXXXXXX..XXXXXXX 100644 | 65 | index XXXXXXX..XXXXXXX 100644 |
66 | --- a/net/mptcp/pm_userspace.c | 66 | --- a/net/mptcp/pm_userspace.c |
67 | +++ b/net/mptcp/pm_userspace.c | 67 | +++ b/net/mptcp/pm_userspace.c |
68 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 68 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
69 | return err; | 69 | return err; |
70 | } | 70 | } |
71 | 71 | ||
72 | -int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) | 72 | -int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) |
73 | +int mptcp_userspace_pm_set_flags(struct genl_info *info) | 73 | +int mptcp_userspace_pm_set_flags(struct genl_info *info) |
74 | { | 74 | { |
75 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; | 75 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; |
76 | struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; | 76 | struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; |
77 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h | 77 | diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h |
78 | index XXXXXXX..XXXXXXX 100644 | 78 | index XXXXXXX..XXXXXXX 100644 |
79 | --- a/net/mptcp/protocol.h | 79 | --- a/net/mptcp/protocol.h |
80 | +++ b/net/mptcp/protocol.h | 80 | +++ b/net/mptcp/protocol.h |
81 | @@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, | 81 | @@ -XXX,XX +XXX,XX @@ bool mptcp_lookup_subflow_by_saddr(const struct list_head *list, |
82 | const struct mptcp_addr_info *saddr); | 82 | const struct mptcp_addr_info *saddr); |
83 | bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, | 83 | bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk, |
84 | const struct mptcp_addr_info *addr); | 84 | const struct mptcp_addr_info *addr); |
85 | -int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); | 85 | -int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); |
86 | -int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info); | 86 | -int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info); |
87 | +int mptcp_pm_nl_set_flags(struct genl_info *info); | 87 | +int mptcp_pm_nl_set_flags(struct genl_info *info); |
88 | +int mptcp_userspace_pm_set_flags(struct genl_info *info); | 88 | +int mptcp_userspace_pm_set_flags(struct genl_info *info); |
89 | int mptcp_pm_announce_addr(struct mptcp_sock *msk, | 89 | int mptcp_pm_announce_addr(struct mptcp_sock *msk, |
90 | const struct mptcp_addr_info *addr, | 90 | const struct mptcp_addr_info *addr, |
91 | bool echo); | 91 | bool echo); |
92 | 92 | ||
93 | -- | 93 | -- |
94 | 2.47.1 | 94 | 2.47.1 | diff view generated by jsdifflib |
1 | From: Geliang Tang <tanggeliang@kylinos.cn> | 1 | From: Geliang Tang <tanggeliang@kylinos.cn> |
---|---|---|---|
2 | 2 | ||
3 | Generally, in the path manager interfaces, the local address is defined | 3 | Generally, in the path manager interfaces, the local address is defined |
4 | as an mptcp_pm_addr_entry type address, while the remote address is | 4 | as an mptcp_pm_addr_entry type address, while the remote address is |
5 | defined as an mptcp_addr_info type one: | 5 | defined as an mptcp_addr_info type one: |
6 | 6 | ||
7 | (struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote) | 7 | (struct mptcp_pm_addr_entry *local, struct mptcp_addr_info *remote) |
8 | 8 | ||
9 | But the set_flags() interface uses two mptcp_pm_addr_entry type | 9 | But the set_flags() interface uses two mptcp_pm_addr_entry type |
10 | parameters. | 10 | parameters. |
11 | 11 | ||
12 | This patch changes the second one to mptcp_addr_info type and use helper | 12 | This patch changes the second one to mptcp_addr_info type and use helper |
13 | mptcp_pm_parse_addr() to parse it instead of using mptcp_pm_parse_entry(). | 13 | mptcp_pm_parse_addr() to parse it instead of using mptcp_pm_parse_entry(). |
14 | 14 | ||
15 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> | 15 | Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> |
16 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 16 | Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
17 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> | 17 | Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> |
18 | --- | 18 | --- |
19 | net/mptcp/pm_userspace.c | 8 ++++---- | 19 | net/mptcp/pm_userspace.c | 8 ++++---- |
20 | 1 file changed, 4 insertions(+), 4 deletions(-) | 20 | 1 file changed, 4 insertions(+), 4 deletions(-) |
21 | 21 | ||
22 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c | 22 | diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c |
23 | index XXXXXXX..XXXXXXX 100644 | 23 | index XXXXXXX..XXXXXXX 100644 |
24 | --- a/net/mptcp/pm_userspace.c | 24 | --- a/net/mptcp/pm_userspace.c |
25 | +++ b/net/mptcp/pm_userspace.c | 25 | +++ b/net/mptcp/pm_userspace.c |
26 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info | 26 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info *info |
27 | int mptcp_userspace_pm_set_flags(struct genl_info *info) | 27 | int mptcp_userspace_pm_set_flags(struct genl_info *info) |
28 | { | 28 | { |
29 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; | 29 | struct mptcp_pm_addr_entry loc = { .addr = { .family = AF_UNSPEC }, }; |
30 | - struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; | 30 | - struct mptcp_pm_addr_entry rem = { .addr = { .family = AF_UNSPEC }, }; |
31 | + struct mptcp_addr_info rem = { .family = AF_UNSPEC, }; | 31 | + struct mptcp_addr_info rem = { .family = AF_UNSPEC, }; |
32 | struct mptcp_pm_addr_entry *entry; | 32 | struct mptcp_pm_addr_entry *entry; |
33 | struct nlattr *attr, *attr_rem; | 33 | struct nlattr *attr, *attr_rem; |
34 | struct mptcp_sock *msk; | 34 | struct mptcp_sock *msk; |
35 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info) | 35 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info) |
36 | } | 36 | } |
37 | 37 | ||
38 | attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; | 38 | attr_rem = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; |
39 | - ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); | 39 | - ret = mptcp_pm_parse_entry(attr_rem, info, false, &rem); |
40 | + ret = mptcp_pm_parse_addr(attr_rem, info, &rem); | 40 | + ret = mptcp_pm_parse_addr(attr_rem, info, &rem); |
41 | if (ret < 0) | 41 | if (ret < 0) |
42 | goto set_flags_err; | 42 | goto set_flags_err; |
43 | 43 | ||
44 | - if (rem.addr.family == AF_UNSPEC) { | 44 | - if (rem.addr.family == AF_UNSPEC) { |
45 | + if (rem.family == AF_UNSPEC) { | 45 | + if (rem.family == AF_UNSPEC) { |
46 | NL_SET_ERR_MSG_ATTR(info->extack, attr_rem, | 46 | NL_SET_ERR_MSG_ATTR(info->extack, attr_rem, |
47 | "invalid remote address family"); | 47 | "invalid remote address family"); |
48 | ret = -EINVAL; | 48 | ret = -EINVAL; |
49 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info) | 49 | @@ -XXX,XX +XXX,XX @@ int mptcp_userspace_pm_set_flags(struct genl_info *info) |
50 | spin_unlock_bh(&msk->pm.lock); | 50 | spin_unlock_bh(&msk->pm.lock); |
51 | 51 | ||
52 | lock_sock(sk); | 52 | lock_sock(sk); |
53 | - ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); | 53 | - ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); |
54 | + ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem, bkup); | 54 | + ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem, bkup); |
55 | release_sock(sk); | 55 | release_sock(sk); |
56 | 56 | ||
57 | /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */ | 57 | /* mptcp_pm_nl_mp_prio_send_ack() only fails in one case */ |
58 | 58 | ||
59 | -- | 59 | -- |
60 | 2.47.1 | 60 | 2.47.1 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
103 | NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found"); | 103 | NL_SET_ERR_MSG_ATTR(info->extack, attr, "address not found"); |
104 | return -EINVAL; | 104 | return -EINVAL; |
105 | } | 105 | } |
106 | - if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && | 106 | - if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && |
107 | + if ((local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && | 107 | + if ((local->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && |
108 | (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { | 108 | (entry->flags & (MPTCP_PM_ADDR_FLAG_SIGNAL | |
109 | MPTCP_PM_ADDR_FLAG_IMPLICIT))) { | ||
109 | spin_unlock_bh(&pernet->lock); | 110 | spin_unlock_bh(&pernet->lock); |
110 | NL_SET_ERR_MSG_ATTR(info->extack, attr, "invalid addr flags"); | 111 | @@ -XXX,XX +XXX,XX @@ int mptcp_pm_nl_set_flags(struct genl_info *info) |
111 | return -EINVAL; | 112 | return -EINVAL; |
112 | } | 113 | } |
113 | 114 | ||
114 | - changed = (addr.flags ^ entry->flags) & mask; | 115 | - changed = (addr.flags ^ entry->flags) & mask; |
115 | - entry->flags = (entry->flags & ~mask) | (addr.flags & mask); | 116 | - entry->flags = (entry->flags & ~mask) | (addr.flags & mask); |
... | ... | diff view generated by jsdifflib |