* [PATCH iproute2 -next 1/3] ipxfrm: prepares update of include/linux/xfrm.h
@ 2014-03-03 14:36 Nicolas Dichtel
2014-03-03 14:36 ` [PATCH iproute2 -next 2/3] include/linux: update xfrm.h Nicolas Dichtel
2014-03-03 14:36 ` [PATCH iproute2 -next 3/3] ipxfrm: allow to setup filter when dumping SA Nicolas Dichtel
0 siblings, 2 replies; 7+ messages in thread
From: Nicolas Dichtel @ 2014-03-03 14:36 UTC (permalink / raw)
To: shemminger; +Cc: netdev, Nicolas Dichtel
'struct xfrm_filter' is now defined by the kernel API. Let's rename the one
defined in iproute2 to 'struct ipxfrm_filter'.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
ip/ipxfrm.c | 2 +-
ip/xfrm.h | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/ip/ipxfrm.c b/ip/ipxfrm.c
index cce51518170c..ff6cb2c2dda5 100644
--- a/ip/ipxfrm.c
+++ b/ip/ipxfrm.c
@@ -53,7 +53,7 @@
} \
} while(0);
-struct xfrm_filter filter;
+struct ipxfrm_filter filter;
static void usage(void) __attribute__((noreturn));
diff --git a/ip/xfrm.h b/ip/xfrm.h
index 773c92e99e9e..31cc89a0f19a 100644
--- a/ip/xfrm.h
+++ b/ip/xfrm.h
@@ -74,7 +74,7 @@ struct xfrm_buffer {
struct rtnl_handle *rth;
};
-struct xfrm_filter {
+struct ipxfrm_filter {
int use;
struct xfrm_usersa_info xsinfo;
@@ -105,7 +105,7 @@ struct xfrm_filter {
};
#define XFRM_FILTER_MASK_FULL (~0)
-extern struct xfrm_filter filter;
+extern struct ipxfrm_filter filter;
int xfrm_state_print(const struct sockaddr_nl *who, struct nlmsghdr *n,
void *arg);
--
1.8.5.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH iproute2 -next 2/3] include/linux: update xfrm.h
2014-03-03 14:36 [PATCH iproute2 -next 1/3] ipxfrm: prepares update of include/linux/xfrm.h Nicolas Dichtel
@ 2014-03-03 14:36 ` Nicolas Dichtel
2014-03-05 1:03 ` Stephen Hemminger
2014-03-03 14:36 ` [PATCH iproute2 -next 3/3] ipxfrm: allow to setup filter when dumping SA Nicolas Dichtel
1 sibling, 1 reply; 7+ messages in thread
From: Nicolas Dichtel @ 2014-03-03 14:36 UTC (permalink / raw)
To: shemminger; +Cc: netdev, Nicolas Dichtel
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
Note that this patch is based on net-next.
include/linux/xfrm.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/include/linux/xfrm.h b/include/linux/xfrm.h
index 341c3c951dac..694aa90df7d8 100644
--- a/include/linux/xfrm.h
+++ b/include/linux/xfrm.h
@@ -298,6 +298,8 @@ enum xfrm_attr_type_t {
XFRMA_TFCPAD, /* __u32 */
XFRMA_REPLAY_ESN_VAL, /* struct xfrm_replay_esn */
XFRMA_SA_EXTRA_FLAGS, /* __u32 */
+ XFRMA_PROTO, /* __u8 */
+ XFRMA_FILTER, /* struct xfrm_filter */
__XFRMA_MAX
#define XFRMA_MAX (__XFRMA_MAX - 1)
@@ -474,6 +476,14 @@ struct xfrm_user_mapping {
__be16 new_sport;
};
+struct xfrm_filter {
+ xfrm_address_t saddr;
+ xfrm_address_t daddr;
+ __u16 family;
+ __u8 splen;
+ __u8 dplen;
+};
+
/* backwards compatibility for userspace */
#define XFRMGRP_ACQUIRE 1
#define XFRMGRP_EXPIRE 2
--
1.8.5.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH iproute2 -next 3/3] ipxfrm: allow to setup filter when dumping SA
2014-03-03 14:36 [PATCH iproute2 -next 1/3] ipxfrm: prepares update of include/linux/xfrm.h Nicolas Dichtel
2014-03-03 14:36 ` [PATCH iproute2 -next 2/3] include/linux: update xfrm.h Nicolas Dichtel
@ 2014-03-03 14:36 ` Nicolas Dichtel
1 sibling, 0 replies; 7+ messages in thread
From: Nicolas Dichtel @ 2014-03-03 14:36 UTC (permalink / raw)
To: shemminger; +Cc: netdev, Nicolas Dichtel
It's now possible to filter SA directly into the kernel by specifying
XFRMA_PROTO and/or XFRMA_FILTER.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
Note that this patch is intended to work with net-next.
ip/xfrm_state.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
index 140a4503b799..61f6d930b2d2 100644
--- a/ip/xfrm_state.c
+++ b/ip/xfrm_state.c
@@ -1136,7 +1136,35 @@ static int xfrm_state_list_or_deleteall(int argc, char **argv, int deleteall)
}
} else {
- if (rtnl_wilddump_request(&rth, preferred_family, XFRM_MSG_GETSA) < 0) {
+ struct xfrm_filter safilter;
+ struct {
+ struct nlmsghdr n;
+ char buf[NLMSG_BUF_SIZE];
+ } req;
+
+ memset(&safilter, 0, sizeof(safilter));
+ safilter.family = filter.xsinfo.family;
+ memcpy(&safilter.saddr, &filter.xsinfo.saddr,
+ sizeof(xfrm_address_t));
+ safilter.splen = filter.id_src_mask;
+ memcpy(&safilter.daddr, &filter.xsinfo.id.daddr,
+ sizeof(xfrm_address_t));
+ safilter.dplen = filter.id_dst_mask;
+
+ memset(&req, 0, sizeof(req));
+ req.n.nlmsg_len = NLMSG_HDRLEN;
+ req.n.nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST;
+ req.n.nlmsg_type = XFRM_MSG_GETSA;
+ req.n.nlmsg_pid = 0;
+ req.n.nlmsg_seq = rth.dump = ++rth.seq;
+
+ if (filter.xsinfo.id.proto)
+ addattr8(&req.n, sizeof(req), XFRMA_PROTO,
+ filter.xsinfo.id.proto);
+ addattr_l(&req.n, sizeof(req), XFRMA_FILTER, &safilter,
+ sizeof(safilter));
+
+ if (rtnl_send(&rth, (void *)&req, req.n.nlmsg_len) < 0) {
perror("Cannot send dump request");
exit(1);
}
--
1.8.5.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH iproute2 -next 2/3] include/linux: update xfrm.h
2014-03-03 14:36 ` [PATCH iproute2 -next 2/3] include/linux: update xfrm.h Nicolas Dichtel
@ 2014-03-05 1:03 ` Stephen Hemminger
2014-03-05 8:41 ` Nicolas Dichtel
2014-03-06 17:24 ` [PATCH net-next] xfrm: rename struct xfrm_filter Nicolas Dichtel
0 siblings, 2 replies; 7+ messages in thread
From: Stephen Hemminger @ 2014-03-05 1:03 UTC (permalink / raw)
To: Nicolas Dichtel; +Cc: shemminger, netdev
On Mon, 3 Mar 2014 15:36:06 +0100
Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote:
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> ---
Sigh. couldn't you have chosen another variable name.
As it is new kernel headers with old iproute2 source will break.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH iproute2 -next 2/3] include/linux: update xfrm.h
2014-03-05 1:03 ` Stephen Hemminger
@ 2014-03-05 8:41 ` Nicolas Dichtel
2014-03-06 17:24 ` [PATCH net-next] xfrm: rename struct xfrm_filter Nicolas Dichtel
1 sibling, 0 replies; 7+ messages in thread
From: Nicolas Dichtel @ 2014-03-05 8:41 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: shemminger, netdev
Le 05/03/2014 02:03, Stephen Hemminger a écrit :
> On Mon, 3 Mar 2014 15:36:06 +0100
> Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote:
>
>> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
>> ---
>
> Sigh. couldn't you have chosen another variable name.
> As it is new kernel headers with old iproute2 source will break.
>
I noticed this after finishing the kernel part.
I have not thought about this because kernel headers are embedded in iproute2.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next] xfrm: rename struct xfrm_filter
2014-03-05 1:03 ` Stephen Hemminger
2014-03-05 8:41 ` Nicolas Dichtel
@ 2014-03-06 17:24 ` Nicolas Dichtel
2014-03-07 11:27 ` Steffen Klassert
1 sibling, 1 reply; 7+ messages in thread
From: Nicolas Dichtel @ 2014-03-06 17:24 UTC (permalink / raw)
To: steffen.klassert, herbert, davem
Cc: netdev, Nicolas Dichtel, Stephen Hemminger
iproute2 already defines a structure with that name, let's use another one to
avoid any conflict.
CC: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
The structure and the attribute exist only in net-next, hence we can update
the name.
include/net/xfrm.h | 4 ++--
include/uapi/linux/xfrm.h | 4 ++--
net/key/af_key.c | 2 +-
net/xfrm/xfrm_state.c | 4 ++--
net/xfrm/xfrm_user.c | 8 ++++----
5 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 23bfd4591e8b..cbb728d9f107 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -121,7 +121,7 @@ struct xfrm_state_walk {
u8 dying;
u8 proto;
u32 seq;
- struct xfrm_filter *filter;
+ struct xfrm_address_filter *filter;
};
/* Full description of state of transformer. */
@@ -1423,7 +1423,7 @@ static inline void xfrm_sysctl_fini(struct net *net)
#endif
void xfrm_state_walk_init(struct xfrm_state_walk *walk, u8 proto,
- struct xfrm_filter *filter);
+ struct xfrm_address_filter *filter);
int xfrm_state_walk(struct net *net, struct xfrm_state_walk *walk,
int (*func)(struct xfrm_state *, int, void*), void *);
void xfrm_state_walk_done(struct xfrm_state_walk *walk, struct net *net);
diff --git a/include/uapi/linux/xfrm.h b/include/uapi/linux/xfrm.h
index 6550c679584f..25e5dd916ba4 100644
--- a/include/uapi/linux/xfrm.h
+++ b/include/uapi/linux/xfrm.h
@@ -299,7 +299,7 @@ enum xfrm_attr_type_t {
XFRMA_REPLAY_ESN_VAL, /* struct xfrm_replay_esn */
XFRMA_SA_EXTRA_FLAGS, /* __u32 */
XFRMA_PROTO, /* __u8 */
- XFRMA_FILTER, /* struct xfrm_filter */
+ XFRMA_ADDRESS_FILTER, /* struct xfrm_address_filter */
__XFRMA_MAX
#define XFRMA_MAX (__XFRMA_MAX - 1)
@@ -476,7 +476,7 @@ struct xfrm_user_mapping {
__be16 new_sport;
};
-struct xfrm_filter {
+struct xfrm_address_filter {
xfrm_address_t saddr;
xfrm_address_t daddr;
__u16 family;
diff --git a/net/key/af_key.c b/net/key/af_key.c
index a50d979b5926..12651b42aad8 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -1799,7 +1799,7 @@ static void pfkey_dump_sa_done(struct pfkey_sock *pfk)
static int pfkey_dump(struct sock *sk, struct sk_buff *skb, const struct sadb_msg *hdr, void * const *ext_hdrs)
{
u8 proto;
- struct xfrm_filter *filter = NULL;
+ struct xfrm_address_filter *filter = NULL;
struct pfkey_sock *pfk = pfkey_sk(sk);
if (pfk->dump.dump != NULL)
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 06970fee9155..8e9c781a6bba 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -1609,7 +1609,7 @@ unlock:
EXPORT_SYMBOL(xfrm_alloc_spi);
static bool __xfrm_state_filter_match(struct xfrm_state *x,
- struct xfrm_filter *filter)
+ struct xfrm_address_filter *filter)
{
if (filter) {
if ((filter->family == AF_INET ||
@@ -1668,7 +1668,7 @@ out:
EXPORT_SYMBOL(xfrm_state_walk);
void xfrm_state_walk_init(struct xfrm_state_walk *walk, u8 proto,
- struct xfrm_filter *filter)
+ struct xfrm_address_filter *filter)
{
INIT_LIST_HEAD(&walk->all);
walk->proto = proto;
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 195dbe230b98..cdd9e9c7ff0e 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -899,7 +899,7 @@ static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
if (!cb->args[0]) {
struct nlattr *attrs[XFRMA_MAX+1];
- struct xfrm_filter *filter = NULL;
+ struct xfrm_address_filter *filter = NULL;
u8 proto = 0;
int err;
@@ -910,12 +910,12 @@ static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
if (err < 0)
return err;
- if (attrs[XFRMA_FILTER]) {
+ if (attrs[XFRMA_ADDRESS_FILTER]) {
filter = kmalloc(sizeof(*filter), GFP_KERNEL);
if (filter == NULL)
return -ENOMEM;
- memcpy(filter, nla_data(attrs[XFRMA_FILTER]),
+ memcpy(filter, nla_data(attrs[XFRMA_ADDRESS_FILTER]),
sizeof(*filter));
}
@@ -2329,7 +2329,7 @@ static const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
[XFRMA_REPLAY_ESN_VAL] = { .len = sizeof(struct xfrm_replay_state_esn) },
[XFRMA_SA_EXTRA_FLAGS] = { .type = NLA_U32 },
[XFRMA_PROTO] = { .type = NLA_U8 },
- [XFRMA_FILTER] = { .len = sizeof(struct xfrm_filter) },
+ [XFRMA_ADDRESS_FILTER] = { .len = sizeof(struct xfrm_address_filter) },
};
static const struct xfrm_link {
--
1.8.5.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next] xfrm: rename struct xfrm_filter
2014-03-06 17:24 ` [PATCH net-next] xfrm: rename struct xfrm_filter Nicolas Dichtel
@ 2014-03-07 11:27 ` Steffen Klassert
0 siblings, 0 replies; 7+ messages in thread
From: Steffen Klassert @ 2014-03-07 11:27 UTC (permalink / raw)
To: Nicolas Dichtel; +Cc: herbert, davem, netdev, Stephen Hemminger
On Thu, Mar 06, 2014 at 06:24:29PM +0100, Nicolas Dichtel wrote:
> iproute2 already defines a structure with that name, let's use another one to
> avoid any conflict.
>
> CC: Stephen Hemminger <stephen@networkplumber.org>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Applied to ipsec-next, thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-03-07 11:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-03 14:36 [PATCH iproute2 -next 1/3] ipxfrm: prepares update of include/linux/xfrm.h Nicolas Dichtel
2014-03-03 14:36 ` [PATCH iproute2 -next 2/3] include/linux: update xfrm.h Nicolas Dichtel
2014-03-05 1:03 ` Stephen Hemminger
2014-03-05 8:41 ` Nicolas Dichtel
2014-03-06 17:24 ` [PATCH net-next] xfrm: rename struct xfrm_filter Nicolas Dichtel
2014-03-07 11:27 ` Steffen Klassert
2014-03-03 14:36 ` [PATCH iproute2 -next 3/3] ipxfrm: allow to setup filter when dumping SA Nicolas Dichtel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).