xref: /illumos-gate/usr/src/lib/libdladm/common/libdloverlay.h (revision faa2068d5f60927511f588cf120b905d985371d0)
136589d6bSRobert Mustacchi /*
236589d6bSRobert Mustacchi  * This file and its contents are supplied under the terms of the
336589d6bSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
436589d6bSRobert Mustacchi  * You may only use this file in accordance with the terms of version
536589d6bSRobert Mustacchi  * 1.0 of the CDDL.
636589d6bSRobert Mustacchi  *
736589d6bSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
836589d6bSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
936589d6bSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
1036589d6bSRobert Mustacchi  */
1136589d6bSRobert Mustacchi 
1236589d6bSRobert Mustacchi /*
1336589d6bSRobert Mustacchi  * Copyright (c) 2015 Joyent, Inc.
14*faa2068dSAndy Fiddaman  * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
1536589d6bSRobert Mustacchi  */
1636589d6bSRobert Mustacchi 
1736589d6bSRobert Mustacchi #ifndef _LIBDLOVERLAY_H
1836589d6bSRobert Mustacchi #define	_LIBDLOVERLAY_H
1936589d6bSRobert Mustacchi 
2036589d6bSRobert Mustacchi /*
2136589d6bSRobert Mustacchi  * libdladm Overlay device routines
2236589d6bSRobert Mustacchi  */
2336589d6bSRobert Mustacchi 
2436589d6bSRobert Mustacchi #include <libdladm.h>
2536589d6bSRobert Mustacchi #include <libdladm_impl.h>
2636589d6bSRobert Mustacchi #include <sys/overlay.h>
2736589d6bSRobert Mustacchi 
2836589d6bSRobert Mustacchi #ifdef __cplusplus
2936589d6bSRobert Mustacchi extern "C" {
3036589d6bSRobert Mustacchi #endif
3136589d6bSRobert Mustacchi 
32*faa2068dSAndy Fiddaman typedef struct dladm_overlay_attr {
33*faa2068dSAndy Fiddaman 	datalink_id_t		oa_linkid;
34*faa2068dSAndy Fiddaman 	char			oa_name[MAXLINKNAMELEN];
35*faa2068dSAndy Fiddaman 	char			oa_encap[OVERLAY_PROP_SIZEMAX];
36*faa2068dSAndy Fiddaman 	char			oa_search[OVERLAY_PROP_SIZEMAX];
37*faa2068dSAndy Fiddaman 	uint64_t		oa_vid;
38*faa2068dSAndy Fiddaman 	uint32_t		oa_flags;
39*faa2068dSAndy Fiddaman } dladm_overlay_attr_t;
40*faa2068dSAndy Fiddaman 
4136589d6bSRobert Mustacchi #define	DLADM_OVERLAY_F_DROP	0x0001
4236589d6bSRobert Mustacchi #define	DLADM_OVERLAY_F_DEFAULT	0xf000
4336589d6bSRobert Mustacchi 
4436589d6bSRobert Mustacchi typedef struct dladm_overlay_point {
4536589d6bSRobert Mustacchi 	uint_t			dop_dest;
4636589d6bSRobert Mustacchi 	struct ether_addr	dop_mac;
4736589d6bSRobert Mustacchi 	uint16_t		dop_flags;
4836589d6bSRobert Mustacchi 	struct in6_addr		dop_ip;
4936589d6bSRobert Mustacchi 	uint16_t		dop_port;
5036589d6bSRobert Mustacchi } dladm_overlay_point_t;
5136589d6bSRobert Mustacchi 
5236589d6bSRobert Mustacchi typedef struct dladm_overlay_status {
5336589d6bSRobert Mustacchi 	boolean_t	dos_degraded;
5436589d6bSRobert Mustacchi 	char		dos_fmamsg[256];
5536589d6bSRobert Mustacchi } dladm_overlay_status_t;
5636589d6bSRobert Mustacchi 
5736589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_create(dladm_handle_t, const char *,
5836589d6bSRobert Mustacchi     const char *, const char *, uint64_t, dladm_arg_list_t *, dladm_errlist_t *,
5936589d6bSRobert Mustacchi     uint32_t);
60*faa2068dSAndy Fiddaman extern dladm_status_t dladm_overlay_delete(dladm_handle_t, datalink_id_t,
61*faa2068dSAndy Fiddaman     uint32_t);
62*faa2068dSAndy Fiddaman extern dladm_status_t dladm_overlay_up(dladm_handle_t, datalink_id_t,
63*faa2068dSAndy Fiddaman     dladm_errlist_t *);
6436589d6bSRobert Mustacchi 
6536589d6bSRobert Mustacchi typedef void (*dladm_overlay_status_f)(dladm_handle_t, datalink_id_t,
6636589d6bSRobert Mustacchi     dladm_overlay_status_t *, void *);
6736589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_status(dladm_handle_t, datalink_id_t,
6836589d6bSRobert Mustacchi     dladm_overlay_status_f, void *);
6936589d6bSRobert Mustacchi 
7036589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_cache_flush(dladm_handle_t, datalink_id_t);
7136589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_cache_delete(dladm_handle_t, datalink_id_t,
7236589d6bSRobert Mustacchi     const struct ether_addr *);
7336589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_cache_set(dladm_handle_t, datalink_id_t,
7436589d6bSRobert Mustacchi     const struct ether_addr *, char *);
7536589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_cache_get(dladm_handle_t, datalink_id_t,
7636589d6bSRobert Mustacchi     const struct ether_addr *, dladm_overlay_point_t *);
7736589d6bSRobert Mustacchi 
7836589d6bSRobert Mustacchi #define	DLADM_OVERLAY_PROP_SIZEMAX	256
7936589d6bSRobert Mustacchi #define	DLADM_OVERLAY_PROP_NAMELEN	32
8036589d6bSRobert Mustacchi 
8136589d6bSRobert Mustacchi typedef struct __dladm_overlay_propinfo *dladm_overlay_propinfo_handle_t;
8236589d6bSRobert Mustacchi 
8336589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_prop_info(dladm_overlay_propinfo_handle_t,
8436589d6bSRobert Mustacchi     const char **, uint_t *, uint_t *, const void **, uint32_t *,
8536589d6bSRobert Mustacchi     const mac_propval_range_t **);
8636589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_get_prop(dladm_handle_t, datalink_id_t,
8736589d6bSRobert Mustacchi     dladm_overlay_propinfo_handle_t, void *buf, size_t *bufsize);
8836589d6bSRobert Mustacchi 
8936589d6bSRobert Mustacchi typedef int (*dladm_overlay_prop_f)(dladm_handle_t, datalink_id_t,
9036589d6bSRobert Mustacchi     dladm_overlay_propinfo_handle_t, void *);
9136589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_walk_prop(dladm_handle_t, datalink_id_t,
9236589d6bSRobert Mustacchi     dladm_overlay_prop_f, void *arg, dladm_errlist_t *);
9336589d6bSRobert Mustacchi 
9436589d6bSRobert Mustacchi typedef int (*dladm_overlay_cache_f)(dladm_handle_t, datalink_id_t,
9536589d6bSRobert Mustacchi     const struct ether_addr *, const dladm_overlay_point_t *, void *);
9636589d6bSRobert Mustacchi extern dladm_status_t dladm_overlay_walk_cache(dladm_handle_t, datalink_id_t,
9736589d6bSRobert Mustacchi     dladm_overlay_cache_f, void *);
9836589d6bSRobert Mustacchi 
9936589d6bSRobert Mustacchi /*
10036589d6bSRobert Mustacchi  * Some day we'll want to support being able to set properties after creation.
10136589d6bSRobert Mustacchi  * If we do, the following strawman API might serve us well.
10236589d6bSRobert Mustacchi  *
10336589d6bSRobert Mustacchi  * extern dladm_status_t dladm_overlay_prop_lookup(dladm_handle_t,
10436589d6bSRobert Mustacchi  *     datalink_id_t, const char *, dladm_overlay_propinfo_handle_t *);
10536589d6bSRobert Mustacchi  * extern void dladm_overlay_prop_handle_free(dladm_handle_t, datalink_id_t,
10636589d6bSRobert Mustacchi  *     dladm_overlay_propinfo_handle_t *);
10736589d6bSRobert Mustacchi  * extern dladm_status_t dladm_overlay_set_prop(dladm_handle_t, datalink_id_t,
10836589d6bSRobert Mustacchi  *     dladm_propinfo_handle_t, void *buf, size_t *bufsize);
10936589d6bSRobert Mustacchi  * extern dladm_status_t dladm_overlay_str_to_buf(dladm_handle_t, datalink_id_t,
11036589d6bSRobert Mustacchi  *     dladm_overlay_propinfo_handle_t *, const char *, void *, size_t *);
11136589d6bSRobert Mustacchi  * extern dladm_status_t dladm_overlay_buf_to_str(dladm_handle_t, datalink_id_t,
11236589d6bSRobert Mustacchi  *     dladm_overlay_propinfo_handle_t *, const void *, const size_t, char *,
11336589d6bSRobert Mustacchi  *     size_t *);
11436589d6bSRobert Mustacchi  */
11536589d6bSRobert Mustacchi 
11636589d6bSRobert Mustacchi #ifdef __cplusplus
11736589d6bSRobert Mustacchi }
11836589d6bSRobert Mustacchi #endif
11936589d6bSRobert Mustacchi 
12036589d6bSRobert Mustacchi #endif /* _LIBDLOVERLAY_H */
121