*
* %sccs.include.redist.c%
*
- * @(#)udp_usrreq.c 7.28 (Berkeley) %G%
+ * @(#)udp_usrreq.c 7.31 (Berkeley) %G%
*/
#include <sys/param.h>
#else
int udpcksum = 0; /* XXX */
#endif
-int udp_ttl = UDP_TTL;
struct sockaddr_in udp_in = { sizeof(udp_in), AF_INET };
}
if (IN_MULTICAST(ntohl(ip->ip_dst.s_addr)) ||
- in_broadcast(ip->ip_dst)) {
+ in_broadcast(ip->ip_dst, m->m_pkthdr.rcvif)) {
struct socket *last;
/*
* Deliver a multicast or broadcast datagram to *all* sockets
error = soreserve(so, udp_sendspace, udp_recvspace);
if (error)
break;
- ((struct inpcb *) so->so_pcb)->inp_ip.ip_ttl = udp_ttl;
+ ((struct inpcb *) so->so_pcb)->inp_ip.ip_ttl = ip_defttl;
break;
case PRU_DETACH:
in_pcbdetach(inp);
splx(s);
}
+
+/*
+ * Sysctl for udp variables.
+ */
+udp_sysctl(name, namelen, oldp, oldlenp, newp, newlen)
+ int *name;
+ u_int namelen;
+ void *oldp;
+ size_t *oldlenp;
+ void *newp;
+ size_t newlen;
+{
+ extern int ip_ttl;
+
+ /* all sysctl names at this level are terminal */
+ if (namelen != 1)
+ return (ENOTDIR);
+
+ switch (name[0]) {
+ case UDPCTL_CHECKSUM:
+ return (sysctl_int(oldp, oldlenp, newp, newlen, &udpcksum));
+ default:
+ return (ENOPROTOOPT);
+ }
+ /* NOTREACHED */
+}