Simple question on ip address monitoring

Thomas Graf tgraf at infradead.org
Fri Jun 15 13:04:22 EDT 2012


On Fri, Jun 15, 2012 at 11:32:47AM -0400, Brett Ciphery wrote:
> [Simple question on ip address monitoring] On 15/06/2012 (Fri 10:05) Manthei, Mark wrote:
> 
> > I have a simple use case but I still haven't found how to accomplish this:
> > 
> > I want to loop through all known interface cards and collect information.
> > I have figured out how to get basic info (interface name, MAC address) but I am unable to get the IP address.
> > 
> > I thought the following would obtain the IP but appears to get the MAC address:
> > 
> >                      // now do ip address stuff with address cache
> >                         struct rtnl_link *pAddrLink = rtnl_link_get( pLinkCache, idx );
> >                         if(pAddrLink)
> >                         {
> >                            addr = rtnl_link_get_addr(pAddrLink);
> >                            int addressguess = nl_addr_guess_family(addr);
> >                            std::cout << "addr2 guess: " << addressguess << std::endl;
> > 
> > 
> > 
> >                            nl_addr2str( addr,  buf,  128 );
> >                            std::cout << " ipaddress: " << buf << std::endl;
> >                         }
> > 
> > 
> > Is there an example I'm missing that might shed some light on how to accomplish this?
> 
> You could refer to the src/nl-addr-list.c program -- the function you'll
> need to make use of is rtnl_addr_get_local().
> 
> Perhaps allocate/populate an addr cache, set a filter on the ifindex
> matching the interface you're interested in, and then use
> nl_cache_foreach_filter to loop over the IP addresses of the interface.

Yes, that's exactly how you do it. See nl_cache_foreach() and ass Brett points
out. There are several examples in src/



More information about the libnl mailing list