//
// Copyright (c) 2013, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 5 Jul 13 Brian Frank Creation
//
**
** Network interface which models name and IP addresses assigned
**
final const class IpInterface
{
//////////////////////////////////////////////////////////////////////////
// Lookup
//////////////////////////////////////////////////////////////////////////
**
** List the interfaces on this machine
**
native static IpInterface[] list()
**
** Find the interface bound to the given IP address. If multiple
** interfaces are bound to the address it is undefined which one is
** returned. If no interfaces are bound then return null or raise
** UnresolvedErr based on checked flag.
**
native static IpInterface? findByAddr(IpAddr addr, Bool checked := true)
**
** Find the interface by its name. If the interface is not found
** then return null or raise UnresolvedErr based on checked flag.
**
native static IpInterface? findByName(Str name, Bool checked := true)
**
** Private constructor.
**
internal new make() {}
//////////////////////////////////////////////////////////////////////////
// Identity
//////////////////////////////////////////////////////////////////////////
**
** Hash code is based on interface name and addresses
**
override native Int hash()
**
** Return string representation.
**
override native Str toStr()
**
** Equality is based on interface name and addresses
**
override native Bool equals(Obj? obj)
//////////////////////////////////////////////////////////////////////////
// Access
//////////////////////////////////////////////////////////////////////////
**
** Name of the interface
**
native Str name()
**
** Display name of the interface
**
native Str dis()
**
** Return list of IP addresses bound to this interface
**
native IpAddr[] addrs()
**
** Return list of all broadcast IP addresses bound to this interface
**
native IpAddr[] broadcastAddrs()
**
** Returns the network prefix length in bits for given address. This is also
** known as the subnet mask in the context of IPv4 addresses. Typical IPv4
** values would be 8 (255.0.0.0), 16 (255.255.0.0) or 24 (255.255.255.0).
**
native Int prefixSize(IpAddr addr)
**
** Return true if interface is up and running
**
native Bool isUp()
**
** Media Access Control (MAC) or physical address for this interface
** return null if address does not exist.
**
native Buf? hardwareAddr()
**
** Maximum transmission unit of interface
**
native Int mtu()
**
** Return true if interface supports multicast
**
native Bool supportsMulticast()
**
** Return true if point to point interface (PPP through modem)
**
native Bool isPointToPoint()
**
** Return true if a loopback interface
**
native Bool isLoopback()
}