$NetBSD: patch-ac,v 1.4 2006/01/22 01:31:43 joerg Exp $ --- dissipate2/siputil.cpp.orig 2005-06-21 12:14:49.000000000 +0100 +++ dissipate2/siputil.cpp 2005-11-24 16:47:03.000000000 +0000 @@ -5,6 +5,9 @@ #include #include #include +#if defined (__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) +#include +#endif #include #include #include @@ -13,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +30,8 @@ /* max number of network interfaces*/ #define MAX_IF 5 +#ifdef __linux__ + /* Path to the route entry in proc filesystem */ #define PROCROUTE "/proc/net/route" @@ -41,6 +47,8 @@ #define SIOCGIFCOUNT 0x8935 #endif +#endif /* not Linux */ + char iface[16]; @@ -62,6 +70,7 @@  */ char *getdefaultdev() { +#ifdef __linux__ FILE *fp = fopen( PROCROUTE, "r"); char buff[4096], gate_addr[128], net_addr[128]; char mask_addr[128]; @@ -85,19 +94,49 @@ return iface; } fclose(fp); + /* didn't find a default gateway */ return NULL; +#else + return ""; +#endif /* Linux */ } void findFqdn( void ) { - int sock, err, if_count, i, j = 0; + int if_count, i, j = 0; +#if !(defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)) + int sock, err; struct ifconf netconf; char buffer[32*MAX_IF]; - char if_name[10][21]; - char if_addr[10][21]; +#endif + char if_name[MAX_IF][21]; + char if_addr[MAX_IF][21]; char *default_ifName; +#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) + struct ifaddrs *ifp, *oifp; + + if(getifaddrs(&ifp) < 0 ) + printf( "Error with getifaddrs(): %i.\n", errno ); + oifp=ifp; /* save ifp */ + for (if_count = 0; ifp != NULL; ifp = ifp->ifa_next) { + if(ifp->ifa_addr->sa_family != AF_INET) continue; + + if ( strncmp( ifp->ifa_name, "lo", 2 ) != 0 ) { + if(j == MAX_IF) printf( "Error: cannot handle more than %d interfaces.\n",MAX_IF); + else + { + strncpy( if_name[j], ifp->ifa_name, 20); + strncpy( if_addr[j], inet_ntoa(((struct sockaddr_in *)ifp->ifa_addr)->sin_addr ), 20); + j++; + } + } + if_count++; + } + if (oifp != NULL) freeifaddrs(oifp); + +#else /* not FreeBSD or NetBSD or DragonFly */ netconf.ifc_len = 32 * MAX_IF; netconf.ifc_buf = buffer; sock=socket( PF_INET, SOCK_DGRAM, 0 ); @@ -105,9 +144,11 @@ if ( err < 0 ) printf( "Error in ioctl: %i.\n", errno ); close( sock ); if_count = netconf.ifc_len / 32; +#endif printf( "Found %i interfaces.\n", if_count ); //#test +#if !(defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)) if ( if_count == 1 ) { strncpy( if_name[j], netconf.ifc_req[0].ifr_name, 20 ); strncpy( if_addr[j], inet_ntoa(((struct sockaddr_in*)(&netconf.ifc_req[0].ifr_addr))->sin_addr), 20 ); @@ -122,6 +163,8 @@ } } } +#endif /* not FreeBSD or NetBSD or DragonFly */ + if( j == 1 ) { dissipate_our_fqdn = strdup( if_addr[0] ); } else {