netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper
@ 2015-01-06 16:23 Jiri Pirko
  2015-01-06 16:23 ` [patch iproute2 2/2] iplink: print out addrgenmode attribute Jiri Pirko
  2015-01-07 23:15 ` [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Stephen Hemminger
  0 siblings, 2 replies; 9+ messages in thread
From: Jiri Pirko @ 2015-01-06 16:23 UTC (permalink / raw)
  To: netdev; +Cc: stephen, thaller

Sometimes, it is more convenient to get only one specific nested attribute by
type. For example for IFLA_AF_SPEC where type is address family (AF_INET6).
So add this helper for this purpose.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
 include/libnetlink.h |  4 ++++
 lib/libnetlink.c     | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/include/libnetlink.h b/include/libnetlink.h
index fe7d5d3..f0faf2d 100644
--- a/include/libnetlink.h
+++ b/include/libnetlink.h
@@ -80,11 +80,15 @@ extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int le
 extern int parse_rtattr_flags(struct rtattr *tb[], int max, struct rtattr *rta,
 			      int len, unsigned short flags);
 extern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len);
+extern struct rtattr *parse_rtattr_one(int type, struct rtattr *rta, int len);
 extern int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, struct rtattr *rta, int len);
 
 #define parse_rtattr_nested(tb, max, rta) \
 	(parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta)))
 
+#define parse_rtattr_one_nested(type, rta) \
+	(parse_rtattr_one(type, RTA_DATA(rta), RTA_PAYLOAD(rta)))
+
 #define parse_rtattr_nested_compat(tb, max, rta, data, len) \
 	({ data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL;	\
 		__parse_rtattr_nested_compat(tb, max, rta, len); })
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index 8d504a9..8e70263 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -701,6 +701,18 @@ int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int l
 	return i;
 }
 
