Date: Mon, 1 Apr 1996 18:56:50 +0300 From: Oleg N Panashchenko <helg@tav.kiev.ua> To: scm@silver.wcape.school.za, freebsd-questions@freebsd.org Subject: Re: Bug? Two sl0 interfaces listed by ifconfig -au Message-ID: <199604011556.SAA28783@tav.kiev.ua>
next in thread | raw e-mail | index | archive | help
In article <m0u3kZv-000KUSC@ucthpx.uct.ac.za> you wrote: : ifconfig -au gives: : ed0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500 : inet 196.21.102.10 netmask 0xfffffff8 broadcast 196.21.102.15 : lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 16384 : inet 127.0.0.1 netmask 0xff000000 : sl0: flags=8011<UP,POINTOPOINT,MULTICAST> mtu 552 : inet 196.21.102.17 --> 196.21.102.18 netmask 0xfffffff8 : sl0: flags=8011<UP,POINTOPOINT,MULTICAST> mtu 552 : inet 196.21.102.17 --> 196.21.102.18 netmask 0xfffffff8 : : As far as I can see this arose from trying to ifconfig sl1 to something : else. This can happen if you are using -S switch in slattach. Try to avoid it if possible. I was needed -S for traffic collection. Attached is patch for if_sl.c, which is working in my box. With the patch using this option does not duplicate slip unit. Is it worth to insert this patch to -current/-stable? Oleg *** if_sl.c.21 Sat Mar 30 16:30:36 1996 --- if_sl.c Sat Mar 30 16:40:41 1996 *************** *** 63,68 **** --- 63,74 ---- * * Note that splimp() is used throughout to block both (tty) input * interrupts and network activity; thus, splimp must be >= spltty. + * + * 1996/03/28, helg@tav.kiev.ua + * - fixed bug with static unit allocation + * - option SLIP_DYNALLOC_FROMHIGH will allocate dynamic slip units + * starting from high numbers, so you can use sl0,sl1, etc for + * static allocations. */ #include "sl.h" *************** *** 245,274 **** return (1); } ! /* ! * Line specific open routine. ! * Attach the given tty to the first available sl unit. ! */ ! /* ARGSUSED */ ! int ! slopen(dev, tp) ! dev_t dev; ! register struct tty *tp; { - struct proc *p = curproc; /* XXX */ register struct sl_softc *sc; register int nsl; ! int s, error; ! ! error = suser(p->p_ucred, &p->p_acflag); ! if (error) ! return (error); if (tp->t_line == SLIPDISC) return (0); ! for (nsl = NSL, sc = sl_softc; --nsl >= 0; sc++) ! if (sc->sc_ttyp == NULL) { if (slinit(sc) == 0) return (ENOBUFS); tp->t_sc = (caddr_t)sc; --- 251,282 ---- return (1); } ! #define SLIPUNIT_DYNAMIC -1 ! static int attachslunit(struct tty* tp, int unit) { register struct sl_softc *sc; register int nsl; ! int s; if (tp->t_line == SLIPDISC) return (0); ! if(unit==SLIPUNIT_DYNAMIC) { ! ! #ifdef SLIP_DYNALLOC_FROMHIGH ! for (nsl = NSL, sc = sl_softc+NSL-1; --nsl >= 0; sc--) ! #else ! for (nsl = NSL, sc = sl_softc; --nsl >= 0; sc++) ! #endif ! if (sc->sc_ttyp == NULL) break; ! if(nsl<=0) return (ENXIO); ! } else { ! if( unit < 0 || unit >= NSL ) ! return (ENXIO); ! sc = & sl_softc[unit]; ! if( sc->sc_ttyp != NULL) ! return (ENXIO); ! } if (slinit(sc) == 0) return (ENOBUFS); tp->t_sc = (caddr_t)sc; *************** *** 297,304 **** if_up(&sc->sc_if); splx(s); return (0); ! } ! return (ENXIO); } /* --- 305,331 ---- if_up(&sc->sc_if); splx(s); return (0); ! } ! ! /* ! * Line specific open routine. ! * Attach the given tty to the first available sl unit. ! */ ! /* ARGSUSED */ ! int ! slopen(dev, tp) ! dev_t dev; ! register struct tty *tp; ! { ! struct proc *p = curproc; /* XXX */ ! int error; ! ! error = suser(p->p_ucred, &p->p_acflag); ! if (error) ! return (error); ! ! return attachslunit(tp,SLIPUNIT_DYNAMIC); ! } /* *************** *** 368,374 **** break; case SLIOCSUNIT: ! sc->sc_if.if_unit = *(u_int *)data; break; case SLIOCSKEEPAL: --- 395,409 ---- break; case SLIOCSUNIT: ! { ! int newunit=*(u_int *)data; ! if(newunit == sc->sc_if.if_unit) break; ! slclose(tp,0); ! if(attachslunit(tp,newunit)) { ! splx(s); ! return (ENXIO); ! } ! } break; case SLIOCSKEEPAL:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199604011556.SAA28783>