interfaces.h   [plain text]


#ifndef _S_INTERFACES_H
#define _S_INTERFACES_H
/*
 * Copyright (c) 2003-2008 Apple Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */
/*
 * interfaces.h
 * - get the list of inet interfaces in the system
 */

#include <net/if.h>
#include <net/if_dl.h>
#include <netinet/in.h>
#include <net/if_types.h>

#include "dynarray.h"
#include "configthreads_types.h"

#define INDEX_BAD	((int)(-1))

/* Service-specific address info - this is used
 * to store address info in the service record
 */
typedef struct {
	ip6_addrinfo_list_t	addrs;
	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;

/*
 * Type: interface_t
 * Purpose:
 *   Enclose IP6 and link-level information for a particular
 *   interface.
 */
typedef struct {
    char 		name[IFNAMSIZ + 1]; /* eg. en0 */
    short		flags;
    u_char		type;	/* e.g. IFT_ETHER */
    link_addr_t		link_address;
    u_int32_t		user_defined;
} interface_t;

typedef struct {
    interface_t *	list;
    int			count;
    int			size;
} interface_list_t;

/*
 * Functions: ifl_*
 * Purpose:
 *   Interface list routines.
 */
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);

/*
 * Functions: if_*
 * Purpose:
 *   Interface-specific routines.
 */
interface_t *		if_dup(interface_t * intface); /* dup an entry */
void			if_free(interface_t * * if_p_p); /* free dup'd entry */
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