* codesize: netfilter/iptables vs. nftables
@ 2009-08-11 10:24 Christoph A.
2009-08-11 13:53 ` Patrick McHardy
2009-08-11 16:53 ` Jan Engelhardt
0 siblings, 2 replies; 4+ messages in thread
From: Christoph A. @ 2009-08-11 10:24 UTC (permalink / raw)
To: Netfilter Developer Mailing List; +Cc: Christoph A.
[-- Attachment #1: Type: text/plain, Size: 1932 bytes --]
Hi,
from my understanding of the initial announcement of nftables [1]
unlike the iptables kernel approach, nftables does not have a 1-to-1
mapping of matches with modules in the kernel and provides only basic
functionality/operations, userspace can use to combine to build
matches/rules. (intelligence moves from kernel to userspace)
[1]
http://thread.gmane.org/gmane.comp.security.firewalls.netfilter.devel/28922
When creating new matches/targets in iptables one must create the
appropriate ipt/xt_<match> module for the kernel plus the userspace
module libipt/libxt_<match>.
With the generic way in which a nftables kernel handles data / provides
functions I would assume that this approach of supporting new matches
would change, and one must only create new combinations of kernel
provided operations which does not require kernel code modifications.
The kernelcode size of nftables would be constant regardless of how many
matches it supports.
Is this assumption correct?
Another thing I would like to know is the current codesize of
netfilter/iptables (including ip6tables and ebtables modules) compared
to nftables kernelsize (sloc) (although the current featureset may defer)
I compared them like this:
1. step:
count lines with sloccount in the following directories:
net/ipv4/netfilter/
net/ipv6/netfilter/
net/bridge/netfilter/
net/netfilter/
(gives me 802 files and 62462 SLOC)
2. step:
count lines in the same directories but only including files starting
with nft_*
(62 files and 2288 SLOC)
3. step:
subtraction:
sloc_step1
sloc_step2
(62462 - 2288 = 60174)
netfilter/iptables: 60174 SLOC
only nft_ files: 2288 SLOC
(using nft-2.6 87f619abc27c38583abbf7268319c3f105bf09fd)
this is only correct if nftables does not depend on any code already
present in non nft_* files and I guess this is not correct...(?)
thanks in advance
Christoph A.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: codesize: netfilter/iptables vs. nftables
2009-08-11 10:24 codesize: netfilter/iptables vs. nftables Christoph A.
@ 2009-08-11 13:53 ` Patrick McHardy
2009-08-12 14:32 ` Christoph A.
2009-08-11 16:53 ` Jan Engelhardt
1 sibling, 1 reply; 4+ messages in thread
From: Patrick McHardy @ 2009-08-11 13:53 UTC (permalink / raw)
To: Christoph A.; +Cc: Netfilter Developer Mailing List
Christoph A. wrote:
> Hi,
>
> from my understanding of the initial announcement of nftables [1]
>
> unlike the iptables kernel approach, nftables does not have a 1-to-1
> mapping of matches with modules in the kernel and provides only basic
> functionality/operations, userspace can use to combine to build
> matches/rules. (intelligence moves from kernel to userspace)
>
> [1]
> http://thread.gmane.org/gmane.comp.security.firewalls.netfilter.devel/28922
>
> When creating new matches/targets in iptables one must create the
> appropriate ipt/xt_<match> module for the kernel plus the userspace
> module libipt/libxt_<match>.
>
> With the generic way in which a nftables kernel handles data / provides
> functions I would assume that this approach of supporting new matches
> would change, and one must only create new combinations of kernel
> provided operations which does not require kernel code modifications.
> The kernelcode size of nftables would be constant regardless of how many
> matches it supports.
> Is this assumption correct?
It depends on the type of match. A new match of packet payload
for instance would likely not need any kernel changes. A new match
on data so far not supported at all would need changes to collect
that data. Once you are able to access a datum, you can combine it
with the existing features in any way you like, f.i. use for
comparisons, range comparisons, set lookups, maps, assignments, ...
> Another thing I would like to know is the current codesize of
> netfilter/iptables (including ip6tables and ebtables modules) compared
> to nftables kernelsize (sloc) (although the current featureset may defer)
>
>
> I compared them like this:
>
> 1. step:
> count lines with sloccount in the following directories:
> net/ipv4/netfilter/
> net/ipv6/netfilter/
> net/bridge/netfilter/
> net/netfilter/
>
> (gives me 802 files and 62462 SLOC)
>
> 2. step:
> count lines in the same directories but only including files starting
> with nft_*
>
> (62 files and 2288 SLOC)
That both seems wrong :) The diffstat of my nft-2.6 tree currently
shows:
77 files changed, 7824 insertions(+), 258 deletions(-)
but some of that are just API changes touching other files. The
real code size currently is roughly 7300 lines I would guess, the
number of files is somewhere around 25.
> 3. step:
> subtraction:
> sloc_step1
> sloc_step2
> (62462 - 2288 = 60174)
>
> netfilter/iptables: 60174 SLOC
> only nft_ files: 2288 SLOC
> (using nft-2.6 87f619abc27c38583abbf7268319c3f105bf09fd)
>
> this is only correct if nftables does not depend on any code already
> present in non nft_* files and I guess this is not correct...(?)
Both use conntrack, NAT, the logging infrastructure and some more.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: codesize: netfilter/iptables vs. nftables
2009-08-11 10:24 codesize: netfilter/iptables vs. nftables Christoph A.
2009-08-11 13:53 ` Patrick McHardy
@ 2009-08-11 16:53 ` Jan Engelhardt
1 sibling, 0 replies; 4+ messages in thread
From: Jan Engelhardt @ 2009-08-11 16:53 UTC (permalink / raw)
To: Christoph A.; +Cc: Netfilter Developer Mailing List
On Tuesday 2009-08-11 12:24, Christoph A. wrote:
>
>unlike the iptables kernel approach, nftables does not have a 1-to-1
>mapping of matches with modules in the kernel and provides only basic
>functionality/operations, userspace can use to combine to build
>matches/rules. (intelligence moves from kernel to userspace)
>The kernelcode size of nftables would be constant regardless of how many
>matches it supports.
>Is this assumption correct?
Certain fundamentals do require kernel support such as "store this
in the nfmark now" or "store this in the ctmark now". This won't
change. (See Patrick's reply too.)
What iptables currently does is ask the kernel to match on tcp,
but it could very well ask "check byte X in the network header
for 6" to test for tcp. That is what nftables does, and there is
also xt_u32 for iptables.
>Another thing I would like to know is the current codesize of
>netfilter/iptables (including ip6tables and ebtables modules) compared
>to nftables kernelsize (sloc) (although the current featureset may defer)
>
>I compared them like this:
>
>1. step:
>count lines with sloccount in the following directories:
>net/ipv4/netfilter/
>net/ipv6/netfilter/
>net/bridge/netfilter/
>net/netfilter/
With that you would be counting Conntrack and NAT too, which is not
useful in the comparison. And realistically, counting all extensions
too perturbs the statistics, since iptables, right now, _can_ do
more (TPROXY, just to name one).
Hence I counted by
net/{bridge,ipv4,ipv6,}/netfilter/*tables.c
net/{bridge,ipv4,ipv6}/netfilter/*table_{filter,raw,security,mangle}.c
Something like that. iptables clocks in at some 9 kLOC IIRC (~5k
after my large consolidation), and nftables somewhere at 2.5k, but
that's only because I have not yet started trimming down ebtables.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: codesize: netfilter/iptables vs. nftables
2009-08-11 13:53 ` Patrick McHardy
@ 2009-08-12 14:32 ` Christoph A.
0 siblings, 0 replies; 4+ messages in thread
From: Christoph A. @ 2009-08-12 14:32 UTC (permalink / raw)
To: Netfilter Developer Mailing List
Cc: Patrick McHardy, Christoph A., Jan Engelhardt
[-- Attachment #1: Type: text/plain, Size: 2864 bytes --]
thanks your replies
On 11.08.2009 15:53, Patrick McHardy wrote:
> but some of that are just API changes touching other files. The
> real code size currently is roughly 7300 lines I would guess, the
> number of files is somewhere around 25.
at the end I would like to now how many loc has the netfilter/iptables
subsystem(*) (of a iptables-only kernel) and how many loc has the
netfilter/nftables(**) subsystem (of a nftables-only kernel) (rawly)
*includes: {ip,ip6,eb,x}tables
**includes: nftables
I hope this is reasonable.
On 11.08.2009 18:53, Jan Engelhardt wrote:
> Hence I counted by
>
> net/{bridge,ipv4,ipv6,}/netfilter/*tables.c
> net/{bridge,ipv4,ipv6}/netfilter/*table_{filter,raw,security,mangle}.c
is it ok to add net/netfilter/x_tables.c to this list?
>
> Something like that. iptables clocks in at some 9 kLOC IIRC (~5k
> after my large consolidation), and nftables somewhere at 2.5k, but
> that's only because I have not yet started trimming down ebtables.
ok, here my second attempt:
for the iptables part I used a vanilla 31rc4
http://git.kernel.org/?p=linux/kernel/git/kaber/nft-2.6.git;a=commit;h=4be3bd7849165e7efa6b0b35a23d6a3598d97465
cp
{bridge,ipv4,ipv6}/netfilter/*table{s,_filter,_raw,_security,_mangle}.c
netfilter/x_tables.c /tmp/31rc4/
ls /tmp/31rc4/|wc -l
15
sloccount /tmp/31rc4/
Creating filelist for 31rc4
Computing results.
SLOC
8834 <==
for nftables I used
http://git.kernel.org/?p=linux/kernel/git/kaber/nft-2.6.git;a=commit;h=a80c1f56e68fd0a7a57a82c85ff50a96a4e38267
find . -name 'nf_table*' -exec cp -i {} /tmp/nftables/ \;
find . -name 'nft_*' -exec cp -i {} /tmp/nftables/ \;
ls /tmp/nftables|wc -l
25 (conforming to the number mentioned by Patrick)
sloccount /tmp/nftables
Creating filelist for nftables
Computing results.
SLOC
4697 <==
at the end it comes to:
8834 LOC vs. 4697 LOC
for sure this is another flawed comparison but hopefully a better one
than the previous ;)
thanks
Christoph A.
just for the record:
ls /tmp/31rc4/
arptable_filter.c ebtable_filter.c ip6table_filter.c ip6table_raw.c
ip6table_security.c iptable_mangle.c ip_tables.c x_tables.c
arp_tables.c ebtables.c ip6table_mangle.c ip6_tables.c
iptable_filter.c iptable_raw.c iptable_security.c
ls /tmp/nftables
nf_table_nat_ipv4.c nf_tables_bridge.c nft_bitwise.c nft_ct.c
nft_immediate.c nft_meta.c nft_reject_ipv4.c
nf_table_route_ipv4.c nf_tables_core.c nft_byteorder.c
nft_expr_template.c nft_limit.c nft_meta_target.c
nf_table_route_ipv6.c nf_tables_ipv4.c nft_cmp.c nft_exthdr.c
nft_log.c nft_payload.c
nf_tables_api.c nf_tables_ipv6.c nft_counter.c nft_hash.c
nft_lookup.c nft_rbtree.c
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-08-12 14:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-11 10:24 codesize: netfilter/iptables vs. nftables Christoph A.
2009-08-11 13:53 ` Patrick McHardy
2009-08-12 14:32 ` Christoph A.
2009-08-11 16:53 ` Jan Engelhardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).