> From: hiren panchasara <[email protected]>
>
> I created bridge1 this way:
>
> $ sudo ifconfig bridge create
> Password:
> bridge1
>
> $ ifconfig bridge1
> bridge1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
>    ether 02:32:c8:92:b6:01
>    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
>    id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
>    maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
>    root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
>
> but when I try to look at the interface via "struct sockaddr_dl",
> sdl = (struct sockaddr_dl *) ifa->ifa_addr;
>
> sdl->sdl_type is "IFT_ETHER" for that interface.
>
> Shouldn't it be "IFT_BRIDGE"? What am I missing here?

The address type is set in ether_ifattach() and the bridge does not
overwrite it, this means sdl_type will always be IFT_ETHER (see
if_ethersubr.c line 1003).

Here is a patch that changes it but I do not know what may break.



Index: if_bridge.c
===================================================================
--- if_bridge.c (revision 232321)
+++ if_bridge.c (working copy)
@@ -568,6 +568,7 @@ bridge_clone_create(struct if_clone *ifc, int unit
 {
        struct bridge_softc *sc, *sc2;
        struct ifnet *bifp, *ifp;
+       struct sockaddr_dl *sdl;
        int fb, retry;
        unsigned long hostid;

@@ -642,6 +643,8 @@ bridge_clone_create(struct if_clone *ifc, int unit
        /* Now undo some of the damage... */
        ifp->if_baudrate = 0;
        ifp->if_type = IFT_BRIDGE;
+       sdl = (struct sockaddr_dl *)ifp->if_addr->ifa_addr;
+       sdl->sdl_type = IFT_BRIDGE;

        mtx_lock(&bridge_list_mtx);
        LIST_INSERT_HEAD(&bridge_list, sc, sc_list);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[email protected]"

Reply via email to