interface cleanup

Anders Persson anders at cs.ucla.edu
Thu Jul 21 18:07:16 GMT 2005


Hi all,

My name is Anders Persson and I am working on a Google SoC project in  
which I am trying to remove reference made from user land to kernel- 
only data structures. Currently I am going through netstat and  
rewriting some of the functions to rely on sysctl rather than kvm.  
The hope is to completely remove kvm from netstat, and parts that  
solely depend on it, like the core dump analysis would be factored  
out and moved to a more suitable place (kgdb?)

  In many cases this works quite well, and the public interfaces  
contain most of the information needed. In some cases certain pieces  
of information are not available. A specific example would be routing  
information, where I try to rely on routing messages to obtain the  
info. However, one piece of information that is missing is the ref  
count (rt_refcnt in rtentry). If this is one piece of information  
deemed necessary, what is the general opinion of including that in  
rt_msghdr? (Just a side note, I noticed there is both rtm_use and  
rtm_rmx.rmx_pksent in rt_msghdr, however when dumping an rtentry, the  
pksent metric of the entry is assigned to rtm_use and rmx_pksent is  
left unassigned, I assume this is done to avoid breaking legacy code?)

The parts of netstat I am currently looking at are multicast routing  
info and netgraph. For both of these parts there seem to be no public  
interfaces to query for information. However, mrouting in IPv4  
provide access to the internal structures which partially avoids  
using kvm (in one case you sysctl returns a list of mem locations so  
you have to do a sysctl/kvm combo to get the stuff you want),  
however, the structs that are returned contains pointers to other  
internal data such as ifnet's. There already exists some basic ioctl 
() request to obtain partial information, but I was thinking of  
extending the publicly available information by either adding a few  
more ioctl request, or extending the information available via  
sysctl. I guess the more complex task would be to efficiently dump  
the routing cache with bandwidth meters etc. Any thoughts about this?

I have not had time to go through netgraph enough yet, but does  
anyone have some ideas how to avoid using kvm to obtain netgraph info?

Thanks a lot,
Anders


More information about the freebsd-net mailing list