Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH 14/20] staging/appletalk: remove the BKL
From: Arnd Bergmann @ 2011-01-26 12:57 UTC (permalink / raw)
  To: David Miller; +Cc: linux-kernel, acme, netdev
In-Reply-To: <20110125.142926.246535705.davem@davemloft.net>

On Tuesday 25 January 2011, David Miller wrote:
> If you're moving appletalk to staging because "nobody is motivated
> enough to remove the BKL" and then you actually do the work to remove
> the BKL, I really don't see any point in doing the whole staging
> thing.
> 
> We always keep an eye on every protocol that sits under the top-level
> net/.  Every socket API change propagates, as does every other
> networking API change that matters for those protocols.

Ok, fair enough. I've removed the "move to staging" patch now from my
series. I'm going to need some help with testing, or at least thoroughly
reviewing the patch, since I am not extremely confident in my own work
there.

	Arnd

^ permalink raw reply

* Re: 40k+ outbound connections and bind() problem
From: Daniel Baluta @ 2011-01-26 13:00 UTC (permalink / raw)
  To: denys; +Cc: netdev
In-Reply-To: <9e62acde19ef75f3f77468cd81ed7ffd@visp.net.lb>

Hi,

> Latest stable, 2.6.37

Please apply this patch [1] and see if it's still happening.

thanks,
Daniel

[1] http://www.spinics.net/lists/netdev/msg152204.html

^ permalink raw reply

* Re: 40k+ outbound connections and bind() problem
From: Eric Dumazet @ 2011-01-26 13:17 UTC (permalink / raw)
  To: Daniel Baluta; +Cc: denys, netdev
In-Reply-To: <AANLkTinDQ-n3Y2_8PtvdWSxkYV8Kvj8on3iEeHsBSFB-@mail.gmail.com>

Le mercredi 26 janvier 2011 à 15:00 +0200, Daniel Baluta a écrit :
> Hi,
> 
> > Latest stable, 2.6.37
> 
> Please apply this patch [1] and see if it's still happening.
> 
> thanks,
> Daniel
> 
> [1] http://www.spinics.net/lists/netdev/msg152204.html
> -

I dont think it'll help ;)

Denys problem is if one source IP address is used, there is an absolute
64K limit to (IP, port) tuple

Only thing you can do is to tune /proc/sys/net/ipv4/ip_local_port_range
to get close to 64K limit




^ permalink raw reply

* Re: 40k+ outbound connections and bind() problem
From: denys @ 2011-01-26 13:23 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Daniel Baluta, netdev
In-Reply-To: <1296047834.2899.62.camel@edumazet-laptop>

 On Wed, 26 Jan 2011 14:17:14 +0100, Eric Dumazet wrote:
> Le mercredi 26 janvier 2011 à 15:00 +0200, Daniel Baluta a écrit :
>> Hi,
>>
>> > Latest stable, 2.6.37
>>
>> Please apply this patch [1] and see if it's still happening.
>>
>> thanks,
>> Daniel
>>
>> [1] http://www.spinics.net/lists/netdev/msg152204.html
>> -
>
> I dont think it'll help ;)
>
> Denys problem is if one source IP address is used, there is an 
> absolute
> 64K limit to (IP, port) tuple
>
> Only thing you can do is to tune 
> /proc/sys/net/ipv4/ip_local_port_range
> to get close to 64K limit
 No, it is not one ip source.
 As i mention before, i am binding each instance to different IP before 
 connect().
 And when i am having issues and such errors, i am trying httping and 
 binding it to some unused ip, but still getting this error.

^ permalink raw reply

* Re: 40k+ outbound connections and bind() problem
From: Eric Dumazet @ 2011-01-26 13:26 UTC (permalink / raw)
  To: denys; +Cc: Daniel Baluta, netdev
In-Reply-To: <398df9351d5c9aec1ba69511d9dc6a70@visp.net.lb>

Le mercredi 26 janvier 2011 à 15:23 +0200, denys@visp.net.lb a écrit :
> On Wed, 26 Jan 2011 14:17:14 +0100, Eric Dumazet wrote:
> > Le mercredi 26 janvier 2011 à 15:00 +0200, Daniel Baluta a écrit :
> >> Hi,
> >>
> >> > Latest stable, 2.6.37
> >>
> >> Please apply this patch [1] and see if it's still happening.
> >>
> >> thanks,
> >> Daniel
> >>
> >> [1] http://www.spinics.net/lists/netdev/msg152204.html
> >> -
> >
> > I dont think it'll help ;)
> >
> > Denys problem is if one source IP address is used, there is an 
> > absolute
> > 64K limit to (IP, port) tuple
> >
> > Only thing you can do is to tune 
> > /proc/sys/net/ipv4/ip_local_port_range
> > to get close to 64K limit
>  No, it is not one ip source.
>  As i mention before, i am binding each instance to different IP before 
>  connect().
>  And when i am having issues and such errors, i am trying httping and 
>  binding it to some unused ip, but still getting this error.

Ah OK, you definitely want to use REUSEADDR then.




^ permalink raw reply

* Re: [RFC 00/20] Proposal for remaining BKL users
From: Arnd Bergmann @ 2011-01-26 13:45 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Frederic Weisbecker, dri-devel, Mikulas Patocka, H. Peter Anvin,
	Ian Kent, linux-cifs, Nick Bowler, linux-x25, Takahiro Hirofuchi,
	Ross Cohen, Arnaldo Carvalho de Melo, Evgeniy Dushistov,
	Stuart Swales, Thomas Gleixner, Arjan van de Ven, autofs,
	Jeff Layton, netdev, Greg KH, linux-kernel, Palash Bandyopadhyay,
	linux-fsdevel, Andrew Morton, Andrew 
In-Reply-To: <4D400C5D.80004@redhat.com>

