xref: /freebsd/sys/net/if_clone.h (revision 09f6ff4f)
1c398230bSWarner Losh /*-
251369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
351369649SPedro F. Giffuni  *
4f889d2efSBrooks Davis  * Copyright (c) 1982, 1986, 1989, 1993
5f889d2efSBrooks Davis  *	The Regents of the University of California.  All rights reserved.
6f889d2efSBrooks Davis  *
7f889d2efSBrooks Davis  * Redistribution and use in source and binary forms, with or without
8f889d2efSBrooks Davis  * modification, are permitted provided that the following conditions
9f889d2efSBrooks Davis  * are met:
10f889d2efSBrooks Davis  * 1. Redistributions of source code must retain the above copyright
11f889d2efSBrooks Davis  *    notice, this list of conditions and the following disclaimer.
12f889d2efSBrooks Davis  * 2. Redistributions in binary form must reproduce the above copyright
13f889d2efSBrooks Davis  *    notice, this list of conditions and the following disclaimer in the
14f889d2efSBrooks Davis  *    documentation and/or other materials provided with the distribution.
15fbbd9655SWarner Losh  * 3. Neither the name of the University nor the names of its contributors
16f889d2efSBrooks Davis  *    may be used to endorse or promote products derived from this software
17f889d2efSBrooks Davis  *    without specific prior written permission.
18f889d2efSBrooks Davis  *
19f889d2efSBrooks Davis  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20f889d2efSBrooks Davis  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21f889d2efSBrooks Davis  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22f889d2efSBrooks Davis  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23f889d2efSBrooks Davis  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24f889d2efSBrooks Davis  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25f889d2efSBrooks Davis  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26f889d2efSBrooks Davis  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27f889d2efSBrooks Davis  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28f889d2efSBrooks Davis  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29f889d2efSBrooks Davis  * SUCH DAMAGE.
30f889d2efSBrooks Davis  *
31f889d2efSBrooks Davis  *	From: @(#)if.h	8.1 (Berkeley) 6/10/93
32f889d2efSBrooks Davis  * $FreeBSD$
33f889d2efSBrooks Davis  */
34f889d2efSBrooks Davis 
35f889d2efSBrooks Davis #ifndef	_NET_IF_CLONE_H_
36f889d2efSBrooks Davis #define	_NET_IF_CLONE_H_
37f889d2efSBrooks Davis 
38f889d2efSBrooks Davis #ifdef _KERNEL
39f889d2efSBrooks Davis 
4009f6ff4fSMatt Macy #define IFC_NOGROUP 0x1
4109f6ff4fSMatt Macy 
4242a58907SGleb Smirnoff struct if_clone;
43f889d2efSBrooks Davis 
4442a58907SGleb Smirnoff /* Methods. */
4542a58907SGleb Smirnoff typedef int	ifc_match_t(struct if_clone *, const char *);
4642a58907SGleb Smirnoff typedef int	ifc_create_t(struct if_clone *, char *, size_t, caddr_t);
4742a58907SGleb Smirnoff typedef int	ifc_destroy_t(struct if_clone *, struct ifnet *);
48f889d2efSBrooks Davis 
4942a58907SGleb Smirnoff typedef int	ifcs_create_t(struct if_clone *, int, caddr_t);
5042a58907SGleb Smirnoff typedef void	ifcs_destroy_t(struct ifnet *);
51f889d2efSBrooks Davis 
5242a58907SGleb Smirnoff /* Interface cloner (de)allocating functions. */
5342a58907SGleb Smirnoff struct if_clone *
5442a58907SGleb Smirnoff 	if_clone_advanced(const char *, u_int, ifc_match_t, ifc_create_t,
5542a58907SGleb Smirnoff 		      ifc_destroy_t);
5642a58907SGleb Smirnoff struct if_clone *
5742a58907SGleb Smirnoff 	if_clone_simple(const char *, ifcs_create_t, ifcs_destroy_t, u_int);
58f889d2efSBrooks Davis void	if_clone_detach(struct if_clone *);
59f889d2efSBrooks Davis 
6042a58907SGleb Smirnoff /* Unit (de)allocating fucntions. */
61f889d2efSBrooks Davis int	ifc_name2unit(const char *name, int *unit);
62f889d2efSBrooks Davis int	ifc_alloc_unit(struct if_clone *, int *);
63f889d2efSBrooks Davis void	ifc_free_unit(struct if_clone *, int);
6409f6ff4fSMatt Macy const char *ifc_name(struct if_clone *);
6509f6ff4fSMatt Macy void ifc_flags_set(struct if_clone *, int flags);
6609f6ff4fSMatt Macy int ifc_flags_get(struct if_clone *);
67f889d2efSBrooks Davis 
68eaeb0c13SGleb Smirnoff #ifdef _SYS_EVENTHANDLER_H_
6942a58907SGleb Smirnoff /* Interface clone event. */
70f889d2efSBrooks Davis typedef void (*if_clone_event_handler_t)(void *, struct if_clone *);
71f889d2efSBrooks Davis EVENTHANDLER_DECLARE(if_clone_event, if_clone_event_handler_t);
7247bb65deSGleb Smirnoff #endif
73f889d2efSBrooks Davis 
7442a58907SGleb Smirnoff /* The below interfaces used only by net/if.c. */
7542a58907SGleb Smirnoff void	vnet_if_clone_init(void);
7642a58907SGleb Smirnoff int	if_clone_create(char *, size_t, caddr_t);
7742a58907SGleb Smirnoff int	if_clone_destroy(const char *);
7842a58907SGleb Smirnoff int	if_clone_list(struct if_clonereq *);
79c92a456bSHiroki Sato struct if_clone *if_clone_findifc(struct ifnet *);
80c92a456bSHiroki Sato void	if_clone_addgroup(struct ifnet *, struct if_clone *);
81f889d2efSBrooks Davis 
8242a58907SGleb Smirnoff /* The below interface used only by epair(4). */
8342a58907SGleb Smirnoff int	if_clone_destroyif(struct if_clone *, struct ifnet *);
84f889d2efSBrooks Davis 
85f889d2efSBrooks Davis #endif /* _KERNEL */
86f889d2efSBrooks Davis #endif /* !_NET_IF_CLONE_H_ */
87