Difference between "struct addr" and "struct addrs"

hiren panchasara hiren.panchasara at gmail.com
Tue Mar 6 16:23:12 UTC 2012


On Tue, Mar 6, 2012 at 12:03 AM, Sergey Kandaurov <pluknet at gmail.com> wrote:

> On 6 March 2012 11:08, hiren panchasara <hiren.panchasara at gmail.com>
> wrote:
> >
> >
> > On Mon, Mar 5, 2012 at 10:57 PM, Sergey Kandaurov <pluknet at gmail.com>
> wrote:
> >>
> >> struct ifaddr is the in-kernel representation of the interface address.
> >> In kernel each network interface consists of a linked list of interface
> >> addresses, described by ifaddr structures.
> >> See man ifnet(9): http://man.freebsd.org/ifnet
> >>
> >> struct ifaddrs is used in the userland BSD API getifaddrs(3). This
> >> interface
> >> is used to get interface addresses in userland programs. See how it is
> >> used in e.g. ifconfig(8) sources: /usr/src/sbin/ifconfig/ifconfig.c
> >> See man getifaddrs(3): http://man.freebsd.org/getifaddrs
> >
> > Thanks Sergey, appreciate your help.
> >
> > Are they connected in any way? Can I get one if I have another?
>
> Well, not strictly.
> getifaddrs() collects addresses on all network interfaces using
> sysctl interface to the routine table with NET_RT_IFLIST[L] argument.
> NET_RT_IFLIST[L] does what you would expect: it runs through the linked
> list of network interfaces and gathers all struct ifaddr on each of them.
> You can see how that works in /usr/src/sys/net/rtsock.c:sysctl_iflist().
> See also man sysctl(3) w.r.t. NET_RT_IFLIST / NET_RT_IFLISTL.
>

Thanks a bunch, Sergey!

This is *exactly* what I was looking for. :-)

Hiren


More information about the freebsd-net mailing list