summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
committerjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
commit5596676e6c6c1e81e899cd0531f9b1c28a292669 (patch)
treeb1a19fcdf05759281fab0d89efb13f0fdf42102e /sys/netinet6
parent83e00d4274950d2b531c24692cd123538ffbddb9 (diff)
downloadFreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.zip
FreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.tar.gz
KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/in6.c18
-rw-r--r--sys/netinet6/in6_pcb.c16
-rw-r--r--sys/netinet6/in6_pcb.h8
-rw-r--r--sys/netinet6/in6_src.c6
-rw-r--r--sys/netinet6/in6_var.h2
-rw-r--r--sys/netinet6/ip6_input.c1
-rw-r--r--sys/netinet6/ip6_output.c19
-rw-r--r--sys/netinet6/ip6_var.h2
-rw-r--r--sys/netinet6/ip6protosw.h4
-rw-r--r--sys/netinet6/raw_ip6.c12
-rw-r--r--sys/netinet6/udp6_output.c8
-rw-r--r--sys/netinet6/udp6_usrreq.c22
-rw-r--r--sys/netinet6/udp6_var.h2
13 files changed, 61 insertions, 59 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index c6d0d60..c17bf55 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -131,7 +131,7 @@ const struct sockaddr_in6 sa6_any = {sizeof(sa6_any), AF_INET6,
0, 0, IN6ADDR_ANY_INIT, 0};
static int in6_lifaddr_ioctl __P((struct socket *, u_long, caddr_t,
- struct ifnet *, struct proc *));
+ struct ifnet *, struct thread *));
static int in6_ifinit __P((struct ifnet *, struct in6_ifaddr *,
struct sockaddr_in6 *, int));
static void in6_unlink_ifa __P((struct in6_ifaddr *, struct ifnet *));
@@ -361,12 +361,12 @@ in6_len2mask(mask, len)
#define ia62ifa(ia6) (&((ia6)->ia_ifa))
int
-in6_control(so, cmd, data, ifp, p)
+in6_control(so, cmd, data, ifp, td)
struct socket *so;
u_long cmd;
caddr_t data;
struct ifnet *ifp;
- struct proc *p;
+ struct thread *td;
{
struct in6_ifreq *ifr = (struct in6_ifreq *)data;
struct in6_ifaddr *ia = NULL;
@@ -374,7 +374,7 @@ in6_control(so, cmd, data, ifp, p)
int privileged;
privileged = 0;
- if (p == NULL || !suser(p))
+ if (td == NULL || !suser_td(td))
privileged++;
switch (cmd) {
@@ -438,7 +438,7 @@ in6_control(so, cmd, data, ifp, p)
return(EPERM);
/*fall through*/
case SIOCGLIFADDR:
- return in6_lifaddr_ioctl(so, cmd, data, ifp, p);
+ return in6_lifaddr_ioctl(so, cmd, data, ifp, td);
}
/*
@@ -1317,12 +1317,12 @@ in6_purgeif(ifp)
* address encoding scheme. (see figure on page 8)
*/
static int
-in6_lifaddr_ioctl(so, cmd, data, ifp, p)
+in6_lifaddr_ioctl(so, cmd, data, ifp, td)
struct socket *so;
u_long cmd;
caddr_t data;
struct ifnet *ifp;
- struct proc *p;
+ struct thread *td;
{
struct if_laddrreq *iflr = (struct if_laddrreq *)data;
struct ifaddr *ifa;
@@ -1430,7 +1430,7 @@ in6_lifaddr_ioctl(so, cmd, data, ifp, p)
in6_len2mask(&ifra.ifra_prefixmask.sin6_addr, prefixlen);
ifra.ifra_flags = iflr->flags & ~IFLR_PREFIX;
- return in6_control(so, SIOCAIFADDR_IN6, (caddr_t)&ifra, ifp, p);
+ return in6_control(so, SIOCAIFADDR_IN6, (caddr_t)&ifra, ifp, td);
}
case SIOCGLIFADDR:
case SIOCDLIFADDR:
@@ -1558,7 +1558,7 @@ in6_lifaddr_ioctl(so, cmd, data, ifp, p)
ifra.ifra_flags = ia->ia6_flags;
return in6_control(so, SIOCDIFADDR_IN6, (caddr_t)&ifra,
- ifp, p);
+ ifp, td);
}
}
}
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 5e8b3dd..fa67043 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -120,10 +120,10 @@
struct in6_addr zeroin6_addr;
int
-in6_pcbbind(inp, nam, p)
+in6_pcbbind(inp, nam, td)
register struct inpcb *inp;
struct sockaddr *nam;
- struct proc *p;
+ struct thread *td;
{
struct socket *so = inp->inp_socket;
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)NULL;
@@ -187,8 +187,8 @@ in6_pcbbind(inp, nam, p)
struct inpcb *t;
/* GROSS */
- if (ntohs(lport) < IPV6PORT_RESERVED && p &&
- suser_xxx(0, p, PRISON_ROOT))
+ if (ntohs(lport) < IPV6PORT_RESERVED && td &&
+ suser_xxx(0, td->td_proc, PRISON_ROOT))
return(EACCES);
if (so->so_cred->cr_uid != 0 &&
!IN6_IS_ADDR_MULTICAST(&sin6->sin6_addr)) {
@@ -246,7 +246,7 @@ in6_pcbbind(inp, nam, p)
}
if (lport == 0) {
int e;
- if ((e = in6_pcbsetport(&inp->in6p_laddr, inp, p)) != 0)
+ if ((e = in6_pcbsetport(&inp->in6p_laddr, inp, td)) != 0)
return(e);
}
else {
@@ -337,10 +337,10 @@ in6_pcbladdr(inp, nam, plocal_addr6)
* then pick one.
*/
int
-in6_pcbconnect(inp, nam, p)
+in6_pcbconnect(inp, nam, td)
register struct inpcb *inp;
struct sockaddr *nam;
- struct proc *p;
+ struct thread *td;
{
struct in6_addr *addr6;
register struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)nam;
@@ -361,7 +361,7 @@ in6_pcbconnect(inp, nam, p)
}
if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) {
if (inp->inp_lport == 0) {
- error = in6_pcbbind(inp, (struct sockaddr *)0, p);
+ error = in6_pcbbind(inp, (struct sockaddr *)0, td);
if (error)
return (error);
}
diff --git a/sys/netinet6/in6_pcb.h b/sys/netinet6/in6_pcb.h
index df8e2c8..c1d038d 100644
--- a/sys/netinet6/in6_pcb.h
+++ b/sys/netinet6/in6_pcb.h
@@ -76,9 +76,9 @@
void in6_pcbpurgeif0 __P((struct in6pcb *, struct ifnet *));
void in6_losing __P((struct inpcb *));
-int in6_pcballoc __P((struct socket *, struct inpcbinfo *, struct proc *));
-int in6_pcbbind __P((struct inpcb *, struct sockaddr *, struct proc *));
-int in6_pcbconnect __P((struct inpcb *, struct sockaddr *, struct proc *));
+int in6_pcballoc __P((struct socket *, struct inpcbinfo *, struct thread *));
+int in6_pcbbind __P((struct inpcb *, struct sockaddr *, struct thread *));
+int in6_pcbconnect __P((struct inpcb *, struct sockaddr *, struct thread *));
void in6_pcbdetach __P((struct inpcb *));
void in6_pcbdisconnect __P((struct inpcb *));
int in6_pcbladdr __P((struct inpcb *, struct sockaddr *,
@@ -104,7 +104,7 @@ struct in6_addr *in6_selectsrc __P((struct sockaddr_in6 *,
struct route_in6 *,
struct in6_addr *, int *));
int in6_selecthlim __P((struct in6pcb *, struct ifnet *));
-int in6_pcbsetport __P((struct in6_addr *, struct inpcb *, struct proc *));
+int in6_pcbsetport __P((struct in6_addr *, struct inpcb *, struct thread *));
void init_sin6 __P((struct sockaddr_in6 *sin6, struct mbuf *m));
#endif /* _KERNEL */
diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c
index 708c4f5..3cee6cb 100644
--- a/sys/netinet6/in6_src.c
+++ b/sys/netinet6/in6_src.c
@@ -325,10 +325,10 @@ in6_selecthlim(in6p, ifp)
* share this function by all *bsd*...
*/
int
-in6_pcbsetport(laddr, inp, p)
+in6_pcbsetport(laddr, inp, td)
struct in6_addr *laddr;
struct inpcb *inp;
- struct proc *p;
+ struct thread *td;
{
struct socket *so = inp->inp_socket;
u_int16_t lport = 0, first, last, *lastport;
@@ -346,7 +346,7 @@ in6_pcbsetport(laddr, inp, p)
last = ipport_hilastauto;
lastport = &pcbinfo->lasthi;
} else if (inp->inp_flags & INP_LOWPORT) {
- if (p && (error = suser(p)))
+ if (td && (error = suser_td(td)))
return error;
first = ipport_lowfirstauto; /* 1023 */
last = ipport_lowlastauto; /* 600 */
diff --git a/sys/netinet6/in6_var.h b/sys/netinet6/in6_var.h
index bb5abc9..c109bfc 100644
--- a/sys/netinet6/in6_var.h
+++ b/sys/netinet6/in6_var.h
@@ -571,7 +571,7 @@ extern int in6_ifindex2scopeid __P((int));
extern int in6_mask2len __P((struct in6_addr *, u_char *));
extern void in6_len2mask __P((struct in6_addr *, int));
int in6_control __P((struct socket *,
- u_long, caddr_t, struct ifnet *, struct proc *));
+ u_long, caddr_t, struct ifnet *, struct thread *));
int in6_update_ifa __P((struct ifnet *, struct in6_aliasreq *,
struct in6_ifaddr *));
void in6_purgeaddr __P((struct ifaddr *));
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
index f4a0307..c426e13 100644
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -75,6 +75,7 @@
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
+#include <sys/proc.h>
#include <sys/domain.h>
#include <sys/protosw.h>
#include <sys/socket.h>
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
index 41b25b6c..99e8ddd 100644
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -74,6 +74,7 @@
#include <sys/param.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
+#include <sys/proc.h>
#include <sys/errno.h>
#include <sys/protosw.h>
#include <sys/socket.h>
@@ -1271,20 +1272,20 @@ ip6_ctloutput(so, sopt)
int error, optval;
int level, op, optname;
int optlen;
- struct proc *p;
+ struct thread *td;
if (sopt) {
level = sopt->sopt_level;
op = sopt->sopt_dir;
optname = sopt->sopt_name;
optlen = sopt->sopt_valsize;
- p = sopt->sopt_p;
+ td = sopt->sopt_td;
} else {
panic("ip6_ctloutput: arg soopt is NULL");
}
error = optval = 0;
- privileged = (p == 0 || suser(p)) ? 0 : 1;
+ privileged = (td == 0 || suser_td(td)) ? 0 : 1;
if (level == IPPROTO_IPV6) {
switch (op) {
@@ -1440,7 +1441,7 @@ do { \
break;
}
/* XXX */
- MGET(m, sopt->sopt_p ? M_TRYWAIT : M_DONTWAIT, MT_HEADER);
+ MGET(m, sopt->sopt_td ? M_TRYWAIT : M_DONTWAIT, MT_HEADER);
if (m == 0) {
error = ENOBUFS;
break;
@@ -1708,7 +1709,7 @@ ip6_pcbopts(pktopt, m, so, sopt)
{
struct ip6_pktopts *opt = *pktopt;
int error = 0;
- struct proc *p = sopt->sopt_p;
+ struct thread *td = sopt->sopt_td;
int priv = 0;
/* turn off any old options. */
@@ -1734,7 +1735,7 @@ ip6_pcbopts(pktopt, m, so, sopt)
}
/* set options specified by user. */
- if (p && !suser(p))
+ if (td && !suser_td(td))
priv = 1;
if ((error = ip6_setpktoptions(m, opt, priv, 1)) != 0) {
ip6_clearpktopts(opt, 1, -1); /* XXX: discard all options */
@@ -1895,7 +1896,7 @@ ip6_setmoptions(optname, im6op, m)
struct route_in6 ro;
struct sockaddr_in6 *dst;
struct in6_multi_mship *imm;
- struct proc *p = curproc; /* XXX */
+ struct thread *td = curthread; /* XXX */
if (im6o == NULL) {
/*
@@ -1990,7 +1991,7 @@ ip6_setmoptions(optname, im6op, m)
* all multicast addresses. Only super user is allowed
* to do this.
*/
- if (suser(p))
+ if (suser_td(td))
{
error = EACCES;
break;
@@ -2097,7 +2098,7 @@ ip6_setmoptions(optname, im6op, m)
}
mreq = mtod(m, struct ipv6_mreq *);
if (IN6_IS_ADDR_UNSPECIFIED(&mreq->ipv6mr_multiaddr)) {
- if (suser(p)) {
+ if (suser_td(td)) {
error = EACCES;
break;
}
diff --git a/sys/netinet6/ip6_var.h b/sys/netinet6/ip6_var.h
index dea9c07..f226cc6 100644
--- a/sys/netinet6/ip6_var.h
+++ b/sys/netinet6/ip6_var.h
@@ -345,7 +345,7 @@ void rip6_ctlinput __P((int, struct sockaddr *, void *));
int rip6_ctloutput __P((struct socket *so, struct sockopt *sopt));
int rip6_output __P((struct mbuf *, ...));
int rip6_usrreq __P((struct socket *,
- int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *));
+ int, struct mbuf *, struct mbuf *, struct mbuf *, struct thread *));
int dest6_input __P((struct mbuf **, int *, int));
int none_input __P((struct mbuf **, int *, int));
diff --git a/sys/netinet6/ip6protosw.h b/sys/netinet6/ip6protosw.h
index c2f38fc..541402b 100644
--- a/sys/netinet6/ip6protosw.h
+++ b/sys/netinet6/ip6protosw.h
@@ -85,7 +85,7 @@ struct mbuf;
struct sockaddr;
struct socket;
struct domain;
-struct proc;
+struct thread;
struct ip6_hdr;
struct icmp6_hdr;
struct in6_addr;
@@ -140,7 +140,7 @@ struct ip6protosw {
/* user-protocol hook */
int (*pr_usrreq) /* user request: see list below */
__P((struct socket *, int, struct mbuf *,
- struct mbuf *, struct mbuf *, struct proc *));
+ struct mbuf *, struct mbuf *, struct thread *));
/* utility hooks */
void (*pr_init) /* initialization hook */
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index 43aa54e..5f89668 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -543,7 +543,7 @@ rip6_ctloutput(so, sopt)
}
static int
-rip6_attach(struct socket *so, int proto, struct proc *p)
+rip6_attach(struct socket *so, int proto, struct thread *td)
{
struct inpcb *inp;
int error, s;
@@ -551,14 +551,14 @@ rip6_attach(struct socket *so, int proto, struct proc *p)
inp = sotoinpcb(so);
if (inp)
panic("rip6_attach");
- if (p && (error = suser(p)) != 0)
+ if (td && (error = suser_td(td)) != 0)
return error;
error = soreserve(so, rip_sendspace, rip_recvspace);
if (error)
return error;
s = splnet();
- error = in_pcballoc(so, &ripcbinfo, p);
+ error = in_pcballoc(so, &ripcbinfo, td);
splx(s);
if (error)
return error;
@@ -611,7 +611,7 @@ rip6_disconnect(struct socket *so)
}
static int
-rip6_bind(struct socket *so, struct sockaddr *nam, struct proc *p)
+rip6_bind(struct socket *so, struct sockaddr *nam, struct thread *td)
{
struct inpcb *inp = sotoinpcb(so);
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)nam;
@@ -641,7 +641,7 @@ rip6_bind(struct socket *so, struct sockaddr *nam, struct proc *p)
}
static int
-rip6_connect(struct socket *so, struct sockaddr *nam, struct proc *p)
+rip6_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
{
struct inpcb *inp = sotoinpcb(so);
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)nam;
@@ -686,7 +686,7 @@ rip6_shutdown(struct socket *so)
static int
rip6_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
- struct mbuf *control, struct proc *p)
+ struct mbuf *control, struct thread *td)
{
struct inpcb *inp = sotoinpcb(so);
struct sockaddr_in6 tmp;
diff --git a/sys/netinet6/udp6_output.c b/sys/netinet6/udp6_output.c
index 0092f50..37a820d 100644
--- a/sys/netinet6/udp6_output.c
+++ b/sys/netinet6/udp6_output.c
@@ -121,12 +121,12 @@
#define udp6s_opackets udps_opackets
int
-udp6_output(in6p, m, addr6, control, p)
+udp6_output(in6p, m, addr6, control, td)
struct in6pcb *in6p;
struct mbuf *m;
struct mbuf *control;
struct sockaddr *addr6;
- struct proc *p;
+ struct thread *td;
{
u_int32_t ulen = m->m_pkthdr.len;
u_int32_t plen = sizeof(struct udphdr) + ulen;
@@ -142,7 +142,7 @@ udp6_output(in6p, m, addr6, control, p)
struct sockaddr_in6 tmp;
priv = 0;
- if (p && !suser(p))
+ if (td && !suser_td(td))
priv = 1;
if (control) {
if ((error = ip6_setpktoptions(control, &opt, priv, 0)) != 0)
@@ -215,7 +215,7 @@ udp6_output(in6p, m, addr6, control, p)
goto release;
}
if (in6p->in6p_lport == 0 &&
- (error = in6_pcbsetport(laddr, in6p, p)) != 0)
+ (error = in6_pcbsetport(laddr, in6p, td)) != 0)
goto release;
} else {
if (IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr)) {
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index 631e57c..6440dbe 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -523,7 +523,7 @@ udp6_abort(struct socket *so)
}
static int
-udp6_attach(struct socket *so, int proto, struct proc *p)
+udp6_attach(struct socket *so, int proto, struct thread *td)
{
struct inpcb *inp;
int s, error;
@@ -538,7 +538,7 @@ udp6_attach(struct socket *so, int proto, struct proc *p)
return error;
}
s = splnet();
- error = in_pcballoc(so, &udbinfo, p);
+ error = in_pcballoc(so, &udbinfo, td);
splx(s);
if (error)
return error;
@@ -557,7 +557,7 @@ udp6_attach(struct socket *so, int proto, struct proc *p)
}
static int
-udp6_bind(struct socket *so, struct sockaddr *nam, struct proc *p)
+udp6_bind(struct socket *so, struct sockaddr *nam, struct thread *td)
{
struct inpcb *inp;
int s, error;
@@ -582,20 +582,20 @@ udp6_bind(struct socket *so, struct sockaddr *nam, struct proc *p)
inp->inp_vflag |= INP_IPV4;
inp->inp_vflag &= ~INP_IPV6;
s = splnet();
- error = in_pcbbind(inp, (struct sockaddr *)&sin, p);
+ error = in_pcbbind(inp, (struct sockaddr *)&sin, td);
splx(s);
return error;
}
}
s = splnet();
- error = in6_pcbbind(inp, nam, p);
+ error = in6_pcbbind(inp, nam, td);
splx(s);
return error;
}
static int
-udp6_connect(struct socket *so, struct sockaddr *nam, struct proc *p)
+udp6_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
{
struct inpcb *inp;
int s, error;
@@ -615,7 +615,7 @@ udp6_connect(struct socket *so, struct sockaddr *nam, struct proc *p)
return EISCONN;
in6_sin6_2_sin(&sin, sin6_p);
s = splnet();
- error = in_pcbconnect(inp, (struct sockaddr *)&sin, p);
+ error = in_pcbconnect(inp, (struct sockaddr *)&sin, td);
splx(s);
if (error == 0) {
inp->inp_vflag |= INP_IPV4;
@@ -629,7 +629,7 @@ udp6_connect(struct socket *so, struct sockaddr *nam, struct proc *p)
if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr))
return EISCONN;
s = splnet();
- error = in6_pcbconnect(inp, nam, p);
+ error = in6_pcbconnect(inp, nam, td);
splx(s);
if (error == 0) {
if (ip6_mapped_addr_on) { /* should be non mapped addr */
@@ -686,7 +686,7 @@ udp6_disconnect(struct socket *so)
static int
udp6_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
- struct mbuf *control, struct proc *p)
+ struct mbuf *control, struct thread *td)
{
struct inpcb *inp;
int error = 0;
@@ -726,13 +726,13 @@ udp6_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
in6_sin6_2_sin_in_sock(addr);
pru = inetsw[ip_protox[IPPROTO_UDP]].pr_usrreqs;
error = ((*pru->pru_send)(so, flags, m, addr, control,
- p));
+ td));
/* addr will just be freed in sendit(). */
return error;
}
}
- return udp6_output(inp, m, addr, control, p);
+ return udp6_output(inp, m, addr, control, td);
bad:
m_freem(m);
diff --git a/sys/netinet6/udp6_var.h b/sys/netinet6/udp6_var.h
index 5c3efbc..2da5057 100644
--- a/sys/netinet6/udp6_var.h
+++ b/sys/netinet6/udp6_var.h
@@ -76,7 +76,7 @@ void udp6_ctlinput __P((int, struct sockaddr *, void *));
int udp6_input __P((struct mbuf **, int *, int));
int udp6_output __P((struct inpcb *inp, struct mbuf *m,
struct sockaddr *addr, struct mbuf *control,
- struct proc *p));
+ struct thread *td));
#endif
#endif /*_NETINET6_UDP6_VAR_H_*/
OpenPOWER on IntegriCloud