summaryrefslogtreecommitdiffstats
path: root/sys/netnatm
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2006-04-23 16:33:56 +0000
committerrwatson <rwatson@FreeBSD.org>2006-04-23 16:33:56 +0000
commitf795ce96032ed06ead12a69167377795ea4364ee (patch)
treed81bcab57534f74f115e62a64c539253c0490715 /sys/netnatm
parentab21c0f3d0afdc661b63f40ecffdf15536bc630c (diff)
downloadFreeBSD-src-f795ce96032ed06ead12a69167377795ea4364ee.zip
FreeBSD-src-f795ce96032ed06ead12a69167377795ea4364ee.tar.gz
style(9) treatment following fixups.
MFC after: 3 months
Diffstat (limited to 'sys/netnatm')
-rw-r--r--sys/netnatm/natm.c428
1 files changed, 220 insertions, 208 deletions
diff --git a/sys/netnatm/natm.c b/sys/netnatm/natm.c
index 76beef4..df4ac2f 100644
--- a/sys/netnatm/natm.c
+++ b/sys/netnatm/natm.c
@@ -33,7 +33,7 @@
*/
/*
- * natm.c: native mode ATM access (both aal0 and aal5).
+ * natm.c: Native mode ATM access (both aal0 and aal5).
*/
#include <sys/cdefs.h>
@@ -62,285 +62,295 @@ __FBSDID("$FreeBSD$");
#include <netnatm/natm.h>
-static const u_long natm5_sendspace = 16*1024;
-static const u_long natm5_recvspace = 16*1024;
+static const u_long natm5_sendspace = 16*1024;
+static const u_long natm5_recvspace = 16*1024;
-static const u_long natm0_sendspace = 16*1024;
-static const u_long natm0_recvspace = 16*1024;
+static const u_long natm0_sendspace = 16*1024;
+static const u_long natm0_recvspace = 16*1024;
-struct mtx natm_mtx;
+/*
+ * netnatm global subsystem lock, protects all global data structures in
+ * netnatm.
+ */
+struct mtx natm_mtx;
/*
- * user requests
+ * User socket requests.
*/
-static int natm_usr_attach(struct socket *, int, d_thread_t *);
-static void natm_usr_detach(struct socket *);
-static int natm_usr_connect(struct socket *, struct sockaddr *, d_thread_t *);
-static int natm_usr_disconnect(struct socket *);
-static int natm_usr_shutdown(struct socket *);
-static int natm_usr_send(struct socket *, int, struct mbuf *,
- struct sockaddr *, struct mbuf *, d_thread_t *);
-static int natm_usr_peeraddr(struct socket *, struct sockaddr **);
-static int natm_usr_control(struct socket *, u_long, caddr_t,
- struct ifnet *, d_thread_t *);
-static void natm_usr_abort(struct socket *);
-static int natm_usr_bind(struct socket *, struct sockaddr *, d_thread_t *);
-static int natm_usr_sockaddr(struct socket *, struct sockaddr **);
+static int natm_usr_attach(struct socket *, int, d_thread_t *);
+static void natm_usr_detach(struct socket *);
+static int natm_usr_connect(struct socket *, struct sockaddr *,
+ d_thread_t *);
+static int natm_usr_disconnect(struct socket *);
+static int natm_usr_shutdown(struct socket *);
+static int natm_usr_send(struct socket *, int, struct mbuf *,
+ struct sockaddr *, struct mbuf *, d_thread_t *);
+static int natm_usr_peeraddr(struct socket *, struct sockaddr **);
+static int natm_usr_control(struct socket *, u_long, caddr_t,
+ struct ifnet *, d_thread_t *);
+static void natm_usr_abort(struct socket *);
+static int natm_usr_bind(struct socket *, struct sockaddr *,
+ d_thread_t *);
+static int natm_usr_sockaddr(struct socket *, struct sockaddr **);
static int
natm_usr_attach(struct socket *so, int proto, d_thread_t *p)
{
- struct natmpcb *npcb;
- int error = 0;
-
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb == NULL, ("natm_usr_attach: so_pcb != NULL"));
-
- if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
- if (proto == PROTO_NATMAAL5)
- error = soreserve(so, natm5_sendspace, natm5_recvspace);
- else
- error = soreserve(so, natm0_sendspace, natm0_recvspace);
- if (error)
- return (error);
- }
-
- so->so_pcb = npcb = npcb_alloc(M_WAITOK);
- npcb->npcb_socket = so;
- return (error);
+ struct natmpcb *npcb;
+ int error = 0;
+
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb == NULL, ("natm_usr_attach: so_pcb != NULL"));
+
+ if (so->so_snd.sb_hiwat == 0 || so->so_rcv.sb_hiwat == 0) {
+ if (proto == PROTO_NATMAAL5)
+ error = soreserve(so, natm5_sendspace,
+ natm5_recvspace);
+ else
+ error = soreserve(so, natm0_sendspace,
+ natm0_recvspace);
+ if (error)
+ return (error);
+ }
+ so->so_pcb = npcb = npcb_alloc(M_WAITOK);
+ npcb->npcb_socket = so;
+ return (error);
}
static void
natm_usr_detach(struct socket *so)
{
- struct natmpcb *npcb;
+ struct natmpcb *npcb;
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_detach: npcb == NULL"));
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_detach: npcb == NULL"));
- NATM_LOCK();
- npcb_free(npcb, NPCB_DESTROY); /* drain */
- so->so_pcb = NULL;
- NATM_UNLOCK();
+ NATM_LOCK();
+ npcb_free(npcb, NPCB_DESTROY); /* drain */
+ so->so_pcb = NULL;
+ NATM_UNLOCK();
}
static int
natm_usr_connect(struct socket *so, struct sockaddr *nam, d_thread_t *p)
{
- struct natmpcb *npcb;
- struct sockaddr_natm *snatm;
- struct atmio_openvcc op;
- struct ifnet *ifp;
- int error = 0;
- int proto = so->so_proto->pr_protocol;
-
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_connect: npcb == NULL"));
-
- /*
- * validate nam and npcb
- */
- NATM_LOCK();
- snatm = (struct sockaddr_natm *)nam;
- if (snatm->snatm_len != sizeof(*snatm) ||
- (npcb->npcb_flags & NPCB_FREE) == 0) {
- NATM_UNLOCK();
- return (EINVAL);
- }
- if (snatm->snatm_family != AF_NATM) {
- NATM_UNLOCK();
- return (EAFNOSUPPORT);
- }
+ struct natmpcb *npcb;
+ struct sockaddr_natm *snatm;
+ struct atmio_openvcc op;
+ struct ifnet *ifp;
+ int error = 0;
+ int proto = so->so_proto->pr_protocol;
+
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_connect: npcb == NULL"));
+
+ /*
+ * Validate nam and npcb.
+ */
+ NATM_LOCK();
+ snatm = (struct sockaddr_natm *)nam;
+ if (snatm->snatm_len != sizeof(*snatm) ||
+ (npcb->npcb_flags & NPCB_FREE) == 0) {
+ NATM_UNLOCK();
+ return (EINVAL);
+ }
+ if (snatm->snatm_family != AF_NATM) {
+ NATM_UNLOCK();
+ return (EAFNOSUPPORT);
+ }
- snatm->snatm_if[IFNAMSIZ - 1] = '\0'; /* XXX ensure null termination
+ snatm->snatm_if[IFNAMSIZ - 1] = '\0'; /* XXX ensure null termination
since ifunit() uses strcmp */
- /*
- * convert interface string to ifp, validate.
- */
- ifp = ifunit(snatm->snatm_if);
- if (ifp == NULL || (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
- NATM_UNLOCK();
- return (ENXIO);
- }
- if (ifp->if_output != atm_output) {
- NATM_UNLOCK();
- return (EAFNOSUPPORT);
- }
+ /*
+ * Convert interface string to ifp, validate.
+ */
+ ifp = ifunit(snatm->snatm_if);
+ if (ifp == NULL || (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+ NATM_UNLOCK();
+ return (ENXIO);
+ }
+ if (ifp->if_output != atm_output) {
+ NATM_UNLOCK();
+ return (EAFNOSUPPORT);
+ }
+
+ /*
+ * Register us with the NATM PCB layer.
+ */
+ if (npcb_add(npcb, ifp, snatm->snatm_vci, snatm->snatm_vpi) != npcb) {
+ NATM_UNLOCK();
+ return (EADDRINUSE);
+ }
- /*
- * register us with the NATM PCB layer
- */
- if (npcb_add(npcb, ifp, snatm->snatm_vci, snatm->snatm_vpi) != npcb) {
+ /*
+ * Open the channel.
+ *
+ * XXXRW: Eventually desirable to hold mutex over ioctl?
+ */
+ bzero(&op, sizeof(op));
+ op.rxhand = npcb;
+ op.param.flags = ATMIO_FLAG_PVC;
+ op.param.vpi = npcb->npcb_vpi;
+ op.param.vci = npcb->npcb_vci;
+ op.param.rmtu = op.param.tmtu = ifp->if_mtu;
+ op.param.aal = (proto == PROTO_NATMAAL5) ? ATMIO_AAL_5 : ATMIO_AAL_0;
+ op.param.traffic = ATMIO_TRAFFIC_UBR;
NATM_UNLOCK();
- return (EADDRINUSE);
- }
-
- /*
- * Open the channel.
- *
- * XXXRW: Eventually desirable to hold mutex over ioctl?
- */
- bzero(&op, sizeof(op));
- op.rxhand = npcb;
- op.param.flags = ATMIO_FLAG_PVC;
- op.param.vpi = npcb->npcb_vpi;
- op.param.vci = npcb->npcb_vci;
- op.param.rmtu = op.param.tmtu = ifp->if_mtu;
- op.param.aal = (proto == PROTO_NATMAAL5) ? ATMIO_AAL_5 : ATMIO_AAL_0;
- op.param.traffic = ATMIO_TRAFFIC_UBR;
- NATM_UNLOCK();
-
- IFF_LOCKGIANT(ifp);
- if (ifp->if_ioctl == NULL ||
- ifp->if_ioctl(ifp, SIOCATMOPENVCC, (caddr_t)&op) != 0) {
+
+ IFF_LOCKGIANT(ifp);
+ if (ifp->if_ioctl == NULL ||
+ ifp->if_ioctl(ifp, SIOCATMOPENVCC, (caddr_t)&op) != 0) {
+ IFF_UNLOCKGIANT(ifp);
+ return (EIO);
+ }
IFF_UNLOCKGIANT(ifp);
- return (EIO);
- }
- IFF_UNLOCKGIANT(ifp);
- soisconnected(so);
- return (error);
+ soisconnected(so);
+ return (error);
}
static int
natm_usr_disconnect(struct socket *so)
{
- struct natmpcb *npcb;
- struct atmio_closevcc cl;
- struct ifnet *ifp;
- int error = 0;
+ struct natmpcb *npcb;
+ struct atmio_closevcc cl;
+ struct ifnet *ifp;
+ int error = 0;
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_disconnect: npcb == NULL"));
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_disconnect: npcb == NULL"));
- NATM_LOCK();
- if ((npcb->npcb_flags & NPCB_CONNECTED) == 0) {
+ NATM_LOCK();
+ if ((npcb->npcb_flags & NPCB_CONNECTED) == 0) {
+ NATM_UNLOCK();
+ printf("natm: disconnected check\n");
+ return (EIO);
+ }
+ ifp = npcb->npcb_ifp;
+
+ /*
+ * Disable rx.
+ *
+ * XXXRW: Eventually desirable to hold mutex over ioctl?
+ */
+ cl.vpi = npcb->npcb_vpi;
+ cl.vci = npcb->npcb_vci;
NATM_UNLOCK();
- printf("natm: disconnected check\n");
- return (EIO);
- }
- ifp = npcb->npcb_ifp;
-
- /*
- * Disable rx.
- *
- * XXXRW: Eventually desirable to hold mutex over ioctl?
- */
- cl.vpi = npcb->npcb_vpi;
- cl.vci = npcb->npcb_vci;
- NATM_UNLOCK();
- if (ifp->if_ioctl != NULL) {
- IFF_LOCKGIANT(ifp);
- ifp->if_ioctl(ifp, SIOCATMCLOSEVCC, (caddr_t)&cl);
- IFF_UNLOCKGIANT(ifp);
- }
- soisdisconnected(so);
- return (error);
+ if (ifp->if_ioctl != NULL) {
+ IFF_LOCKGIANT(ifp);
+ ifp->if_ioctl(ifp, SIOCATMCLOSEVCC, (caddr_t)&cl);
+ IFF_UNLOCKGIANT(ifp);
+ }
+ soisdisconnected(so);
+ return (error);
}
static int
natm_usr_shutdown(struct socket *so)
{
- socantsendmore(so);
- return (0);
+
+ socantsendmore(so);
+ return (0);
}
static int
natm_usr_send(struct socket *so, int flags, struct mbuf *m,
- struct sockaddr *nam, struct mbuf *control, d_thread_t *p)
+ struct sockaddr *nam, struct mbuf *control, d_thread_t *p)
{
- struct natmpcb *npcb;
- struct atm_pseudohdr *aph;
- int error = 0;
- int proto = so->so_proto->pr_protocol;
+ struct natmpcb *npcb;
+ struct atm_pseudohdr *aph;
+ int error = 0;
+ int proto = so->so_proto->pr_protocol;
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_send: npcb == NULL"));
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_send: npcb == NULL"));
- NATM_LOCK();
- if (control && control->m_len) {
- NATM_UNLOCK();
- m_freem(control);
- m_freem(m);
- return (EINVAL);
- }
-
- /*
- * send the data. we must put an atm_pseudohdr on first
- */
- M_PREPEND(m, sizeof(*aph), M_DONTWAIT);
- if (m == NULL) {
+ NATM_LOCK();
+ if (control && control->m_len) {
+ NATM_UNLOCK();
+ m_freem(control);
+ m_freem(m);
+ return (EINVAL);
+ }
+
+ /*
+ * Send the data. We must put an atm_pseudohdr on first.
+ */
+ M_PREPEND(m, sizeof(*aph), M_DONTWAIT);
+ if (m == NULL) {
+ NATM_UNLOCK();
+ m_freem(control);
+ return (ENOBUFS);
+ }
+ aph = mtod(m, struct atm_pseudohdr *);
+ ATM_PH_VPI(aph) = npcb->npcb_vpi;
+ ATM_PH_SETVCI(aph, npcb->npcb_vci);
+ ATM_PH_FLAGS(aph) = (proto == PROTO_NATMAAL5) ? ATM_PH_AAL5 : 0;
+ error = atm_output(npcb->npcb_ifp, m, NULL, NULL);
NATM_UNLOCK();
- m_freem(control);
- return (ENOBUFS);
- }
- aph = mtod(m, struct atm_pseudohdr *);
- ATM_PH_VPI(aph) = npcb->npcb_vpi;
- ATM_PH_SETVCI(aph, npcb->npcb_vci);
- ATM_PH_FLAGS(aph) = (proto == PROTO_NATMAAL5) ? ATM_PH_AAL5 : 0;
- error = atm_output(npcb->npcb_ifp, m, NULL, NULL);
- NATM_UNLOCK();
- return (error);
+ return (error);
}
static int
natm_usr_peeraddr(struct socket *so, struct sockaddr **nam)
{
- struct natmpcb *npcb;
- struct sockaddr_natm *snatm, ssnatm;
-
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_peeraddr: npcb == NULL"));
-
- NATM_LOCK();
- snatm = &ssnatm;
- bzero(snatm, sizeof(*snatm));
- snatm->snatm_len = sizeof(*snatm);
- snatm->snatm_family = AF_NATM;
- strlcpy(snatm->snatm_if, npcb->npcb_ifp->if_xname,
- sizeof(snatm->snatm_if));
- snatm->snatm_vci = npcb->npcb_vci;
- snatm->snatm_vpi = npcb->npcb_vpi;
- NATM_UNLOCK();
- *nam = sodupsockaddr((struct sockaddr *)snatm, M_WAITOK);
- return (0);
+ struct natmpcb *npcb;
+ struct sockaddr_natm *snatm, ssnatm;
+
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_peeraddr: npcb == NULL"));
+
+ NATM_LOCK();
+ snatm = &ssnatm;
+ bzero(snatm, sizeof(*snatm));
+ snatm->snatm_len = sizeof(*snatm);
+ snatm->snatm_family = AF_NATM;
+ strlcpy(snatm->snatm_if, npcb->npcb_ifp->if_xname,
+ sizeof(snatm->snatm_if));
+ snatm->snatm_vci = npcb->npcb_vci;
+ snatm->snatm_vpi = npcb->npcb_vpi;
+ NATM_UNLOCK();
+ *nam = sodupsockaddr((struct sockaddr *)snatm, M_WAITOK);
+ return (0);
}
static int
natm_usr_control(struct socket *so, u_long cmd, caddr_t arg,
- struct ifnet *ifp, d_thread_t *p)
+ struct ifnet *ifp, d_thread_t *p)
{
- struct natmpcb *npcb;
- int error;
-
- npcb = (struct natmpcb *)so->so_pcb;
- KASSERT(npcb != NULL, ("natm_usr_control: npcb == NULL"));
+ struct natmpcb *npcb;
+ int error;
- if (ifp == NULL || ifp->if_ioctl == NULL)
- return (EOPNOTSUPP);
+ npcb = (struct natmpcb *)so->so_pcb;
+ KASSERT(npcb != NULL, ("natm_usr_control: npcb == NULL"));
- IFF_LOCKGIANT(ifp);
- error = ((*ifp->if_ioctl)(ifp, cmd, arg));
- IFF_UNLOCKGIANT(ifp);
- return (error);
+ if (ifp == NULL || ifp->if_ioctl == NULL)
+ return (EOPNOTSUPP);
+ IFF_LOCKGIANT(ifp);
+ error = ((*ifp->if_ioctl)(ifp, cmd, arg));
+ IFF_UNLOCKGIANT(ifp);
+ return (error);
}
static void
natm_usr_abort(struct socket *so)
{
- natm_usr_detach(so);
+
+ natm_usr_detach(so);
}
static int
natm_usr_bind(struct socket *so, struct sockaddr *nam, d_thread_t *p)
{
- return (EOPNOTSUPP);
+
+ return (EOPNOTSUPP);
}
static int
natm_usr_sockaddr(struct socket *so, struct sockaddr **nam)
{
- return (EOPNOTSUPP);
+
+ return (EOPNOTSUPP);
}
/* xxx - should be const */
@@ -361,9 +371,9 @@ struct pr_usrreqs natm_usrreqs = {
/*
* natmintr: interrupt
*
- * note: we expect a socket pointer in rcvif rather than an interface
- * pointer. we can get the interface pointer from the so's PCB if
- * we really need it.
+ * Note: we expect a socket pointer in rcvif rather than an interface
+ * pointer. We can get the interface pointer from the so's PCB if we really
+ * need it.
*/
void
natmintr(struct mbuf *m)
@@ -428,6 +438,7 @@ natmintr(struct mbuf *m)
int
natm0_sysctl(SYSCTL_HANDLER_ARGS)
{
+
/* All sysctl names at this level are terminal. */
return (ENOENT);
}
@@ -439,6 +450,7 @@ natm0_sysctl(SYSCTL_HANDLER_ARGS)
int
natm5_sysctl(SYSCTL_HANDLER_ARGS)
{
+
/* All sysctl names at this level are terminal. */
return (ENOENT);
}
OpenPOWER on IntegriCloud