Use the generic getvccs function from net/if_atmsubr.c and remove

the home-grown version.
This commit is contained in:
Hartmut Brandt 2003-08-05 12:26:26 +00:00
parent 426b1fd112
commit 449f11fac6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=118491

View File

@ -1511,54 +1511,6 @@ en_init(struct en_softc *sc)
/*
* 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
*
@ -1641,7 +1593,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
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) {
error = ENOMEM;
break;
@ -1650,11 +1603,8 @@ en_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
case SIOCATMGVCCS: /* return vcc table */
vtab = en_get_vccs(sc, M_WAITOK);
if (vtab == NULL) {
error = ENOMEM;
break;
}
vtab = atm_getvccs((struct atmio_vcc **)sc->vccs,
MID_N_VC, sc->vccs_open, &sc->en_mtx, 1);
error = copyout(vtab, ifr->ifr_data, sizeof(*vtab) +
vtab->count * sizeof(vtab->vccs[0]));
free(vtab, M_DEVBUF);