On Wed, 21 Sep 2005, Sten Daniel Sørsdal wrote:

Robert Watson wrote:

So if someone could generate some application pseudo-code that suggests
what specifically is necessary from the socket layer in order for the
application to function, we can talk about socket service extensions
that might support the application.  For example, a way to query
detailed error information rather than just the SO_ERROR socket option.
Or a longer haul PMTU data gathering mechanism for UDP sockets.  Or ways
for UDP applications to more usefully query the kernel for the TCP PMTU
data already being recorded.

It sounds like for the bandwidth tester, IP raw sockets already provide what you need, since you want to be able to do fairly irregular UDP things (i.e., receive UDP packets with bad checksums, and see fragments).

IP raw sockets? Sure, Everything can be solved the complicated way :o) Some userland applications could benefit from having the option of DF flag set/unset.

UDP sockets are defined as being a way to send and receive valid UDP datagrams. Your list of things to receive included fragments and invalid datagrams. While I agree with your comments below about things UDP applications want to do, I don't agree that we should teach UDP sockets to receive UDP datagram fragments or packets with bad checksums. Applications looking for non-accepted IP packets and complete ICMP messages should be using the raw socket interface. Applications looking for post-processed abstracted interfaces to a datagram service should be using UDP sockets. See below for discussion of enhancing UDP sockets.

What about applications that wants to have a way of optimizing UDP
transfers in their network path?

Some networks filter icmp and fragments irresponsibly (imho) and sometimes the combination of two or more networks that would cause problems for multicast/video/voip applications.

Sometimes in one network udp packets need fragmenting and in the next network fragments need to get reassembled to pass a firewall which in turn runs out of reassembling resources. ( It is more common to block icmp messages about reassembly problems than DF problems IF a message is generated in the first place. )

Sure, all of this could be fixed the complicated way but what if one already has an application that runs in unprivileged userland. How many lines of code would a simple socket option plus the "tuning" code require?

You're still not answering my question about application pseudo-code, however. Adding an IP_DF option to UDP sockets is easy, and can be done in ten lines of code or less. Adding a way to provide detailed feedback on error conditions associated with UDP packets sent at arbitrary points in the path is not something that falls naturally out of the socket API, and will require non-trivial amounts of work. Hence my asking about the structure and event model of your application: what exactly do you want to know about UDP packet delivery?

Specifically, what information do you as a developer need in order to handle asynchronous error delivery from UDP packet send, and how will it affect your application's interaction with the network stack? We can already deliver an synchronous EMSGSIZE when you try to send a UDP packet out of an interface with an MTU that is lower than the packet size, given a socket option to force IP_DF. However, if the packet hits a potential fragmentation problem out in the wide area network, that notification is completely asynchronous from packet transmission, and we will need a way to feed more detailed ICMP information to the application. Right now asynchronous error delivery on a UDP socket is already fairly messy due to the fact that generally applications can only pick up the error when doing further I/O, confusing the issue of which operation actually generated the error.

Robert N M Watson
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to