diff options
Diffstat (limited to 'sys/netipx')
-rw-r--r-- | sys/netipx/ipx_pcb.c | 41 | ||||
-rw-r--r-- | sys/netipx/ipx_pcb.h | 10 | ||||
-rw-r--r-- | sys/netipx/ipx_usrreq.c | 24 | ||||
-rw-r--r-- | sys/netipx/ipx_var.h | 6 | ||||
-rw-r--r-- | sys/netipx/spx_usrreq.c | 58 |
5 files changed, 67 insertions, 72 deletions
diff --git a/sys/netipx/ipx_pcb.c b/sys/netipx/ipx_pcb.c index e0a66f7..483bab3 100644 --- a/sys/netipx/ipx_pcb.c +++ b/sys/netipx/ipx_pcb.c @@ -33,7 +33,7 @@ * * @(#)ipx_pcb.c * - * $Id: ipx_pcb.c,v 1.9 1997/05/10 09:58:54 jhay Exp $ + * $Id: ipx_pcb.c,v 1.10 1997/06/26 19:35:53 jhay Exp $ */ #include <sys/param.h> @@ -59,13 +59,12 @@ ipx_pcballoc(so, head, p) struct ipxpcb *head; struct proc *p; { - struct mbuf *m; register struct ipxpcb *ipxp; - m = m_getclr(M_DONTWAIT, MT_PCB); - if (m == NULL) + MALLOC(ipxp, struct ipxpcb *, sizeof *ipxp, M_PCB, M_NOWAIT); + if (ipxp == NULL) return (ENOBUFS); - ipxp = mtod(m, struct ipxpcb *); + bzero(ipxp, sizeof *ipxp); ipxp->ipxp_socket = so; insque(ipxp, head); so->so_pcb = (caddr_t)ipxp; @@ -75,7 +74,7 @@ ipx_pcballoc(so, head, p) int ipx_pcbbind(ipxp, nam, p) register struct ipxpcb *ipxp; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { register struct sockaddr_ipx *sipx; @@ -85,9 +84,7 @@ ipx_pcbbind(ipxp, nam, p) return (EINVAL); if (nam == NULL) goto noname; - sipx = mtod(nam, struct sockaddr_ipx *); - if (nam->m_len != sizeof(*sipx)) - return (EINVAL); + sipx = (struct sockaddr_ipx *)nam; if (!ipx_nullhost(sipx->sipx_addr)) { int tport = sipx->sipx_port; @@ -130,19 +127,17 @@ noname: int ipx_pcbconnect(ipxp, nam, p) struct ipxpcb *ipxp; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { struct ipx_ifaddr *ia; - register struct sockaddr_ipx *sipx = mtod(nam, struct sockaddr_ipx *); + register struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)nam; register struct ipx_addr *dst; register struct route *ro; struct ifnet *ifp; ia = NULL; - if (nam->m_len != sizeof(*sipx)) - return (EINVAL); if (sipx->sipx_family != AF_IPX) return (EAFNOSUPPORT); if (sipx->sipx_port == 0 || ipx_nullhost(sipx->sipx_addr)) @@ -248,7 +243,7 @@ ipx_pcbconnect(ipxp, nam, p) if (ipx_pcblookup(&sipx->sipx_addr, ipxp->ipxp_lport, 0)) return (EADDRINUSE); if (ipxp->ipxp_lport == 0) - ipx_pcbbind(ipxp, (struct mbuf *)NULL, p); + ipx_pcbbind(ipxp, (struct sockaddr *)NULL, p); /* XXX just leave it zero if we can't find a route */ @@ -278,37 +273,37 @@ ipx_pcbdetach(ipxp) if (ipxp->ipxp_route.ro_rt != NULL) rtfree(ipxp->ipxp_route.ro_rt); remque(ipxp); - m_free(dtom(ipxp)); + FREE(ipxp, M_PCB); } void ipx_setsockaddr(ipxp, nam) register struct ipxpcb *ipxp; - struct mbuf *nam; + struct sockaddr **nam; { - register struct sockaddr_ipx *sipx = mtod(nam, struct sockaddr_ipx *); + struct sockaddr_ipx *sipx, ssipx; - nam->m_len = sizeof(*sipx); - sipx = mtod(nam, struct sockaddr_ipx *); + sipx = &ssipx; bzero((caddr_t)sipx, sizeof(*sipx)); sipx->sipx_len = sizeof(*sipx); sipx->sipx_family = AF_IPX; sipx->sipx_addr = ipxp->ipxp_laddr; + *nam = dup_sockaddr((struct sockaddr *)sipx, 0); } void ipx_setpeeraddr(ipxp, nam) register struct ipxpcb *ipxp; - struct mbuf *nam; + struct sockaddr **nam; { - register struct sockaddr_ipx *sipx = mtod(nam, struct sockaddr_ipx *); + struct sockaddr_ipx *sipx, ssipx; - nam->m_len = sizeof(*sipx); - sipx = mtod(nam, struct sockaddr_ipx *); + sipx = &ssipx; bzero((caddr_t)sipx, sizeof(*sipx)); sipx->sipx_len = sizeof(*sipx); sipx->sipx_family = AF_IPX; sipx->sipx_addr = ipxp->ipxp_faddr; + *nam = dup_sockaddr((struct sockaddr *)sipx, 0); } /* diff --git a/sys/netipx/ipx_pcb.h b/sys/netipx/ipx_pcb.h index be13c1a..3f03602 100644 --- a/sys/netipx/ipx_pcb.h +++ b/sys/netipx/ipx_pcb.h @@ -33,7 +33,7 @@ * * @(#)ipx_pcb.h * - * $Id: ipx_pcb.h,v 1.10 1997/05/10 09:58:54 jhay Exp $ + * $Id: ipx_pcb.h,v 1.11 1997/06/26 19:35:54 jhay Exp $ */ #ifndef _NETIPX_IPX_PCB_H_ @@ -83,9 +83,9 @@ extern struct ipxpcb ipxpcb; /* head of list */ int ipx_pcballoc __P((struct socket *so, struct ipxpcb *head, struct proc *p)); -int ipx_pcbbind __P((struct ipxpcb *ipxp, struct mbuf *nam, +int ipx_pcbbind __P((struct ipxpcb *ipxp, struct sockaddr *nam, struct proc *p)); -int ipx_pcbconnect __P((struct ipxpcb *ipxp, struct mbuf *nam, +int ipx_pcbconnect __P((struct ipxpcb *ipxp, struct sockaddr *nam, struct proc *p)); void ipx_pcbdetach __P((struct ipxpcb *ipxp)); void ipx_pcbdisconnect __P((struct ipxpcb *ipxp)); @@ -93,8 +93,8 @@ struct ipxpcb * ipx_pcblookup __P((struct ipx_addr *faddr, int lport, int wildp)); void ipx_pcbnotify __P((struct ipx_addr *dst, int errno, void (*notify)(struct ipxpcb *), long param)); -void ipx_setpeeraddr __P((struct ipxpcb *ipxp, struct mbuf *nam)); -void ipx_setsockaddr __P((struct ipxpcb *ipxp, struct mbuf *nam)); +void ipx_setpeeraddr __P((struct ipxpcb *ipxp, struct sockaddr **nam)); +void ipx_setsockaddr __P((struct ipxpcb *ipxp, struct sockaddr **nam)); #endif /* KERNEL */ #endif /* !_NETIPX_IPX_PCB_H_ */ diff --git a/sys/netipx/ipx_usrreq.c b/sys/netipx/ipx_usrreq.c index d266310..afc4210 100644 --- a/sys/netipx/ipx_usrreq.c +++ b/sys/netipx/ipx_usrreq.c @@ -33,7 +33,7 @@ * * @(#)ipx_usrreq.c * - * $Id: ipx_usrreq.c,v 1.14 1997/05/10 09:58:55 jhay Exp $ + * $Id: ipx_usrreq.c,v 1.15 1997/06/26 19:35:58 jhay Exp $ */ #include <sys/param.h> @@ -70,12 +70,14 @@ SYSCTL_INT(_net_ipx_ipx, OID_AUTO, ipxrecvspace, CTLFLAG_RW, static int ipx_usr_abort(struct socket *so); static int ipx_attach(struct socket *so, int proto, struct proc *p); -static int ipx_bind(struct socket *so, struct mbuf *nam, struct proc *p); -static int ipx_connect(struct socket *so, struct mbuf *nam, struct proc *p); +static int ipx_bind(struct socket *so, struct sockaddr *nam, struct proc *p); +static int ipx_connect(struct socket *so, struct sockaddr *nam, + struct proc *p); static int ipx_detach(struct socket *so); static int ipx_disconnect(struct socket *so); static int ipx_send(struct socket *so, int flags, struct mbuf *m, - struct mbuf *addr, struct mbuf *control, struct proc *p); + struct sockaddr *addr, struct mbuf *control, + struct proc *p); static int ipx_shutdown(struct socket *so); static int ripx_attach(struct socket *so, int proto, struct proc *p); static int ipx_output(struct ipxpcb *ipxp, struct mbuf *m0); @@ -458,7 +460,7 @@ ipx_attach(so, proto, p) static int ipx_bind(so, nam, p) struct socket *so; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { struct ipxpcb *ipxp = sotoipxpcb(so); @@ -469,7 +471,7 @@ ipx_bind(so, nam, p) static int ipx_connect(so, nam, p) struct socket *so; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { int error; @@ -520,11 +522,11 @@ ipx_disconnect(so) int ipx_peeraddr(so, nam) struct socket *so; - struct mbuf *nam; + struct sockaddr **nam; { struct ipxpcb *ipxp = sotoipxpcb(so); - ipx_setpeeraddr(ipxp, nam); + ipx_setpeeraddr(ipxp, nam); /* XXX what if alloc fails? */ return (0); } @@ -533,7 +535,7 @@ ipx_send(so, flags, m, nam, control, p) struct socket *so; int flags; struct mbuf *m; - struct mbuf *nam; + struct sockaddr *nam; struct mbuf *control; struct proc *p; { @@ -589,11 +591,11 @@ ipx_shutdown(so) int ipx_sockaddr(so, nam) struct socket *so; - struct mbuf *nam; + struct sockaddr **nam; { struct ipxpcb *ipxp = sotoipxpcb(so); - ipx_setsockaddr(ipxp, nam); + ipx_setsockaddr(ipxp, nam); /* XXX what if alloc fails? */ return (0); } diff --git a/sys/netipx/ipx_var.h b/sys/netipx/ipx_var.h index 6ee1579..7e6731f 100644 --- a/sys/netipx/ipx_var.h +++ b/sys/netipx/ipx_var.h @@ -33,7 +33,7 @@ * * @(#)ipx_var.h * - * $Id: ipx_var.h,v 1.6 1997/05/10 09:58:55 jhay Exp $ + * $Id: ipx_var.h,v 1.7 1997/06/26 19:35:59 jhay Exp $ */ #ifndef _NETIPX_IPX_VAR_H_ @@ -92,9 +92,9 @@ void ipx_input __P((struct mbuf *m, struct ipxpcb *ipxp)); void ipxintr __P((void)); int ipx_outputfl __P((struct mbuf *m0, struct route *ro, int flags)); int ipx_output_type20 __P((struct mbuf *)); -int ipx_peeraddr __P((struct socket *so, struct mbuf *nam)); +int ipx_peeraddr __P((struct socket *so, struct sockaddr **nam)); void ipx_printhost __P((struct ipx_addr *addr)); -int ipx_sockaddr __P((struct socket *so, struct mbuf *nam)); +int ipx_sockaddr __P((struct socket *so, struct sockaddr **nam)); void ipx_watch_output __P((struct mbuf *m, struct ifnet *ifp)); #endif /* KERNEL */ diff --git a/sys/netipx/spx_usrreq.c b/sys/netipx/spx_usrreq.c index 9c3cfc4..216cfd4 100644 --- a/sys/netipx/spx_usrreq.c +++ b/sys/netipx/spx_usrreq.c @@ -33,7 +33,7 @@ * * @(#)spx_usrreq.h * - * $Id: spx_usrreq.c,v 1.13 1997/05/10 09:58:58 jhay Exp $ + * $Id: spx_usrreq.c,v 1.14 1997/06/26 19:36:02 jhay Exp $ */ #include <sys/param.h> @@ -87,17 +87,19 @@ static struct spxpcb *spx_timers(struct spxpcb *cb, int timer); static struct spxpcb *spx_usrclosed(struct spxpcb *cb); static int spx_usr_abort(struct socket *so); -static int spx_accept(struct socket *so, struct mbuf *nam); +static int spx_accept(struct socket *so, struct sockaddr **nam); static int spx_attach(struct socket *so, int proto, struct proc *p); -static int spx_bind(struct socket *so, struct mbuf *nam, struct proc *p); -static int spx_connect(struct socket *so, struct mbuf *nam, struct proc *p); +static int spx_bind(struct socket *so, struct sockaddr *nam, struct proc *p); +static int spx_connect(struct socket *so, struct sockaddr *nam, + struct proc *p); static int spx_detach(struct socket *so); static int spx_usr_disconnect(struct socket *so); static int spx_listen(struct socket *so, struct proc *p); static int spx_rcvd(struct socket *so, int flags); static int spx_rcvoob(struct socket *so, struct mbuf *m, int flags); static int spx_send(struct socket *so, int flags, struct mbuf *m, - struct mbuf *addr, struct mbuf *control, struct proc *p); + struct sockaddr *addr, struct mbuf *control, + struct proc *p); static int spx_shutdown(struct socket *so); static int spx_sp_attach(struct socket *so, int proto, struct proc *p); @@ -200,8 +202,7 @@ spx_input(m, ipxp) switch (cb->s_state) { case TCPS_LISTEN:{ - struct mbuf *am; - register struct sockaddr_ipx *sipx; + struct sockaddr_ipx *sipx, ssipx; struct ipx_addr laddr; /* @@ -213,24 +214,19 @@ spx_input(m, ipxp) spx_istat.gonawy++; goto dropwithreset; } - am = m_get(M_DONTWAIT, MT_SONAME); - if (am == NULL) - goto drop; - am->m_len = sizeof(struct sockaddr_ipx); - sipx = mtod(am, struct sockaddr_ipx *); + sipx = &ssipx; + bzero(sipx, sizeof *sipx); sipx->sipx_len = sizeof(*sipx); sipx->sipx_family = AF_IPX; sipx->sipx_addr = si->si_sna; laddr = ipxp->ipxp_laddr; if (ipx_nullhost(laddr)) ipxp->ipxp_laddr = si->si_dna; - if (ipx_pcbconnect(ipxp, am, &proc0)) { + if (ipx_pcbconnect(ipxp, (struct sockaddr *)sipx, &proc0)) { ipxp->ipxp_laddr = laddr; - m_free(am); spx_istat.noconn++; goto drop; } - m_free(am); spx_template(cb); dropsocket = 0; /* committed to socket */ cb->s_did = si->si_sid; @@ -1307,17 +1303,18 @@ spx_usr_abort(so) static int spx_accept(so, nam) struct socket *so; - struct mbuf *nam; + struct sockaddr **nam; { struct ipxpcb *ipxp; - struct sockaddr_ipx *sipx; + struct sockaddr_ipx *sipx, ssipx; ipxp = sotoipxpcb(so); - sipx = mtod(nam, struct sockaddr_ipx *); - - nam->m_len = sizeof(struct sockaddr_ipx); + sipx = &ssipx; + bzero(sipx, sizeof *sipx); + sipx->sipx_len = sizeof *sipx; sipx->sipx_family = AF_IPX; sipx->sipx_addr = ipxp->ipxp_faddr; + *nam = dup_sockaddr((struct sockaddr *)sipx, 0); return (0); } @@ -1350,17 +1347,18 @@ spx_attach(so, proto, p) } ipxp = sotoipxpcb(so); - mm = m_getclr(M_DONTWAIT, MT_PCB); + MALLOC(cb, struct spxpcb *, sizeof *cb, M_PCB, M_NOWAIT); + bzero(cb, sizeof *cb); sb = &so->so_snd; - if (mm == NULL) { + if (cb == NULL) { error = ENOBUFS; goto spx_attach_end; } - cb = mtod(mm, struct spxpcb *); + mm = m_getclr(M_DONTWAIT, MT_HEADER); if (mm == NULL) { - m_freem(dtom(cb)); + FREE(cb, M_PCB); error = ENOBUFS; goto spx_attach_end; } @@ -1390,7 +1388,7 @@ spx_attach_end: static int spx_bind(so, nam, p) struct socket *so; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { struct ipxpcb *ipxp; @@ -1409,7 +1407,7 @@ spx_bind(so, nam, p) static int spx_connect(so, nam, p) struct socket *so; - struct mbuf *nam; + struct sockaddr *nam; struct proc *p; { int error; @@ -1422,7 +1420,7 @@ spx_connect(so, nam, p) s = splnet(); if (ipxp->ipxp_lport == 0) { - error = ipx_pcbbind(ipxp, (struct mbuf *)NULL, p); + error = ipx_pcbbind(ipxp, (struct sockaddr *)NULL, p); if (error) goto spx_connect_end; } @@ -1509,7 +1507,7 @@ spx_listen(so, p) cb = ipxtospxpcb(ipxp); if (ipxp->ipxp_lport == 0) - error = ipx_pcbbind(ipxp, (struct mbuf *)NULL, p); + error = ipx_pcbbind(ipxp, (struct sockaddr *)NULL, p); if (error == 0) cb->s_state = TCPS_LISTEN; return (error); @@ -1565,7 +1563,7 @@ spx_send(so, flags, m, addr, controlp, p) struct socket *so; int flags; struct mbuf *m; - struct mbuf *addr; + struct sockaddr *addr; struct mbuf *controlp; struct proc *p; { @@ -1698,7 +1696,7 @@ spx_close(cb) m_freem(m); } m_free(dtom(cb->s_ipx)); - m_free(dtom(cb)); + FREE(cb, M_PCB); ipxp->ipxp_pcb = 0; soisdisconnected(so); ipx_pcbdetach(ipxp); |