bridge interface type
Andrew Thompson
thompsa at FreeBSD.org
Mon Mar 5 07:38:01 UTC 2012
> From: hiren panchasara <hiren.panchasara at gmail.com>
>
> 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);
More information about the freebsd-net
mailing list