From owner-freebsd-questions Mon Apr 1 08:12:21 1996 Return-Path: owner-questions Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id IAA02586 for questions-outgoing; Mon, 1 Apr 1996 08:12:21 -0800 (PST) Received: from tav.kiev.ua (tav-sita.tav.kiev.ua [194.135.250.33]) by freefall.freebsd.org (8.7.3/8.7.3) with SMTP id IAA02552 for ; Mon, 1 Apr 1996 08:11:05 -0800 (PST) Received: (from helg@localhost) by tav.kiev.ua (8.6.12/5) id SAA28783; Mon, 1 Apr 1996 18:56:50 +0300 Date: Mon, 1 Apr 1996 18:56:50 +0300 From: Oleg N Panashchenko Message-Id: <199604011556.SAA28783@tav.kiev.ua> To: scm@silver.wcape.school.za, freebsd-questions@freebsd.org Subject: Re: Bug? Two sl0 interfaces listed by ifconfig -au Organization: Maxis Labs X-Newsreader: TIN [version 1.2 PL2] Sender: owner-questions@freebsd.org X-Loop: FreeBSD.org Precedence: bulk In article you wrote: : ifconfig -au gives: : ed0: flags=8863 mtu 1500 : inet 196.21.102.10 netmask 0xfffffff8 broadcast 196.21.102.15 : lo0: flags=8009 mtu 16384 : inet 127.0.0.1 netmask 0xff000000 : sl0: flags=8011 mtu 552 : inet 196.21.102.17 --> 196.21.102.18 netmask 0xfffffff8 : sl0: flags=8011 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: