Use the generic getvccs function from net/if_atmsubr.c and remove
the home-grown version.
This commit is contained in:
parent
426b1fd112
commit
449f11fac6
@ -1511,54 +1511,6 @@ en_init(struct en_softc *sc)
|
|||||||
/*
|
/*
|
||||||
* Ioctls
|
* Ioctls
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Return a table of all currently open VCCs.
|
|
||||||
*/
|
|
||||||
static struct atmio_vcctable *
|
|
||||||
en_get_vccs(struct en_softc *sc, int flags)
|
|
||||||
{
|
|
||||||
struct atmio_vcctable *vccs;
|
|
||||||
struct atmio_vcc *v;
|
|
||||||
u_int vci, alloc;
|
|
||||||
|
|
||||||
alloc = 10;
|
|
||||||
vccs = NULL;
|
|
||||||
do {
|
|
||||||
vccs = reallocf(vccs,
|
|
||||||
sizeof(*vccs) + alloc * sizeof(vccs->vccs[0]),
|
|
||||||
M_TEMP, flags);
|
|
||||||
if (vccs == NULL)
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
vccs->count = 0;
|
|
||||||
v = vccs->vccs;
|
|
||||||
EN_LOCK(sc);
|
|
||||||
for (vci = 0; vci < MID_N_VC; vci++) {
|
|
||||||
if (sc->vccs[vci] == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (vccs->count++ == alloc) {
|
|
||||||
alloc *= 2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
bzero(v, sizeof(*v));
|
|
||||||
v->flags = ATMIO_FLAG_PVC | sc->vccs[vci]->vcc.flags;
|
|
||||||
v->vpi = 0;
|
|
||||||
v->vci = vci;
|
|
||||||
if (sc->vccs[vci]->vcc.flags & ATM_PH_AAL5)
|
|
||||||
v->aal = ATMIO_AAL_5;
|
|
||||||
else
|
|
||||||
v->aal = ATMIO_AAL_0;
|
|
||||||
v->traffic = ATMIO_TRAFFIC_UBR;
|
|
||||||
v->tparam.pcr = sc->ifatm.mib.pcr;
|
|
||||||
v++;
|
|
||||||
}
|
|
||||||
EN_UNLOCK(sc);
|
|
||||||
} while (vci < MID_N_VC);
|
|
||||||
|
|
||||||
return (vccs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* en_ioctl: handle ioctl requests
|
* en_ioctl: handle ioctl requests
|
||||||
*
|
*
|
||||||
@ -1641,7 +1593,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SIOCATMGETVCCS: /* internal netgraph use */
|
case SIOCATMGETVCCS: /* internal netgraph use */
|
||||||
vtab = en_get_vccs(sc, M_NOWAIT);
|
vtab = atm_getvccs((struct atmio_vcc **)sc->vccs,
|
||||||
|
MID_N_VC, sc->vccs_open, &sc->en_mtx, 0);
|
||||||
if (vtab == NULL) {
|
if (vtab == NULL) {
|
||||||
error = ENOMEM;
|
error = ENOMEM;
|
||||||
break;
|
break;
|
||||||
@ -1650,11 +1603,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SIOCATMGVCCS: /* return vcc table */
|
case SIOCATMGVCCS: /* return vcc table */
|
||||||
vtab = en_get_vccs(sc, M_WAITOK);
|
vtab = atm_getvccs((struct atmio_vcc **)sc->vccs,
|
||||||
if (vtab == NULL) {
|
MID_N_VC, sc->vccs_open, &sc->en_mtx, 1);
|
||||||
error = ENOMEM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
error = copyout(vtab, ifr->ifr_data, sizeof(*vtab) +
|
error = copyout(vtab, ifr->ifr_data, sizeof(*vtab) +
|
||||||
vtab->count * sizeof(vtab->vccs[0]));
|
vtab->count * sizeof(vtab->vccs[0]));
|
||||||
free(vtab, M_DEVBUF);
|
free(vtab, M_DEVBUF);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user