1*36589d6bSRobert Mustacchi /* 2*36589d6bSRobert Mustacchi * This file and its contents are supplied under the terms of the 3*36589d6bSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*36589d6bSRobert Mustacchi * You may only use this file in accordance with the terms of version 5*36589d6bSRobert Mustacchi * 1.0 of the CDDL. 6*36589d6bSRobert Mustacchi * 7*36589d6bSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*36589d6bSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*36589d6bSRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*36589d6bSRobert Mustacchi */ 11*36589d6bSRobert Mustacchi 12*36589d6bSRobert Mustacchi /* 13*36589d6bSRobert Mustacchi * Copyright 2015 Joyent, Inc. 14*36589d6bSRobert Mustacchi */ 15*36589d6bSRobert Mustacchi 16*36589d6bSRobert Mustacchi #ifndef _LIBVARPD_CLIENT_H 17*36589d6bSRobert Mustacchi #define _LIBVARPD_CLIENT_H 18*36589d6bSRobert Mustacchi 19*36589d6bSRobert Mustacchi /* 20*36589d6bSRobert Mustacchi * varpd interfaces 21*36589d6bSRobert Mustacchi */ 22*36589d6bSRobert Mustacchi 23*36589d6bSRobert Mustacchi #include <sys/types.h> 24*36589d6bSRobert Mustacchi #include <stdint.h> 25*36589d6bSRobert Mustacchi #include <sys/mac.h> 26*36589d6bSRobert Mustacchi #include <sys/overlay_target.h> 27*36589d6bSRobert Mustacchi 28*36589d6bSRobert Mustacchi #ifdef __cplusplus 29*36589d6bSRobert Mustacchi extern "C" { 30*36589d6bSRobert Mustacchi #endif 31*36589d6bSRobert Mustacchi 32*36589d6bSRobert Mustacchi typedef struct __varpd_client_handle varpd_client_handle_t; 33*36589d6bSRobert Mustacchi typedef struct __varpd_client_prop_handle varpd_client_prop_handle_t; 34*36589d6bSRobert Mustacchi 35*36589d6bSRobert Mustacchi typedef struct varpd_client_cache_entry { 36*36589d6bSRobert Mustacchi struct ether_addr vcp_mac; 37*36589d6bSRobert Mustacchi uint16_t vcp_flags; 38*36589d6bSRobert Mustacchi struct in6_addr vcp_ip; 39*36589d6bSRobert Mustacchi uint16_t vcp_port; 40*36589d6bSRobert Mustacchi } varpd_client_cache_entry_t; 41*36589d6bSRobert Mustacchi 42*36589d6bSRobert Mustacchi /* 43*36589d6bSRobert Mustacchi * We just use the values from the kernel for now. 44*36589d6bSRobert Mustacchi */ 45*36589d6bSRobert Mustacchi #define LIBVARPD_PROP_SIZEMAX OVERLAY_PROP_SIZEMAX 46*36589d6bSRobert Mustacchi #define LIBVARPD_PROP_NAMELEN OVERLAY_PROP_NAMELEN 47*36589d6bSRobert Mustacchi 48*36589d6bSRobert Mustacchi extern int libvarpd_c_create(varpd_client_handle_t **, const char *); 49*36589d6bSRobert Mustacchi extern void libvarpd_c_destroy(varpd_client_handle_t *); 50*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_create(varpd_client_handle_t *, datalink_id_t, 51*36589d6bSRobert Mustacchi const char *, uint64_t *); 52*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_activate(varpd_client_handle_t *, uint64_t); 53*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_destroy(varpd_client_handle_t *, uint64_t); 54*36589d6bSRobert Mustacchi 55*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_nprops(varpd_client_handle_t *, uint64_t, uint_t *); 56*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_handle_alloc(varpd_client_handle_t *, uint64_t, 57*36589d6bSRobert Mustacchi varpd_client_prop_handle_t **); 58*36589d6bSRobert Mustacchi extern void libvarpd_c_prop_handle_free(varpd_client_prop_handle_t *); 59*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_info_fill(varpd_client_prop_handle_t *, uint_t); 60*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_info_fill_by_name(varpd_client_prop_handle_t *, 61*36589d6bSRobert Mustacchi const char *); 62*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_info(varpd_client_prop_handle_t *, const char **, 63*36589d6bSRobert Mustacchi uint_t *, uint_t *, const void **, uint32_t *, 64*36589d6bSRobert Mustacchi const mac_propval_range_t **); 65*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_get(varpd_client_prop_handle_t *, void *, 66*36589d6bSRobert Mustacchi uint32_t *); 67*36589d6bSRobert Mustacchi extern int libvarpd_c_prop_set(varpd_client_prop_handle_t *, const void *, 68*36589d6bSRobert Mustacchi uint32_t); 69*36589d6bSRobert Mustacchi 70*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_lookup(varpd_client_handle_t *, datalink_id_t, 71*36589d6bSRobert Mustacchi uint64_t *); 72*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_target_mode(varpd_client_handle_t *, uint64_t, 73*36589d6bSRobert Mustacchi uint_t *, uint_t *); 74*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_cache_flush(varpd_client_handle_t *, uint64_t); 75*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_cache_delete(varpd_client_handle_t *, uint64_t, 76*36589d6bSRobert Mustacchi const struct ether_addr *); 77*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_cache_get(varpd_client_handle_t *, uint64_t, 78*36589d6bSRobert Mustacchi const struct ether_addr *, varpd_client_cache_entry_t *); 79*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_cache_set(varpd_client_handle_t *, uint64_t, 80*36589d6bSRobert Mustacchi const struct ether_addr *, const varpd_client_cache_entry_t *); 81*36589d6bSRobert Mustacchi 82*36589d6bSRobert Mustacchi typedef int (*varpd_client_cache_f)(varpd_client_handle_t *, uint64_t, 83*36589d6bSRobert Mustacchi const struct ether_addr *, const varpd_client_cache_entry_t *, void *); 84*36589d6bSRobert Mustacchi extern int libvarpd_c_instance_cache_walk(varpd_client_handle_t *, uint64_t, 85*36589d6bSRobert Mustacchi varpd_client_cache_f, void *); 86*36589d6bSRobert Mustacchi 87*36589d6bSRobert Mustacchi 88*36589d6bSRobert Mustacchi #ifdef __cplusplus 89*36589d6bSRobert Mustacchi } 90*36589d6bSRobert Mustacchi #endif 91*36589d6bSRobert Mustacchi 92*36589d6bSRobert Mustacchi #endif /* _LIBVARPD_CLIENT_H */ 93