summaryrefslogtreecommitdiffstats
path: root/sys/dev/patm/if_patm_ioctl.c
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2003-08-07 14:30:58 +0000
committerharti <harti@FreeBSD.org>2003-08-07 14:30:58 +0000
commit09a493cb3159d48ff7266b56e6875e37cdf0646d (patch)
tree7314f39ce75409c72438a82e1d8191ef8f5cb9dc /sys/dev/patm/if_patm_ioctl.c
parent6c92eabed547d8c0f01573c11526ecd9642e6483 (diff)
downloadFreeBSD-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.c37
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
*/
OpenPOWER on IntegriCloud