netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).