--- //depot/vendor/freebsd/src/sys/netinet/udp_usrreq.c 2005/12/14 22:30:18 +++ //depot/projects/netsmp/src/sys/netinet/udp_usrreq.c 2006/01/01 16:05:22 @@ -1115,5 +1115,32 @@ .pru_send = udp_send, .pru_shutdown = udp_shutdown, .pru_sockaddr = udp_sockaddr, + .pru_sosend = sosend, .pru_sosetlabel = in_pcbsosetlabel }; + +static int +sysctl_net_inet_udp_sosend_dgram(SYSCTL_HANDLER_ARGS) +{ + int error, mode; + + if (udp_usrreqs.pru_sosend == sosend_dgram) + mode = 1; + else + mode = 0; + + error = sysctl_handle_int(oidp, &mode, 0, req); + if (error || !req->newptr) + return (error); + + if (mode) + udp_usrreqs.pru_sosend = sosend_dgram; + else + udp_usrreqs.pru_sosend = sosend; + + return (0); +} + +SYSCTL_PROC(_net_inet_udp, OID_AUTO, sosend_dgram, CTLTYPE_INT | + CTLFLAG_RW, 0, 0, sysctl_net_inet_udp_sosend_dgram, "I", + "Use optimized sosend_dgram instead of sosend for UDP");