Re: Get the IP address of an interface with a given name

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

 



On Nov 19 2007 14:57, Giacomo wrote:
>
> I have written a kernel function which needs to get the IP address
> of an active network interface given its name.

And why is that?

If you are trying to write a netfilter module, just use the 'in' or
'out' parameters.
If not, try posting to netdev@xxxxxxxxxxxxxxx instead.

> 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?
>
> -- actual implementation: ---
>
> /* returns in *addr the internet address having the name ifname */
> int get_ifaddr_by_name(const char *ifname, __u32 * addr)

Problematic: Does not handle anything besides IPv4.

> {
>         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

There is for_each_netdev().

>         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! */
> }
-
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