1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-28 23:09:59 +02:00

./src/misc/netutils.c: GetMacAddress Darwin support

./src/libvlc.h: Default to en0 instead of eth0 under Darwin
This commit is contained in:
Jon Lech Johansen 2002-10-05 19:26:23 +00:00
parent 94b1b1ac67
commit 81478e4fe6
3 changed files with 105 additions and 4 deletions

View File

@ -1,6 +1,8 @@
0.5.0
Not released yet
* ./src/misc/netutils.c: GetMacAddress Darwin support
* ./src/libvlc.h: default to en0 instead of eth0 under Darwin
* ./plugins/dvdplay/access.c: use dvdplay after it has completed
initialization.
* ./configure.in: better detection of IPv6, fixed solaris handling.

View File

@ -2,7 +2,7 @@
* libvlc.h: main libvlc header
*****************************************************************************
* Copyright (C) 1998-2002 VideoLAN
* $Id: libvlc.h,v 1.17 2002/10/03 18:56:09 sam Exp $
* $Id: libvlc.h,v 1.18 2002/10/05 19:26:23 jlj Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
@ -398,7 +398,11 @@ vlc_module_begin();
add_integer( "channel-port", 6010, NULL,
CHAN_PORT_TEXT, CHAN_PORT_LONGTEXT );
add_integer( "mtu", 1500, NULL, MTU_TEXT, MTU_LONGTEXT );
#ifdef SYS_DARWIN
add_string( "iface", "en0", NULL, IFACE_TEXT, IFACE_LONGTEXT );
#else
add_string( "iface", "eth0", NULL, IFACE_TEXT, IFACE_LONGTEXT );
#endif
add_string( "iface-addr", "", NULL, IFACE_ADDR_TEXT, IFACE_ADDR_LONGTEXT );
add_integer( "program", 0, NULL,

View File

@ -2,7 +2,7 @@
* netutils.c: various network functions
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: netutils.c,v 1.73 2002/07/31 20:56:53 sam Exp $
* $Id: netutils.c,v 1.74 2002/10/05 19:26:23 jlj Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Benoit Steiner <benny@via.ecp.fr>
@ -10,6 +10,7 @@
* Xavier Marchesini <xav@alarue.net>
* Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
* Jon Lech Johansen <jon-vl@nanocrew.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -60,6 +61,12 @@
#include <sys/ioctl.h> /* ioctl() */
#endif
#ifdef SYS_DARWIN
#include <IOKit/IOKitLib.h>
#include <IOKit/network/IOEthernetInterface.h>
#include <IOKit/network/IOEthernetController.h>
#endif
#if defined( WIN32 ) /* tools to get the MAC adress from */
#include <windows.h> /* the interface under Windows */
#include <stdio.h>
@ -97,7 +104,10 @@ struct input_channel_t
* Local prototypes
*****************************************************************************/
static int GetMacAddress ( vlc_object_t *, int i_fd, char *psz_mac );
#ifdef WIN32
#ifdef SYS_DARWIN
static int GetNetIntfCtrl ( const char *psz_interface,
io_object_t *ctrl_service );
#elif defined( WIN32 )
static int GetAdapterInfo ( int i_adapter, char *psz_string );
#endif
@ -329,6 +339,47 @@ static int GetMacAddress( vlc_object_t *p_this, int i_fd, char *psz_mac )
return( 0 );
#elif defined( SYS_DARWIN )
char *psz_interface;
io_object_t ctrl_service;
CFTypeRef cfd_mac_address;
UInt8 ui_mac_address[kIOEthernetAddressSize];
if( !(psz_interface = config_GetPsz( p_this, "iface" )) )
{
msg_Err( p_this, "configuration variable iface empty" );
return( -1 );
}
if( GetNetIntfCtrl( psz_interface, &ctrl_service ) )
{
msg_Err( p_this, "GetNetIntfCtrl failed" );
return( -1 );
}
cfd_mac_address = IORegistryEntryCreateCFProperty( ctrl_service,
CFSTR(kIOMACAddress),
kCFAllocatorDefault,
0 );
IOObjectRelease( ctrl_service );
if( cfd_mac_address == NULL )
{
msg_Err( p_this, "IORegistryEntryCreateCFProperty failed" );
return( -1 );
}
CFDataGetBytes( cfd_mac_address,
CFRangeMake(0, kIOEthernetAddressSize),
ui_mac_address );
CFRelease( cfd_mac_address );
sprintf( psz_mac, "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
ui_mac_address[0], ui_mac_address[1],
ui_mac_address[2], ui_mac_address[3],
ui_mac_address[4], ui_mac_address[5] );
return( 0 );
#elif defined( WIN32 )
int i, i_ret = -1;
@ -362,7 +413,51 @@ static int GetMacAddress( vlc_object_t *p_this, int i_fd, char *psz_mac )
#endif
}
#ifdef WIN32
#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 )
/*****************************************************************************
* GetAdapterInfo : gets some informations about the interface using NETBIOS
*****************************************************************************/