Difference between "struct addr" and "struct addrs"

Sergey Kandaurov pluknet at gmail.com
Tue Mar 6 08:03:58 UTC 2012


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.

-- 
wbr,
pluknet


More information about the freebsd-net mailing list