2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/*
2N/A * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
2N/A */
2N/A#ifndef _LIBIPADM_H
2N/A#define _LIBIPADM_H
2N/A
2N/A#ifdef __cplusplus
2N/Aextern "C" {
2N/A#endif
2N/A
2N/A#include <stddef.h>
2N/A#include <sys/types.h>
2N/A#include <sys/socket.h>
2N/A#include <net/if.h>
2N/A#include <netdb.h>
2N/A#include <ifaddrs.h>
2N/A#include <libnvpair.h>
2N/A#include <netinet/tcp.h>
2N/A#include <sys/stropts.h>
2N/A#include <sys/list.h>
2N/A
2N/A#define IPADM_AOBJ_USTRSIZ 32
2N/A#define IPADM_AOBJSIZ (LIFNAMSIZ + IPADM_AOBJ_USTRSIZ)
2N/A#define IPADM_OWNERSIZ 16
2N/A#define MAXPROPVALLEN 512
2N/A#define LOOPBACK_IF "lo0"
2N/A
2N/A/* special timeout values for dhcp operations */
2N/A#define IPADM_DHCP_WAIT_DEFAULT (-1)
2N/A#define IPADM_DHCP_WAIT_FOREVER (-2)
2N/A/*
2N/A * Specifies that the string passed to ipadm_str2nvlist() is a string of comma
2N/A * separated names and that each name does not have values associated with it.
2N/A */
2N/A#define IPADM_NORVAL 0x00000001
2N/A
2N/A/* error codes */
2N/Atypedef enum {
2N/A IPADM_SUCCESS, /* No error occurred */
2N/A IPADM_FAILURE, /* Generic failure */
2N/A IPADM_INSUFF_AUTH, /* Insufficient user authorizations */
2N/A IPADM_PERM_DENIED, /* Permission denied */
2N/A IPADM_NO_BUFS, /* No Buffer space available */
2N/A IPADM_NO_MEMORY, /* Insufficient memory */
2N/A IPADM_BAD_ADDR, /* Invalid address */
2N/A IPADM_INVALID_IFID, /* Invalid interface id */
2N/A IPADM_BAD_PROTOCOL, /* Wrong protocol family for operation */
2N/A IPADM_DAD_FOUND, /* Duplicate address detected */
2N/A IPADM_OBJ_EXISTS, /* Object already exists */
2N/A IPADM_IF_EXISTS, /* Interface already exists */
2N/A IPADM_ADDROBJ_EXISTS, /* Address object already exists */
2N/A IPADM_ADDRCONF_EXISTS, /* Addrconf already in progress */
2N/A IPADM_NOSUCH_IF, /* Interface does not exist */
2N/A IPADM_GRP_NOTEMPTY, /* IPMP group non-empty on unplumb */
2N/A IPADM_INVALID_ARG, /* Invalid argument */
2N/A IPADM_INVALID_IFNAME, /* Invalid interface name */
2N/A IPADM_DLPI_FAILURE, /* Could not open DLPI link */
2N/A IPADM_DLPI_NOLINK, /* Datalink does not exist */
2N/A IPADM_DLADM_FAILURE, /* DLADM error encountered */
2N/A IPADM_PROP_UNKNOWN, /* Unknown property */
2N/A IPADM_VAL_OUT_OF_RANGE, /* Value is outside the allowed range */
2N/A IPADM_VAL_NOTEXISTS, /* Value does not exist */
2N/A IPADM_VAL_OVERFLOW, /* Number of values exceed the allowed limit */
2N/A IPADM_OBJ_NOTFOUND, /* Object not found */
2N/A IPADM_IF_INUSE, /* Interface already in use */
2N/A IPADM_ADDR_INUSE, /* Address alrelady in use */
2N/A IPADM_HOSTNAME_TO_MULTADDR, /* hostname maps to multiple IP addresses */
2N/A IPADM_CANNOT_ASSIGN_ADDR, /* Can't assign requested address */
2N/A IPADM_NDPD_NOT_RUNNING, /* in.ndpd not running */
2N/A IPADM_NDPD_TIMEOUT, /* Communication with in.ndpd timed out */
2N/A IPADM_NDPD_IO_FAILURE, /* I/O error with in.ndpd */
2N/A IPADM_CANNOT_START_DHCP, /* Cannot start dhcpagent */
2N/A IPADM_DHCP_IPC_FAILURE, /* Communication with dhcpagent failed */
2N/A IPADM_DHCP_INVALID_IF, /* DHCP client could not run on the interface */
2N/A IPADM_DHCP_IPC_TIMEOUT, /* Communication with dhcpagent timed out */
2N/A IPADM_TEMPORARY_OBJ, /* Permanent operation on temporary object */
2N/A IPADM_DAEMON_IPC_FAILURE, /* Cannot communicate with daemon */
2N/A IPADM_OP_DISABLE_OBJ, /* Operation on disable object */
2N/A IPADM_OP_NOTSUP, /* Operation not supported */
2N/A IPADM_INVALID_EXCH, /* Invalid data exchange with ipmgmtd */
2N/A IPADM_NOT_IPMPIF, /* Not an IPMP interface */
2N/A IPADM_NOSUCH_IPMPIF, /* No such IPMP interface exists */
2N/A IPADM_ALREADY_IN_GRP, /* Already in an IPMP group */
2N/A IPADM_NOSUCH_UNDERIF, /* No such underlying interface exists */
2N/A IPADM_NOT_IN_GROUP, /* Interface not in given IPMP group */
2N/A IPADM_IPMPIF_NOT_ENABLED, /* IPMP interface is not enabled */
2N/A IPADM_IPMPIF_DHCP_NOT_ENABLED, /* DHCP data address is not enabled */
2N/A IPADM_IF_NOT_FULLY_ENABLED, /* Interface could not be fully enabled */
2N/A /*
2N/A * IPADM_UNDERIF_APP_ADDRS: Underlying interface has addresses managed
2N/A * by external applications
2N/A */
2N/A IPADM_UNDERIF_APP_ADDRS,
2N/A /*
2N/A * IPADM_UNDERIF_DHCP_MANAGED: Underlying interface has addresses
2N/A * managed by dhcpagent(1M)
2N/A */
2N/A IPADM_UNDERIF_DHCP_MANAGED,
2N/A /*
2N/A * IPADM_UNDERIF_NDPD_MANAGED: Underlying interface has addresses
2N/A * managed by in.ndpd(1M)
2N/A */
2N/A IPADM_UNDERIF_NDPD_MANAGED,
2N/A /*
2N/A * IPADM_UNDERIF_UP_ADDRS: Underlying interface has addresses marked up
2N/A */
2N/A IPADM_UNDERIF_UP_ADDRS,
2N/A /*
2N/A * IPADM_IPMPIF_MISSING_AF: IPMP interface missing address families
2N/A * configured on underlying interface
2N/A */
2N/A IPADM_IPMPIF_MISSING_AF,
2N/A /*
2N/A * IPADM_ADDROBJ_NOT_CREATED : For one or more of the migrated data
2N/A * addresses in the legacy case, an address object could not be created.
2N/A */
2N/A IPADM_ADDROBJ_NOT_CREATED,
2N/A IPADM_ROUTE_NOTFOUND, /* Route not found */
2N/A IPADM_ROUTE_EXISTS, /* Route already exists */
2N/A IPADM_ROUTE_FAILURE, /* Failed to modify or delete a route */
2N/A IPADM_FROMGZ_ROUTE_FAILURE /* Cannot create fromgz route */
2N/A} ipadm_status_t;
2N/A
2N/A/*
2N/A * option flags taken by the libipadm functions
2N/A *
2N/A * - IPADM_OPT_PERSIST:
2N/A * For all the create/delete/up/down/set/get functions,
2N/A * requests to persist the configuration so that it can be
2N/A * re-enabled or reapplied on boot.
2N/A *
2N/A * - IPADM_OPT_ACTIVE:
2N/A * Requests to apply configuration without persisting it and
2N/A * used by show-* subcommands to retrieve current values.
2N/A *
2N/A * - IPADM_OPT_DEFAULT:
2N/A * retrieves the default value for a given property
2N/A *
2N/A * - IPADM_OPT_PERM
2N/A * retrieves the permission for a given property
2N/A *
2N/A * - IPADM_OPT_POSSIBLE
2N/A * retrieves the range of values for a given property
2N/A *
2N/A * - IPADM_OPT_APPEND
2N/A * for multi-valued properties, appends a new value.
2N/A *
2N/A * - IPADM_OPT_REMOVE
2N/A * for multi-valued properties, removes the specified value
2N/A *
2N/A * - IPADM_OPT_GENPPA
2N/A * Used in ipadm_create_ipmp() to generate a ppa for the given IPMP
2N/A * interface.
2N/A *
2N/A * - IPADM_OPT_ZEROADDR
2N/A * return :: or INADDR_ANY
2N/A *
2N/A * - IPADM_OPT_RELEASE
2N/A * Used to release the lease on a dhcp address object
2N/A *
2N/A * - IPADM_OPT_INFORM
2N/A * Used to perform DHCP_INFORM on a specified static address object
2N/A *
2N/A * - IPADM_OPT_UP
2N/A * Used to bring up a static address on creation
2N/A *
2N/A * - IPADM_OPT_FORCE
2N/A * Used in ipadm_delete_ipmp() to forcefully delete an IPMP interface
2N/A * even when it has underlying interfaces.
2N/A *
2N/A * - IPADM_OPT_MODIFY
2N/A * Used to modify only the active configuration even when the
2N/A * configuration is persistent. Used to update an addrconf interface id.
2N/A *
2N/A * - IPADM_OPT_PROFILE
2N/A * Used to specify that a profile switch is taking place. Global
2N/A * properties, like those of congestion control, marked with
2N/A * IPADMPROP_GLOBAL do not need to be reset.
2N/A */
2N/A#define IPADM_OPT_PERSIST 0x00000001
2N/A#define IPADM_OPT_ACTIVE 0x00000002
2N/A#define IPADM_OPT_DEFAULT 0x00000004
2N/A#define IPADM_OPT_PERM 0x00000008
2N/A#define IPADM_OPT_POSSIBLE 0x00000010
2N/A#define IPADM_OPT_APPEND 0x00000020
2N/A#define IPADM_OPT_REMOVE 0x00000040
2N/A#define IPADM_OPT_GENPPA 0x00000080
2N/A#define IPADM_OPT_ZEROADDR 0x00000100
2N/A#define IPADM_OPT_RELEASE 0x00000200
2N/A#define IPADM_OPT_INFORM 0x00000400
2N/A#define IPADM_OPT_UP 0x00000800
2N/A#define IPADM_OPT_FORCE 0x00001000
2N/A#define IPADM_OPT_MODIFY 0x00002000
2N/A#define IPADM_OPT_PROFILE 0x00004000
2N/A
2N/A/* IPADM property class */
2N/A#define IPADMPROP_CLASS_MODULE 0x00000001 /* on 'protocol' only */
2N/A#define IPADMPROP_CLASS_IF 0x00000002 /* on 'IP interface' only */
2N/A#define IPADMPROP_CLASS_ADDR 0x00000004 /* on 'IP address' only */
2N/A/* protocol property that can be applied on interface too */
2N/A#define IPADMPROP_CLASS_MODIF (IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF)
2N/A
2N/A/* opaque ipadm handle to libipadm functions */
2N/Astruct ipadm_handle;
2N/Atypedef struct ipadm_handle *ipadm_handle_t;
2N/A
2N/A/* ipadm_handle flags */
2N/A#define IH_VRRP 0x00000001 /* Caller is VRRP */
2N/A#define IH_LEGACY 0x00000002 /* Caller is legacy app */
2N/A#define IH_IPMGMTD 0x00000004 /* Caller is ipmgmtd itself */
2N/A/*
2N/A * Indicates that the operation being invoked is in 'init' context. This is
2N/A * a library private flag.
2N/A */
2N/A#define IH_INIT 0x10000000
2N/A
2N/A/*
2N/A * Interface classes. These constants are committed to disk, as part of storing
2N/A * the persistent configuration. These should not be changed without upgrading
2N/A * the persistent configuration to match the enum values.
2N/A */
2N/Atypedef enum {
2N/A IPADMIF_CLASS_IP,
2N/A IPADMIF_CLASS_IPMP,
2N/A IPADMIF_CLASS_LOOPBACK,
2N/A IPADMIF_CLASS_VNI
2N/A} ipadm_if_class_t;
2N/A
2N/A#define IPADMIF_CLASS_IP_STR "ip"
2N/A#define IPADMIF_CLASS_IPMP_STR "ipmp"
2N/A#define IPADMIF_CLASS_LOOPBACK_STR "loopback"
2N/A#define IPADMIF_CLASS_VNI_STR "vni"
2N/A
2N/A/* opaque address object structure */
2N/Atypedef struct ipadm_addrobj_s *ipadm_addrobj_t;
2N/A
2N/A/* ipadm_if_info_t states */
2N/Atypedef enum {
2N/A IPADM_IFS_DOWN, /* Interface has no UP addresses */
2N/A IPADM_IFS_OK, /* Interface is usable */
2N/A IPADM_IFS_FAILED, /* Interface has failed. */
2N/A IPADM_IFS_OFFLINE, /* Interface has been offlined */
2N/A IPADM_IFS_DISABLED /* Interface has been disabled. */
2N/A} ipadm_if_state_t;
2N/A
2N/Atypedef struct ipadm_iflist_s {
2N/A list_node_t ifn_link;
2N/A char ifn_name[LIFNAMSIZ];
2N/A} ipadm_ifname_t;
2N/A
2N/Atypedef struct ipadm_if_info_s {
2N/A list_node_t ifi_link;
2N/A char ifi_name[LIFNAMSIZ]; /* interface name */
2N/A ipadm_if_class_t ifi_class; /* interface class */
2N/A boolean_t ifi_active; /* active or not */
2N/A ipadm_if_state_t ifi_state; /* see above */
2N/A uint_t ifi_cflags; /* current flags */
2N/A uint_t ifi_pflags; /* persistent flags */
2N/A /*
2N/A * ifi_unders: list of underlying interfaces in the
2N/A * running configuration for the IPMP interface,
2N/A * each of type `ipadm_ifname_t'.
2N/A */
2N/A list_t ifi_unders;
2N/A /*
2N/A * ifi_punders: list of underlying interfaces in the
2N/A * persistent configuration for the IPMP interface,
2N/A * each of type `ipadm_ifname_t'.
2N/A */
2N/A list_t ifi_punders;
2N/A} ipadm_if_info_t;
2N/A
2N/A/* ipadm_if_info_t flags */
2N/A#define IPADM_IFF_BROADCAST 0x00000001
2N/A#define IPADM_IFF_MULTICAST 0x00000002
2N/A#define IPADM_IFF_POINTOPOINT 0x00000004
2N/A#define IPADM_IFF_VIRTUAL 0x00000008
2N/A#define IPADM_IFF_STANDBY 0x00000010
2N/A#define IPADM_IFF_INACTIVE 0x00000020
2N/A#define IPADM_IFF_VRRP 0x00000040
2N/A#define IPADM_IFF_NOACCEPT 0x00000080
2N/A#define IPADM_IFF_IPV4 0x00000100
2N/A#define IPADM_IFF_IPV6 0x00000200
2N/A#define IPADM_IFF_L3PROTECT 0x00000400
2N/A#define IPADM_IFF_UNDERIF 0x00000800
2N/A
2N/A/* ipadm_addr_info_t state */
2N/Atypedef enum {
2N/A IPADM_ADDRS_DISABLED, /* Address not in active configuration. */
2N/A IPADM_ADDRS_DUPLICATE, /* DAD failed. */
2N/A IPADM_ADDRS_DOWN, /* Address is not IFF_UP */
2N/A IPADM_ADDRS_TENTATIVE, /* DAD verification initiated */
2N/A IPADM_ADDRS_OK, /* Address is usable */
2N/A IPADM_ADDRS_INACCESSIBLE /* Interface has failed */
2N/A} ipadm_addr_state_t;
2N/A
2N/A/* possible address types */
2N/Atypedef enum {
2N/A IPADM_ADDR_NONE,
2N/A IPADM_ADDR_STATIC,
2N/A IPADM_ADDR_IPV6_ADDRCONF,
2N/A IPADM_ADDR_DHCP
2N/A} ipadm_addr_type_t;
2N/A
2N/A/* possible Client ID types */
2N/Atypedef enum {
2N/A IPADM_CID_DEFAULT = -1,
2N/A IPADM_CID_OTHER,
2N/A IPADM_CID_DUID_LLT,
2N/A IPADM_CID_DUID_LL,
2N/A IPADM_CID_DUID_EN
2N/A} ipadm_cid_type_t;
2N/A
2N/Atypedef struct ipadm_addr_info_s {
2N/A struct ifaddrs ia_ifa; /* list of addresses */
2N/A char ia_sname[NI_MAXHOST]; /* local hostname */
2N/A char ia_dname[NI_MAXHOST]; /* remote hostname */
2N/A char ia_aobjname[IPADM_AOBJSIZ];
2N/A uint_t ia_cflags; /* active flags */
2N/A uint_t ia_pflags; /* persistent flags */
2N/A ipadm_addr_type_t ia_atype; /* see above */
2N/A ipadm_addr_state_t ia_state; /* see above */
2N/A time_t ia_lease_begin;
2N/A time_t ia_lease_expire;
2N/A time_t ia_lease_renew;
2N/A ipadm_cid_type_t ia_clientid_type;
2N/A char *ia_clientid;
2N/A} ipadm_addr_info_t;
2N/A#define IA_NEXT(ia) ((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next))
2N/A
2N/A/* ipadm_addr_info_t flags */
2N/A#define IPADM_ADDRF_UP 0x00000001
2N/A#define IPADM_ADDRF_UNNUMBERED 0x00000002
2N/A#define IPADM_ADDRF_PRIVATE 0x00000004
2N/A#define IPADM_ADDRF_TEMPORARY 0x00000008
2N/A#define IPADM_ADDRF_DEPRECATED 0x00000010
2N/A
2N/A/* open/close libipadm handle */
2N/Aextern ipadm_status_t ipadm_open(ipadm_handle_t *, const char *, uint32_t,
2N/A const char *);
2N/Aextern void ipadm_close(ipadm_handle_t);
2N/A
2N/A/* Check authorization for network configuration */
2N/Aextern boolean_t ipadm_check_auth(void);
2N/A/*
2N/A * Interface mangement functions
2N/A */
2N/Aextern ipadm_status_t ipadm_create_ip(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_delete_ip(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_create_vni(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_delete_vni(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_create_loopback(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_delete_loopback(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_create_ipmp(ipadm_handle_t, char *, sa_family_t,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_delete_ipmp(ipadm_handle_t, const char *,
2N/A sa_family_t, uint32_t);
2N/Aextern ipadm_status_t ipadm_add_ipmp(ipadm_handle_t, const char *,
2N/A const char *, uint32_t);
2N/Aextern ipadm_status_t ipadm_remove_ipmp(ipadm_handle_t, const char *,
2N/A const char *, uint32_t);
2N/Aextern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t);
2N/Aextern ipadm_status_t ipadm_ngz_persist_ifs(ipadm_handle_t);
2N/Aextern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *, list_t *,
2N/A uint32_t, int64_t);
2N/Aextern void ipadm_free_if_info(list_t *);
2N/A
2N/A/*
2N/A * Helper functions
2N/A */
2N/Aextern ipadm_status_t ipadm_create_ipmp_implicit(ipadm_handle_t,
2N/A const char *);
2N/Aextern ipadm_status_t ipadm_mark_testaddrs(ipadm_handle_t, const char *);
2N/Aextern ipadm_status_t ipadm_clear_testaddrs(ipadm_handle_t, const char *);
2N/Aextern ipadm_status_t ipadm_up_addrs(ipadm_handle_t, ipadm_addr_info_t *);
2N/Aextern ipadm_status_t ipadm_down_addrs(ipadm_handle_t, const char *,
2N/A ipadm_addr_info_t **);
2N/Aextern ipadm_status_t ipadm_wait_app_addrs(ipadm_handle_t, const char *);
2N/Aextern ipadm_status_t ipadm_migrate_dataaddrs(ipadm_handle_t,
2N/A const char *, ipadm_addr_info_t *);
2N/A
2N/A/*
2N/A * Address management functions
2N/A */
2N/Aextern ipadm_status_t ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_delete_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_disable_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_enable_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_up_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_down_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_refresh_addr(ipadm_handle_t, const char *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_addr_info(ipadm_handle_t, const char *,
2N/A ipadm_addr_info_t **, uint32_t, int64_t);
2N/Aextern void ipadm_free_addr_info(ipadm_addr_info_t *);
2N/A
2N/A/* Functions related to creating/deleting/modifying opaque address object */
2N/Aextern ipadm_status_t ipadm_create_addrobj(ipadm_addr_type_t, const char *,
2N/A ipadm_addrobj_t *);
2N/Aextern void ipadm_destroy_addrobj(ipadm_addrobj_t);
2N/Aextern ipadm_status_t ipadm_get_aobjname(ipadm_addrobj_t, char *,
2N/A size_t);
2N/Aextern ipadm_status_t ipadm_get_interface_id(ipadm_handle_t, const char *,
2N/A struct sockaddr_in6 *, int *, uint32_t);
2N/A
2N/Aextern ipadm_status_t ipadm_update_interface_id(ipadm_handle_t,
2N/A ipadm_addrobj_t, uint32_t);
2N/A
2N/A/* Functions to set fields in addrobj for static addresses */
2N/Aextern ipadm_status_t ipadm_set_addrval(ipadm_addrobj_t, struct sockaddr *,
2N/A uint32_t);
2N/Aextern ipadm_status_t ipadm_set_addr(ipadm_addrobj_t, const char *,
2N/A sa_family_t);
2N/Aextern ipadm_status_t ipadm_set_dst_addr(ipadm_addrobj_t, const char *,
2N/A sa_family_t);
2N/Aextern ipadm_status_t ipadm_get_addr(const ipadm_addrobj_t,
2N/A struct sockaddr_storage *);
2N/Aextern ipadm_status_t ipadm_update_addr(ipadm_handle_t, ipadm_addrobj_t,
2N/A uint32_t);
2N/A
2N/A/* Functions to set fields in addrobj for IPv6 addrconf */
2N/Aextern ipadm_status_t ipadm_set_interface_id(ipadm_addrobj_t, const char *);
2N/Aextern ipadm_status_t ipadm_set_dst_interface_id(ipadm_addrobj_t,
2N/A const char *);
2N/Aextern ipadm_status_t ipadm_set_stateless(ipadm_addrobj_t, boolean_t);
2N/Aextern ipadm_status_t ipadm_set_stateful(ipadm_addrobj_t, boolean_t);
2N/A
2N/A/* Functions to set fields in addrobj for DHCP */
2N/Aextern ipadm_status_t ipadm_set_primary(ipadm_addrobj_t, boolean_t);
2N/Aextern ipadm_status_t ipadm_set_wait_time(ipadm_addrobj_t, int32_t);
2N/Aextern ipadm_status_t ipadm_set_reqhost(ipadm_addrobj_t, const char *);
2N/A
2N/A/*
2N/A * Property management functions
2N/A */
2N/A/* call back function for the property walker */
2N/Atypedef boolean_t ipadm_prop_wfunc_t(void *, const char *, uint_t);
2N/Aextern ipadm_status_t ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *,
2N/A void *);
2N/Aextern ipadm_status_t ipadm_walk_prop(const char *, uint_t, uint_t,
2N/A ipadm_prop_wfunc_t *, void *);
2N/A
2N/A/* Interface property management - set, reset and get */
2N/Aextern ipadm_status_t ipadm_set_ifprop(ipadm_handle_t, const char *,
2N/A const char *, const char *, uint_t, uint_t);
2N/Aextern ipadm_status_t ipadm_get_ifprop(ipadm_handle_t, const char *,
2N/A const char *, char *, uint_t *, uint_t, uint_t);
2N/A
2N/A/* Address property management - set, reset and get */
2N/Aextern ipadm_status_t ipadm_set_addrprop(ipadm_handle_t, const char *,
2N/A const char *, const char *, uint_t);
2N/Aextern ipadm_status_t ipadm_get_addrprop(ipadm_handle_t, const char *, char *,
2N/A uint_t *, const char *, uint_t);
2N/A
2N/A/* Protoocl property management - set, reset and get */
2N/Aextern ipadm_status_t ipadm_set_prop(ipadm_handle_t, const char *,
2N/A const char *, uint_t, uint_t);
2N/Aextern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *,
2N/A uint_t *, uint_t, uint_t);
2N/A
2N/A/*
2N/A * miscellaneous helper functions.
2N/A */
2N/Aextern const char *ipadm_status2str(ipadm_status_t);
2N/Aextern const char *ipadm_class2str(ipadm_if_class_t);
2N/Aextern int ipadm_str2nvlist(const char *, nvlist_t **, uint_t);
2N/Aextern char *ipadm_proto2str(uint_t);
2N/Aextern uint_t ipadm_str2proto(const char *);
2N/Aextern ipadm_status_t ipadm_open_arp_on_udp(const char *, int *);
2N/Aextern int ipadm_legacy2new_propname(const char *, char *,
2N/A uint_t, uint_t *);
2N/Aextern int ipadm_new2legacy_propname(const char *, char *,
2N/A uint_t, uint_t);
2N/Aextern boolean_t ipadm_is_vni(const char *);
2N/Aextern boolean_t ipadm_is_loopback(const char *);
2N/Aextern boolean_t ipadm_is_ip(ipadm_handle_t, const char *);
2N/Aextern boolean_t ipadm_is_ipmp(ipadm_handle_t, const char *);
2N/Aextern boolean_t ipadm_is_under_ipmp(ipadm_handle_t, const char *);
2N/Aextern boolean_t ipadm_ipmp_pexists(ipadm_handle_t, const char *);
2N/Aextern int ipadm_create_fixed_ncp(const char *);
2N/A
2N/Aextern ipadm_status_t ipadm_init_profile(ipadm_handle_t);
2N/Aextern ipadm_status_t ipadm_fini_profile(ipadm_handle_t);
2N/A
2N/Aextern void ipadm_enable_all_ifs(ipadm_handle_t);
2N/Aextern void ipadm_disable_all_ifs(ipadm_handle_t);
2N/Aextern void ipadm_reset_all_props(ipadm_handle_t);
2N/A
2N/A/*
2N/A * Congestion control
2N/A */
2N/Atypedef boolean_t cong_db_func_t(void *, nvlist_t *, const char *, const char *,
2N/A const char *);
2N/A
2N/Aextern ipadm_status_t ipadm_cong_persist_propval(const char *, const char *,
2N/A const char *, const char *, uint_t);
2N/Aextern ipadm_status_t ipadm_cong_walk_db(ipadm_handle_t, nvlist_t *,
2N/A cong_db_func_t *);
2N/A
2N/A#ifdef __cplusplus
2N/A}
2N/A#endif
2N/A
2N/A#endif /* _LIBIPADM_H */