ip_ire.h revision 44b099c4d944a196d124a02c7403ad891223139e
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1990 Mentat Inc. */
#ifndef _INET_IP_IRE_H
#define _INET_IP_IRE_H
#ifdef __cplusplus
extern "C" {
#endif
#define IP_CACHE_TABLE_SIZE 256
#define IP6_CACHE_TABLE_SIZE 256
/*
* We use the common modulo hash function. In ip_ire_init(), we make
* sure that the cache table size is always a power of 2. That's why
* we can use & instead of %. Also note that we try hard to make sure
* the lower bits of an address capture most info from the whole address.
* The reason being that since our hash table is probably a lot smaller
* than 2^32 buckets so the lower bits are the most important.
*/
((table_size) - 1))
/*
* To make a byte-order neutral hash for IPv6, just take all the
* bytes in the bottom 32 bits into account.
*/
/*
* This assumes that the ftable size is a power of 2.
* We include some high-order bytes to avoid all IRE_LOCALs in the same
* bucket for performance reasons.
*/
/*
* match parameter definitions for IRE lookup routines.
*/
/* don't match IRE_LOCALs from other */
/* zones or shared IREs */
/*
* We use atomics so that we get an accurate accounting on the ires.
* Otherwise we can't determine leaks correctly.
*/
#ifdef _KERNEL
struct ts_label_s;
struct nce_s;
/*
* structure for passing args between ire_ftable_lookup and ire_find_best_route
*/
typedef struct ire_ftable_args_s {
int ift_type;
const ts_label_t *ift_tsl;
int ift_flags;
extern void ip_ire_reclaim(void *);
extern int ip_mask_to_plen(ipaddr_t);
extern int ip_mask_to_plen_v6(const in6_addr_t *);
ip_stack_t *);
tsol_gc_t *, ip_stack_t *);
extern void ire_delete(ire_t *);
extern void ire_delete_v6(ire_t *);
/*
* ire_pref used to make sure we don't set up routing loops in the ire_dep
* chain.
*/
extern void ire_dep_delete_if_clone(ire_t *);
extern void ire_dep_incr_generation(ire_t *);
extern void ire_dep_remove(ire_t *);
extern void ire_dep_invalidate_generations(ire_t *);
extern void ire_flush_cache_v4(ire_t *, int);
extern void ire_flush_cache_v6(ire_t *, int);
ip_stack_t *, uint_t *);
uint_t *);
ip_stack_t *, uint_t *);
/* The different ire_recvfn functions */
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
ip_recv_attr_t *);
extern void irb_refhold(irb_t *);
extern void irb_refhold_locked(irb_t *);
extern void irb_refrele(irb_t *);
extern void irb_increment_generation(irb_t *);
extern void ire_refhold(ire_t *);
extern void ire_refhold_notr(ire_t *);
extern void ire_refhold_locked(ire_t *);
extern void ire_refrele(ire_t *);
extern void ire_refrele_notr(ire_t *);
extern void ire_make_condemned(ire_t *);
ire_t *, ip_stack_t *);
uint32_t, ip_stack_t *);
uint32_t, ip_stack_t *);
/* The different ire_sendfn functions */
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
ip_xmit_attr_t *, uint32_t *);
/* Different ire_postfragfn functions */
extern int ire_revalidate_nce(ire_t *);
const ts_label_t *, int);
zoneid_t, ip_stack_t *);
extern void ire_increment_generation(ire_t *);
extern void ire_rebind(ire_t *);
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _INET_IP_IRE_H */