Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Oct 2002 10:06:35 +0800
From:      Eugene Grosbein <eugen@kuzbass.ru>
To:        Maxim Konovalov <maxim@macomnet.ru>
Cc:        stable@FreeBSD.ORG
Subject:   Re: Call for testers: ipfw(8) limit patch
Message-ID:  <3DB755AB.9BB9F9B9@kuzbass.ru>
References:  <20021021174100.Q1221-100000@news1.macomnet.ru> <3DB4F490.57050242@kuzbass.ru> <20021022155420.G59161-100000@news1.macomnet.ru> <3DB60570.C75F91EA@kuzbass.ru> <20021023133644.T22644-100000@news1.macomnet.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
Maxim Konovalov wrote:

> > I'd suggest using log() instead of printf() in ipfw[2].
> 
> Does it suit you?
> 
> Index: sys/netinet/ip_fw.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet/ip_fw.c,v
> retrieving revision 1.131.2.35
> diff -u -r1.131.2.35 ip_fw.c
> --- sys/netinet/ip_fw.c 29 Jul 2002 02:04:25 -0000      1.131.2.35
> +++ sys/netinet/ip_fw.c 23 Oct 2002 09:35:54 -0000
> @@ -696,11 +696,11 @@
>             if (zap)
>                 zap = force || TIME_LEQ( q->expire , time_second );
>             /* do not zap parent in first pass, record we need a second pass */
> -           if (q->dyn_type == DYN_LIMIT_PARENT) {
> +           if (zap && q->dyn_type == DYN_LIMIT_PARENT) {
>                 max_pass = 1; /* we need a second pass */
> -               if (zap == 1 && (pass == 0 || q->count != 0) ) {
> +               if (pass == 0 || q->count != 0) {
>                     zap = 0 ;
> -                   if (pass == 1) /* should not happen */
> +                   if (pass == 1 && force) /* should not happen */
>                         printf("OUCH! cannot remove rule, count %d\n",
>                                 q->count);
>                 }
> @@ -987,8 +987,21 @@
>         }
>         if (parent->count >= conn_limit) {
>             EXPIRE_DYN_CHAIN(rule); /* try to expire some */
> +           /*
> +            * The expiry might have removed the parent too.
> +            * We lookup again, which will re-create if necessary.
> +            */
> +           parent = lookup_dyn_parent(&id, rule);
> +           if (parent == NULL) {
> +               printf("add parent failed\n");
> +               return 1;
> +           }
>             if (parent->count >= conn_limit) {
> -               printf("drop session, too many entries\n");
> +               if (fw_verbose && last_log != time_second) {
> +                       last_log = time_second;
> +                       log(LOG_SECURITY | LOG_INFO,
> +                           "drop session, too many entries\n");
> +               }
>                 return 1;
>             }
>         }
> 

That's look nice. I currently run previos version on your patch
and can't reboot my server to test this next version, sorry.

Eugene

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3DB755AB.9BB9F9B9>