On 2/15/17 8:25 PM, Andy Lutomirski wrote: > On Wed, Feb 15, 2017 at 7:18 PM, David Ahern <d...@cumulusnetworks.com> wrote: >> On 2/15/17 8:08 PM, Eric W. Biederman wrote: >>> David Ahern <d...@cumulusnetworks.com> writes: >>> >>>> On 2/14/17 12:21 AM, Eric W. Biederman wrote: >>>>>> in cases where bpf programs are looking at sockets and packets >>>>>> that belong to different netns, it could be useful to get an id >>>>>> that uniquely identify a netns within the whole system. >>>>> It could be useful but there is no unique namespace id. >>>>> >>>> >>>> Have you given thought to a unique namespace id? Networking tracepoints >>>> for example could really benefit from a unique id. >>> >>> An id from the perspective of a process in the initial instance of every >>> namespace is certainly possible. >>> >>> A truly unique id is just not maintainable. Think of the question how >>> do you assign every device in the world a rguaranteed unique ip address >>> without coordination, that is routable. It is essentially the same >>> problem. >>> >>> AKA it is theoretically possible and very expensive. It is much easier >>> and much more maintainable for identifiers to have scope and only be >>> unique within that scope. >> >> >> I don't mean unique in the entire world, I mean unique within a single >> system. >> >> Tracepoints are code based and have global scope. I would like to be >> able to correlate, for example, FIB lookups within a single network >> namespace. Having an id that I could filter on when collecting or match >> when dumping them goes a long way. > > Why wouldn't an id relative to your logging program work? Global ids > are problematic because they are incompatible with tools like CRIU. >
How would that work? To be specific with an example, I only want FIB lookups for network namespace "foo". The name "foo" only has meaning for iproute2, so I need something the kernel understands. Should that be a dev/inode match meaning the tracepoints contain the netns dev and inode? >From a perf perspective, the command line is like this: perf record -e fib:fib_table_lookup --filter="netns_dev == 3 && netns_ino == 4026531957" -a -g -- sleep 5 Cumbersome, but it would work if the tracepoints had netns_dev and netns_ino as variables. A single id would be better.