Print this page
NEX-6864 cannot create functional link-based IPMP interface
NEX-7793 unable to add/remove interface with existing address to/from IPMP group
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
OS-161: Integrate IPMP changes

*** 16,28 **** --- 16,30 ---- * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ + /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2016 Nexenta Systems, Inc. * Copyright (c) 2016, Chris Fraire <cfraire@me.com>. */ #ifndef _LIBIPADM_IMPL_H #define _LIBIPADM_IMPL_H
*** 30,39 **** --- 32,42 ---- #ifdef __cplusplus extern "C" { #endif #include <sys/socket.h> + #include <sys/list.h> #include <net/if.h> #include <libipadm.h> #include <libdladm.h> #include <ipadm_ipmgmt.h> #include <inet/tunables.h>
*** 50,59 **** --- 53,67 ---- #define IPV6_MIN_MTU 1280 /* rfc2460 */ /* mask for flags accepted by libipadm functions */ #define IPADM_COMMON_OPT_MASK (IPADM_OPT_ACTIVE | IPADM_OPT_PERSIST) + typedef enum { + IPADM_ADD_IPMP, + IPADM_REMOVE_IPMP + } ipadm_ipmp_op_t; + /* Opaque library handle */ struct ipadm_handle { int iph_sock; /* socket to interface */ int iph_sock6; /* socket to interface */ int iph_door_fd; /* door descriptor to ipmgmtd */
*** 152,170 **** const char *); extern ipadm_status_t i_ipadm_delete_addr(ipadm_handle_t, ipadm_addrobj_t); extern int i_ipadm_strioctl(int, int, char *, int); extern boolean_t i_ipadm_is_loopback(const char *); extern boolean_t i_ipadm_is_vni(const char *); - extern boolean_t i_ipadm_is_ipmp(ipadm_handle_t, const char *); - extern boolean_t i_ipadm_is_under_ipmp(ipadm_handle_t, const char *); extern boolean_t i_ipadm_is_6to4(ipadm_handle_t, char *); extern boolean_t i_ipadm_validate_ifname(ipadm_handle_t, const char *); extern ipadm_status_t ipadm_errno2status(int); extern int ipadm_door_call(ipadm_handle_t, void *, size_t, void **, size_t, boolean_t); extern boolean_t ipadm_if_enabled(ipadm_handle_t, const char *, sa_family_t); /* ipadm_ndpd.c */ extern ipadm_status_t i_ipadm_create_ipv6addrs(ipadm_handle_t, ipadm_addrobj_t, uint32_t); extern ipadm_status_t i_ipadm_delete_ipv6addrs(ipadm_handle_t, --- 160,178 ---- const char *); extern ipadm_status_t i_ipadm_delete_addr(ipadm_handle_t, ipadm_addrobj_t); extern int i_ipadm_strioctl(int, int, char *, int); extern boolean_t i_ipadm_is_loopback(const char *); extern boolean_t i_ipadm_is_vni(const char *); extern boolean_t i_ipadm_is_6to4(ipadm_handle_t, char *); extern boolean_t i_ipadm_validate_ifname(ipadm_handle_t, const char *); extern ipadm_status_t ipadm_errno2status(int); extern int ipadm_door_call(ipadm_handle_t, void *, size_t, void **, size_t, boolean_t); extern boolean_t ipadm_if_enabled(ipadm_handle_t, const char *, sa_family_t); + extern ipadm_status_t i_ipadm_call_ipmgmtd(ipadm_handle_t, void *, + size_t, nvlist_t **); /* ipadm_ndpd.c */ extern ipadm_status_t i_ipadm_create_ipv6addrs(ipadm_handle_t, ipadm_addrobj_t, uint32_t); extern ipadm_status_t i_ipadm_delete_ipv6addrs(ipadm_handle_t,
*** 185,194 **** --- 193,204 ---- extern ipadm_status_t i_ipadm_get_persist_propval(ipadm_handle_t, ipadm_prop_desc_t *, char *, uint_t *, const void *); /* ipadm_addr.c */ + extern ipadm_status_t i_ipadm_active_addr_info(ipadm_handle_t, const char *, + ipadm_addr_info_t **, uint32_t, int64_t); extern void i_ipadm_init_addr(ipadm_addrobj_t, const char *, const char *, ipadm_addr_type_t); extern ipadm_status_t i_ipadm_merge_addrprops_from_nvl(nvlist_t *, nvlist_t *, const char *); extern ipadm_status_t i_ipadm_get_addrobj(ipadm_handle_t, ipadm_addrobj_t);
*** 228,237 **** --- 238,253 ---- sa_family_t, boolean_t *); extern ipadm_status_t i_ipadm_delete_ifobj(ipadm_handle_t, const char *, sa_family_t, boolean_t); extern int i_ipadm_get_lnum(const char *); + extern ipadm_status_t i_ipadm_set_groupname_active(ipadm_handle_t, + const char *, const char *); + extern ipadm_status_t i_ipadm_get_groupname_active(ipadm_handle_t, + const char *, char *, size_t); + extern boolean_t i_ipadm_is_under_ipmp(ipadm_handle_t, const char *); + extern boolean_t i_ipadm_is_ipmp(ipadm_handle_t, const char *); #ifdef __cplusplus } #endif #endif /* _LIBIPADM_IMPL_H */