[CFT] new tables for ipfw
Alexander V. Chernikov
melifaro at yandex-team.ru
Thu Aug 14 15:21:06 UTC 2014
On 14.08.2014 16:08, Willem Jan Withagen wrote:
> On 2014-08-14 13:15, Luigi Rizzo wrote:
>> On Thu, Aug 14, 2014 at 12:57 PM, Alexander V. Chernikov <
>> melifaro at yandex-team.ru> wrote:
>>
>>> On 14.08.2014 14:44, Luigi Rizzo wrote:
>>>
>>>
>>>
>>>
>>> On Thu, Aug 14, 2014 at 11:57 AM, Alexander V. Chernikov <
>>> melifaro at yandex-team.ru> wrote:
>>>
>>>> On 14.08.2014 13:23, Luigi Rizzo wrote:
>>>>
>>>>
>>>>
>>>>
>>>> On Wed, Aug 13, 2014 at 10:11 PM, Alexander V. Chernikov <
>>>> melifaro at yandex-team.ru> wrote:
>>>>
>>>>> Hello list.
>>>>>
>>>>> I've been hacking ipfw for a while and It seems there is something
>>>>> ready
>>>>> to test/review in projects/ipfw branch.
>>>>>
>>>>
>>>> this is a fantastic piece of work, thanks for doing it and for
>>>> integrating the feedback.
>>>>
>>>> I have some detailed feedback that will send you privately,
>>>> but just a curiosity:
>>>>
>>>> ...
>>>>>
>>>>> Some examples (see ipfw(8) manual page for the description):
>>>>>
>>>>>
>>>>> ...
>>>>>
>>>>>
>>>>> ipfw table mi_test create type cidr algo "cidr:hash masks=/30,/64"
>>>>>
>>>>
>>>> why do we need to specify mask lengths in the above ?
>>>>
>>>> Well, since we're hashing IP we have to know mask to cut host
>>>> bits in
>>>> advance.
>>>> (And the real reason is that I'm too lazy to implement hierarchical
>>>> matching (check /32, then /31, then /30) like how, for example,
>>>>
>>>
>>> oh well for that we should use cidr:radix
>>>
>>> Research results have never shown a strong superiority of
>>> hierarchical hash tables over good radix implementations,
>>> and in those cases one usually adopts partial prefix
>>> expansion so you only have, say, masks that are a
>>> multiple of 2..8 bits so you only need a small number of
>>> hash lookups.
>>>
>>> Definitely, especially for IPv6. So I was actually thinking about
>>> covering
>>> some special sparse cases (e.g. someone having a bunch of /32 and a
>>> bunch
>>> of /30 and that's all).
>>>
>>> Btw, since we're talking about "good radix implementation": what
>>> license
>>> does DXR have? :)
>>> Is it OK to merge it as another cidr implementation?
>>>
>>
>> "cidr" is a very ugly name, i'd rather use "addr"
>>
>> DXR has a bsd license and of course it is possible to use it.
>> You should ask Marko Zec for his latest version of the code
>> (and probably make sure we have one copy of the code in the source
>> tree).
>>
>> Speaking of features, one thing that would be nice is the ability
>> for tables to reference the in-kernel tables (e.g. fibs, socket
>> lists, interface lists...), perhaps in readonly mode.
>> How complex do you think that would be ?
>
> I'm a very happy user of ipfw and I think these are nice improvements
> and will make things more flexible...
>
> I have 2 nits to pick with the current version.
>
> I've found the notation ipnr:something rather frustrating when using
> ipv6 addresses. Sort of like typing a ipv6 address in a browser, the
> last :xx is always interpreted as portnumber, UNLESS you wrap it in []'s.
> compare
> 2001:4cb8:3:1::1
> 2001:4cb8:3:1::1:80
> [2001:4cb8:3:1::1]:80
> The first and the last are the same host but a different port, the
> middle one is just a different host.
>
> Could/should we do the same in ipfw?
Well, we should, but I'm unsure if we have host:port notation anywhere
in current (or new) syntax:
>
> And I keep running into the
> ipfw add deny all from table(50) to any
> notation. the ()'s need to be escaped in most any shell. Where as I
> look at the syntax there is little reason to require the ()'s.
> the keyword table always needs to be followed by a number (and in the
> new version a (word|number) ).
We need _some_ discriminator to ensure that the next parameter after
"to" or "from" is not hostname.
We also have some other places where tables are used: "via
interface|table(X)", lookup X, flow table(X) [new].
I agree that parenthesis might not be the best choice. (and something
like :tablename:, %tablename%, or even table:tablename might look better).
Theoretically, we can support both (old/new) and show rules with new one
by default.
>
> Thanx for the nice work,
> --WjW
>
More information about the freebsd-ipfw
mailing list