Renaud Allard wrote:
> Markus Friedl wrote:
>> On Fri, Apr 13, 2007 at 12:03:18PM +0200, Renaud Allard wrote:
>>> It's just quite annoying that the man page for brconfig says that the
>>> bridge over gif should work and it does not.
>> well, it did work before and should work in 4.1
>>
>>
> 
> I know. But with 4.1, it doesn't work with the config I posted and it
> doesn't work either with 4.1-current of april 6th.
> 
> 

It works great with the following patch from Markus on a -stable branch:

Index: sys/net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.158
diff -u -p -u -r1.158 if_bridge.c
--- sys/net/if_bridge.c 10 Apr 2007 17:47:55 -0000      1.158
+++ sys/net/if_bridge.c 16 May 2007 09:03:44 -0000
@@ -2705,6 +2705,11 @@ bridge_ifenqueue(struct bridge_softc *sc
        int error, len;
        short mflags;

+#if NGIF > 0
+       /* Packet needs etherip encapsulation. */
+       if (ifp->if_type == IFT_GIF)
+               m->m_flags |= M_PROTO1;
+#endif
        len = m->m_pkthdr.len;
        mflags = m->m_flags;
        IFQ_ENQUEUE(&ifp->if_snd, m, NULL, error);
Index: sys/net/if_gif.c
===================================================================
RCS file: /cvs/src/sys/net/if_gif.c,v
retrieving revision 1.43
diff -u -p -u -r1.43 if_gif.c
--- sys/net/if_gif.c    19 Apr 2007 09:28:40 -0000      1.43
+++ sys/net/if_gif.c    16 May 2007 09:03:44 -0000
@@ -217,6 +217,7 @@ gif_start(ifp)
                m->m_flags &= ~(M_BCAST|M_MCAST);

                /* extract address family */
+               family = AF_UNSPEC;
                tp = *mtod(m, u_int8_t *);
                tp = (tp >> 4) & 0xff;  /* Get the IP version number. */
 #ifdef INET
@@ -233,16 +234,10 @@ gif_start(ifp)
                 * Check if the packet is comming via bridge and needs
                 * etherip encapsulation or not.
                 */
-               if (ifp->if_bridge)
-                       for (mtag = m_tag_find(m, PACKET_TAG_BRIDGE, NULL);
-                           mtag;
-                           mtag = m_tag_find(m, PACKET_TAG_BRIDGE, mtag)) {
-                               if (!bcmp(&ifp->if_bridge, mtag + 1,
-                                   sizeof(caddr_t))) {
-                                       family = AF_LINK;
-                                       break;
-                               }
-                       }
+               if (ifp->if_bridge && (m->m_flags & M_PROTO1)) {
+                       m->m_flags &= ~M_PROTO1;
+                       family = AF_LINK;
+               }
 #endif

 #if NBPFILTER > 0

Reply via email to