Changeset View
Changeset View
Standalone View
Standalone View
sys/net/route/nhgrp_var.h
- This file was added.
| /*- | |||||
| * SPDX-License-Identifier: BSD-2-Clause-FreeBSD | |||||
| * | |||||
| * Copyright (c) 2020 Alexander V. Chernikov | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in the | |||||
| * documentation and/or other materials provided with the distribution. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |||||
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |||||
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * | |||||
| * $FreeBSD$ | |||||
| */ | |||||
| /* | |||||
| * This header file contains private definitions for the nexthop groups. | |||||
| * | |||||
| * Header is not intended to be included by the code external to the | |||||
| * routing subsystem. | |||||
| */ | |||||
| #ifndef _NET_ROUTE_NHGRP_VAR_H_ | |||||
| #define _NET_ROUTE_NHGRP_VAR_H_ | |||||
| /* nhgrp hash definition */ | |||||
| /* produce hash value for an object */ | |||||
| #define mpath_hash_obj(_obj) (hash_nhgrp(_obj)) | |||||
| /* compare two objects */ | |||||
| #define mpath_cmp(_one, _two) (cmp_nhgrp(_one, _two)) | |||||
| /* next object accessor */ | |||||
| #define mpath_next(_obj) (_obj)->nhg_priv_next | |||||
| struct nhgrp_priv { | |||||
| uint32_t nhg_idx; | |||||
| uint8_t nhg_nh_count; /* number of items in nh_weights */ | |||||
| uint8_t nhg_spare[3]; | |||||
| u_int nhg_refcount; /* use refcount */ | |||||
| u_int nhg_linked; /* refcount(9), == 2 if linked to the list */ | |||||
| struct nh_control *nh_control; /* parent control structure */ | |||||
| struct nhgrp_priv *nhg_priv_next; | |||||
| struct nhgrp_object *nhg; | |||||
| struct epoch_context nhg_epoch_ctx; /* epoch data for nhop */ | |||||
| struct weightened_nhop nhg_nh_weights[0]; | |||||
| }; | |||||
| #define _NHGRP_PRIV(_src) (&(_src)->nhops[(_src)->mp_size]) | |||||
| #define NHGRP_PRIV(_src) ((struct nhgrp_priv *)_NHGRP_PRIV(_src)) | |||||
| #define NHGRP_PRIV_CONST(_src) ((const struct nhgrp_priv *)_NHGRP_PRIV(_src)) | |||||
| /* nhgrp.c */ | |||||
| bool nhgrp_ctl_alloc_default(struct nh_control *ctl, int malloc_flags); | |||||
| struct nhgrp_priv *find_nhgrp(struct nh_control *ctl, const struct nhgrp_priv *key); | |||||
| int link_nhgrp(struct nh_control *ctl, struct nhgrp_priv *grp_priv); | |||||
| struct nhgrp_priv *unlink_nhgrp(struct nh_control *ctl, struct nhgrp_priv *key); | |||||
| #endif | |||||