+#ifdef SYS_DARWIN
+/*****************************************************************************
+ * GetNetIntfCtrl : get parent controller for network interface
+ *****************************************************************************/
+static int GetNetIntfCtrl( const char *psz_interface,
+ io_object_t *ctrl_service )
+{
+ mach_port_t port;
+ kern_return_t ret;
+ io_object_t intf_service;
+ io_iterator_t intf_iterator;
+
+ /* get port for IOKit communication */
+ if( ( ret = IOMasterPort( MACH_PORT_NULL, &port ) ) != KERN_SUCCESS )
+ {
+ return( -1 );
+ }
+
+ /* look up the IOService object for the interface */
+ ret = IOServiceGetMatchingServices( port, IOBSDNameMatching( port, 0,
+ psz_interface ), &intf_iterator );
+ if( ret != KERN_SUCCESS )
+ {
+ return( -1 );
+ }
+
+ intf_service = IOIteratorNext( intf_iterator );
+ if( intf_service == NULL )
+ {
+ return( -1 );
+ }
+
+ ret = IORegistryEntryGetParentEntry( intf_service,
+ kIOServicePlane,
+ ctrl_service );
+ IOObjectRelease( intf_service );
+ if( ret != KERN_SUCCESS )
+ {
+ return( -1 );
+ }
+
+ return( 0 );
+}
+
+#elif defined( WIN32 ) && !defined( UNDER_CE )
+/*****************************************************************************
+ * GetAdapterInfo : gets some informations about the interface using NETBIOS
+ *****************************************************************************/
+static int GetAdapterInfo( int i_adapter, char *psz_string )
+{
+ struct ASTAT
+ {
+ ADAPTER_STATUS adapt;
+ NAME_BUFFER psz_name[30];
+ } Adapter;
+
+ /* Reset the LAN adapter so that we can begin querying it */
+ NCB Ncb;
+ memset( &Ncb, 0, sizeof ( Ncb ) );
+ Ncb.ncb_command = NCBRESET;
+ Ncb.ncb_lana_num = i_adapter;
+
+ if( Netbios( &Ncb ) != NRC_GOODRET )
+ {
+//X intf_ErrMsg( "network error: reset returned %i", Ncb.ncb_retcode );
+ return -1;
+ }
+
+ /* Prepare to get the adapter status block */
+ memset( &Ncb, 0, sizeof( Ncb ) ) ; /* Initialization */
+ Ncb.ncb_command = NCBASTAT;
+ Ncb.ncb_lana_num = i_adapter;
+
+ strcpy( (char *)Ncb.ncb_callname, "*" );
+
+ memset( &Adapter, 0, sizeof ( Adapter ) );
+ Ncb.ncb_buffer = ( unsigned char * ) &Adapter;
+ Ncb.ncb_length = sizeof ( Adapter );
+
+ /* Get the adapter's info and, if this works, return it in standard,
+ * colon-delimited form. */
+ if ( Netbios( &Ncb ) == 0 )
+ {
+ sprintf ( psz_string, "%02X:%02X:%02X:%02X:%02X:%02X",
+ (int) ( Adapter.adapt.adapter_address[0] ),
+ (int) ( Adapter.adapt.adapter_address[1] ),
+ (int) ( Adapter.adapt.adapter_address[2] ),
+ (int) ( Adapter.adapt.adapter_address[3] ),
+ (int) ( Adapter.adapt.adapter_address[4] ),
+ (int) ( Adapter.adapt.adapter_address[5] ) );
+
+//X intf_WarnMsg( 2, "network: found MAC address %s", psz_string );
+
+ return 0;
+ }
+ else
+ {
+//X intf_ErrMsg( "network error: ASTAT returned %i", Ncb.ncb_retcode );
+ return -1;
+ }
+}
+#endif /* WIN32 */