c793af95640863cd29868fc7c419c5d2496b207bsangeeta/*
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * CDDL HEADER START
c793af95640863cd29868fc7c419c5d2496b207bsangeeta *
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * The contents of this file are subject to the terms of the
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * Common Development and Distribution License (the "License").
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * You may not use this file except in compliance with the License.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta *
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * or http://www.opensolaris.org/os/licensing.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * See the License for the specific language governing permissions
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * and limitations under the License.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta *
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * When distributing Covered Code, include this CDDL HEADER in each
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * If applicable, add the following below this CDDL HEADER, with the
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * fields enclosed by brackets "[]" replaced with your own identifying
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * information: Portions Copyright [yyyy] [name of copyright owner]
c793af95640863cd29868fc7c419c5d2496b207bsangeeta *
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * CDDL HEADER END
c793af95640863cd29868fc7c419c5d2496b207bsangeeta */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta/*
bd670b35a010421b6e1a5536c34453a827007c81Erik Nordmark * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * Use is subject to license terms.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#ifndef _INET_IP_FTABLE_H
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#define _INET_IP_FTABLE_H
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#ifdef __cplusplus
c793af95640863cd29868fc7c419c5d2496b207bsangeetaextern "C" {
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#endif
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#ifdef _KERNEL
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#include <net/radix.h>
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#include <inet/common.h>
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#include <inet/ip.h>
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeetastruct rt_entry {
c793af95640863cd29868fc7c419c5d2496b207bsangeeta struct radix_node rt_nodes[2]; /* tree glue, and other values */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta /*
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * struct rt_entry must begin with a struct radix_node (or two!)
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * to a 'struct rt_entry *'
c793af95640863cd29868fc7c419c5d2496b207bsangeeta */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta struct rt_sockaddr rt_dst;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta /*
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * multiple routes to same dest/mask via varying gate/ifp are stored
c793af95640863cd29868fc7c419c5d2496b207bsangeeta * in the rt_irb bucket.
c793af95640863cd29868fc7c419c5d2496b207bsangeeta */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta irb_t rt_irb;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta};
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh/*
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh * vehicle for passing args through rn_walktree
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh *
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh * The comment below (and for other netstack_t references) refers
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh * to the fact that we only do netstack_hold in particular cases,
bd670b35a010421b6e1a5536c34453a827007c81Erik Nordmark * such as the references from open endpoints (ill_t and conn_t's
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh * pointers). Internally within IP we rely on IP's ability to cleanup e.g.
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh * ire_t's when an ill goes away.
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh */
c793af95640863cd29868fc7c419c5d2496b207bsangeetastruct rtfuncarg {
c793af95640863cd29868fc7c419c5d2496b207bsangeeta pfv_t rt_func;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta char *rt_arg;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta uint_t rt_match_flags;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta uint_t rt_ire_type;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta ill_t *rt_ill;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta zoneid_t rt_zoneid;
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dh ip_stack_t *rt_ipst; /* Does not have a netstack_hold */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta};
c793af95640863cd29868fc7c419c5d2496b207bsangeetaint rtfunc(struct radix_node *, void *);
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeetatypedef struct rt_entry rt_t;
c793af95640863cd29868fc7c419c5d2496b207bsangeetatypedef struct rtfuncarg rtf_t;
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeetastruct ts_label_s;
f4b3ec61df05330d25f55a36b975b4d7519fdeb1dhextern void ire_delete_host_redirects(ipaddr_t, ip_stack_t *);
c793af95640863cd29868fc7c419c5d2496b207bsangeetaextern irb_t *ire_get_bucket(ire_t *);
c793af95640863cd29868fc7c419c5d2496b207bsangeetaextern uint_t ifindex_lookup(const struct sockaddr *, zoneid_t);
c793af95640863cd29868fc7c419c5d2496b207bsangeetaextern int ipfil_sendpkt(const struct sockaddr *, mblk_t *, uint_t, zoneid_t);
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
2679e103d269b88075b69f9a0bbcad3404e31eddsowminiextern void irb_refhold_rn(struct radix_node *);
2679e103d269b88075b69f9a0bbcad3404e31eddsowminiextern void irb_refrele_rn(struct radix_node *);
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#endif /* _KERNEL */
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#ifdef __cplusplus
c793af95640863cd29868fc7c419c5d2496b207bsangeeta}
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#endif
c793af95640863cd29868fc7c419c5d2496b207bsangeeta
c793af95640863cd29868fc7c419c5d2496b207bsangeeta#endif /* _INET_IP_FTABLE_H */