#ifndef _S_INTERFACES_H
#define _S_INTERFACES_H
#include <net/if.h>
#include <net/if_dl.h>
#include <netinet/in.h>
#include <net/if_types.h>
#include "dynarray.h"
#define INDEX_BAD ((int)(-1))
typedef struct {
struct in6_addr addr;
int prefixlen;
int addr_flags;
struct in6_addr prefixmask;
struct in6_addr netaddr;
struct in6_addr router;
} inet6_addrinfo_t;
#define MAX_LINK_ADDR_LEN 16
typedef struct {
u_char addr[MAX_LINK_ADDR_LEN];
u_short index;
u_char alen;
u_char type;
} link_addr_t;
typedef struct {
char name[IFNAMSIZ + 1];
short flags;
u_char type;
dynarray_t inet;
link_addr_t link_address;
u_int32_t user_defined;
} interface_t;
typedef struct {
interface_t * list;
int count;
int size;
} interface_list_t;
int ifl_count(interface_list_t * list_p);
interface_t * ifl_at_index(interface_list_t * list_p, int i);
interface_t * ifl_find_name(interface_list_t * intface, const char * name);
interface_list_t * ifl_init();
void ifl_free(interface_list_t * * list_p);
interface_t * if_dup(interface_t * intface);
void if_free(interface_t * * if_p_p);
char * if_name(interface_t * if_p);
short if_flags(interface_t * if_p);
void if_setflags(interface_t * if_p, short flags);
void if_link_update(interface_t * if_p);
void if_link_copy(interface_t * dest,
const interface_t * source);
int if_ift_type(interface_t * if_p);
#endif _S_INTERFACES_H