From owner-p4-projects@FreeBSD.ORG Sat Jun 28 20:42:55 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8FE51106567B; Sat, 28 Jun 2008 20:42:55 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 519C3106568A for ; Sat, 28 Jun 2008 20:42:55 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 3E2B28FC18 for ; Sat, 28 Jun 2008 20:42:55 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m5SKgsGr001620 for ; Sat, 28 Jun 2008 20:42:54 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m5SKgs1b001618 for perforce@freebsd.org; Sat, 28 Jun 2008 20:42:54 GMT (envelope-from gk@FreeBSD.org) Date: Sat, 28 Jun 2008 20:42:54 GMT Message-Id: <200806282042.m5SKgs1b001618@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Cc: Subject: PERFORCE change 144239 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Jun 2008 20:42:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=144239 Change 144239 by gk@gk_h1 on 2008/06/28 20:42:31 Fix creation of dynamic rules with ether address specified in table Affected files ... .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fw2.c#10 edit Differences ... ==== //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fw2.c#10 (text+ko) ==== @@ -1904,7 +1904,7 @@ static int lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr, - struct ether_addr *ea, uint32_t *val) + struct ether_addr *ea, ipfw_ether_addr *val_ea, uint32_t *val) { struct radix_node_head *rnh; struct table_entry *ent; @@ -1918,7 +1918,9 @@ ent = (struct table_entry *)(rnh->rnh_lookup(&sa, NULL, rnh)); if (ent != NULL) { if (ea && !ether_addr_allow(&ent->ether_addr, ea)) - return (0); + return (0); + /* use address to create dynamic rule */ + *val_ea = ent->ether_addr; *val = ent->value; return (1); } @@ -2709,12 +2711,15 @@ uint32_t v; if (args->eh) { - ea = (struct ether_addr*)((cmd->opcode == O_IP_DST_LOOKUP) ? - args->eh->ether_dhost : - args->eh->ether_shost); + ea = (struct ether_addr*)((cmd->opcode == O_IP_DST_LOOKUP) ? + args->eh->ether_dhost : + args->eh->ether_shost); } match = lookup_table(chain, cmd->arg1, a, - ea, &v); + ea, (cmd->opcode == O_IP_DST_LOOKUP ? + &args->f_id.dst_ether : + &args->f_id.src_ether), + &v); if (!match) break; if (cmdlen == F_INSN_SIZE(ipfw_insn_u32))