* [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
* 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
* [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
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).