patch-2.4.19 linux-2.4.19/net/ipv4/udp.c
Next file: linux-2.4.19/net/ipv4/utils.c
Previous file: linux-2.4.19/net/ipv4/tcp_output.c
Back to the patch index
Back to the overall index
- Lines: 82
- Date:
Fri Aug 2 17:39:46 2002
- Orig file:
linux-2.4.18/net/ipv4/udp.c
- Orig date:
Mon Feb 25 11:38:14 2002
diff -urN linux-2.4.18/net/ipv4/udp.c linux-2.4.19/net/ipv4/udp.c
@@ -5,7 +5,7 @@
*
* The User Datagram Protocol (UDP).
*
- * Version: $Id: udp.c,v 1.100.2.1 2002/01/12 07:39:23 davem Exp $
+ * Version: $Id: udp.c,v 1.100.2.4 2002/03/05 12:47:34 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
@@ -712,6 +712,8 @@
{
struct sockaddr_in *usin = (struct sockaddr_in *) uaddr;
struct rtable *rt;
+ u32 saddr;
+ int oif;
int err;
@@ -723,8 +725,16 @@
sk_dst_reset(sk);
- err = ip_route_connect(&rt, usin->sin_addr.s_addr, sk->saddr,
- RT_CONN_FLAGS(sk), sk->bound_dev_if);
+ oif = sk->bound_dev_if;
+ saddr = sk->saddr;
+ if (MULTICAST(usin->sin_addr.s_addr)) {
+ if (!oif)
+ oif = sk->protinfo.af_inet.mc_index;
+ if (!saddr)
+ saddr = sk->protinfo.af_inet.mc_addr;
+ }
+ err = ip_route_connect(&rt, usin->sin_addr.s_addr, saddr,
+ RT_CONN_FLAGS(sk), oif);
if (err)
return err;
if ((rt->rt_flags&RTCF_BROADCAST) && !sk->broadcast) {
@@ -889,7 +899,9 @@
if (!pskb_may_pull(skb, sizeof(struct udphdr)))
goto no_header;
- ulen = ntohs(skb->h.uh->len);
+ uh = skb->h.uh;
+
+ ulen = ntohs(uh->len);
if (ulen > len || ulen < sizeof(*uh))
goto short_packet;
@@ -897,8 +909,6 @@
if (pskb_trim(skb, ulen))
goto short_packet;
- uh = skb->h.uh;
-
if (udp_checksum_init(skb, uh, ulen, saddr, daddr) < 0)
goto csum_error;
@@ -928,7 +938,14 @@
return(0);
short_packet:
- NETDEBUG(if (net_ratelimit()) printk(KERN_DEBUG "UDP: short packet: %d/%d\n", ulen, len));
+ NETDEBUG(if (net_ratelimit())
+ printk(KERN_DEBUG "UDP: short packet: %u.%u.%u.%u:%u %d/%d to %u.%u.%u.%u:%u\n",
+ NIPQUAD(saddr),
+ ntohs(uh->source),
+ ulen,
+ len,
+ NIPQUAD(daddr),
+ ntohs(uh->dest)));
no_header:
UDP_INC_STATS_BH(UdpInErrors);
kfree_skb(skb);
@@ -961,7 +978,7 @@
destp = ntohs(sp->dport);
srcp = ntohs(sp->sport);
sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X"
- " %02X %08X:%08X %02X:%08lX %08X %5d %8d %ld %d %p",
+ " %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p",
i, src, srcp, dest, destp, sp->state,
atomic_read(&sp->wmem_alloc), atomic_read(&sp->rmem_alloc),
0, 0L, 0,
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)