Remove FreeBSD 2.2 protocol usrreq compatibility code.

Remove minor #ifdefs for early NetBSD and OpenBSD compatibility.

Remove spl-related definitions.

MFC after:	2 weeks
This commit is contained in:
rwatson 2005-07-19 13:36:39 +00:00
parent d49765d3fd
commit 1fc26580fc
3 changed files with 1 additions and 331 deletions

View File

@ -73,10 +73,6 @@ struct mtx natm_mtx;
/*
* user requests
*/
#ifdef FREEBSD_USRREQS
/*
* FreeBSD new usrreqs supersedes pr_usrreq.
*/
static int natm_usr_attach(struct socket *, int, d_thread_t *);
static int natm_usr_detach(struct socket *);
static int natm_usr_connect(struct socket *, struct sockaddr *, d_thread_t *);
@ -410,283 +406,8 @@ struct pr_usrreqs natm_usrreqs = {
.pru_sockaddr = natm_usr_sockaddr,
};
#else /* !FREEBSD_USRREQS */
#error "!FREEBSD_USRREQS not implemented - locking"
#if defined(__NetBSD__) || defined(__OpenBSD__)
int natm_usrreq(so, req, m, nam, control, p)
#elif defined(__FreeBSD__)
int natm_usrreq(so, req, m, nam, control)
#endif
struct socket *so;
int req;
struct mbuf *m, *nam, *control;
#if defined(__NetBSD__) || defined(__OpenBSD__)
struct proc *p;
#endif
{
int error = 0, s, s2;
struct natmpcb *npcb;
struct sockaddr_natm *snatm;
struct atm_pseudoioctl api;
struct atm_pseudohdr *aph;
struct atm_rawioctl ario;
struct ifnet *ifp;
int proto = so->so_proto->pr_protocol;
s = SPLSOFTNET();
npcb = (struct natmpcb *) so->so_pcb;
if (npcb == NULL && req != PRU_ATTACH) {
error = EINVAL;
goto done;
}
switch (req) {
case PRU_ATTACH: /* attach protocol to up */
if (npcb) {
error = EISCONN;
break;
}
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)
break;
}
so->so_pcb = (caddr_t) (npcb = npcb_alloc(M_WAITOK));
npcb->npcb_socket = so;
break;
case PRU_DETACH: /* detach protocol from up */
/*
* we turn on 'drain' *before* we sofree.
*/
npcb_free(npcb, NPCB_DESTROY); /* drain */
ACCEPT_LOCK();
SOCK_LOCK(so);
so->so_pcb = NULL;
sotryfree(so);
break;
case PRU_CONNECT: /* establish connection to peer */
/*
* validate nam and npcb
*/
if (nam->m_len != sizeof(*snatm)) {
error = EINVAL;
break;
}
snatm = mtod(nam, struct sockaddr_natm *);
if (snatm->snatm_len != sizeof(*snatm) ||
(npcb->npcb_flags & NPCB_FREE) == 0) {
error = EINVAL;
break;
}
if (snatm->snatm_family != AF_NATM) {
error = EAFNOSUPPORT;
break;
}
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_flags & IFF_RUNNING) == 0) {
error = ENXIO;
break;
}
if (ifp->if_output != atm_output) {
error = EAFNOSUPPORT;
break;
}
/*
* register us with the NATM PCB layer
*/
if (npcb_add(npcb, ifp, snatm->snatm_vci, snatm->snatm_vpi) != npcb) {
error = EADDRINUSE;
break;
}
/*
* enable rx
*/
ATM_PH_FLAGS(&api.aph) = (proto == PROTO_NATMAAL5) ? ATM_PH_AAL5 : 0;
ATM_PH_VPI(&api.aph) = npcb->npcb_vpi;
ATM_PH_SETVCI(&api.aph, npcb->npcb_vci);
api.rxhand = npcb;
s2 = splimp();
if (ifp->if_ioctl == NULL ||
ifp->if_ioctl(ifp, SIOCATMENA, (caddr_t) &api) != 0) {
splx(s2);
npcb_free(npcb, NPCB_REMOVE);
error = EIO;
break;
}
splx(s2);
soisconnected(so);
break;
case PRU_DISCONNECT: /* disconnect from peer */
if ((npcb->npcb_flags & NPCB_CONNECTED) == 0) {
printf("natm: disconnected check\n");
error = EIO;
break;
}
ifp = npcb->npcb_ifp;
/*
* disable rx
*/
ATM_PH_FLAGS(&api.aph) = ATM_PH_AAL5;
ATM_PH_VPI(&api.aph) = npcb->npcb_vpi;
ATM_PH_SETVCI(&api.aph, npcb->npcb_vci);
api.rxhand = npcb;
s2 = splimp();
if (ifp->if_ioctl != NULL)
ifp->if_ioctl(ifp, SIOCATMDIS, (caddr_t) &api);
splx(s2);
npcb_free(npcb, NPCB_REMOVE);
soisdisconnected(so);
break;
case PRU_SHUTDOWN: /* won't send any more data */
socantsendmore(so);
break;
case PRU_SEND: /* send this data */
if (control && control->m_len) {
m_freem(control);
m_freem(m);
error = EINVAL;
break;
}
/*
* send the data. we must put an atm_pseudohdr on first
*/
M_PREPEND(m, sizeof(*aph), M_TRYWAIT);
if (m == NULL) {
error = ENOBUFS;
break;
}
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);
break;
case PRU_SENSE: /* return status into m */
/* return zero? */
break;
case PRU_PEERADDR: /* fetch peer's address */
snatm = mtod(nam, struct sockaddr_natm *);
bzero(snatm, sizeof(*snatm));
nam->m_len = snatm->snatm_len = sizeof(*snatm);
snatm->snatm_family = AF_NATM;
#if defined(__NetBSD__) || defined(__OpenBSD__)
bcopy(npcb->npcb_ifp->if_xname, snatm->snatm_if, sizeof(snatm->snatm_if));
#elif defined(__FreeBSD__)
snprintf(snatm->snatm_if, sizeof(snatm->snatm_if),
"%s%d", npcb->npcb_ifp->if_name, npcb->npcb_ifp->if_unit);
#endif
snatm->snatm_vci = npcb->npcb_vci;
snatm->snatm_vpi = npcb->npcb_vpi;
break;
case PRU_CONTROL: /* control operations on protocol */
/*
* raw atm ioctl. comes in as a SIOCRAWATM. we convert it to
* SIOCXRAWATM and pass it to the driver.
*/
if ((u_long)m == SIOCRAWATM) {
if (npcb->npcb_ifp == NULL) {
error = ENOTCONN;
break;
}
ario.npcb = npcb;
ario.rawvalue = *((int *)nam);
error = npcb->npcb_ifp->if_ioctl(npcb->npcb_ifp,
SIOCXRAWATM, (caddr_t) &ario);
if (!error) {
if (ario.rawvalue)
npcb->npcb_flags |= NPCB_RAW;
else
npcb->npcb_flags &= ~(NPCB_RAW);
}
break;
}
error = EOPNOTSUPP;
break;
case PRU_BIND: /* bind socket to address */
case PRU_LISTEN: /* listen for connection */
case PRU_ACCEPT: /* accept connection from peer */
case PRU_CONNECT2: /* connect two sockets */
case PRU_ABORT: /* abort (fast DISCONNECT, DETATCH) */
/* (only happens if LISTEN socket) */
case PRU_RCVD: /* have taken data; more room now */
case PRU_FASTTIMO: /* 200ms timeout */
case PRU_SLOWTIMO: /* 500ms timeout */
case PRU_RCVOOB: /* retrieve out of band data */
case PRU_SENDOOB: /* send out of band data */
case PRU_PROTORCV: /* receive from below */
case PRU_PROTOSEND: /* send to below */
case PRU_SOCKADDR: /* fetch socket's address */
#ifdef DIAGNOSTIC
printf("natm: PRU #%d unsupported\n", req);
#endif
error = EOPNOTSUPP;
break;
default: panic("natm usrreq");
}
done:
splx(s);
return(error);
}
#endif /* !FREEBSD_USRREQS */
/*
* natmintr: splsoftnet interrupt
* 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

View File

@ -55,16 +55,6 @@ struct sockaddr_natm {
u_int8_t snatm_vpi; /* vpi */
};
#if defined(__FreeBSD__) && defined(_KERNEL)
#define SPLSOFTNET() splnet()
#elif defined(__NetBSD__) || defined(__OpenBSD__)
#define SPLSOFTNET() splsoftnet()
#endif
#ifdef _KERNEL
/*
@ -119,22 +109,7 @@ void npcb_free(struct natmpcb *, int);
struct natmpcb *npcb_add(struct natmpcb *, struct ifnet *, uint16_t, uint8_t);
/* natm.c */
#if defined(__NetBSD__) || defined(__OpenBSD__)
int natm_usrreq(struct socket *, int, struct mbuf *,
struct mbuf *, struct mbuf *, struct proc *);
#elif defined(__FreeBSD__)
#if __FreeBSD__ > 2
/*
* FreeBSD new usrreqs style appeared since 2.2. compatibility to old style
* has gone since 3.0.
*/
#define FREEBSD_USRREQS
extern struct pr_usrreqs natm_usrreqs;
#else /* !( __FreeBSD__ > 2) */
int natm_usrreq(struct socket *, int, struct mbuf *,
struct mbuf *, struct mbuf *);
#endif /* !( __FreeBSD__ > 2) */
#endif
#ifdef SYSCTL_HANDLER_ARGS
int natm0_sysctl(SYSCTL_HANDLER_ARGS);

