diff --git a/examples/osgcluster/broadcaster.cpp b/examples/osgcluster/broadcaster.cpp index dbf3b5318..79e1eeafe 100644 --- a/examples/osgcluster/broadcaster.cpp +++ b/examples/osgcluster/broadcaster.cpp @@ -68,6 +68,13 @@ Broadcaster::Broadcaster( void ) { +#if defined (__linux) || defined(__CYGWIN__) + _ifr_name = "eth0"; +#elif defined(__sun) + _ifr_name = "hme0"; +#elif !defined (WIN32) + _ifr_name = "ef0"; +#endif _port = 0; _initialized = false; _buffer = 0L; @@ -128,19 +135,14 @@ bool Broadcaster::init( void ) #if !defined (WIN32) || defined(__CYGWIN__) struct ifreq ifr; #endif -#if defined (__linux) || defined(__CYGWIN__) - strcpy( ifr.ifr_name, "eth0" ); -#elif defined(__sun) - strcpy( ifr.ifr_name, "hme0" ); -#elif !defined (WIN32) - strcpy( ifr.ifr_name, "ef0" ); -#endif + strcpy( ifr.ifr_name, _ifr_name.c_str()); #if defined (WIN32) // get the server address saddr.sin_addr.s_addr = htonl(INADDR_BROADCAST); } #else if( (ioctl( _so, SIOCGIFBRDADDR, &ifr)) < 0 ) { + printf(" ifr.ifr_name = %s\n",ifr.ifr_name); perror( "Broadcaster::init() Cannot get Broadcast Address" ); return false; } @@ -161,6 +163,11 @@ bool Broadcaster::init( void ) return _initialized; } +void Broadcaster::setIFRName( const std::string& name ) +{ + _ifr_name = name; +} + void Broadcaster::setHost( const char *hostname ) { struct hostent *h; diff --git a/examples/osgcluster/broadcaster.h b/examples/osgcluster/broadcaster.h index 3e09bb197..8f9648cb3 100644 --- a/examples/osgcluster/broadcaster.h +++ b/examples/osgcluster/broadcaster.h @@ -21,6 +21,8 @@ #ifndef __BROADCASTER_H #define __BROADCASTER_H +#include + //////////////////////////////////////////////////////////// // Broadcaster.h // @@ -44,6 +46,10 @@ class Broadcaster // Set the buffer to be broadcast void setBuffer( void *buffer, const unsigned int buffer_size ); + // Set the IFRName i.e. eth0, will default to platform appropriate setting where possible. + void setIFRName( const std::string& name ); + + // Set a recipient host. If this is used, the Broadcaster // no longer broadcasts, but rather directs UDP packets at // host. @@ -56,6 +62,9 @@ class Broadcaster bool init( void ); private : + + std::string _ifr_name; + #if defined(WIN32) && !defined(__CYGWIN__) SOCKET _so; #else diff --git a/examples/osgcluster/osgcluster.cpp b/examples/osgcluster/osgcluster.cpp index c9ddf2cd8..1dccf2a67 100644 --- a/examples/osgcluster/osgcluster.cpp +++ b/examples/osgcluster/osgcluster.cpp @@ -488,6 +488,17 @@ int main( int argc, char **argv ) return 1; } + // objects for managing the broadcasting and receiving of camera packets. + Broadcaster bc; + Receiver rc; + + std::string ifrName; + if (arguments.read("--ifr-name", ifrName)) { bc.setIFRName(ifrName); } + + bc.setPort(static_cast(socketNumber)); + rc.setPort(static_cast(socketNumber)); + + // any option left unread are converted into errors to write out later. arguments.reportRemainingOptionsAsUnrecognized(); @@ -541,12 +552,6 @@ int main( int argc, char **argv ) CameraPacket *cp = new CameraPacket; - // objects for managing the broadcasting and receiving of camera packets. - Broadcaster bc; - Receiver rc; - - bc.setPort(static_cast(socketNumber)); - rc.setPort(static_cast(socketNumber)); bool masterKilled = false;