Date: Sun, 27 Jul 2008 11:09:14 GMT From: Gleb Kurtsou <gk@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 146036 for review Message-ID: <200807271109.m6RB9ENO081553@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=146036 Change 146036 by gk@gk_h1 on 2008/07/27 11:08:24 add per state flag to mark ethernet state check not to derefernce rule pointer on every state check and to improve state dump in user space note. flag is added into local_flags field wich is FreeBSD only Affected files ... .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf.c#8 edit .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pfvar.h#7 edit Differences ... ==== //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf.c#8 (text+ko) ==== @@ -706,8 +706,14 @@ { struct pf_addr_ether *src, *dst; +#ifdef __FreeBSD__ + if ((state->local_flags & PFSTATE_ETHER) == 0) + return (1); +#else + /* XXX only FreeBSD is supported */ if ((state->rule.ptr->rule_flag & PFRULE_ETHERSTATE) == 0) return (1); +#endif if (direction == PF_IN) { src = &state->ext.addr_ether; @@ -3549,6 +3555,10 @@ s->proto = IPPROTO_TCP; s->direction = direction; s->af = af; +#ifdef __FreeBSD__ + if (r->rule_flag & PFRULE_ETHERSTATE) + s->local_flags |= PFSTATE_ETHER; +#endif if (direction == PF_OUT) { PF_ACPY(&s->gwy.addr, saddr, af); s->gwy.port = th->th_sport; /* sport */ @@ -3950,6 +3960,10 @@ s->proto = IPPROTO_UDP; s->direction = direction; s->af = af; +#ifdef __FreeBSD__ + if (r->rule_flag & PFRULE_ETHERSTATE) + s->local_flags |= PFSTATE_ETHER; +#endif if (direction == PF_OUT) { PF_ACPY(&s->gwy.addr, saddr, af); s->gwy.port = uh->uh_sport; @@ -4267,6 +4281,10 @@ s->proto = pd->proto; s->direction = direction; s->af = af; +#ifdef __FreeBSD__ + if (r->rule_flag & PFRULE_ETHERSTATE) + s->local_flags |= PFSTATE_ETHER; +#endif if (direction == PF_OUT) { PF_ACPY(&s->gwy.addr, saddr, af); s->gwy.port = nport; @@ -4558,6 +4576,10 @@ s->proto = pd->proto; s->direction = direction; s->af = af; +#ifdef __FreeBSD__ + if (r->rule_flag & PFRULE_ETHERSTATE) + s->local_flags |= PFSTATE_ETHER; +#endif if (direction == PF_OUT) { PF_ACPY(&s->gwy.addr, saddr, af); s->gwy.addr_ether = pd->src_ether; ==== //depot/projects/soc2008/gk_l2filter/sys-pf/net/pfvar.h#7 (text+ko) ==== @@ -814,6 +814,7 @@ #ifdef __FreeBSD__ u_int8_t local_flags; #define PFSTATE_EXPIRING 0x01 +#define PFSTATE_ETHER 0x02 #else u_int8_t pad; #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807271109.m6RB9ENO081553>