summaryrefslogtreecommitdiff
path: root/usr/src/lib/libipadm/common/libipadm.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libipadm/common/libipadm.h')
-rw-r--r--usr/src/lib/libipadm/common/libipadm.h46
1 files changed, 28 insertions, 18 deletions
diff --git a/usr/src/lib/libipadm/common/libipadm.h b/usr/src/lib/libipadm/common/libipadm.h
index 0ae9d89e4b..66e7888d2b 100644
--- a/usr/src/lib/libipadm/common/libipadm.h
+++ b/usr/src/lib/libipadm/common/libipadm.h
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
- * Copyright 2021, Tintri by DDN. All rights reserved.
+ * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
*/
#ifndef _LIBIPADM_H
#define _LIBIPADM_H
@@ -39,6 +39,8 @@ extern "C" {
#include <libnvpair.h>
#include <netinet/tcp.h>
#include <sys/stropts.h>
+#include <sys/list.h>
+#include <stddef.h>
#define IPADM_AOBJ_USTRSIZ 32
#define IPADM_AOBJSIZ (LIFNAMSIZ + IPADM_AOBJ_USTRSIZ)
@@ -206,27 +208,31 @@ typedef enum {
IFIS_DISABLED /* Interface has been disabled. */
} ipadm_if_state_t;
-/*
- * Declare ipadm_if_info_list_t as a container for ipadm_if_info_t.
- *
- * ipadm_if_info_t used to have a list pointer ifi_next for linking a number
- * of ipadm_if_info_t's together. Even though this linking wasn't used in the
- * data exchange between ipmgmtd and libipadm, this meant the structure wasn't
- * safe for passing through the door between 32bit and 64bit processes.
- */
+typedef list_t ipadm_ipmp_members_t;
+
+typedef struct {
+ list_node_t node;
+ char if_name[LIFNAMSIZ];
+} ipadm_ipmp_member_t;
+
+typedef enum {
+ IPADM_IF_CLASS_REGULAR,
+ IPADM_IF_CLASS_IPMP,
+ IPADM_IF_CLASS_VIRTUAL,
+ IPADM_IF_CLASS_UNKNOWN
+} ipadm_if_class_t;
+
typedef struct ipadm_if_info_s {
+ struct ipadm_if_info_s *ifi_next;
char ifi_name[LIFNAMSIZ]; /* interface name */
+ ipadm_if_class_t ifi_class; /* interface class */
ipadm_if_state_t ifi_state; /* see above */
uint_t ifi_cflags; /* current flags */
uint_t ifi_pflags; /* persistent flags */
+ ipadm_ipmp_members_t ifi_ipmp_cmembers; /* current IPMP members */
+ ipadm_ipmp_members_t ifi_ipmp_pmembers; /* persistent IPMP members */
} ipadm_if_info_t;
-typedef struct ipadm_if_info_list_s {
- struct ipadm_if_info_list_s *ifil_next;
- ipadm_if_info_t ifil_ifi;
-} ipadm_if_info_list_t;
-
-
/* ipadm_if_info_t flags */
#define IFIF_BROADCAST 0x00000001
#define IFIF_MULTICAST 0x00000002
@@ -293,11 +299,15 @@ extern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *,
uint32_t);
extern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t);
extern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *,
- ipadm_if_info_list_t **, uint32_t, int64_t);
-extern void ipadm_free_if_info(ipadm_if_info_list_t *);
+ ipadm_if_info_t **, uint32_t, int64_t);
+extern void ipadm_free_if_info(ipadm_if_info_t *);
extern ipadm_status_t ipadm_delete_if(ipadm_handle_t, const char *,
sa_family_t, uint32_t);
extern void ipadm_if_move(ipadm_handle_t, const char *);
+extern ipadm_status_t ipadm_add_ipmp_member(ipadm_handle_t, const char *,
+ const char *, uint32_t);
+extern ipadm_status_t ipadm_remove_ipmp_member(ipadm_handle_t, const char *,
+ const char *, uint32_t);
/*
* Address management functions
@@ -377,7 +387,7 @@ extern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *,
* miscellaneous helper functions.
*/
extern const char *ipadm_status2str(ipadm_status_t);
-extern int ipadm_str2nvlist(const char *, nvlist_t **, uint_t);
+extern ipadm_status_t ipadm_str2nvlist(const char *, nvlist_t **, uint_t);
extern size_t ipadm_nvlist2str(nvlist_t *, char *, size_t);
extern char *ipadm_proto2str(uint_t);
extern uint_t ipadm_str2proto(const char *);