diff options
Diffstat (limited to 'sys/netinet6')
-rw-r--r-- | sys/netinet6/ip6_fw.c | 17 | ||||
-rw-r--r-- | sys/netinet6/ip6_fw.h | 2 | ||||
-rw-r--r-- | sys/netinet6/ip6_mroute.c | 7 |
3 files changed, 15 insertions, 11 deletions
diff --git a/sys/netinet6/ip6_fw.c b/sys/netinet6/ip6_fw.c index ce56a0d..370ff78 100644 --- a/sys/netinet6/ip6_fw.c +++ b/sys/netinet6/ip6_fw.c @@ -326,14 +326,17 @@ iface_match(struct ifnet *ifp, union ip6_fw_if *ifu, int byname) { /* Check by name or by IP address */ if (byname) { - /* Check unit number (-1 is wildcard) */ - if (ifu->fu_via_if.unit != -1 - && ifp->if_unit != ifu->fu_via_if.unit) - return (0); /* Check name */ - if (strncmp(ifp->if_name, ifu->fu_via_if.name, IP6FW_IFNLEN)) - return (0); - return (1); + if (ifu->fu_via_if.glob) { + if (fnmatch(ifu->fu_via_if.name, ifp->if_xname, 0) + == FNM_NOMATCH) + return(0); + } else { + if (strncmp(ifp->if_xname, ifu->fu_via_if.name, + IP6FW_IFNLEN) != 0) + return(0); + } + return(1); } else if (!IN6_IS_ADDR_UNSPECIFIED(&ifu->fu_via_ip6)) { /* Zero == wildcard */ struct ifaddr *ia; diff --git a/sys/netinet6/ip6_fw.h b/sys/netinet6/ip6_fw.h index 1866ccf..03df44f 100644 --- a/sys/netinet6/ip6_fw.h +++ b/sys/netinet6/ip6_fw.h @@ -68,7 +68,7 @@ union ip6_fw_if { struct { /* Specified by interface name */ #define IP6FW_IFNLEN IFNAMSIZ char name[IP6FW_IFNLEN]; - short unit; /* -1 means match any unit */ + short glob; /* Is name a pattern or a name? */ } fu_via_if; }; diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 8e4dc45..14cf7a6 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -584,7 +584,8 @@ add_m6if(mifcp) if (mifcp->mif6c_flags & MIFF_REGISTER) { if (reg_mif_num == (mifi_t)-1) { - multicast_register_if.if_name = "register_mif"; + strlcpy(multicast_register_if.if_xname, "register_mif", + IFNAMSIZ); multicast_register_if.if_flags |= IFF_LOOPBACK; multicast_register_if.if_index = mifcp->mif6c_mifi; reg_mif_num = mifcp->mif6c_mifi; @@ -626,9 +627,9 @@ add_m6if(mifcp) #ifdef MRT6DEBUG if (mrt6debug) log(LOG_DEBUG, - "add_mif #%d, phyint %s%d\n", + "add_mif #%d, phyint %s\n", mifcp->mif6c_mifi, - ifp->if_name, ifp->if_unit); + ifp->if_xname); #endif return (0); |