Skip site navigation (1)Skip section navigation (2)
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>