Use rnh_matchaddr instead of rnh_lookup for longest-prefix match.
rnh_lookup is effectively the same as rnh_matchaddr if called with empy network mask. MFC after: 2 weeks
This commit is contained in:
parent
b14cfdf665
commit
d28d2aa46d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=260247
@ -542,7 +542,7 @@ ipfw_lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
|
||||
return (0);
|
||||
KEY_LEN(sa) = KEY_LEN_INET;
|
||||
sa.sin_addr.s_addr = addr;
|
||||
ent = (struct table_entry *)(rnh->rnh_lookup(&sa, NULL, rnh));
|
||||
ent = (struct table_entry *)(rnh->rnh_matchaddr(&sa, rnh));
|
||||
if (ent != NULL) {
|
||||
*val = ent->value;
|
||||
return (1);
|
||||
@ -568,7 +568,7 @@ ipfw_lookup_table_extended(struct ip_fw_chain *ch, uint16_t tbl, void *paddr,
|
||||
case IPFW_TABLE_CIDR:
|
||||
KEY_LEN(sa6) = KEY_LEN_INET6;
|
||||
memcpy(&sa6.sin6_addr, paddr, sizeof(struct in6_addr));
|
||||
xent = (struct table_xentry *)(rnh->rnh_lookup(&sa6, NULL, rnh));
|
||||
xent = (struct table_xentry *)(rnh->rnh_matchaddr(&sa6, rnh));
|
||||
break;
|
||||
|
||||
case IPFW_TABLE_INTERFACE:
|
||||
@ -576,7 +576,7 @@ ipfw_lookup_table_extended(struct ip_fw_chain *ch, uint16_t tbl, void *paddr,
|
||||
strlcpy(iface.ifname, (char *)paddr, IF_NAMESIZE) + 1;
|
||||
/* Assume direct match */
|
||||
/* FIXME: Add interface pattern matching */
|
||||
xent = (struct table_xentry *)(rnh->rnh_lookup(&iface, NULL, rnh));
|
||||
xent = (struct table_xentry *)(rnh->rnh_matchaddr(&iface, rnh));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user