Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Jul 1998 14:58:02 +0000
From:      Samuel S Thomas <sthomas@lart.net>
To:        dg@root.com
Cc:        Poul-Henning Kamp <phk@critter.freebsd.dk>, freebsd-bugs@FreeBSD.ORG
Subject:   Re: kern/7191: FreeBSD 2.2.6 generates Source-route prohibited when not routing
Message-ID:  <19980707145802.D1918@lart.net>
In-Reply-To: <199807071414.HAA24496@implode.root.com>; from David Greenman on Tue, Jul 07, 1998 at 07:14:33AM -0700
References:  <19980707130918.F13836@lart.net> <199807071414.HAA24496@implode.root.com>

next in thread | previous in thread | raw e-mail | index | archive | help
>    It is probably a bug that source route IP options are processed at all
> when a machine isn't configured for IP forwarding. While fixing this would
> supress your warnings, it wouldn't fix the real problem which is why the
> machine is seeing the packets in the first place.

This is exactly my point. This is mentioned fairly clearly in rfc1122,
also. I will agree to work with the PAO people on determining how those
packets are getting to the IP layer without being discarded by the
interface, so long as you core kernel-hacker types agree that the kernel
should know whether or not it's routing, and check IP src/dst addresses
accordingly. Fair enough?



 There does appear to be a check in their if_ep.c, though...
I'll be the first to admit that my C hacking skills have gone unused for
the past 3 years, and are a bit rusty in deference to my TCP/IP and
routing skills, but it seems to me that this code should work as
advertised. I'll need to kill a tree to get much deeper into it, though.

#if NBPFILTER > 0
    if (ifp->if_bpf) {
        bpf_mtap(ifp, top);

        /*
         * Note that the interface cannot be in promiscuous mode if there are
         * no BPF listeners.  And if we are in promiscuous mode, we have to
         * check if this packet is really ours.
         */
        eh = mtod(top, struct ether_header *);
        if ((ifp->if_flags & IFF_PROMISC) &&
            (eh->ether_dhost[0] & 1) == 0 &&
            bcmp(eh->ether_dhost, sc->arpcom.ac_enaddr,
                 sizeof(eh->ether_dhost)) != 0 &&
            bcmp(eh->ether_dhost, etherbroadcastaddr,
                 sizeof(eh->ether_dhost)) != 0) {
            if (sc->top) {
                m_freem(sc->top);
                sc->top = 0;
            }
            ep_fset(F_RX_FIRST);
#ifdef EP_LOCAL_STATS
            sc->rx_bpf_disc++;
#endif
            while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS);
            outw(BASE + EP_COMMAND, SET_RX_EARLY_THRESH | RX_INIT_EARLY_THRESH);
            return;
        }
    }
#endif

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980707145802.D1918>