On Wednesday 26 January 2011, Mauro Carvalho Chehab wrote:
> I guess you're meaning cx25821, right? 

Right, sorry for the typo.
 
> Palash should take a look on it and review. This is a device that allows
> 12 simultaneous streams, so, I suspect that he'll need to do some
> changes at the locking schema, to avoid performance bottlenecks.

I would be surprised if there was any measurable performance change.
The BKL was used only in the open() function to iterate the device
list, and that code is nowhere on a critical path, as far as I can tell.

	Arnd

^ permalink raw reply

* Re: [PATCH] econet: remove compiler warnings
From: Phil Blundell @ 2011-01-26 13:19 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev
In-Reply-To: <1296036258.2899.44.camel@edumazet-laptop>

On Wed, Jan 26, 2011 at 11:04:18AM +0100, Eric Dumazet wrote:
> net/econet/af_econet.c: In function ‘econet_sendmsg’:
> net/econet/af_econet.c:494: warning: label ‘error’ defined but not used
> net/econet/af_econet.c:268: warning: unused variable ‘sk’
> 
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>

Thanks, looks sensible.

Acked-by: Phil Blundell <philb@gnu.org>

p.


^ permalink raw reply

* [PATCH] fix validate_link_af in rtnetlink core
From: Kurt Van Dijck @ 2011-01-26 14:55 UTC (permalink / raw)
  To: netdev

Hi,

I'm not sure about this patch.

I'm testing an API that uses IFLA_AF_SPEC attribute.
In the rtnetlink core , the set_link_af() member
of the rtnl_af_ops struct receives the nested attribute
(as I expected), but the validate_link_af() member
receives the parent attribute.
IMO, this patch fixes this.

Since I didn't find any code in iproute2 that makes use
of this attribute, I wasn't able to verify this on the userspace
end.

Signed-off-by: Kurt Van Dijck <kurt.van.dijck@eia.be>
---
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 310eb80..c6aee92 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1122,8 +1122,7 @@ static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
 				return -EOPNOTSUPP;
 
 			if (af_ops->validate_link_af) {
-				err = af_ops->validate_link_af(dev,
-							tb[IFLA_AF_SPEC]);
+				err = af_ops->validate_link_af(dev, af);
 				if (err < 0)
 					return err;
 			}

^ permalink raw reply related

* Re: [PATCH v4] smc91x: add devicetree support
From: Nicolas Pitre @ 2011-01-26 15:17 UTC (permalink / raw)
  To: Thomas Chou
  Cc: nios2-dev-1eJk0qcHJCcaeqlQEoCUNoJY59XmG8rH,
	netdev-u79uwXL29TY76Z2rM5mHXA,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, lkml, David Miller
In-Reply-To: <1296019325-17801-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>

On Wed, 26 Jan 2011, Thomas Chou wrote:

> Signed-off-by: Thomas Chou <thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
> ---
> v2 specify part numbers in compat as Grant suggested.
> v3 more specific part name.
> v4 include match table only for OF as David suggested.

The smc91x driver relies on many parameters which are platform specific, 
such as the bus width capabilities, register spacing due to special bus 
wiring, interrupt signal level, LED configuration, whether or not to 
configure the chip with a wait state, etc.  Will the device tree support 
take care of those things?


Nicolas

^ permalink raw reply

* Re: [GIT PULL nf-next-2.6] IPVS changes for 2.6.38-rc3
From: Patrick McHardy @ 2011-01-26 15:27 UTC (permalink / raw)
  To: Simon Horman
  Cc: lvs-devel, netfilter-devel, netdev, Changli Gao, Julian Anastasov
In-Reply-To: <20110125235744.GA11026@verge.net.au>

On 26.01.2011 00:57, Simon Horman wrote:
> On Tue, Jan 25, 2011 at 03:01:35PM +0100, Patrick McHardy wrote:
>> On 25.01.2011 14:17, Simon Horman wrote:
>>> Hi Patrick,
>>>
>>> please consider pulling
>>>   git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-test-2.6.git for-patrick
>>>
>>> Which includes the following changes, both of which I believe 2.6.38 material.
>>>
>>> Changli Gao (1):
>>>       netfilter: ipvs: fix compiler warnings
>>>
>>> Hans Schillstrom (1):
>>>       IPVS netns BUG, register sysctl for root ns
>>
>> That tree is based on nf-next-2.6, so I can't pull this into my nf-2.6
>> tree.
> 
> Hi Patrick,
> 
> Sorry about this.
> 
> As it turns out I was mistaken in assuming that the IPVS netns changes
> had been merged into nf-2.6. They haven't, they only exist in net-next-2.6.
> 
> All of the recent patches that I have passed on to you relate to the IPVS
> netns changes so nf-next-2.6 is the right place for these fixes. So could
> you please pull the above tree into nf-next-2.6? I do not believe there are
> any nf-2.6 changes at this time.

Thanks, I've pulled it into nf-next-2.6.git.

^ permalink raw reply

* Re: [PATCH v4] smc91x: add devicetree support
From: Grant Likely @ 2011-01-26 15:32 UTC (permalink / raw)
  To: Nicolas Pitre
  Cc: nios2-dev-1eJk0qcHJCcaeqlQEoCUNoJY59XmG8rH,
	netdev-u79uwXL29TY76Z2rM5mHXA,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, lkml, David Miller
In-Reply-To: <alpine.LFD.2.00.1101261004560.8580-QuJgVwGFrdf/9pzu0YdTqQ@public.gmane.org>

On Wed, Jan 26, 2011 at 8:17 AM, Nicolas Pitre <nico-vtqb6HGKxmzR7s880joybQ@public.gmane.org> wrote:
> On Wed, 26 Jan 2011, Thomas Chou wrote:
>
>> Signed-off-by: Thomas Chou <thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
>> ---
>> v2 specify part numbers in compat as Grant suggested.
>> v3 more specific part name.
>> v4 include match table only for OF as David suggested.
>
> The smc91x driver relies on many parameters which are platform specific,
> such as the bus width capabilities, register spacing due to special bus
> wiring, interrupt signal level, LED configuration, whether or not to
> configure the chip with a wait state, etc.  Will the device tree support
> take care of those things?

Short answer, yes

In general bindings are written and documented as they are needed.  In
this specific case,yes the device configuration should be encoded into
the device tree node.  It is okay for now to not wire up any of that
configuration if the defaults work for Thomas' platform, but to be
useful in the long run they do need to be added.

Typically a block or function call is added to the drivers .probe hook
to decode device tree data if the of_node pointer is set.

g.

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

^ permalink raw reply

* Re: [PATCH] fix validate_link_af in rtnetlink core
From: Patrick McHardy @ 2011-01-26 15:36 UTC (permalink / raw)
  To: Kurt Van Dijck; +Cc: netdev
In-Reply-To: <20110126145523.GA3171@e-circ.dyndns.org>

On 26.01.2011 15:55, Kurt Van Dijck wrote:
> Hi,
> 
> I'm not sure about this patch.
> 
> I'm testing an API that uses IFLA_AF_SPEC attribute.
> In the rtnetlink core , the set_link_af() member
> of the rtnl_af_ops struct receives the nested attribute
> (as I expected), but the validate_link_af() member
> receives the parent attribute.
> IMO, this patch fixes this.
> 
> Since I didn't find any code in iproute2 that makes use
> of this attribute, I wasn't able to verify this on the userspace
> end.

There's code in libnl using this, your patch looks fine to me.

^ permalink raw reply

* RE: [RFC 00/20] Proposal for remaining BKL users
From: Palash Bandyopadhyay @ 2011-01-26 16:24 UTC (permalink / raw)
  To: Arnd Bergmann, Mauro Carvalho Chehab
  Cc: Frederic Weisbecker, dri-devel@lists.freedesktop.org,
	Mikulas Patocka, H. Peter Anvin, Ian Kent,
	linux-cifs@vger.kernel.org, Nick Bowler,
	linux-x25@vger.kernel.org, Takahiro Hirofuchi, Ross Cohen,
	Arnaldo Carvalho de Melo, Evgeniy Dushistov, Stuart Swales,
	Thomas Gleixner, Arjan van de Ven, autofs@linux.kernel.org,
	Jeff Layton, netdev@vger.kernel.org, Greg KH,
	"linux-kernel@vger.ker
In-Reply-To: <201101261445.17751.arnd@arndb.de>

I think it should be ok. If we do hit any performance issue, we'll revisit this.

Thanks,
Palash

-----Original Message-----
From: Arnd Bergmann [mailto:arnd@arndb.de] 
Sent: Wednesday, January 26, 2011 5:45 AM
To: Mauro Carvalho Chehab
Cc: Greg KH; linux-kernel@vger.kernel.org; Andrew Hendry; Andrew Morton; Arjan van de Ven; Arnaldo Carvalho de Melo; autofs@linux.kernel.org; Chris Wilson; Dave Airlie; dri-devel@lists.freedesktop.org; Evgeniy Dushistov; Frederic Weisbecker; H. Peter Anvin; Ian Kent; Ingo Molnar; Jeff Layton; linux-cifs@vger.kernel.org; linux-fsdevel@vger.kernel.org; linux-x25@vger.kernel.org; Mikulas Patocka; netdev@vger.kernel.org; Nick Bowler; Palash Bandyopadhyay; Ross Cohen; Russell King; Stuart Swales; Takahiro Hirofuchi; Thomas Gleixner
Subject: Re: [RFC 00/20] Proposal for remaining BKL users

On Wednesday 26 January 2011, Mauro Carvalho Chehab wrote:
> I guess you're meaning cx25821, right? 

Right, sorry for the typo.
 
> Palash should take a look on it and review. This is a device that allows
> 12 simultaneous streams, so, I suspect that he'll need to do some
> changes at the locking schema, to avoid performance bottlenecks.

I would be surprised if there was any measurable performance change.
The BKL was used only in the open() function to iterate the device
list, and that code is nowhere on a critical path, as far as I can tell.

	Arnd

Conexant E-mail Firewall (Conexant.Com) made the following annotations
---------------------------------------------------------------------
********************** Legal Disclaimer **************************** 

"This email may contain confidential and privileged material for the sole use of the intended recipient. Any unauthorized review, use or distribution by others is strictly prohibited. If you have received the message in error, please advise the sender by reply email and delete the message. Thank you." 

********************************************************************** 

---------------------------------------------------------------------

^ permalink raw reply

* [PATCH v3 0/3] iproute2: support for device groups
From: Vlad Dogaru @ 2011-01-26 16:41 UTC (permalink / raw)
  To: netdev; +Cc: Vlad Dogaru, Stephen Hemminger

This patch series adds userspace support for network device groups.
There is support for setting device groups, listing only interfaces of a
specific group, and setting basic device parameters for all interfaces
in a group.

Changes since version 2:
 * groups now have names. The mapping between names and numbers (which
   are used by the kernel) is in /etc/iproute2/group_map.
 * the ip man page and usage display function have been updated to
   reflect the new functionality.

Changes since version 1:
 * a single attribute is used for both setting the group of a device and
   manipulating an entire group.


Vlad Dogaru (3):
  iproute2: add support for setting device groups
  iproute2: support listing devices by group
  iproute2: support setting device parameters by group

 etc/iproute2/group_map    |    2 +
 include/linux/if_link.h   |    1 +
 include/linux/netdevice.h |    2 +-
 include/utils.h           |    5 +++-
 ip/ip_common.h            |    2 +
 ip/ipaddress.c            |   14 ++++++++++
 ip/iplink.c               |   60 ++++++++++++++++++++++++++++++++++++++++++---
 ip/link_veth.c            |    3 +-
 lib/utils.c               |   41 ++++++++++++++++++++++++++++++
 man/man8/ip.8             |   31 ++++++++++++++++++++---
 tc/m_ematch.c             |   39 -----------------------------
 11 files changed, 150 insertions(+), 50 deletions(-)
 create mode 100644 etc/iproute2/group_map


^ permalink raw reply

* [PATCH v3 2/3] iproute2: support listing devices by group
From: Vlad Dogaru @ 2011-01-26 16:41 UTC (permalink / raw)
  To: netdev; +Cc: Vlad Dogaru, Stephen Hemminger
In-Reply-To: <1296060086-18777-1-git-send-email-ddvlad@rosedu.org>

User can specify device group to list by using the devgroup keyword:

	ip link lst devgroup test

If no group is specified, 0 (default) is implied.

Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
 include/linux/netdevice.h |    2 +-
 ip/ipaddress.c            |   14 ++++++++++++++
 ip/iplink.c               |    3 ++-
 man/man8/ip.8             |   11 +++++++++--
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index bec4e23..ad2e34d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -33,7 +33,7 @@
 
 #define MAX_ADDR_LEN	32		/* Largest hardware address length */
 
-
+#define INIT_NETDEV_GROUP	0	/* Initial group net devices belong to */
 
 /* Media selection options. */
 enum {
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index a775ecd..c634391 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -49,6 +49,7 @@ static struct
 	char *flushb;
 	int flushp;
 	int flushe;
+	int group;
 } filter;
 
 static int do_link;
@@ -246,6 +247,12 @@ int print_linkinfo(const struct sockaddr_nl *who,
 	    fnmatch(filter.label, RTA_DATA(tb[IFLA_IFNAME]), 0))
 		return 0;
 
+	if (tb[IFLA_GROUP]) {
+		int group = *(int*)RTA_DATA(tb[IFLA_GROUP]);
+		if (group != filter.group)
+			return -1;
+	}
+
 	if (n->nlmsg_type == RTM_DELLINK)
 		fprintf(fp, "Deleted ");
 
@@ -718,9 +725,12 @@ static int ipaddr_list_or_flush(int argc, char **argv, int flush)
 	if (filter.family == AF_UNSPEC)
 		filter.family = preferred_family;
 
