Re: need for getifaddrs in uclibc

2008-01-05 Thread Mike Frysinger
On Thursday 08 November 2007, Jason Curl wrote:
 Then sysctl() is supposed to be the successor of ioctl(). UNP talks
 about using the routing sockets to get the information for each
 interface (sounds similar to netlink, but different enough).

from what i've seen on lkml, they're trying pretty hard to kill sysctl() since 
it just doesnt scale the way they need to
-mike


signature.asc
Description: This is a digitally signed message part.
___
uClibc mailing list
uClibc@uclibc.org
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Re: need for getifaddrs in uclibc

2008-01-05 Thread Mike Frysinger
On Saturday 10 November 2007, Khem Raj wrote:
 On Wed, Nov 07, 2007 at 05:45:23PM +0100, Natanael Copa wrote:
  Hi,
 
  Does anyone know a susv3/POSIX compliant way to list all ipv6
  interfaces? I bet there are no. ioctl(SIOCGIFCONF) ignores ipv6
  interfaces, I just tested.
 
  I suggest implementing a getifaddrs in uclibc, even if its not
  susv3/POSIX.

 here is one implementation based on glibc getifaddrs(). It should get
 compiled in when you have UCLIBC_USE_NETLINK enabled.

the netlink detection/assumption stuff should probably be scrubbed in favor of 
the have netflink define.

 Let me know if this is OK?

Natanael: get a chance to test this ?
-mike


signature.asc
Description: This is a digitally signed message part.
___
uClibc mailing list
uClibc@uclibc.org
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Re: need for getifaddrs in uclibc

2007-11-09 Thread Khem Raj
On Wed, Nov 07, 2007 at 05:45:23PM +0100, Natanael Copa wrote:
 Hi,
 
 Does anyone know a susv3/POSIX compliant way to list all ipv6
 interfaces? I bet there are no. ioctl(SIOCGIFCONF) ignores ipv6
 interfaces, I just tested.
 
 I suggest implementing a getifaddrs in uclibc, even if its not
 susv3/POSIX.

here is one implementation based on glibc getifaddrs(). It should get
compiled in when you have UCLIBC_USE_NETLINK enabled.

Let me know if this is OK?

-- 
Khem Raj
MontaVista Software Inc.
Implement getifaddr() function for uclibc.
This is enabled with UCLIBC_USE_NETLINK config option.

Index: uclibc/libc/inet/ifaddrs.c
===
--- uclibc.orig/libc/inet/ifaddrs.c
+++ uclibc/libc/inet/ifaddrs.c
@@ -38,6 +38,7 @@
 #include unistd.h
 
 #include netlinkaccess.h
+#include ifaddrs.h
 
 libc_hidden_proto(socket)
 libc_hidden_proto(close)
@@ -57,7 +58,6 @@ libc_hidden_proto(abort)
 
 
 #if __ASSUME_NETLINK_SUPPORT
-#if 0 /* unused code */
 /* struct to hold the data for one ifaddrs entry, so we can allocate
everything at once.  */
 struct ifaddrs_storage
@@ -74,8 +74,6 @@ struct ifaddrs_storage
   } addr, netmask, broadaddr;
   char name[IF_NAMESIZE + 1];
 };
-#endif /* unused code */
-
 
 void
 __netlink_free_handle (struct netlink_handle *h)
@@ -323,8 +321,6 @@ __netlink_open (struct netlink_handle *h
   return 0;
 }
 
-
-#if 0 /* unused code */
 /* We know the number of RTM_NEWLINK entries, so we reserve the first
# of entries for this type. All RTM_NEWADDR entries have an index
pointer to the RTM_NEWLINK entry.  To find the entry, create
@@ -562,7 +558,7 @@ getifaddrs (struct ifaddrs **ifap)
 		  if ((rta_payload + 1) = sizeof (ifas[ifa_index].name))
 			{
 			  ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name;
-			  *(char *) __mempcpy (ifas[ifa_index].name, rta_data,
+			  *(char *) mempcpy (ifas[ifa_index].name, rta_data,
 	   rta_payload) = '\0';
 			}
 		  break;
@@ -761,7 +757,7 @@ getifaddrs (struct ifaddrs **ifap)
 		  if (rta_payload + 1 = sizeof (ifas[ifa_index].name))
 			{
 			  ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name;
-			  *(char *) __mempcpy (ifas[ifa_index].name, rta_data,
+			  *(char *) mempcpy (ifas[ifa_index].name, rta_data,
 	   rta_payload) = '\0';
 			}
 		  else
@@ -872,6 +868,4 @@ freeifaddrs (struct ifaddrs *ifa)
 }
 #endif
 
-#endif /* unused code */
-
 #endif /* __ASSUME_NETLINK_SUPPORT */
Index: uclibc/libc/inet/netlinkaccess.h
===
--- uclibc.orig/libc/inet/netlinkaccess.h
+++ uclibc/libc/inet/netlinkaccess.h
@@ -61,14 +61,11 @@ struct netlink_handle
 };
 
 
-#if 0 /* unused code */
 #if __ASSUME_NETLINK_SUPPORT == 0
 extern int __no_netlink_support attribute_hidden;
 #else
 # define __no_netlink_support 0
 #endif
-#endif /* unused code */
-
 
 extern int __netlink_open (struct netlink_handle *h) attribute_hidden;
 extern void __netlink_close (struct netlink_handle *h) attribute_hidden;
Index: uclibc/include/ifaddrs.h
===
--- /dev/null
+++ uclibc/include/ifaddrs.h
@@ -0,0 +1,74 @@
+/* ifaddrs.h -- declarations for getting network interface addresses
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _IFADDRS_H
+#define _IFADDRS_H	1
+
+#include features.h
+#include sys/socket.h
+
+__BEGIN_DECLS
+
+/* The `getifaddrs' function generates a linked list of these structures.
+   Each element of the list describes one network interface.  */
+struct ifaddrs
+{
+  struct ifaddrs *ifa_next;	/* Pointer to the next structure.  */
+
+  char *ifa_name;		/* Name of this network interface.  */
+  unsigned int ifa_flags;	/* Flags as from SIOCGIFFLAGS ioctl.  */
+
+  struct sockaddr *ifa_addr;	/* Network address of this interface.  */
+  struct sockaddr *ifa_netmask; /* Netmask of this interface.  */
+  union
+  {
+/* At most one of the following two is valid.  If the IFF_BROADCAST
+   bit is set in `ifa_flags', then `ifa_broadaddr' is valid.  If the
+   IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid.
+   It is never 

Re: need for getifaddrs in uclibc

2007-11-07 Thread Natanael Copa

On Wed, 2007-11-07 at 19:39 +0100, Jason Curl wrote:
 Natanael Copa wrote:
  Hi,
 
  Does anyone know a susv3/POSIX compliant way to list all ipv6
  interfaces? I bet there are no. ioctl(SIOCGIFCONF) ignores ipv6
  interfaces, I just tested.

 What does ifconfig do in BusyBox? Does that do what you want?

talks directly to netlink, with is even more non portable.

 When I implemented something across multiple platforms only for IPv4 
 that was a real nightmare (Solaris, Linux, uClibc, FreeBSD, Cygwin).
  I suggest implementing a getifaddrs in uclibc, even if its not
  susv3/POSIX.

I checked around. if_nameindex will list all your network interfaces,
which gets me half the way. but I still havent found out how to get a
list of ipv6 addresses from a given device name.

-nc

___
uClibc mailing list
uClibc@uclibc.org
http://busybox.net/cgi-bin/mailman/listinfo/uclibc


Re: need for getifaddrs in uclibc

2007-11-07 Thread Jason Curl
Natanael Copa wrote:
 Hi,

 Does anyone know a susv3/POSIX compliant way to list all ipv6
 interfaces? I bet there are no. ioctl(SIOCGIFCONF) ignores ipv6
 interfaces, I just tested.
   
What does ifconfig do in BusyBox? Does that do what you want?

When I implemented something across multiple platforms only for IPv4 
that was a real nightmare (Solaris, Linux, uClibc, FreeBSD, Cygwin).
 I suggest implementing a getifaddrs in uclibc, even if its not
 susv3/POSIX.

 -nc

 ___
 uClibc mailing list
 uClibc@uclibc.org
 http://busybox.net/cgi-bin/mailman/listinfo/uclibc

   

___
uClibc mailing list
uClibc@uclibc.org
http://busybox.net/cgi-bin/mailman/listinfo/uclibc