diff options
author | harti <harti@FreeBSD.org> | 2003-08-07 14:30:58 +0000 |
---|---|---|
committer | harti <harti@FreeBSD.org> | 2003-08-07 14:30:58 +0000 |
commit | 09a493cb3159d48ff7266b56e6875e37cdf0646d (patch) | |
tree | 7314f39ce75409c72438a82e1d8191ef8f5cb9dc /sys/dev/patm/if_patm_ioctl.c | |
parent | 6c92eabed547d8c0f01573c11526ecd9642e6483 (diff) | |
download | FreeBSD-src-09a493cb3159d48ff7266b56e6875e37cdf0646d.zip FreeBSD-src-09a493cb3159d48ff7266b56e6875e37cdf0646d.tar.gz |
Make open channels persist across ifconfig down and up. All channels
that are not currently closing when the interface is configured down
will be brough up as soon as the interface is configured up.
Diffstat (limited to 'sys/dev/patm/if_patm_ioctl.c')
-rw-r--r-- | sys/dev/patm/if_patm_ioctl.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/sys/dev/patm/if_patm_ioctl.c b/sys/dev/patm/if_patm_ioctl.c index bbabf97..d5e7c152 100644 --- a/sys/dev/patm/if_patm_ioctl.c +++ b/sys/dev/patm/if_patm_ioctl.c @@ -171,24 +171,10 @@ patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg) /* ok - go ahead */ sc->vccs[cid] = vcc; - - patm_debug(sc, VCC, "Open VCC: opening"); - if (!(vcc->vcc.flags & ATMIO_FLAG_NOTX)) - patm_tx_vcc_open(sc, vcc); - if (!(vcc->vcc.flags & ATMIO_FLAG_NORX)) - patm_rx_vcc_open(sc, vcc); - - /* inform management about non-NG and NG-PVCs */ - if (!(vcc->vcc.flags & ATMIO_FLAG_NG) || - (vcc->vcc.flags & ATMIO_FLAG_PVC)) - ATMEV_SEND_VCC_CHANGED(&sc->ifatm, vcc->vcc.vpi, - vcc->vcc.vci, 1); - - patm_debug(sc, VCC, "Open VCC: now open"); + patm_load_vc(sc, vcc, 0); /* don't free below */ vcc = NULL; - sc->vccs_open++; /* done */ @@ -199,6 +185,27 @@ patm_open_vcc(struct patm_softc *sc, struct atmio_openvcc *arg) return (error); } +void +patm_load_vc(struct patm_softc *sc, struct patm_vcc *vcc, int reload) +{ + + patm_debug(sc, VCC, "Open VCC: opening"); + if (!(vcc->vcc.flags & ATMIO_FLAG_NOTX)) + patm_tx_vcc_open(sc, vcc); + if (!(vcc->vcc.flags & ATMIO_FLAG_NORX)) + patm_rx_vcc_open(sc, vcc); + + if (!reload) { + /* inform management about non-NG and NG-PVCs */ + if (!(vcc->vcc.flags & ATMIO_FLAG_NG) || + (vcc->vcc.flags & ATMIO_FLAG_PVC)) + ATMEV_SEND_VCC_CHANGED(&sc->ifatm, vcc->vcc.vpi, + vcc->vcc.vci, 1); + } + + patm_debug(sc, VCC, "Open VCC: now open"); +} + /* * Try to close the given VCC */ |