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