# if_nameindex

## NAME



           if_nameindex, if_freenameindex - get network interface names and
           indexes
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <net/if.h>**
    
           **struct if_nameindex *if_nameindex(**_void_**);**
           **void if_freenameindex(struct if_nameindex ***_ptr_**);**
    


## DESCRIPTION



           The **if_nameindex**() function returns an array of _if_nameindex_
           structures, each containing information about one of the network
           interfaces on the local system.  The _if_nameindex_ structure
           contains at least the following entries:
    
               unsigned int if_index; /* Index of interface (1, 2, ...) */
               char        *if_name;  /* Null-terminated name ("eth0", etc.) */
    
           The _if_index_ field contains the interface index.  The _if_name_
           field points to the null-terminated interface name.  The end of
           the array is indicated by entry with _if_index_ set to zero and
           _if_name_ set to NULL.
    
           The data structure returned by **if_nameindex**() is dynamically
           allocated and should be freed using **if_freenameindex**() when no
           longer needed.
    


## RETURN VALUE



           On success, **if_nameindex**() returns pointer to the array; on error,
           NULL is returned, and _errno_ is set to indicate the error.
    


## ERRORS



           **if_nameindex**() may fail and set _errno_ if:
    
           **ENOBUFS**
                  Insufficient resources available.
    
           **if_nameindex**() may also fail for any of the errors specified for
           socket(2), bind(2), ioctl(2), getsockname(2), recvmsg(2),
           sendto(2), or malloc(3).
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **if_nameindex**(), **if_freenameindex**()   │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           POSIX.1-2008, RFC 3493.
    


## EXAMPLES



           The program below demonstrates the use of the functions described
           on this page.  An example of the output this program might produce
           is the following:
    
               $ **./a.out** ;
               1: lo
               2: wlan0
               3: em1
    
       **Program source**
           #include <net/if.h>
           #include <stdio.h>
           #include <stdlib.h>
           #include <unistd.h>
    
           int
           main(void)
           {
               struct if_nameindex *if_ni, *i;
    
               if_ni = if_nameindex();
               if (if_ni == NULL) {
                   perror("if_nameindex");
                   exit(EXIT_FAILURE);
               }
    
               for (i = if_ni; !(i->if_index == 0 && i->if_name == NULL); i++)
                   printf("%u: %s\n", i->if_index, i->if_name);
    
               if_freenameindex(if_ni);
    
               exit(EXIT_SUCCESS);
           }
    


* * *