1178168Sqingli/*	$KAME: radix_mpath.h,v 1.10 2004/11/06 15:44:28 itojun Exp $	*/
2178168Sqingli
3178168Sqingli/*
4178168Sqingli * Copyright (C) 2001 WIDE Project.
5178168Sqingli * All rights reserved.
6178168Sqingli *
7178168Sqingli * Redistribution and use in source and binary forms, with or without
8178168Sqingli * modification, are permitted provided that the following conditions
9178168Sqingli * are met:
10178168Sqingli * 1. Redistributions of source code must retain the above copyright
11178168Sqingli *    notice, this list of conditions and the following disclaimer.
12178168Sqingli * 2. Redistributions in binary form must reproduce the above copyright
13178168Sqingli *    notice, this list of conditions and the following disclaimer in the
14178168Sqingli *    documentation and/or other materials provided with the distribution.
15178168Sqingli * 3. Neither the name of the project nor the names of its contributors
16178168Sqingli *    may be used to endorse or promote products derived from this software
17178168Sqingli *    without specific prior written permission.
18178168Sqingli *
19178168Sqingli * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20178168Sqingli * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21178168Sqingli * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22178168Sqingli * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23178168Sqingli * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24178168Sqingli * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25178168Sqingli * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26178168Sqingli * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27178168Sqingli * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28178168Sqingli * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29178168Sqingli * SUCH DAMAGE.
30178168Sqingli * THE AUTHORS DO NOT GUARANTEE THAT THIS SOFTWARE DOES NOT INFRINGE
31178168Sqingli * ANY OTHERS' INTELLECTUAL PROPERTIES. IN NO EVENT SHALL THE AUTHORS
32178168Sqingli * BE LIABLE FOR ANY INFRINGEMENT OF ANY OTHERS' INTELLECTUAL
33178168Sqingli * PROPERTIES.
34178168Sqingli */
35178168Sqingli/* $FreeBSD$ */
36178168Sqingli
37178168Sqingli#ifndef _NET_RADIX_MPATH_H_
38178168Sqingli#define	_NET_RADIX_MPATH_H_
39178168Sqingli
40178168Sqingli#ifdef _KERNEL
41178168Sqingli/*
42178168Sqingli * Radix tree API with multipath support
43178168Sqingli */
44178168Sqinglistruct route;
45178168Sqinglistruct rtentry;
46178168Sqinglistruct sockaddr;
47178168Sqingliint	rn_mpath_capable(struct radix_node_head *);
48178168Sqinglistruct radix_node *rn_mpath_next(struct radix_node *);
49179426Sqingliu_int32_t rn_mpath_count(struct radix_node *);
50178168Sqinglistruct rtentry *rt_mpath_matchgate(struct rtentry *, struct sockaddr *);
51178168Sqingliint rt_mpath_conflict(struct radix_node_head *, struct rtentry *,
52178168Sqingli    struct sockaddr *);
53179426Sqinglivoid rtalloc_mpath_fib(struct route *, u_int32_t, u_int);
54178888Sjulian#define rtalloc_mpath(_route, _hash) rtalloc_mpath_fib((_route), (_hash), 0)
55178168Sqinglistruct radix_node *rn_mpath_lookup(void *, void *,
56178168Sqingli    struct radix_node_head *);
57178168Sqingliint rt_mpath_deldup(struct rtentry *, struct rtentry *);
58178168Sqingliint	rn4_mpath_inithead(void **, int);
59178168Sqingliint	rn6_mpath_inithead(void **, int);
60178168Sqingli
61178168Sqingli#endif
62178168Sqingli
63178168Sqingli#endif /* _NET_RADIX_MPATH_H_ */
64