[lib-client] Disable use_iface() if glibc not used

setsockopt(... SO_BINDTODEVICE ...) does not work on OpenBSD. The only
way to force an interface seems to specify its IP address and to use
setsockopt(... IPPROTO_IP, IP_MULTICAST_IF ...). See the code of ping
(-I option).

libowlps-client now builds on OpenBSD!
This commit is contained in:
Matteo Cypriani 2011-06-23 17:00:00 +02:00
parent 95b9ea30bf
commit b3cfa2ea08
1 changed files with 8 additions and 0 deletions

View File

@ -5,6 +5,8 @@
#include <unistd.h>
#include <string.h>
#include <sys/param.h>
#define DEBUG
@ -44,6 +46,7 @@ int owlclient_create_trx_socket(const char *const dest_ip,
/* Selects 'iface' as sending interface for the socket 'sockfd'. */
void owlclient_use_iface(const int sockfd, const char *const iface)
{
#ifdef __GLIBC__
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, iface,
strlen(iface) + 1) == -1)
{
@ -52,6 +55,11 @@ void owlclient_use_iface(const int sockfd, const char *const iface)
perror("") ;
fprintf(stderr, "Sending through the default interface.\n") ;
}
#else // __GLIBC__
fprintf(stderr, "Cannot select interface %s to send the packet:"
" this option is currently GNU libc-specific.\n"
"Sending through the default interface.\n", iface) ;
#endif // __GLIBC__
}