From: Massimiliano Hofer <max@nucleus.it>
To: netfilter-devel@lists.netfilter.org
Subject: new ABI
Date: Mon, 14 Aug 2006 23:12:41 +0200 [thread overview]
Message-ID: <200608142312.41851.max@nucleus.it> (raw)
Hi,
I couldn't keep pace during the day with all the mail that has been written,
so let me summarize what has been said.
Please forgive (and correct) me if I forget anything.
First of all several people think that the current ABI has shortcomings and
something has to be done.
Regarding my proposal for priv_data (I'm obviously biased here, but I'll try
to be objective):
- it offers the ability to store data out of reach to the userspace utilities
(for whatever housekeeping any match/targets needs);
- it can't offer persistent data to matches/targets.
<biased>
With this patch we can part with some really ugly tricks involving userspace
structure fields and kernel pointers and it would let us have O(1) matches
for quota, limit and any other match/target that needs cross match data.
</biased>
People may expect the second feature too, but it's just not possible with the
current infrastructure. The same infrastructure, making extensive use of
arrays whose size is determined before we call any module hook function,
leaves us in the cold for a really flexible solution for other problems too.
I've not yet read all the code involved, but, if we really need to, we may be
able to use a compat-like interface to maintain ABI compatibility with a new
netfilter core.
What people need from any new infrastructure:
- cleaner interface with clearer separation between kernel and user data;
- ability to dump internal state of matches/targets (this may not be in a
1-to-1 relation, so it may be tricky, do we need module state dumping?);
- ability to change chains/rules/matches without reinitializing everything;
- ability to change matches' state or configuration without reinitializing
everything;
- general infrastructure for common logic that is currently reinvented every
time (negation comes to mind, but I'm sure there are other things).
<biased>
Regarding user influence over state, especially where the number of states
doesn't match the number of matches involved, I'm not totally opposed to a
file-like way of exposing it. I agree that /proc is in a sorry state, but
configfs is there precisely for this purpose. Of course not everything can be
done this way and I wouldn't like to have complex data passed and parsed this
way.
We may need a new set of commands in iptables (should I call it iptables-ng?)
just for keeping this kind of data (realms, quota groups, conditions, etc.).
If we had a general way to keep collections of configurations, I'll be glad
to conform and use it.
</biased>
I think the current array oriented data structures won't allow us to add these
features. RCU lists come to mind. It sure is a step back in performance
(sparser access to memory and more memory fragmentation), but it may not be
that noticeable.
I think every match/target should expode:
- init;
- destroy;
- change;
- dump;
- restore.
Depending on the API change, dump and restore may melt in a single function.
The kernel should let any match:
- receive user supplied initialization data (mostly a rule definition) state
dumps (this calls for very careful planning and checking);
- send state dumps to userspace;
- keep private data for every match/target;
- keep collections of configurations common to matches in a module (every
module may keep it without netfilter core help, but if it becomes part of the
infrastructure it may be handled through the userspace ABI).
Am I forgetting anything?
Do you think any of these features are bugs?
Am I overseeing fatal difficulties related to what I wrote?
Please reply with your opinions. I'll wear my asbestos suite for the next
couple of days. :)
--
Saluti,
Massimiliano Hofer
next reply other threads:[~2006-08-14 21:12 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-14 21:12 Massimiliano Hofer [this message]
2006-08-15 0:00 ` new ABI Joakim Axelsson
2006-08-15 8:39 ` Amin Azez
2006-08-15 22:08 ` Massimiliano Hofer
2006-08-15 12:14 ` Simon Lodal
2006-08-15 22:57 ` Massimiliano Hofer
2006-08-18 14:14 ` Simon Lodal
2006-08-18 21:40 ` Massimiliano Hofer
2006-08-18 14:50 ` Amin Azez
2006-08-23 18:06 ` Sven Anders
2006-08-23 21:19 ` Massimiliano Hofer
2006-08-24 7:57 ` Sven Anders
2006-08-16 12:16 ` Joakim Axelsson
2006-08-16 12:29 ` Joakim Axelsson
2006-08-16 14:40 ` Joakim Axelsson
2006-08-18 13:06 ` Simon Lodal
2006-08-18 21:40 ` Massimiliano Hofer
2006-08-18 22:24 ` Massimiliano Hofer
2006-08-22 8:46 ` Jozsef Kadlecsik
2006-08-23 5:01 ` Patrick McHardy
2006-08-23 13:48 ` Joakim Axelsson
2006-08-24 9:20 ` Jozsef Kadlecsik
2006-08-24 13:48 ` Joakim Axelsson
2006-08-24 8:50 ` Jozsef Kadlecsik
2006-08-24 10:58 ` Massimiliano Hofer
2006-08-24 11:22 ` Jozsef Kadlecsik
2006-08-24 13:13 ` Massimiliano Hofer
2006-08-24 16:47 ` Patrick McHardy
2006-08-23 21:13 ` Massimiliano Hofer
2006-08-24 10:15 ` Jozsef Kadlecsik
2006-09-04 22:26 ` Massimiliano Hofer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200608142312.41851.max@nucleus.it \
--to=max@nucleus.it \
--cc=netfilter-devel@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.