lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <885896af0711200009idcc8bd9q781888efe84dc49c@mail.gmail.com>
Date:	Tue, 20 Nov 2007 09:09:33 +0100
From:	Giacomo <delleceste@...il.com>
To:	netdev@...r.kernel.org
Subject: Get the IP address of an interface with a given name

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 netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