+#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 );
+