+	filter.group = INIT_NETDEV_GROUP;
+
 	if (flush) {
 		if (argc <= 0) {
 			fprintf(stderr, "Flush requires arguments.\n");
+
 			return -1;
 		}
 		if (filter.family == AF_PACKET) {
@@ -779,6 +789,10 @@ static int ipaddr_list_or_flush(int argc, char **argv, int flush)
 		} else if (strcmp(*argv, "label") == 0) {
 			NEXT_ARG();
 			filter.label = *argv;
+		} else if (strcmp(*argv, "devgroup") == 0) {
+			NEXT_ARG();
+			if (lookup_map_id(*argv, &filter.group, GROUP_MAP))
+				invarg("Invalid \"group\" value\n", *argv);
 		} else {
 			if (strcmp(*argv, "dev") == 0) {
 				NEXT_ARG();
diff --git a/ip/iplink.c b/ip/iplink.c
index 6c9df43..a781848 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -66,13 +66,14 @@ void iplink_usage(void)
 	fprintf(stderr, "	                  [ address LLADDR ]\n");
 	fprintf(stderr, "	                  [ broadcast LLADDR ]\n");
 	fprintf(stderr, "	                  [ mtu MTU ]\n");
+	fprintf(stderr, "	                  [ group GROUP ]\n");
 	fprintf(stderr, "	                  [ netns PID ]\n");
 	fprintf(stderr, "			  [ alias NAME ]\n");
 	fprintf(stderr, "			  [ group GROUP ]\n");
 	fprintf(stderr, "	                  [ vf NUM [ mac LLADDR ]\n");
 	fprintf(stderr, "				   [ vlan VLANID [ qos VLAN-QOS ] ]\n");
 	fprintf(stderr, "				   [ rate TXRATE ] ] \n");
-	fprintf(stderr, "       ip link show [ DEVICE ]\n");
+	fprintf(stderr, "       ip link show [ DEVICE | devgroup DEVGROUP ]\n");
 
 	if (iplink_have_newlink()) {
 		fprintf(stderr, "\n");
diff --git a/man/man8/ip.8 b/man/man8/ip.8
index 77e03d8..5c42156 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -102,7 +102,9 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
 
 .ti -8
 .B ip link show
-.RI "[ " DEVICE " ]"
+.RI "[ " DEVICE " | "
+.B devgroup
+.IR GROUP " ]"
 
 .ti -8
 .BR "ip addr" " { " add " | " del " } "
@@ -1065,7 +1067,12 @@ call.
 .BI dev " NAME " (default)
 .I NAME
 specifies the network device to show.
-If this argument is omitted all devices are listed.
+If this argument is omitted all devices in the default group are listed.
+
+.TP
+.BI devgroup " GROUP "
+.I GROUP
+specifies what group of devices to show.
 
 .TP
 .B up
-- 
1.7.1


^ permalink raw reply related

* [PATCH v3 3/3] iproute2: support setting device parameters by group
From: Vlad Dogaru @ 2011-01-26 16:41 UTC (permalink / raw)
  To: netdev; +Cc: Vlad Dogaru, Stephen Hemminger
In-Reply-To: <1296060086-18777-1-git-send-email-ddvlad@rosedu.org>

Users can now modify basic device parameters with a single call. We use
the devgroup keyword to specify the device group to work on. For
instance, to take down all interfaces in group `default':

	ip link set down devgroup default

Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
 include/utils.h |    3 ++-
 ip/iplink.c     |   48 +++++++++++++++++++++++++++++++++++++++++++++---
 ip/link_veth.c  |    3 ++-
 man/man8/ip.8   |   11 +++++++++--
 4 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/include/utils.h b/include/utils.h
index 327373e..c708b74 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -151,7 +151,8 @@ extern int makeargs(char *line, char *argv[], int maxargs);
 
 struct iplink_req;
 int iplink_parse(int argc, char **argv, struct iplink_req *req,
-		char **name, char **type, char **link, char **dev);
+		char **name, char **type, char **link, char **dev,
+		int *devgroup);
 
 int lookup_map_id(const char *kind, int *dst, const char *file);
 #endif /* __UTILS_H__ */
diff --git a/ip/iplink.c b/ip/iplink.c
index a781848..85d2efa 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -51,7 +51,7 @@ void iplink_usage(void)
 		fprintf(stderr, "                   type TYPE [ ARGS ]\n");
 		fprintf(stderr, "       ip link delete DEV type TYPE [ ARGS ]\n");
 		fprintf(stderr, "\n");
-		fprintf(stderr, "       ip link set DEVICE [ { up | down } ]\n");
+		fprintf(stderr, "       ip link set { dev DEVICE | devgroup DEVGROUP } [ { up | down } ]\n");
 	} else
 		fprintf(stderr, "Usage: ip link set DEVICE [ { up | down } ]\n");
 
@@ -246,7 +246,8 @@ int iplink_parse_vf(int vf, int *argcp, char ***argvp,
 
 
 int iplink_parse(int argc, char **argv, struct iplink_req *req,
-		char **name, char **type, char **link, char **dev)
+		char **name, char **type, char **link, char **dev,
+		int *devgroup)
 {
 	int ret, len;
 	char abuf[32];
@@ -257,6 +258,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
 	int group = -1;
 
 	ret = argc;
+	*devgroup = -1; /* Not set. */
 
 	while (argc > 0) {
 		if (strcmp(*argv, "up") == 0) {
@@ -396,6 +398,20 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
 		} else {
 			if (strcmp(*argv, "dev") == 0) {
 				NEXT_ARG();
+				if (*dev)
+					duparg2("dev", *argv);
+				*dev = *argv;
+				argc--; argv++;
+				continue;
+			}
+			if (matches(*argv, "devgroup") == 0) {
+				NEXT_ARG();
+				if (*devgroup != -1)
+					duparg("devgroup", *argv);
+				if (lookup_map_id(*argv, devgroup, GROUP_MAP))
+					invarg("Invalid \"devgroup\" value\n", *argv);
+				argc--; argv++;
+				continue;
 			}
 			if (matches(*argv, "help") == 0)
 				usage();
@@ -406,6 +422,11 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
 		argc--; argv++;
 	}
 
+	if (*dev && (*devgroup != -1)) {
+		fprintf(stderr, "dev and devgroup cannot be both be present.\n");
+		exit(-1);
+	}
+
 	return ret - argc;
 }
 
@@ -416,6 +437,7 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
 	char *name = NULL;
 	char *link = NULL;
 	char *type = NULL;
+	int devgroup;
 	struct link_util *lu = NULL;
 	struct iplink_req req;
 	int ret;
@@ -427,12 +449,32 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
 	req.n.nlmsg_type = cmd;
 	req.i.ifi_family = preferred_family;
 
-	ret = iplink_parse(argc, argv, &req, &name, &type, &link, &dev);
+	ret = iplink_parse(argc, argv, &req, &name, &type, &link, &dev, &devgroup);
 	if (ret < 0)
 		return ret;
 
 	argc -= ret;
 	argv += ret;
+
+	if (devgroup != -1) {
+		if (argc) {
+			fprintf(stderr, "Garbage instead of arguments \"%s ...\". "
+					"Try \"ip link help\".\n", *argv);
+			return -1;
+		}
+		if (flags & NLM_F_CREATE) {
+			fprintf(stderr, "devgroup cannot be used when "
+					"creating devices.\n");
+			return -1;
+		}
+
+		req.i.ifi_index = 0;
+		addattr32(&req.n, sizeof(req), IFLA_GROUP, devgroup);
+		if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
+			exit(2);
+		return 0;
+	}
+
 	ll_init_map(&rth);
 
 	if (type) {
diff --git a/ip/link_veth.c b/ip/link_veth.c
index 9f5e871..06974e7 100644
--- a/ip/link_veth.c
+++ b/ip/link_veth.c
@@ -30,6 +30,7 @@ static int veth_parse_opt(struct link_util *lu, int argc, char **argv,
 	char *name, *type, *link, *dev;
 	int err, len;
 	struct rtattr * data;
+	int devgroup;
 
 	if (strcmp(argv[0], "peer") != 0) {
 		usage();
@@ -42,7 +43,7 @@ static int veth_parse_opt(struct link_util *lu, int argc, char **argv,
 	hdr->nlmsg_len += sizeof(struct ifinfomsg);
 
 	err = iplink_parse(argc - 1, argv + 1, (struct iplink_req *)hdr,
-			   &name, &type, &link, &dev);
+			   &name, &type, &link, &dev, &devgroup);
 	if (err < 0)
 		return err;
 
diff --git a/man/man8/ip.8 b/man/man8/ip.8
index 5c42156..302523a 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -55,8 +55,10 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
 .RI "[ " ARGS " ]"
 
 .ti -8
-.BI "ip link set " DEVICE
-.RB "{ " up " | " down " | " arp " { " on " | " off " } |"
+.BR "ip link set " {
+.IR DEVICE " | "
+.BI "devgroup " DEVGROUP
+.RB "} { " up " | " down " | " arp " { " on " | " off " } |"
 .br
 .BR promisc " { " on " | " off " } |"
 .br
@@ -933,6 +935,11 @@ specifies network device to operate on. When configuring SR-IOV Virtual Fuction
 device.
 
 .TP
+.BI devgroup " DEVGROUP "
+.I DEVGROUP
+specifies network device group to operate on.
+
+.TP
 .BR up " and " down
 change the state of the device to
 .B UP
-- 
1.7.1


^ permalink raw reply related

* [PATCH v3 1/3] iproute2: add support for setting device groups
From: Vlad Dogaru @ 2011-01-26 16:41 UTC (permalink / raw)
  To: netdev; +Cc: Vlad Dogaru, Stephen Hemminger
In-Reply-To: <1296060086-18777-1-git-send-email-ddvlad@rosedu.org>

Use the group keyword to specify what group the device should belong to.
Since the kernel uses numbers internally, mapping of group names to
numbers is defined in /etc/iproute2/group_map. Example usage:

  ip link set dev eth0 group default

Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
 etc/iproute2/group_map  |    2 ++
 include/linux/if_link.h |    1 +
 include/utils.h         |    2 ++
 ip/ip_common.h          |    2 ++
 ip/iplink.c             |    9 +++++++++
 lib/utils.c             |   41 +++++++++++++++++++++++++++++++++++++++++
 man/man8/ip.8           |    9 +++++++++
 tc/m_ematch.c           |   39 ---------------------------------------
 8 files changed, 66 insertions(+), 39 deletions(-)
 create mode 100644 etc/iproute2/group_map

diff --git a/etc/iproute2/group_map b/etc/iproute2/group_map
new file mode 100644
index 0000000..6f000b2
--- /dev/null
+++ b/etc/iproute2/group_map
@@ -0,0 +1,2 @@
+# device group names
+0	default
diff --git a/include/linux/if_link.h b/include/linux/if_link.h
index e87456c..54d05f9 100644
--- a/include/linux/if_link.h
+++ b/include/linux/if_link.h
@@ -135,6 +135,7 @@ enum {
 	IFLA_VF_PORTS,
 	IFLA_PORT_SELF,
 	IFLA_AF_SPEC,
+	IFLA_GROUP,
 	__IFLA_MAX
 };
 
diff --git a/include/utils.h b/include/utils.h
index 3da6998..327373e 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -152,4 +152,6 @@ extern int makeargs(char *line, char *argv[], int maxargs);
 struct iplink_req;
 int iplink_parse(int argc, char **argv, struct iplink_req *req,
 		char **name, char **type, char **link, char **dev);
+
+int lookup_map_id(const char *kind, int *dst, const char *file);
 #endif /* __UTILS_H__ */
diff --git a/ip/ip_common.h b/ip/ip_common.h
index a114186..b751d46 100644
--- a/ip/ip_common.h
+++ b/ip/ip_common.h
@@ -68,3 +68,5 @@ struct link_util *get_link_kind(const char *kind);
 #ifndef	INFINITY_LIFE_TIME
 #define     INFINITY_LIFE_TIME      0xFFFFFFFFU
 #endif
+
+#define GROUP_MAP "/etc/iproute2/group_map"
diff --git a/ip/iplink.c b/ip/iplink.c
index cb2c4f5..6c9df43 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -68,6 +68,7 @@ void iplink_usage(void)
 	fprintf(stderr, "	                  [ mtu MTU ]\n");
 	fprintf(stderr, "	                  [ netns PID ]\n");
 	fprintf(stderr, "			  [ alias NAME ]\n");
+	fprintf(stderr, "			  [ group GROUP ]\n");
 	fprintf(stderr, "	                  [ vf NUM [ mac LLADDR ]\n");
 	fprintf(stderr, "				   [ vlan VLANID [ qos VLAN-QOS ] ]\n");
 	fprintf(stderr, "				   [ rate TXRATE ] ] \n");
@@ -252,6 +253,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
 	int mtu = -1;
 	int netns = -1;
 	int vf = -1;
+	int group = -1;
 
 	ret = argc;
 
@@ -297,6 +299,13 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
 			if (get_integer(&mtu, *argv, 0))
 				invarg("Invalid \"mtu\" value\n", *argv);
 			addattr_l(&req->n, sizeof(*req), IFLA_MTU, &mtu, 4);
+		} else if (strcmp(*argv, "group") == 0) {
+			NEXT_ARG();
+			if (group != -1)
+				duparg("group", *argv);
+			if (lookup_map_id(*argv, &group, GROUP_MAP))
+				invarg("Invalid \"group\" value\n", *argv);
+			addattr_l(&req->n, sizeof(*req), IFLA_GROUP, &group, 4);
                 } else if (strcmp(*argv, "netns") == 0) {
                         NEXT_ARG();
                         if (netns != -1)
diff --git a/lib/utils.c b/lib/utils.c
index a60d884..3642cb7 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -25,6 +25,7 @@
 #include <linux/pkt_sched.h>
 #include <time.h>
 #include <sys/time.h>
+#include <errno.h>
 
 
 #include "utils.h"
@@ -760,3 +761,43 @@ int makeargs(char *line, char *argv[], int maxargs)
 
 	return argc;
 }
+
+int lookup_map_id(const char *kind, int *dst, const char *file)
+{
+	int err = -EINVAL;
+	char buf[512];
+	FILE *fd = fopen(file, "r");
+
+	if (fd == NULL) {
+		fprintf(stderr, "open %s: %s\n", file, strerror(errno));
+		return -errno;
+	}
+
+	while (fgets(buf, sizeof(buf), fd)) {
+		char namebuf[512], *p = buf;
+		int id;
+
+		while (*p == ' ' || *p == '\t')
+			p++;
+		if (*p == '#' || *p == '\n' || *p == 0)
+			continue;
+
+		if (sscanf(p, "%d %s", &id, namebuf) != 2) {
+			fprintf(stderr, "map %s corrupted at %s\n",
+			    file, p);
+			goto out;
+		}
+
+		if (!strcasecmp(namebuf, kind)) {
+			if (dst)
+				*dst = id;
+			err = 0;
+			goto out;
+		}
+	}
+
+	err = -ENOENT;
+out:
+	fclose(fd);
+	return err;
+}
diff --git a/man/man8/ip.8 b/man/man8/ip.8
index 8d55fa9..77e03d8 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -86,6 +86,9 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
 .B alias
 .IR NAME  " |"
 .br
+.B  group
+.IR GROUP " |"
+.br
 .B vf
 .IR NUM " ["
 .B  mac
@@ -994,6 +997,12 @@ move the device to the network namespace associated with the process
 give the device a symbolic name for easy reference.
 
 .TP
+.BI group " GROUP"
+specify the group the device belongs to.
+The available groups are listed in file
+.BR "/etc/iproute2/group_map" .
+
+.TP
 .BI vf " NUM"
 specify a Virtual Function device to be configured. The associated PF device
 must be specified using the
diff --git a/tc/m_ematch.c b/tc/m_ematch.c
index 4c3acf8..4a6855c 100644
--- a/tc/m_ematch.c
+++ b/tc/m_ematch.c
@@ -87,45 +87,6 @@ out:
 	return err;
 }
 
-static int lookup_map_id(char *kind, int *dst, const char *file)
-{
-	int err = -EINVAL;
-	char buf[512];
-	FILE *fd = fopen(file, "r");
-
-	if (fd == NULL)
-		return -errno;
-
-	while (fgets(buf, sizeof(buf), fd)) {
-		char namebuf[512], *p = buf;
-		int id;
-
-		while (*p == ' ' || *p == '\t')
-			p++;
-		if (*p == '#' || *p == '\n' || *p == 0)
-			continue;
-
-		if (sscanf(p, "%d %s", &id, namebuf) != 2) {
-			fprintf(stderr, "ematch map %s corrupted at %s\n",
-			    file, p);
-			goto out;
-		}
-
-		if (!strcasecmp(namebuf, kind)) {
-			if (dst)
-				*dst = id;
-			err = 0;
-			goto out;
-		}
-	}
-
-	err = -ENOENT;
-	*dst = 0;
-out:
-	fclose(fd);
-	return err;
-}
-
 static struct ematch_util *get_ematch_kind(char *kind)
 {
 	static void *body;
-- 
1.7.1


^ permalink raw reply related

* [PATCH net-next-2.6] net_sched: sch_mqprio: dont leak kernel memory
From: Eric Dumazet @ 2011-01-26 17:21 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, John Fastabend

mqprio_dump() should make sure all fields of struct tc_mqprio_qopt are
initialized.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: John Fastabend <john.r.fastabend@intel.com>
---
 net/sched/sch_mqprio.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
index fbc6f53..effd4ee 100644
--- a/net/sched/sch_mqprio.c
+++ b/net/sched/sch_mqprio.c
@@ -215,7 +215,7 @@ static int mqprio_dump(struct Qdisc *sch, struct sk_buff *skb)
 	struct net_device *dev = qdisc_dev(sch);
 	struct mqprio_sched *priv = qdisc_priv(sch);
 	unsigned char *b = skb_tail_pointer(skb);
-	struct tc_mqprio_qopt opt;
+	struct tc_mqprio_qopt opt = { 0 };
 	struct Qdisc *qdisc;
 	unsigned int i;
 



^ permalink raw reply related

* [PATCH] iproute2: fix man page whitespace
From: Vlad Dogaru @ 2011-01-26 17:35 UTC (permalink / raw)
  To: netdev; +Cc: Vlad Dogaru

Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
---
 man/man8/ip.8 |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/man/man8/ip.8 b/man/man8/ip.8
index 8d55fa9..83b7358 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -42,7 +42,7 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
 .RB "[ " mtu
 .IR MTU " ]"
 .br
-.BR type TYPE
+.BR type " TYPE"
 .RI "[ " ARGS " ]"
 
 .ti -8
@@ -51,7 +51,7 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
 
 .ti -8
 .BI "ip link delete " DEVICE
-.BI type TYPE
+.BI type " TYPE"
 .RI "[ " ARGS " ]"
 
 .ti -8
-- 
1.7.1


^ permalink raw reply related

* Re: [PATCH net-next-2.6] net_sched: sch_mqprio: dont leak kernel memory
From: Joe Perches @ 2011-01-26 17:43 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev, John Fastabend
In-Reply-To: <1296062517.2899.86.camel@edumazet-laptop>

On Wed, 2011-01-26 at 18:21 +0100, Eric Dumazet wrote:
> mqprio_dump() should make sure all fields of struct tc_mqprio_qopt are
> initialized.
> 
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> CC: John Fastabend <john.r.fastabend@intel.com>
> ---
>  net/sched/sch_mqprio.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
> index fbc6f53..effd4ee 100644
> --- a/net/sched/sch_mqprio.c
> +++ b/net/sched/sch_mqprio.c
> @@ -215,7 +215,7 @@ static int mqprio_dump(struct Qdisc *sch, struct sk_buff *skb)
>  	struct net_device *dev = qdisc_dev(sch);
>  	struct mqprio_sched *priv = qdisc_priv(sch);
>  	unsigned char *b = skb_tail_pointer(skb);
> -	struct tc_mqprio_qopt opt;
> +	struct tc_mqprio_qopt opt = { 0 };

I think the best style to use memset so that any
possible struct padding is guaranteed to be zeroed.



^ permalink raw reply

* Re: [PATCH net-next-2.6] net_sched: sch_mqprio: dont leak kernel memory
From: Eric Dumazet @ 2011-01-26 17:49 UTC (permalink / raw)
  To: Joe Perches; +Cc: David Miller, netdev, John Fastabend
In-Reply-To: <1296063823.6115.37.camel@Joe-Laptop>

Le mercredi 26 janvier 2011 à 09:43 -0800, Joe Perches a écrit :

> I think the best style to use memset so that any
> possible struct padding is guaranteed to be zeroed.
> 
> 

We use the { 0 } style in net/sched, and there is no padding in this
structure, I checked this point.




^ permalink raw reply

* Re: [PATCH net-next-2.6] net_sched: sch_mqprio: dont leak kernel memory
From: Joe Perches @ 2011-01-26 17:56 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Miller, netdev, John Fastabend
In-Reply-To: <1296064190.2899.88.camel@edumazet-laptop>

On Wed, 2011-01-26 at 18:49 +0100, Eric Dumazet wrote:
> Le mercredi 26 janvier 2011 à 09:43 -0800, Joe Perches a écrit :
> > I think the best style to use memset so that any
> > possible struct padding is guaranteed to be zeroed.
> We use the { 0 } style in net/sched,

That's nice, but it's the wrong style.
https://lkml.org/lkml/2010/12/15/63

> and there is no padding in this
> structure, I checked this point.

That may be true right now for this particular
structure, but that style is not future-proof.



^ permalink raw reply

* [RFC PATCH 0/2] Preparing NetDev and VLAN for FCoE targets (offload using DDP)
From: Kiran Patil @ 2011-01-26 18:08 UTC (permalink / raw)
  To: netdev, jeffrey.t.kirsher, yi.zou, robert.w.love, kiran.patil

The following series implements...

1) NetDev: Add ndo_fcoe_ddp_target() in struct net_device_ops to 
   support FCoE DDP in target mode
2) VLAN: Add new target DDP offload support ndo_fcoe_ddp_target.
   This patch depends upon patch 1 of this series. 


Dependencies: This series is preparing the NetDev and VLAN for
   FCoE target (offload using DDP). This series is pre-requistie 
   for the patch which shall be submitted later after final version
   of these patches for ixgbe (10Gb Ethernet Driver).

---

Yi Zou (2):
      vlan: add support to ndo_fcoe_ddp_target()
      net: add ndo_fcoe_ddp_target() to support FCoE DDP in target mode


 drivers/net/ixgbe/ixgbe.h      |    2 +
 drivers/net/ixgbe/ixgbe_fcoe.c |   86 ++++++++++++++++++++++++++++++++++------
 drivers/net/ixgbe/ixgbe_fcoe.h |    4 ++
 drivers/net/ixgbe/ixgbe_main.c |    1 
 include/linux/netdevice.h      |    4 ++
 net/8021q/vlan_dev.c           |   14 +++++++
 6 files changed, 99 insertions(+), 12 deletions(-)

-- 
Thanks,
-- Kiran P

^ permalink raw reply

* [RFC PATCH 2/2] vlan: add support to ndo_fcoe_ddp_target()
From: Kiran Patil @ 2011-01-26 18:09 UTC (permalink / raw)
  To: netdev, jeffrey.t.kirsher, yi.zou, robert.w.love, kiran.patil
In-Reply-To: <20110126180855.25039.82793.stgit@localhost.localdomain>

From: Yi Zou <yi.zou@intel.com>

Add the new target ddp offload support ndo_fcoe_ddp_target().

Signed-off-by: Yi Zou <yi.zou@intel.com>
---

 net/8021q/vlan_dev.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 14e3d1f..f6e1ace 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -670,6 +670,19 @@ static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
 		rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
 	return rc;
 }
+
+static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid,
+				    struct scatterlist *sgl, unsigned int sgc)
+{
+	struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
+	const struct net_device_ops *ops = real_dev->netdev_ops;
+	int rc = 0;
+
+	if (ops->ndo_fcoe_ddp_target)
+		rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
+
+	return rc;
+}
 #endif
 
 static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
@@ -905,6 +918,7 @@ static const struct net_device_ops vlan_netdev_ops = {
 	.ndo_fcoe_enable	= vlan_dev_fcoe_enable,
 	.ndo_fcoe_disable	= vlan_dev_fcoe_disable,
 	.ndo_fcoe_get_wwn	= vlan_dev_fcoe_get_wwn,
+	.ndo_fcoe_ddp_target	= vlan_dev_fcoe_ddp_target,
 #endif
 };
 


^ permalink raw reply related

* [RFC PATCH 1/2] net: add ndo_fcoe_ddp_target() to support FCoE DDP in target mode
From: Kiran Patil @ 2011-01-26 18:09 UTC (permalink / raw)
  To: netdev, jeffrey.t.kirsher, yi.zou, robert.w.love, kiran.patil
In-Reply-To: <20110126180855.25039.82793.stgit@localhost.localdomain>

From: Yi Zou <yi.zou@intel.com>

The Fiber Channel over Ethernet (FCoE) Direct Data Placement (DDP) can also be
used for FCoE target, where the DDP used for read I/O on an initiator can be
used on an FCoE target to speed up the write I/O to the target from the initiator.
The added ndo_fcoe_ddp_target() works in the similar way as the existing
ndo_fcoe_ddp_setup() to allow the underlying hardware set up the DDP context
accordingly when it gets called from the FCoE target implementation on top
the existing Open-FCoE fcoe/libfc protocol stack so without losing the ability
to provide DDP for read I/O as an initiator, it can also provide DDP offload
to the write I/O coming from the initiator as a target.

Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: Kiran Patil <kiran.patil@intel.com>
---

 include/linux/netdevice.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d8fd2c2..d96a198 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -774,6 +774,10 @@ struct net_device_ops {
 						      unsigned int sgc);
 	int			(*ndo_fcoe_ddp_done)(struct net_device *dev,
 						     u16 xid);
+	int			(*ndo_fcoe_ddp_target)(struct net_device *dev,
+						       u16 xid,
+						       struct scatterlist *sgl,
+						       unsigned int sgc);
 #define NETDEV_FCOE_WWNN 0
 #define NETDEV_FCOE_WWPN 1
 	int			(*ndo_fcoe_get_wwn)(struct net_device *dev,


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox