Get the IP address of an interface with a given name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Good morning.

 I have written a kernel function which needs to get the IP address of
an active network interface
 given its name.

 The actual implementation i have done is like this
 but i suspect this does not always work.
 Is there any API already provided by the kernel to do the same?

 Thanks a lot

 Giacomo

 -- actual implementation: ---

 /* returns in *addr the internet address having the name ifname */
 int get_ifaddr_by_name(const char *ifname, __u32 * addr)
 {
         struct net_device *pnet_device;
         struct in_device *pin_device;
         struct in_ifaddr* inet_ifaddr;

         read_lock_bh(&dev_base_lock);
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
         pnet_device = dev_base;
 #else
         pnet_device = first_net_device();
 #endif
         while (pnet_device != NULL)
         {
                 if ((netif_running(pnet_device))
                                 && (pnet_device->ip_ptr != NULL)
                                 && (strcmp(pnet_device->name, ifname) == 0))
                 {
                         pin_device =
                                 (struct in_device *) pnet_device->ip_ptr;
                         inet_ifaddr = pin_device->ifa_list;
                         if(inet_ifaddr == NULL)
                         {
                                 printk("ifa_list is null!\n");
                                 break;
                         }
                         /* ifa_local: ifa_address is the remote point in ppp */
                         *addr = (inet_ifaddr->ifa_local);
                           read_unlock_bh(&dev_base_lock);
                         return 1;
                 }
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
                 pnet_device = pnet_device->next;
 #else
                 pnet_device = next_net_device(pnet_device);
 #endif

         }

         read_unlock_bh(&dev_base_lock);
         return -1;              /* address not found! */
 }

-- 
Giacomo S.
http://www.giacomos.it

- - - - - - - - - - - - - - - - - - - - - -

IPFIREwall (http://www.giacomos.it/ipfire) viene presentato
all'Universita` degli Studi di Udine, il 28 ottobre, in occasione del
Linux Day 2006:
http://iglu.cc.uniud.it/linuxday

- - - - - - - - - - - - - - - - - - - - - -

 . ''  `.
:   :'    :
 `.  ` '
    `- Debian GNU/Linux -- The power of freedom
        http://www.debian.org
-
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux