projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
manual page distributed with 4.2BSD
[unix-history]
/
usr
/
src
/
sys
/
netinet
/
udp_usrreq.c
diff --git
a/usr/src/sys/netinet/udp_usrreq.c
b/usr/src/sys/netinet/udp_usrreq.c
index
1ce507c
..
41c80df
100644
(file)
--- a/
usr/src/sys/netinet/udp_usrreq.c
+++ b/
usr/src/sys/netinet/udp_usrreq.c
@@
-1,4
+1,4
@@
-/* udp_usrreq.c 6.
7 84/08
/29 */
+/* udp_usrreq.c 6.
11 85/04
/29 */
#include "param.h"
#include "dir.h"
#include "param.h"
#include "dir.h"
@@
-204,7
+204,7
@@
udp_output(inp, m0)
so = inp->inp_socket;
if (so->so_options & SO_DONTROUTE)
return (ip_output(m, (struct mbuf *)0, (struct route *)0,
so = inp->inp_socket;
if (so->so_options & SO_DONTROUTE)
return (ip_output(m, (struct mbuf *)0, (struct route *)0,
- (so->so_
state & SS_PRIV
) | IP_ROUTETOIF));
+ (so->so_
options & SO_BROADCAST
) | IP_ROUTETOIF));
/*
* Use cached route for previous datagram if
* this is also to the same destination.
/*
* Use cached route for previous datagram if
* this is also to the same destination.
@@
-219,9
+219,13
@@
udp_output(inp, m0)
RTFREE(ro->ro_rt);
ro->ro_rt = (struct rtentry *)0;
}
RTFREE(ro->ro_rt);
ro->ro_rt = (struct rtentry *)0;
}
- return (ip_output(m, (struct mbuf *)0, ro, so->so_state & SS_PRIV));
+ return (ip_output(m, (struct mbuf *)0, ro,
+ so->so_options & SO_BROADCAST));
}
}
+int udp_sendspace = 2048; /* really max datagram size */
+int udp_recvspace = 4 * (1024+sizeof(struct sockaddr_in)); /* 4 1K dgrams */
+
/*ARGSUSED*/
udp_usrreq(so, req, m, nam, rights)
struct socket *so;
/*ARGSUSED*/
udp_usrreq(so, req, m, nam, rights)
struct socket *so;
@@
-231,6
+235,9
@@
udp_usrreq(so, req, m, nam, rights)
struct inpcb *inp = sotoinpcb(so);
int error = 0;
struct inpcb *inp = sotoinpcb(so);
int error = 0;
+ if (req == PRU_CONTROL)
+ return (in_control(so, (int)m, (caddr_t)nam,
+ (struct ifnet *)rights));
if (rights && rights->m_len) {
error = EINVAL;
goto release;
if (rights && rights->m_len) {
error = EINVAL;
goto release;
@@
-249,7
+256,7
@@
udp_usrreq(so, req, m, nam, rights)
error = in_pcballoc(so, &udb);
if (error)
break;
error = in_pcballoc(so, &udb);
if (error)
break;
- error = soreserve(so,
2048, 2048
);
+ error = soreserve(so,
udp_sendspace, udp_recvspace
);
if (error)
break;
break;
if (error)
break;
break;
@@
-330,8
+337,8
@@
udp_usrreq(so, req, m, nam, rights)
m = NULL;
if (nam) {
in_pcbdisconnect(inp);
m = NULL;
if (nam) {
in_pcbdisconnect(inp);
- splx(s);
inp->inp_laddr = laddr;
inp->inp_laddr = laddr;
+ splx(s);
}
}
break;
}
}
break;
@@
-364,7
+371,6
@@
udp_usrreq(so, req, m, nam, rights)
error = EOPNOTSUPP;
break;
error = EOPNOTSUPP;
break;
- case PRU_CONTROL:
case PRU_RCVD:
case PRU_RCVOOB:
return (EOPNOTSUPP); /* do not free mbuf's */
case PRU_RCVD:
case PRU_RCVOOB:
return (EOPNOTSUPP); /* do not free mbuf's */