Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 08 May 2014 09:09:21 +0800
From:      bycn82 <bycn82@gmail.com>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        "freebsd-ipfw@freebsd.org" <freebsd-ipfw@freebsd.org>, Freddie Cash <fjwcash@gmail.com>
Subject:   Re: feature of `packet per second`
Message-ID:  <536AD941.9090102@gmail.com>
In-Reply-To: <536AD13B.6080907@gmail.com>
References:  <5360F1F4.9060808@gmail.com> <5361105C.1040203@freebsd.org> <53611738.8010103@gmail.com> <CAOjFWZ4zRUmcjG-r--OqoGEWcSZoWhtTykgAAHzCjoEWsMVS9g@mail.gmail.com> <53611EB1.4000406@gmail.com> <CA%2BhQ2%2BhjjS=AXVdnaEdFOKY1DqiLuX9iP0gy3wo6FbwnEdq_Qw@mail.gmail.com> <5364E097.9020106@gmail.com> <CA%2BhQ2%2BgXC9uNdtH1VCGa%2Bs1dPNWjErC9qfgXmEnfQ4SQ6Rnz_g@mail.gmail.com> <536AD13B.6080907@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5/8/14 8:35, bycn82 wrote:
> On 5/4/14 1:19, Luigi Rizzo wrote:
>>
>>
>>
>> On Sat, May 3, 2014 at 2:27 PM, bycn82 <bycn82@gmail.com 
>> <mailto:bycn82@gmail.com>> wrote:
>>
>>     On 5/2/14 16:59, Luigi Rizzo wrote:
>>>
>>>
>>>
>>>     On Wed, Apr 30, 2014 at 6:02 PM, bycn82 <bycn82@gmail.com
>>>     <mailto:bycn82@gmail.com>> wrote:
>>>
>>>
>>>             fjwcash@gmail.com <mailto:fjwcash@gmail.com>
>>>             <mailto:fjwcash@gmail.com <mailto:fjwcash@gmail.com>>
>>>
>>>         Thanks for your reply,  and it is good to know the sysctl
>>>         for ICMP.
>>>
>>>         finally it works.I just added a new `action` in firewall and
>>>         it is called `pps`,  that means it can be generic purpose
>>>         while the net.inet.icmp.icmplim is only for ICMP traffic.
>>>
>>>         the usage will be like below
>>>
>>>         root@F10:/usr/src/sbin/ipfw # .*/ipfw add pps 1 icmp from
>>>         any to any*
>>>         00100 pps 1 icmp from any to any
>>>         root@F10:/usr/src/sbin/ipfw # ./ipfw show
>>>         00100     9     540 pps 1 icmp from any to any
>>>         65535 13319 1958894 allow ip from any to any
>>>         root@F10:/usr/src/sbin/ipfw #
>>>
>>>
>>>     ​hi,
>>>     as julian said it would be great if you would like to share your
>>>     code
>>>     so we can integrate it in future ipfw releases.
>>>     Once again citing Julian, dummynet is a bit of a superset of pps but
>>>     not exactly, so i see value in the additional feature.
>>>
>>>     One thing  ​to keep in mind in the implementation:
>>>
>>>     the burst size used for limiting is an important parameter that
>>>     everyone forgets. 1 pps is basically "don't bother me".
>>>     1000 pps could be "1000 packets every fixed 1-sec interval"
>>>     or "1 packet every ms" or (this is more difficult)
>>>     "20 pkt in the last 50ms interval".
>>>
>>>     If i were to implement the feature i would add two parameters
>>>     (burst, I_max) with reasonable defaults and compute the internal
>>>     interval and max_count as follows
>>>        if (burst > max_pps * I_max)
>>>            burst = max_pps * I_max; // make sure it is not too large
>>>        else if (burst < max_pps / HZ)
>>>            burst = max_pps * HZ;    // nor too small
>>>        max_count = max_pps / burst;
>>>        interval = HZ * burst / max_pps;
>>>        count = 0; // actual counter
>>>
>>>     then add { max_count, interval, timestamp, count } to the rule
>>>     descriptor.
>>>     On incoming packets:
>>>
>>>        if (ticks >= r->interval + r->timestamp) {
>>>            r->timestamp = r->ticks;
>>>            r->count = 1;
>>>            return ACCEPT;
>>>        }
>>>        if (r->count > r->max_count)
>>>            return DENY;
>>>        r->count++;
>>>        return ACCEPT;
>>>
>>>     cheers
>>>     luigi
>>>
>>     Hi Luigi,
>>     You are right, it will be more generic if provide two parameters
>>     as you described,
>>     But this PPS feature should not be used to control the traffic
>>     rate, the dummynet you provided is the correct way.
>>     So I am thinking in what kind of scenario, people need this PPS
>>     feature?
>>     in my opinion, people will use PPS only when they want to limit
>>     the connections/transactions numbers. ( already have limit
>>     command to limit the connections)
>>     So I think provide a simple PPS feature is good enough, and we
>>     can improve it if someone complaint on this.
>>
>>
>> ​pps has a strong reason to exist because it is a lot cheaper
>> than a dummynet pipe, and given its pur​pose is to police
>> traffic (icmp, dns requests, etc) which should not even
>> get close to the limit which is set, I think it is
>> a completely reasonable feature to have.
>>
>> Given that the above code is the complete implementation
>> with the two parameters (burst and interval) there is no
>> reason not to use them, at least internally.
>>
>> Then you could choose not to expose them as part of the
>> user interface (though since you are implementing a new
>> option from scratch, it is completely trivial to
>> parse 1, 2 or 3 arguments and set defaults for the others).
>>
>> cheers
>> luigi
> OK, PPS with 2 parameters , it is done,
> But how to get the current time in millisecond?
> any recommendation?
In order to get the millisecond, i tried to include the timeb.h but i 
met below

n file included from 
/usr/src/sys/modules/ipfw/../../netpfil/ipfw/ip_fw2.c:42:
@/sys/timeb.h:42:2: error: "this file includes <sys/timeb.h> which is 
deprecated"
       [-Werror,-W#warnings]
#warning "this file includes <sys/timeb.h> which is deprecated"
  ^
any replacement for timeb.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?536AD941.9090102>