1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29/*
30 *	Copyright (c) 1988, 1989 Apple Computer, Inc.
31 */
32
33#ifndef _NETAT_AT_DDP_BRT_H_
34#define _NETAT_AT_DDP_BRT_H_
35#include <sys/appleapiopts.h>
36#ifdef KERNEL_PRIVATE
37#ifdef __APPLE_API_OBSOLETE
38
39typedef struct {
40	int 				age_flag;
41	at_ifaddr_t			*ifID;
42	struct	etalk_addr		et_addr;
43	at_net_al			net;
44} ddp_brt_t;
45
46#define BRT_SWEEP_INT		(10 * PR_SLOWHZ)
47#define	BRT_BSIZ		 4	/* bucket size */
48#define	BRT_NB			16	/* number of buckets */
49#define	BRTSIZE			(BRT_BSIZ * BRT_NB)
50
51/* age_flag values */
52#define	BRT_EMPTY		0	/* the BRT entry is empty     */
53					/* (or aged out).             */
54#define	BRT_VALID		1	/* BRT entry contains valid   */
55					/* tuple 		      */
56#define	BRT_GETTING_OLD		2	/* BRT entry is a candidate   */
57					/* for aging		      */
58
59#define	BRT_HASH(a)   ((a) % BRT_NB)
60
61#define	BRT_LOOK(brt, dst_net) {				\
62	int n; 						\
63	brt = &at_ddp_brt[BRT_HASH(dst_net) * BRT_BSIZ];	\
64	for (n = 0 ; ; brt++) {		                        \
65		if (brt->net == dst_net) 			\
66			break; 					\
67		if (++n >= BRT_BSIZ) {                          \
68		        brt = NULL;                             \
69			break;                                  \
70		}                                               \
71	}                                                       \
72	}
73
74#define	NEW_BRT(brt, net) {					\
75	int n; 						\
76	brt = &at_ddp_brt[BRT_HASH(net) * BRT_BSIZ]; 		\
77	for (n = 0 ; ; brt++) { 		                \
78		if (brt->age_flag == BRT_EMPTY)			\
79			break; 					\
80		if (++n >= BRT_BSIZ) {				\
81		        brt = NULL;				\
82			break;                                  \
83		}                                               \
84        }                                                       \
85	}
86
87/* Best Router Cache */
88extern	ddp_brt_t	at_ddp_brt[BRTSIZE];
89
90#endif /* __APPLE_API_OBSOLETE */
91#endif /* KERNEL_PRIVATE */
92#endif /* _NETAT_AT_DDP_BRT_H_ */
93
94