View File

@ -59,45 +59,21 @@ static void natm_init(void);
static struct protosw natmsw[] = {
{ SOCK_STREAM, &natmdomain, PROTO_NATMAAL5, PR_CONNREQUIRED,
0, 0, 0, 0,
#ifdef FREEBSD_USRREQS
0,
#else
natm_usrreq,
#endif
0, 0, 0, 0,
#if defined(__NetBSD__) || defined(__OpenBSD__)
natm5_sysctl
#elif defined(FREEBSD_USRREQS)
&natm_usrreqs
#endif
},
{ SOCK_DGRAM, &natmdomain, PROTO_NATMAAL5, PR_CONNREQUIRED | PR_ATOMIC,
0, 0, 0, 0,
#ifdef FREEBSD_USRREQS
0,
#else
natm_usrreq,
#endif
0, 0, 0, 0,
#if defined(__NetBSD__) || defined(__OpenBSD__)
natm5_sysctl
#elif defined(FREEBSD_USRREQS)
&natm_usrreqs
#endif
},
{ SOCK_STREAM, &natmdomain, PROTO_NATMAAL0, PR_CONNREQUIRED,
0, 0, 0, 0,
#ifdef FREEBSD_USRREQS
0,
#else
natm_usrreq,
#endif
0, 0, 0, 0,
#if defined(__NetBSD__) || defined(__OpenBSD__)
natm0_sysctl
#elif defined(FREEBSD_USRREQS)
&natm_usrreqs
#endif
},
};
@ -126,6 +102,4 @@ natm_init(void)
netisr_register(NETISR_NATM, natmintr, &natmintrq, NETISR_MPSAFE);
}
#if defined(__FreeBSD__)
DOMAIN_SET(natm);
#endif