+struct rtattr *parse_rtattr_one(int type, struct rtattr *rta, int len)
+{
+	while (RTA_OK(rta, len)) {
+		if (rta->rta_type == type)
+			return rta;
+		rta = RTA_NEXT(rta, len);
+	}
+	if (len)
+		fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len);
+	return NULL;
+}
+
 int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, struct rtattr *rta,
 			         int len)
 {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-06 16:23 [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Jiri Pirko
@ 2015-01-06 16:23 ` Jiri Pirko
  2015-01-06 16:52   ` Thomas Haller
  2015-01-07 23:10   ` Stephen Hemminger
  2015-01-07 23:15 ` [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Stephen Hemminger
  1 sibling, 2 replies; 9+ messages in thread
From: Jiri Pirko @ 2015-01-06 16:23 UTC (permalink / raw)
  To: netdev; +Cc: stephen, thaller

addrgenmode is currently write only by ip. So display this information
if provided by kernel as well.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
 ip/ipaddress.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 4d99324..0a04d90 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -242,6 +242,29 @@ static void print_linktype(FILE *fp, struct rtattr *tb)
 	}
 }
 
+static void print_af_spec(FILE *fp, struct rtattr *af_spec_attr)
+{
+	struct rtattr *inet6_attr;
+	struct rtattr *tb[IFLA_INET6_MAX + 1];
+
+	inet6_attr = parse_rtattr_one_nested(AF_INET6, af_spec_attr);
+	if (!inet6_attr)
+		return;
+
+	parse_rtattr_nested(tb, IFLA_INET6_MAX, inet6_attr);
+
+	if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
+		switch (rta_getattr_u8(tb[IFLA_INET6_ADDR_GEN_MODE])) {
+		case IN6_ADDR_GEN_MODE_EUI64:
+			fprintf(fp, "addrgenmode eui64 ");
+			break;
+		case IN6_ADDR_GEN_MODE_NONE:
+			fprintf(fp, "addrgenmode none ");
+			break;
+		}
+	}
+}
+
 static void print_vfinfo(FILE *fp, struct rtattr *vfinfo)
 {
 	struct ifla_vf_mac *vf_mac;
@@ -634,6 +657,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
 	if (do_link && tb[IFLA_LINKINFO] && show_details)
 		print_linktype(fp, tb[IFLA_LINKINFO]);
 
+	if (do_link && tb[IFLA_AF_SPEC] && show_details)
+		print_af_spec(fp, tb[IFLA_AF_SPEC]);
+
 	if (do_link && tb[IFLA_IFALIAS]) {
 		fprintf(fp, "%s    alias %s", _SL_,
 			rta_getattr_str(tb[IFLA_IFALIAS]));
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-06 16:23 ` [patch iproute2 2/2] iplink: print out addrgenmode attribute Jiri Pirko
@ 2015-01-06 16:52   ` Thomas Haller
  2015-01-06 17:08     ` Jiri Pirko
  2015-01-07 23:10   ` Stephen Hemminger
  1 sibling, 1 reply; 9+ messages in thread
From: Thomas Haller @ 2015-01-06 16:52 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: netdev, stephen

[-- Attachment #1: Type: text/plain, Size: 810 bytes --]

On Tue, 2015-01-06 at 17:23 +0100, Jiri Pirko wrote:
> addrgenmode is currently write only by ip. So display this information
> if provided by kernel as well.

>  
> +static void print_af_spec(FILE *fp, struct rtattr *af_spec_attr)
> +{
> +	struct rtattr *inet6_attr;
> +	struct rtattr *tb[IFLA_INET6_MAX + 1];
> +
> +	inet6_attr = parse_rtattr_one_nested(AF_INET6, af_spec_attr);
> +	if (!inet6_attr)
> +		return;
> +
> +	parse_rtattr_nested(tb, IFLA_INET6_MAX, inet6_attr);
> +
> +	if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
> +		switch (rta_getattr_u8(tb[IFLA_INET6_ADDR_GEN_MODE])) {
> +		case IN6_ADDR_GEN_MODE_EUI64:
> +			fprintf(fp, "addrgenmode eui64 ");

eui64 is the default and the behavior of older kernels.

I dunno, would it be better not to print the default case?


Thomas

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-06 16:52   ` Thomas Haller
@ 2015-01-06 17:08     ` Jiri Pirko
  0 siblings, 0 replies; 9+ messages in thread
From: Jiri Pirko @ 2015-01-06 17:08 UTC (permalink / raw)
  To: Thomas Haller; +Cc: netdev, stephen

Tue, Jan 06, 2015 at 05:52:33PM CET, thaller@redhat.com wrote:
>On Tue, 2015-01-06 at 17:23 +0100, Jiri Pirko wrote:
>> addrgenmode is currently write only by ip. So display this information
>> if provided by kernel as well.
>
>>  
>> +static void print_af_spec(FILE *fp, struct rtattr *af_spec_attr)
>> +{
>> +	struct rtattr *inet6_attr;
>> +	struct rtattr *tb[IFLA_INET6_MAX + 1];
>> +
>> +	inet6_attr = parse_rtattr_one_nested(AF_INET6, af_spec_attr);
>> +	if (!inet6_attr)
>> +		return;
>> +
>> +	parse_rtattr_nested(tb, IFLA_INET6_MAX, inet6_attr);
>> +
>> +	if (tb[IFLA_INET6_ADDR_GEN_MODE]) {
>> +		switch (rta_getattr_u8(tb[IFLA_INET6_ADDR_GEN_MODE])) {
>> +		case IN6_ADDR_GEN_MODE_EUI64:
>> +			fprintf(fp, "addrgenmode eui64 ");
>
>eui64 is the default and the behavior of older kernels.
>
>I dunno, would it be better not to print the default case?


This prints only when show_details is on. So I believe it is ok to print
the default value of addrgenmode (same is done as for other things)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-06 16:23 ` [patch iproute2 2/2] iplink: print out addrgenmode attribute Jiri Pirko
  2015-01-06 16:52   ` Thomas Haller
@ 2015-01-07 23:10   ` Stephen Hemminger
  2015-01-08  7:04     ` Jiri Pirko
  1 sibling, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2015-01-07 23:10 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: netdev, thaller

On Tue,  6 Jan 2015 17:23:46 +0100
Jiri Pirko <jiri@resnulli.us> wrote:

> addrgenmode is currently write only by ip. So display this information
> if provided by kernel as well.
> 
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>

Patch does not apply to current iproute2 git

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper
  2015-01-06 16:23 [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Jiri Pirko
  2015-01-06 16:23 ` [patch iproute2 2/2] iplink: print out addrgenmode attribute Jiri Pirko
@ 2015-01-07 23:15 ` Stephen Hemminger
  1 sibling, 0 replies; 9+ messages in thread
From: Stephen Hemminger @ 2015-01-07 23:15 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: netdev, thaller

On Tue,  6 Jan 2015 17:23:45 +0100
Jiri Pirko <jiri@resnulli.us> wrote:

> Sometimes, it is more convenient to get only one specific nested attribute by
> type. For example for IFLA_AF_SPEC where type is address family (AF_INET6).
> So add this helper for this purpose.
> 
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>

This one applies.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-07 23:10   ` Stephen Hemminger
@ 2015-01-08  7:04     ` Jiri Pirko
  2015-01-08  7:13       ` Vadim Kochan
  2015-01-08 18:19       ` Stephen Hemminger
  0 siblings, 2 replies; 9+ messages in thread
From: Jiri Pirko @ 2015-01-08  7:04 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev, thaller

Thu, Jan 08, 2015 at 12:10:36AM CET, stephen@networkplumber.org wrote:
>On Tue,  6 Jan 2015 17:23:46 +0100
>Jiri Pirko <jiri@resnulli.us> wrote:
>
>> addrgenmode is currently write only by ip. So display this information
>> if provided by kernel as well.
>> 
>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
>
>Patch does not apply to current iproute2 git

I made that against net-next branch. Which branch should I use for new
features?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-08  7:04     ` Jiri Pirko
@ 2015-01-08  7:13       ` Vadim Kochan
  2015-01-08 18:19       ` Stephen Hemminger
  1 sibling, 0 replies; 9+ messages in thread
From: Vadim Kochan @ 2015-01-08  7:13 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: Stephen Hemminger, netdev, thaller

On Thu, Jan 08, 2015 at 08:04:39AM +0100, Jiri Pirko wrote:
> Thu, Jan 08, 2015 at 12:10:36AM CET, stephen@networkplumber.org wrote:
> >On Tue,  6 Jan 2015 17:23:46 +0100
> >Jiri Pirko <jiri@resnulli.us> wrote:
> >
> >> addrgenmode is currently write only by ip. So display this information
> >> if provided by kernel as well.
> >> 
> >> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> >
> >Patch does not apply to current iproute2 git
> 
> I made that against net-next branch. Which branch should I use for new
> features?
> 
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

I am not sure if I am right, but seems to me that net-next should keep
features which depends on the next Linux headers version, and as I
understand these new headers are merged into net-next branch and after
into master. But I tried fix your patch on the master and it compiles
OK, so I assume that it can be based on master branch.

Regards,

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [patch iproute2 2/2] iplink: print out addrgenmode attribute
  2015-01-08  7:04     ` Jiri Pirko
  2015-01-08  7:13       ` Vadim Kochan
@ 2015-01-08 18:19       ` Stephen Hemminger
  1 sibling, 0 replies; 9+ messages in thread
From: Stephen Hemminger @ 2015-01-08 18:19 UTC (permalink / raw)
  To: Jiri Pirko; +Cc: netdev, thaller

On Thu, 8 Jan 2015 08:04:39 +0100
Jiri Pirko <jiri@resnulli.us> wrote:

> Thu, Jan 08, 2015 at 12:10:36AM CET, stephen@networkplumber.org wrote:
> >On Tue,  6 Jan 2015 17:23:46 +0100
> >Jiri Pirko <jiri@resnulli.us> wrote:
> >
> >> addrgenmode is currently write only by ip. So display this information
> >> if provided by kernel as well.
> >> 
> >> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> >
> >Patch does not apply to current iproute2 git
> 
> I made that against net-next branch. Which branch should I use for new
> features?
> 

net-next hasn't been rebased to master. plus unless change is specific to
kernel net-next it should be against master.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-01-08 18:19 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-06 16:23 [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Jiri Pirko
2015-01-06 16:23 ` [patch iproute2 2/2] iplink: print out addrgenmode attribute Jiri Pirko
2015-01-06 16:52   ` Thomas Haller
2015-01-06 17:08     ` Jiri Pirko
2015-01-07 23:10   ` Stephen Hemminger
2015-01-08  7:04     ` Jiri Pirko
2015-01-08  7:13       ` Vadim Kochan
2015-01-08 18:19       ` Stephen Hemminger
2015-01-07 23:15 ` [patch iproute2 1/2] libnetlink: add parse_rtattr_one_nested helper Stephen Hemminger

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