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