On 03/17/2016 05:45 PM, Matthias Schiffer wrote:
Hi, this is the second take of my netlink API patches. As mentioned before, the netlink API is superior to the current debugfs API in many aspects:
- debugfs is broken (see PATCH 1 for details)
- Netlink is namespace-aware, and can be used in unprivileged containers without problems
- Netlink packets are more machine-readable than text files, and can be easily extended without potentially breaking userspace
- On older kernels, seq_file can't fall back to vmalloc if kmalloc fails, which often leads to OOM when reading "originators" in large meshes, as the whole file must fit into a single buffer
Of course, are also a few downsides; when the data is too big to fit into a single netlink packet, the provided data may be inconsistent (entries may be missing or duplicated.) This will happen in large meshes only, and be improbable in any case.
The patches have been developed on top of the netns patchset, but should be applicable independently (maybe with minor changes.)
All netlink queries returning lists of any kind can only be used with NLM_F_DUMP queries, so that arbitrarity large responses are possible (split across multiple packets if necessary.)
At the moment, the following debugfs files have corresponding netlink APIs:
- routing_algos
- neighbors
- originators
- transtable_global
- transtable_local
- (hardinterfaces for a softif can be queried)
The following files are still missing:
- gateways
- bla_claim_table
- bla_backbone_table
- dat_cache
- nc_nodes
Obviously, documentation is also a TODO. Comments about the API design are very welcome...
Regards, Matthias
And here is the new version of the PoC userspace tool. Build with:
gcc -o batnl batnl.c $$(pkg-config --cflags --libs libnl-1) -Wall