Re: [patch 4/10] s390: network driver.
From: Paul Jakma
Date: Mon Dec 06 2004 - 13:50:39 EST
On Mon, 6 Dec 2004, jamal wrote:
Dont post networking related patches on other lists. I havent seen said
patch, but it seems someone is complaining about some behavior changing?
I missed the beginning of the thread too, but saw Jeff's reply to
Thomas on netdev. It appears the original patch was to make the s390
network driver discard packets on link-down.
Jeff had replied to say this was bad, that queues are meant to fill
and that this was what other drivers (e1000, tg3) did.
In regards to link down and packets being queued. Agreed this is a
little problematic for some apps/transports.
Tis yes. Particularly for apps using raw and UDP+IP_HDRINCL sockets.
This problem came to light when we got reports of ospfd blocking
because link was down, late in 2.4 with a certain version of the
(iirc) e100 driver. ospfd uses one single socket for all interfaces,
and relies on IP_HDRINCL to have the packet routed out right
interface. However this approach doesnt play well if the socket can
be blocked completely because of /one/ interface having its link
down. The behaviour we expected (and got up until now) is to receive
either ENOBUFS or else, if the kernel accepts the packet write, for
it to drop it if it can not be sent.
We can work around that by moving to a socket/interface. However it
still leaves the problem of packets being queued indefinitely while
the link is down and being sent when link comes back. This is *not*
good for RIP, IPv4 IRDP and IPv6 RA.
In the case the netdevice is administratively downed both the qdisc
and DMA ring packets are flushed.
What about any packets remaining in the socket buffer? (if that makes
sense - i dont know enough about internals sadly). Are those queued?
Newer packets will never be queued
That no longer appears to be the case though. The socket blocks, and
/some/ packets are queued (presumably those which still were in the
socket buffer? i dont know exactly..).
and you should quickly be able to find from your app that
the device is down.
We can yes, via rtnetlink - but impossible to guarantee we'll know
the link is down before we try write a packet.
In the case of netdevice being operationally down
?
As in 'ip link set dev ... down'?
- I am hoping this is what the discussion is, having jumped on it -
No, its for link-down, AIUI.
both queues stay intact. What you can do is certainly from user
space admin down/up the device when you receive a netlink carrier
off notification.
That seems possible, but quite a hack. Something to work at a socket
level would possibly be nicer. (Socket being the primary handle our
application has).
I am struggling to see whether dropping the packet inside the tx
path once it is operationaly down is so blasphemous ... need to get
caffeine first.
As long as reliable transports have some other transport specific
queue, shouldnt be a problem. For UDP and raw no reliability or
guarantees are expected by applications (least shouldnt be), and
queueing some packets on link-down interferes with application-layer
expectations.
cheers,
jamal
regards,
--
Paul Jakma paul@xxxxxxxx paul@xxxxxxxxx Key ID: 64A2FF6A
Fortune:
The UPS doesn't have a battery backup.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/