Date: Fri, 25 May 2012 17:49:20 +0200 From: =?ISO-8859-1?Q?Ermal_Lu=E7i?= <eri@freebsd.org> To: Gleb Smirnoff <glebius@freebsd.org> Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r235993 - projects/pf/head/sys/contrib/pf/net Message-ID: <CAPBZQG1cUd83p76Hy6qeyGfqZ-pqUiUPWAGw1=atnQrkGdTcyw@mail.gmail.com> In-Reply-To: <201205251449.q4PEnpYd016118@svn.freebsd.org> References: <201205251449.q4PEnpYd016118@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I am not sure you understand the implications here and previous commit. But word CONSISTENCY and wrong behviour is the first to look after. On Fri, May 25, 2012 at 4:49 PM, Gleb Smirnoff <glebius@freebsd.org> wrote: > Author: glebius > Date: Fri May 25 14:49:51 2012 > New Revision: 235993 > URL: http://svn.freebsd.org/changeset/base/235993 > > Log: > =A0- Stop referencing tag names by states. Not a big deal if tag name > =A0 =A0disappears. > =A0- Make tag code more private to pf_ioctl.c > > Modified: > =A0projects/pf/head/sys/contrib/pf/net/pf.c > =A0projects/pf/head/sys/contrib/pf/net/pf_ioctl.c > =A0projects/pf/head/sys/contrib/pf/net/pfvar.h > > Modified: projects/pf/head/sys/contrib/pf/net/pf.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/pf/head/sys/contrib/pf/net/pf.c =A0 =A0Fri May 25 14:40:56 2= 012 =A0 =A0 =A0 =A0(r235992) > +++ projects/pf/head/sys/contrib/pf/net/pf.c =A0 =A0Fri May 25 14:49:51 2= 012 =A0 =A0 =A0 =A0(r235993) > @@ -1472,8 +1472,6 @@ pf_free_state(struct pf_state *cur) > =A0 =A0 =A0 =A0if (cur->anchor.ptr !=3D NULL) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0--cur->anchor.ptr->states_cur; > =A0 =A0 =A0 =A0pf_normalize_tcp_cleanup(cur); > - =A0 =A0 =A0 if (cur->tag) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 pf_tag_unref(cur->tag); > =A0 =A0 =A0 =A0uma_zfree(V_pf_state_z, cur); > =A0 =A0 =A0 =A0V_pf_status.fcounters[FCNT_STATE_REMOVALS]++; > =A0 =A0 =A0 =A0V_pf_status.states--; > @@ -3446,10 +3444,8 @@ pf_create_state(struct pf_rule *r, struc > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*sm =3D s; > > =A0 =A0 =A0 =A0pf_set_rt_ifp(s, pd->src); =A0 =A0 =A0/* needs s->state_ke= y set */ > - =A0 =A0 =A0 if (tag > 0) { > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 pf_tag_ref(tag); > + =A0 =A0 =A0 if (tag > 0) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0s->tag =3D tag; > - =A0 =A0 =A0 } > =A0 =A0 =A0 =A0if (pd->proto =3D=3D IPPROTO_TCP && (th->th_flags & (TH_SY= N|TH_ACK)) =3D=3D > =A0 =A0 =A0 =A0 =A0 =A0TH_SYN && r->keep_state =3D=3D PF_STATE_SYNPROXY) = { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0s->src.state =3D PF_TCPS_PROXY_SRC; > > Modified: projects/pf/head/sys/contrib/pf/net/pf_ioctl.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/pf/head/sys/contrib/pf/net/pf_ioctl.c =A0 =A0 =A0Fri May 25 = 14:40:56 2012 =A0 =A0 =A0 =A0(r235992) > +++ projects/pf/head/sys/contrib/pf/net/pf_ioctl.c =A0 =A0 =A0Fri May 25 = 14:49:51 2012 =A0 =A0 =A0 =A0(r235993) > @@ -135,8 +135,6 @@ static int =A0 =A0 =A0 =A0 =A0 pf_addr_setup(struct p= f_rul > =A0static void =A0 =A0 =A0 =A0 =A0 =A0 pf_addr_copyout(struct pf_addr_wra= p *); > =A0static void =A0 =A0 =A0 =A0 =A0 =A0 pf_pkt_addr_changed(struct mbuf *)= ; > > -#define =A0 =A0 =A0 =A0TAGID_MAX =A0 =A0 =A0 =A050000 > - > =A0VNET_DEFINE(struct pf_rule, =A0 =A0pf_default_rule); > =A0VNET_DEFINE(struct sx, =A0 =A0 =A0 =A0 pf_consistency_lock); > =A0#define V_pf_consistency_lock =A0VNET(pf_consistency_lock) > @@ -146,13 +144,20 @@ static VNET_DEFINE(int, =A0 =A0 =A0 =A0 =A0 pf_altq= _running > =A0#define =A0 =A0 =A0 =A0V_pf_altq_running =A0 =A0 =A0 VNET(pf_altq_runn= ing) > =A0#endif > > -TAILQ_HEAD(pf_tags, pf_tagname); > +#define =A0 =A0 =A0 =A0TAGID_MAX =A0 =A0 =A0 =A050000 > +struct pf_tagname { > + =A0 =A0 =A0 TAILQ_ENTRY(pf_tagname) entries; > + =A0 =A0 =A0 char =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0name[PF_TAG_NAM= E_SIZE]; > + =A0 =A0 =A0 uint16_t =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tag; > + =A0 =A0 =A0 int =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ref; > +}; > > +TAILQ_HEAD(pf_tags, pf_tagname); > =A0#define =A0 =A0 =A0 =A0V_pf_tags =A0 =A0 =A0 =A0 =A0 =A0 =A0 VNET(pf_t= ags) > =A0VNET_DEFINE(struct pf_tags, pf_tags); > =A0#define =A0 =A0 =A0 =A0V_pf_qids =A0 =A0 =A0 =A0 =A0 =A0 =A0 VNET(pf_q= ids) > =A0VNET_DEFINE(struct pf_tags, pf_qids); > - > +MALLOC_DEFINE(M_PFTAG, "pf tags", "pf tags"); > > =A0#if (PF_QNAME_SIZE !=3D PF_TAG_NAME_SIZE) > =A0#error PF_QNAME_SIZE must be equal to PF_TAG_NAME_SIZE > @@ -160,7 +165,7 @@ VNET_DEFINE(struct pf_tags, pf_qids); > > =A0static u_int16_t =A0 =A0 =A0 =A0tagname2tag(struct pf_tags *, char *); > =A0static u_int16_t =A0 =A0 =A0 =A0pf_tagname2tag(char *); > -void =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tag_unref(struct pf_tags *, = u_int16_t); > +static void =A0 =A0 =A0 =A0 =A0 =A0 tag_unref(struct pf_tags *, u_int16_= t); > > =A0#define DPFPRINTF(n, x) if (V_pf_status.debug >=3D (n)) printf x > > @@ -406,8 +411,10 @@ pf_free_rule(struct pf_rule *rule) > > =A0 =A0 =A0 =A0PF_RULES_WASSERT(); > > - =A0 =A0 =A0 pf_tag_unref(rule->tag); > - =A0 =A0 =A0 pf_tag_unref(rule->match_tag); > + =A0 =A0 =A0 if (rule->tag) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 tag_unref(&V_pf_tags, rule->tag); > + =A0 =A0 =A0 if (rule->match_tag) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 tag_unref(&V_pf_tags, rule->match_tag); > =A0#ifdef ALTQ > =A0 =A0 =A0 =A0if (rule->pqid !=3D rule->qid) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pf_qid_unref(rule->pqid); > @@ -444,6 +451,8 @@ tagname2tag(struct pf_tags *head, char * > =A0 =A0 =A0 =A0struct pf_tagname =A0 =A0 =A0 *tag, *p =3D NULL; > =A0 =A0 =A0 =A0u_int16_t =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0new_tagid =3D 1; > > + =A0 =A0 =A0 PF_RULES_WASSERT(); > + > =A0 =A0 =A0 =A0TAILQ_FOREACH(tag, head, entries) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (strcmp(tagname, tag->name) =3D=3D 0) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tag->ref++; > @@ -466,7 +475,7 @@ tagname2tag(struct pf_tags *head, char * > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return (0); > > =A0 =A0 =A0 =A0/* allocate and fill new struct pf_tagname */ > - =A0 =A0 =A0 tag =3D malloc(sizeof(*tag), M_TEMP, M_NOWAIT|M_ZERO); > + =A0 =A0 =A0 tag =3D malloc(sizeof(*tag), M_PFTAG, M_NOWAIT|M_ZERO); > =A0 =A0 =A0 =A0if (tag =3D=3D NULL) > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return (0); > =A0 =A0 =A0 =A0strlcpy(tag->name, tagname, sizeof(tag->name)); > @@ -481,20 +490,19 @@ tagname2tag(struct pf_tags *head, char * > =A0 =A0 =A0 =A0return (tag->tag); > =A0} > > -void > +static void > =A0tag_unref(struct pf_tags *head, u_int16_t tag) > =A0{ > =A0 =A0 =A0 =A0struct pf_tagname =A0 =A0 =A0 *p, *next; > > - =A0 =A0 =A0 if (tag =3D=3D 0) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 return; > + =A0 =A0 =A0 PF_RULES_WASSERT(); > > =A0 =A0 =A0 =A0for (p =3D TAILQ_FIRST(head); p !=3D NULL; p =3D next) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0next =3D TAILQ_NEXT(p, entries); > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (tag =3D=3D p->tag) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (--p->ref =3D=3D 0) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0TAILQ_REMO= VE(head, p, entries); > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 free(p, M_T= EMP); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 free(p, M_P= FTAG); > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > @@ -507,24 +515,6 @@ pf_tagname2tag(char *tagname) > =A0 =A0 =A0 =A0return (tagname2tag(&V_pf_tags, tagname)); > =A0} > > -void > -pf_tag_ref(u_int16_t tag) > -{ > - =A0 =A0 =A0 struct pf_tagname *t; > - > - =A0 =A0 =A0 TAILQ_FOREACH(t, &V_pf_tags, entries) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (t->tag =3D=3D tag) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 break; > - =A0 =A0 =A0 if (t !=3D NULL) > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 t->ref++; > -} > - > -void > -pf_tag_unref(u_int16_t tag) > -{ > - =A0 =A0 =A0 tag_unref(&V_pf_tags, tag); > -} > - > =A0#ifdef ALTQ > =A0static u_int32_t > =A0pf_qname2qid(char *qname) > > Modified: projects/pf/head/sys/contrib/pf/net/pfvar.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/pf/head/sys/contrib/pf/net/pfvar.h Fri May 25 14:40:56 2012 = =A0 =A0 =A0 =A0(r235992) > +++ projects/pf/head/sys/contrib/pf/net/pfvar.h Fri May 25 14:49:51 2012 = =A0 =A0 =A0 =A0(r235993) > @@ -1410,13 +1410,6 @@ struct pf_altq { > =A0 =A0 =A0 =A0u_int32_t =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0qid; =A0 =A0 =A0 = =A0 =A0 /* return value */ > =A0}; > > -struct pf_tagname { > - =A0 =A0 =A0 TAILQ_ENTRY(pf_tagname) entries; > - =A0 =A0 =A0 char =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0name[PF_TAG_NAM= E_SIZE]; > - =A0 =A0 =A0 u_int16_t =A0 =A0 =A0 =A0 =A0 =A0 =A0 tag; > - =A0 =A0 =A0 int =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ref; > -}; > - > =A0struct pf_divert { > =A0 =A0 =A0 =A0union { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct in_addr =A0ipv4; > @@ -1931,8 +1924,6 @@ int =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pfi_clear_flags(= const char *, int) > > =A0int =A0 =A0 =A0 =A0 =A0 =A0 pf_match_tag(struct mbuf *, struct pf_rule= *, int *, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct pf_mtag *); > -void =A0 =A0 =A0 =A0 =A0 =A0pf_tag_ref(u_int16_t); > -void =A0 =A0 =A0 =A0 =A0 =A0pf_tag_unref(u_int16_t); > =A0int =A0 =A0 =A0 =A0 =A0 =A0 pf_tag_packet(struct mbuf *, int, int, str= uct pf_mtag *); > =A0void =A0 =A0 =A0 =A0 =A0 =A0pf_qid2qname(u_int32_t, char *); > --=20 Ermal
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPBZQG1cUd83p76Hy6qeyGfqZ-pqUiUPWAGw1=atnQrkGdTcyw>