* sven falempin <sven.falem...@gmail.com> [2012-06-28 23:53]:
> Doc :
> 
> <<ifconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 tag USER1>>
> Want to do something like
> <<ifconfig bridge0 rule pass in on fxp0 src 0:de:ad:*:*:* tag
> OPENBSDAWESOME>>
> or
> <<ifconfig bridge0 rule pass in on fxp0 src /\\A00:de:ad:/ tag
> OPENBSDAWESOME>>
> 
> Read Code :
> found, in if_bridge.c (following SIOCBRDGARL from ifconfig)
> <<
> bcopy(&req->ifbr_src, &n->brl_src, sizeof(struct ether_addr));
> bcopy(&req->ifbr_dst, &n->brl_dst, sizeof(struct ether_addr));
> >>
> 
> Search for usage of the (documented) field
> <<
> find /usr/src/ -type f | xargs grep ifbr_src
> /usr/src/share/man/man4/bridge.4: struct ether_addr ifbr_src; /* source mac
> */
> /usr/src/sbin/ifconfig/brconfig.c: printf(" src %s",
> ether_ntoa(&r->ifbr_src));
> /usr/src/sbin/ifconfig/brconfig.c: dea = &rule.ifbr_src;
> >>
> 
> Now I'm lost

now it's very unclear what your actual problem is - the struct is
called ifbreq and used in a number of places, most notably of course
the ioctls.

sys/net/if_bridge.h:43:struct ifbreq {
sys/net/if_bridge.h:110:                struct  ifbreq *ifbicu_req;
sys/sys/sockio.h:96:#define     SIOCBRDGADD      _IOW('i', 60, struct ifbreq)   
/* add bridge ifs */
sys/sys/sockio.h:97:#define     SIOCBRDGGSIFS   _IOWR('i', 60, struct ifbreq)   
/* get span ifs */
sys/sys/sockio.h:98:#define     SIOCBRDGDEL      _IOW('i', 61, struct ifbreq)   
/* del bridge ifs */
sys/sys/sockio.h:99:#define     SIOCBRDGGIFFLGS _IOWR('i', 62, struct ifbreq)   
/* get brdg if flags */
sys/sys/sockio.h:100:#define    SIOCBRDGSIFFLGS  _IOW('i', 63, struct ifbreq)   
/* set brdg if flags */
sys/sys/sockio.h:103:#define    SIOCBRDGADDS     _IOW('i', 65, struct ifbreq)   
/* add span port */
sys/sys/sockio.h:104:#define    SIOCBRDGIFS     _IOWR('i', 66, struct ifbreq)   
/* get member ifs */
sys/sys/sockio.h:105:#define    SIOCBRDGDELS     _IOW('i', 66, struct ifbreq)   
/* del span port */
sys/sys/sockio.h:111:#define    SIOCBRDGFLUSH    _IOW('i', 72, struct ifbreq)   
/* flush addr cache */
sys/sys/sockio.h:124:#define    SIOCBRDGSIFPRIO  _IOW('i', 84, struct ifbreq)   
/* set if priority */
sys/sys/sockio.h:125:#define    SIOCBRDGSIFCOST  _IOW('i', 85, struct ifbreq)   
/* set if cost */
sys/net/bridgestp.c:2126:       struct ifbreq *ifbr = (struct ifbreq *)data;
sys/net/if_bridge.c:291:        struct ifbreq *req = (struct ifbreq *)data;
sys/net/if_bridge.c:789:        struct ifbreq *breq = NULL;
sys/net/if_bridge.c:802:        if ((breq = (struct ifbreq *)

the actual filtering is in sys/net/if_bridge.c, bridge_filterrule().

-- 
Henning Brauer, h...@bsws.de, henn...@openbsd.org
BS Web Services, http://bsws.de, Full-Service ISP
Secure Hosting, Mail and DNS Services. Dedicated Servers, Root to Fully Managed
Henning Brauer Consulting, http://henningbrauer.com/

Reply via email to