#include <stdlib.h>

#include "interface.h"
#include "unpifi.h"


int
get_min_mtu( void )
{
  struct ifi_info *info, *n;
  int min_mtu_set = 0;
  int min_mtu = 0;

  info = Get_ifi_info(AF_INET, 0);

  for(n = info; n; n = n->ifi_next)
    {
      if(!min_mtu_set) 
        {
          min_mtu = n->ifi_mtu;
          min_mtu_set = 1;
        }
      else if( n->ifi_mtu < min_mtu )
        {
          min_mtu = n->ifi_mtu;
        }
    }

  free_ifi_info(info);
  return min_mtu;
}

struct ifi_info *
get_first_multicast_interface ( void )
{
   struct ifi_info *info, *n;

   info =  Get_ifi_info(AF_INET, 0);

   for(n = info; n; n = n->ifi_next)
    {
      /* The interface must be UP, not loopback and multicast enabled */
      if(! (n->ifi_flags & IFF_UP) )
        {
          continue;
        }

      if( n->ifi_flags & IFF_LOOPBACK )
        {
          continue;
        } 

      if(! (n->ifi_flags & IFF_MULTICAST) )
        {
          continue;
        }

      return n;
    }
   return NULL;
}

struct ifi_info *
get_first_interface ( void )
{
   return Get_ifi_info(AF_INET, 0); 
}

struct ifi_info *
get_interface ( char *name )
{
   struct ifi_info *info, *n;

   info =  Get_ifi_info(AF_INET, 0);

   for(n = info; n; n = n->ifi_next)
    {
       if(!strcmp( name, n->ifi_name))
         {
           return n;
         }
    }

   return NULL;
}


syntax highlighted by Code2HTML, v. 0.9.1