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