## gsknetworkinterface

gsknetworkinterface — Obtain information about your local network interfaces.

## Synopsis

                        GskNetworkInterface;
                        GskNetworkInterfaceSet;
    enum                GskNetworkInterfaceFlags;
    GskNetworkInterfaceSet * gsk_network_interface_set_new  (GskNetworkInterfaceFlags flags);
    void                gsk_network_interface_set_destroy   (GskNetworkInterfaceSet *set);

## Description

These methods allow you to obtain information about the local network interfaces.

A network interface is abstract jargon for an ethernet card, that is, it's a device that transmits and receives packets. Or, it can be a virtual interface, like the loopback interface is. One other possibility is that the interface is an alias: this sort of trick is done to make a computer listen on two IP addresses.

The information returned by this function is a name for each interface (the same name as returned by ifconfig) and addresses, mostly the address used to connect to this device, ie your IP address (with port set to 0).

## Details

### GskNetworkInterface

    typedef struct {
      const char *ifname;

      /* whether this interface is "virtual" -- just connects back to this host */
      unsigned is_loopback : 1;

      /* whether this interface supports broadcasting. */
      unsigned supports_multicast : 1;

      /* whether this interface is receiving packets not intended for it. */
      unsigned is_promiscuous : 1;

      /* ip-address if the interface is up. */
      GskSocketAddress *address;

      /* if !is_loopback, this is the device's MAC address. */
      GskSocketAddress *hw_address;

      /* if is_point_to_point, this is the address of the other end of
       * the connection.
       */
      GskSocketAddress *p2p_address;

      /* if supports_broadcast, this is the broadcast address. */
      GskSocketAddress *broadcast;
    } GskNetworkInterface;

Information about a single network interface.

const char *`ifname`; | the name of the interface.
GskSocketAddress *`address`; | the IP address of the interface (with port set to 0).
GskSocketAddress *`hw_address`; | the ethernet address of the interface.
GskSocketAddress *`p2p_address`; | the remote IP address of a point-to-point connection.
GskSocketAddress *`broadcast`; | the broadcast IP address.

### GskNetworkInterfaceSet

    typedef struct {
      guint num_interfaces;
      GskNetworkInterface *interfaces;
    } GskNetworkInterfaceSet;

Information about a number of network interfaces.

guint `num_interfaces`; | the number of interfaces.
GskNetworkInterface *`interfaces`; | the interfaces.

### enum GskNetworkInterfaceFlags

    typedef enum
    {
      GSK_NETWORK_INTERFACE_UP			= (1<<0),
      GSK_NETWORK_INTERFACE_LOOPBACK		= (1<<1),
      GSK_NETWORK_INTERFACE_NON_LOOPBACK		= (1<<2),
      GSK_NETWORK_INTERFACE_HAS_BROADCAST		= (1<<3),
      GSK_NETWORK_INTERFACE_HAS_MULTICAST		= (1<<4)
    } GskNetworkInterfaceFlags;

Constraints governing which interfaces to return.

`GSK_NETWORK_INTERFACE_UP` | The interface must be up, ready to transmit and receive packets.
`GSK_NETWORK_INTERFACE_LOOPBACK` | The interface must be a loopback interface, a virtual interface, as opposed to a piece of hardware.
`GSK_NETWORK_INTERFACE_NON_LOOPBACK` | The interface must be a non-loopback interface, an actual piece of hardware.
`GSK_NETWORK_INTERFACE_HAS_BROADCAST` | The interface must have a broadcast address.
`GSK_NETWORK_INTERFACE_HAS_MULTICAST` | The interface must have a multicast support.

### gsk_network_interface_set_new ()

    GskNetworkInterfaceSet * gsk_network_interface_set_new  (GskNetworkInterfaceFlags flags);

Create a new list of interfaces, subject to the constraints given.

Note that the constraints must all be satified, so using GSK_NETWORK_INTERFACE_NO_LOOKBACK and GSK_NETWORK_INTERFACE_LOOKBACK will always return an empty set.

`flags` : | constraints on the interfaces to return. All the constraints must be satisfied.
Returns : | a newly allocated list of interfaces that must be freed with `gsk_network_interface_set_destroy()`.

### gsk_network_interface_set_destroy ()

    void                gsk_network_interface_set_destroy   (GskNetworkInterfaceSet *set);

Free the memory used by the list of interfaces.

`set` : | the list of interfaces to destroy.