
const
   IF_NAMESIZE = 16;

type
   Pif_nameindex = ^_if_nameindex;
   _if_nameindex = record
        if_index : dword;
        if_name : PAnsiChar;
     end;
   P_if_nameindex = ^_if_nameindex;

   Const
     IFF_UP = $1;
     IFF_BROADCAST = $2;
     IFF_DEBUG = $4;
     IFF_LOOPBACK = $8;
     IFF_POINTOPOINT = $10;
     IFF_NOTRAILERS = $20;
     IFF_RUNNING = $40;
     IFF_NOARP = $80;
     IFF_PROMISC = $100;
     IFF_ALLMULTI = $200;
     IFF_MASTER = $400;
     IFF_SLAVE = $800;
     IFF_MULTICAST = $1000;
     IFF_PORTSEL = $2000;
     IFF_AUTOMEDIA = $4000;

type
   Pifaddr = ^ifaddr;
   ifaddr = record
        ifa_addr : sockaddr;
        ifa_ifu : record
            case longint of
               0 : ( ifu_broadaddr : sockaddr );
               1 : ( ifu_dstaddr : sockaddr );
            end;
        ifa_ifp : Pointer; // Piface;
        ifa_next : Pifaddr;
     end;

   Pifmap = ^ifmap;
   ifmap = record
        mem_start : dword;
        mem_end : dword;
        base_addr : word;
        irq : byte;
        dma : byte;
        port : byte;
     end;


const
   IFHWADDRLEN = 6;
   IFNAMSIZ = IF_NAMESIZE;

type
   Pifreq = ^ifreq;
   ifreq = record
        ifr_ifrn : record
            case longint of
               0 : ( ifrn_name : array[0..(IFNAMSIZ)-1] of AnsiChar );
            end;
        ifr_ifru : record
            case longint of
               0 : ( ifru_addr : sockaddr );
               1 : ( ifru_dstaddr : sockaddr );
               2 : ( ifru_broadaddr : sockaddr );
               3 : ( ifru_netmask : sockaddr );
               4 : ( ifru_hwaddr : sockaddr );
               5 : ( ifru_flags : smallint );
               6 : ( ifru_ivalue : longint );
               7 : ( ifru_mtu : longint );
               8 : ( ifru_map : ifmap );
               9 : ( ifru_slave : array[0..(IFNAMSIZ)-1] of AnsiChar );
               10 : ( ifru_newname : array[0..(IFNAMSIZ)-1] of AnsiChar );
               11 : ( ifru_data : __caddr_t );
            end;
     end;

   Pifconf = ^ifconf;
   ifconf = record
        ifc_len : longint;
        ifc_ifcu : record
            case longint of
               0 : ( ifcu_buf : __caddr_t );
               1 : ( ifcu_req : Pifreq );
            end;
     end;


function if_nametoindex(__ifname:PAnsiChar):dword;cdecl;external clib name 'if_nametoindex';
function if_indextoname(__ifindex:dword; __ifname:PAnsiChar):PAnsiChar;cdecl;external clib name 'if_indextoname';
function if_nameindex:Pif_nameindex;cdecl;external clib name 'if_nameindex';
procedure if_freenameindex(__ptr:Pif_nameindex);cdecl;external clib name 'if_freenameindex';

{ ---------------------------------------------------------------------
    Borland compatibility types
  ---------------------------------------------------------------------}

Type
  TIfNameIndex = _if_nameindex;
  PIfNameIndex = ^TIfNameIndex;

  TIfAddr = ifaddr;
  TIFreq = ifreq;
