16e91bba0SGirish Moodalbail /* 26e91bba0SGirish Moodalbail * CDDL HEADER START 36e91bba0SGirish Moodalbail * 46e91bba0SGirish Moodalbail * The contents of this file are subject to the terms of the 56e91bba0SGirish Moodalbail * Common Development and Distribution License (the "License"). 66e91bba0SGirish Moodalbail * You may not use this file except in compliance with the License. 76e91bba0SGirish Moodalbail * 86e91bba0SGirish Moodalbail * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96e91bba0SGirish Moodalbail * or http://www.opensolaris.org/os/licensing. 106e91bba0SGirish Moodalbail * See the License for the specific language governing permissions 116e91bba0SGirish Moodalbail * and limitations under the License. 126e91bba0SGirish Moodalbail * 136e91bba0SGirish Moodalbail * When distributing Covered Code, include this CDDL HEADER in each 146e91bba0SGirish Moodalbail * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156e91bba0SGirish Moodalbail * If applicable, add the following below this CDDL HEADER, with the 166e91bba0SGirish Moodalbail * fields enclosed by brackets "[]" replaced with your own identifying 176e91bba0SGirish Moodalbail * information: Portions Copyright [yyyy] [name of copyright owner] 186e91bba0SGirish Moodalbail * 196e91bba0SGirish Moodalbail * CDDL HEADER END 206e91bba0SGirish Moodalbail */ 216e91bba0SGirish Moodalbail /* 2236b41818SGirish Moodalbail * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 23b31320a7SChris Fraire * Copyright (c) 2016, Chris Fraire <cfraire@me.com>. 24*a73be61aSHans Rosenfeld * Copyright 2021 Tintri by DDN, Inc. All rights reserved. 256e91bba0SGirish Moodalbail */ 266e91bba0SGirish Moodalbail #ifndef _LIBIPADM_H 276e91bba0SGirish Moodalbail #define _LIBIPADM_H 286e91bba0SGirish Moodalbail 296e91bba0SGirish Moodalbail #ifdef __cplusplus 306e91bba0SGirish Moodalbail extern "C" { 316e91bba0SGirish Moodalbail #endif 326e91bba0SGirish Moodalbail 336e91bba0SGirish Moodalbail #include <sys/types.h> 34b31320a7SChris Fraire #include <sys/param.h> 356e91bba0SGirish Moodalbail #include <sys/socket.h> 366e91bba0SGirish Moodalbail #include <net/if.h> 376e91bba0SGirish Moodalbail #include <netdb.h> 386e91bba0SGirish Moodalbail #include <ifaddrs.h> 396e91bba0SGirish Moodalbail #include <libnvpair.h> 406e91bba0SGirish Moodalbail #include <netinet/tcp.h> 416e91bba0SGirish Moodalbail #include <sys/stropts.h> 42*a73be61aSHans Rosenfeld #include <sys/list.h> 43*a73be61aSHans Rosenfeld #include <stddef.h> 446e91bba0SGirish Moodalbail 456e91bba0SGirish Moodalbail #define IPADM_AOBJ_USTRSIZ 32 466e91bba0SGirish Moodalbail #define IPADM_AOBJSIZ (LIFNAMSIZ + IPADM_AOBJ_USTRSIZ) 476e91bba0SGirish Moodalbail #define MAXPROPVALLEN 512 486e91bba0SGirish Moodalbail #define LOOPBACK_IF "lo0" 496e91bba0SGirish Moodalbail 506e91bba0SGirish Moodalbail /* special timeout values for dhcp operations */ 516e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_DEFAULT (-1) 526e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_FOREVER (-2) 536e91bba0SGirish Moodalbail 546e91bba0SGirish Moodalbail /* 556e91bba0SGirish Moodalbail * Specifies that the string passed to ipadm_str2nvlist() is a string of comma 566e91bba0SGirish Moodalbail * separated names and that each name does not have values associated with it. 576e91bba0SGirish Moodalbail */ 586e91bba0SGirish Moodalbail #define IPADM_NORVAL 0x00000001 596e91bba0SGirish Moodalbail 606e91bba0SGirish Moodalbail /* error codes */ 616e91bba0SGirish Moodalbail typedef enum { 626e91bba0SGirish Moodalbail IPADM_SUCCESS, /* No error occurred */ 636e91bba0SGirish Moodalbail IPADM_FAILURE, /* Generic failure */ 646e91bba0SGirish Moodalbail IPADM_EAUTH, /* Insufficient user authorizations */ 656e91bba0SGirish Moodalbail IPADM_EPERM, /* Permission denied */ 666e91bba0SGirish Moodalbail IPADM_NO_BUFS, /* No Buffer space available */ 676e91bba0SGirish Moodalbail IPADM_NO_MEMORY, /* Insufficient memory */ 686e91bba0SGirish Moodalbail IPADM_BAD_ADDR, /* Invalid address */ 696e91bba0SGirish Moodalbail IPADM_BAD_PROTOCOL, /* Wrong protocol family for operation */ 706e91bba0SGirish Moodalbail IPADM_DAD_FOUND, /* Duplicate address detected */ 716e91bba0SGirish Moodalbail IPADM_EXISTS, /* Already exists */ 726e91bba0SGirish Moodalbail IPADM_IF_EXISTS, /* Interface already exists */ 736e91bba0SGirish Moodalbail IPADM_ADDROBJ_EXISTS, /* Address object already exists */ 746e91bba0SGirish Moodalbail IPADM_ADDRCONF_EXISTS, /* Addrconf already in progress */ 756e91bba0SGirish Moodalbail IPADM_ENXIO, /* Interface does not exist */ 766e91bba0SGirish Moodalbail IPADM_GRP_NOTEMPTY, /* IPMP Group non-empty on unplumb */ 776e91bba0SGirish Moodalbail IPADM_INVALID_ARG, /* Invalid argument */ 786e91bba0SGirish Moodalbail IPADM_INVALID_NAME, /* Invalid name */ 796e91bba0SGirish Moodalbail IPADM_DLPI_FAILURE, /* Could not open DLPI link */ 806e91bba0SGirish Moodalbail IPADM_DLADM_FAILURE, /* DLADM error encountered */ 816e91bba0SGirish Moodalbail IPADM_PROP_UNKNOWN, /* Unknown property */ 826e91bba0SGirish Moodalbail IPADM_ERANGE, /* Value is outside the allowed range */ 836e91bba0SGirish Moodalbail IPADM_ESRCH, /* Value does not exist */ 846e91bba0SGirish Moodalbail IPADM_EOVERFLOW, /* Number of values exceed the allowed limit */ 856e91bba0SGirish Moodalbail IPADM_NOTFOUND, /* Object not found */ 866e91bba0SGirish Moodalbail IPADM_IF_INUSE, /* Interface already in use */ 876e91bba0SGirish Moodalbail IPADM_ADDR_INUSE, /* Address alrelady in use */ 886e91bba0SGirish Moodalbail IPADM_BAD_HOSTNAME, /* hostname maps to multiple IP addresses */ 896e91bba0SGirish Moodalbail IPADM_ADDR_NOTAVAIL, /* Can't assign requested address */ 906e91bba0SGirish Moodalbail IPADM_ALL_ADDRS_NOT_ENABLED, /* All addresses could not be enabled */ 916e91bba0SGirish Moodalbail IPADM_NDPD_NOT_RUNNING, /* in.ndpd not running */ 926e91bba0SGirish Moodalbail IPADM_DHCP_START_ERROR, /* Cannot start dhcpagent */ 936e91bba0SGirish Moodalbail IPADM_DHCP_IPC_ERROR, /* Cannot communicate with dhcpagent */ 946e91bba0SGirish Moodalbail IPADM_DHCP_IPC_TIMEOUT, /* Communication with dhcpagent timed out */ 956e91bba0SGirish Moodalbail IPADM_TEMPORARY_OBJ, /* Permanent operation on temporary object */ 966e91bba0SGirish Moodalbail IPADM_IPC_ERROR, /* Cannot communicate with ipmgmtd */ 976e91bba0SGirish Moodalbail IPADM_OP_DISABLE_OBJ, /* Operation on disable object */ 986e91bba0SGirish Moodalbail IPADM_NOTSUP, /* Operation not supported */ 99550b6e40SSowmini Varadhan IPADM_EBADE, /* Invalid data exchange with ipmgmtd */ 100550b6e40SSowmini Varadhan IPADM_GZ_PERM /* Operation not permitted on from-gz intf */ 1016e91bba0SGirish Moodalbail } ipadm_status_t; 1026e91bba0SGirish Moodalbail 1036e91bba0SGirish Moodalbail /* 1046e91bba0SGirish Moodalbail * option flags taken by the libipadm functions 1056e91bba0SGirish Moodalbail * 1066e91bba0SGirish Moodalbail * - IPADM_OPT_PERSIST: 1076e91bba0SGirish Moodalbail * For all the create/delete/up/down/set/get functions, 108b31320a7SChris Fraire * requests to persist the configuration so that it can be 109b31320a7SChris Fraire * re-enabled or re-applied on boot. 1106e91bba0SGirish Moodalbail * 1116e91bba0SGirish Moodalbail * - IPADM_OPT_ACTIVE: 1126e91bba0SGirish Moodalbail * Requests to apply configuration without persisting it and 1136e91bba0SGirish Moodalbail * used by show-* subcommands to retrieve current values. 1146e91bba0SGirish Moodalbail * 1156e91bba0SGirish Moodalbail * - IPADM_OPT_DEFAULT: 1166e91bba0SGirish Moodalbail * retrieves the default value for a given property 1176e91bba0SGirish Moodalbail * 1186e91bba0SGirish Moodalbail * - IPADM_OPT_PERM 1196e91bba0SGirish Moodalbail * retrieves the permission for a given property 1206e91bba0SGirish Moodalbail * 1216e91bba0SGirish Moodalbail * - IPADM_OPT_POSSIBLE 1226e91bba0SGirish Moodalbail * retrieves the range of values for a given property 1236e91bba0SGirish Moodalbail * 1246e91bba0SGirish Moodalbail * - IPADM_OPT_APPEND 1256e91bba0SGirish Moodalbail * for multi-valued properties, appends a new value. 1266e91bba0SGirish Moodalbail * 1276e91bba0SGirish Moodalbail * - IPADM_OPT_REMOVE 1286e91bba0SGirish Moodalbail * for multi-valued properties, removes the specified value 1296e91bba0SGirish Moodalbail * 1306e91bba0SGirish Moodalbail * - IPADM_OPT_IPMP 1316e91bba0SGirish Moodalbail * Used in ipadm_create_if() to plumb ipmp interfaces. 1326e91bba0SGirish Moodalbail * 1336e91bba0SGirish Moodalbail * - IPADM_OPT_GENPPA 1346e91bba0SGirish Moodalbail * Used in ipadm_create_if() to generate a ppa for the given interface. 1356e91bba0SGirish Moodalbail * 1366e91bba0SGirish Moodalbail * - IPADM_OPT_ZEROADDR 1376e91bba0SGirish Moodalbail * return :: or INADDR_ANY 1386e91bba0SGirish Moodalbail * 1396e91bba0SGirish Moodalbail * - IPADM_OPT_RELEASE 1406e91bba0SGirish Moodalbail * Used to release the lease on a dhcp address object 1416e91bba0SGirish Moodalbail * 1426e91bba0SGirish Moodalbail * - IPADM_OPT_INFORM 1436e91bba0SGirish Moodalbail * Used to perform DHCP_INFORM on a specified static address object 1446e91bba0SGirish Moodalbail * 1456e91bba0SGirish Moodalbail * - IPADM_OPT_UP 1466e91bba0SGirish Moodalbail * Used to bring up a static address on creation 147f6da83d4SAnurag S. Maskey * 148f6da83d4SAnurag S. Maskey * - IPADM_OPT_V46 149b31320a7SChris Fraire * Used to plumb both IPv4 and IPv6 interfaces by ipadm_create_addr() 150b31320a7SChris Fraire * 151b31320a7SChris Fraire * - IPADM_OPT_SET_PROPS 152b31320a7SChris Fraire * Used to indicate the update changes the running configuration of 153b31320a7SChris Fraire * "props" data on the object. The props are cached there on the parent, 154b31320a7SChris Fraire * but the PROPS_ONLY change does not affect the ACTIVE/PERSIST state of 155b31320a7SChris Fraire * the parent. 156b31320a7SChris Fraire * 157b31320a7SChris Fraire * - IPADM_OPT_PERSIST_PROPS 158b31320a7SChris Fraire * Used when IPADM_OPT_SET_PROPS is active to indicate the update changes 159b31320a7SChris Fraire * the persistent configuration of the "props" data on the object. 1606e91bba0SGirish Moodalbail */ 1616e91bba0SGirish Moodalbail #define IPADM_OPT_PERSIST 0x00000001 1626e91bba0SGirish Moodalbail #define IPADM_OPT_ACTIVE 0x00000002 1636e91bba0SGirish Moodalbail #define IPADM_OPT_DEFAULT 0x00000004 1646e91bba0SGirish Moodalbail #define IPADM_OPT_PERM 0x00000008 1656e91bba0SGirish Moodalbail #define IPADM_OPT_POSSIBLE 0x00000010 1666e91bba0SGirish Moodalbail #define IPADM_OPT_APPEND 0x00000020 1676e91bba0SGirish Moodalbail #define IPADM_OPT_REMOVE 0x00000040 1686e91bba0SGirish Moodalbail #define IPADM_OPT_IPMP 0x00000080 1696e91bba0SGirish Moodalbail #define IPADM_OPT_GENPPA 0x00000100 1706e91bba0SGirish Moodalbail #define IPADM_OPT_ZEROADDR 0x00000200 1716e91bba0SGirish Moodalbail #define IPADM_OPT_RELEASE 0x00000400 1726e91bba0SGirish Moodalbail #define IPADM_OPT_INFORM 0x00000800 1736e91bba0SGirish Moodalbail #define IPADM_OPT_UP 0x00001000 174f6da83d4SAnurag S. Maskey #define IPADM_OPT_V46 0x00002000 175b31320a7SChris Fraire #define IPADM_OPT_SET_PROPS 0x00004000 176b31320a7SChris Fraire #define IPADM_OPT_PERSIST_PROPS 0x00008000 1776e91bba0SGirish Moodalbail 1786e91bba0SGirish Moodalbail /* IPADM property class */ 1796e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODULE 0x00000001 /* on 'protocol' only */ 1806e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_IF 0x00000002 /* on 'IP interface' only */ 1816e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_ADDR 0x00000004 /* on 'IP address' only */ 1826e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */ 1836e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODIF (IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF) 1846e91bba0SGirish Moodalbail 1856e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */ 1866e91bba0SGirish Moodalbail struct ipadm_handle; 1876e91bba0SGirish Moodalbail typedef struct ipadm_handle *ipadm_handle_t; 1886e91bba0SGirish Moodalbail 1896e91bba0SGirish Moodalbail /* ipadm_handle flags */ 1906e91bba0SGirish Moodalbail #define IPH_VRRP 0x00000001 /* Caller is VRRP */ 1916e91bba0SGirish Moodalbail #define IPH_LEGACY 0x00000002 /* Caller is legacy app */ 192550b6e40SSowmini Varadhan #define IPH_IPMGMTD 0x00000004 /* Caller is ipmgmtd itself */ 1938887b57dSGirish Moodalbail /* 1948887b57dSGirish Moodalbail * Indicates that the operation being invoked is in 'init' context. This is 1958887b57dSGirish Moodalbail * a library private flag. 1968887b57dSGirish Moodalbail */ 1978887b57dSGirish Moodalbail #define IPH_INIT 0x10000000 1986e91bba0SGirish Moodalbail 1996e91bba0SGirish Moodalbail /* opaque address object structure */ 2006e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s *ipadm_addrobj_t; 2016e91bba0SGirish Moodalbail 2026e91bba0SGirish Moodalbail /* ipadm_if_info_t states */ 2036e91bba0SGirish Moodalbail typedef enum { 2046e91bba0SGirish Moodalbail IFIS_OK, /* Interface is usable */ 2056e91bba0SGirish Moodalbail IFIS_DOWN, /* Interface has no UP addresses */ 2066e91bba0SGirish Moodalbail IFIS_FAILED, /* Interface has failed. */ 2076e91bba0SGirish Moodalbail IFIS_OFFLINE, /* Interface has been offlined */ 2086e91bba0SGirish Moodalbail IFIS_DISABLED /* Interface has been disabled. */ 2096e91bba0SGirish Moodalbail } ipadm_if_state_t; 2106e91bba0SGirish Moodalbail 211*a73be61aSHans Rosenfeld typedef list_t ipadm_ipmp_members_t; 212*a73be61aSHans Rosenfeld 213*a73be61aSHans Rosenfeld typedef struct { 214*a73be61aSHans Rosenfeld list_node_t node; 215*a73be61aSHans Rosenfeld char if_name[LIFNAMSIZ]; 216*a73be61aSHans Rosenfeld } ipadm_ipmp_member_t; 217*a73be61aSHans Rosenfeld 218*a73be61aSHans Rosenfeld typedef enum { 219*a73be61aSHans Rosenfeld IPADM_IF_CLASS_REGULAR, 220*a73be61aSHans Rosenfeld IPADM_IF_CLASS_IPMP, 221*a73be61aSHans Rosenfeld IPADM_IF_CLASS_VIRTUAL, 222*a73be61aSHans Rosenfeld IPADM_IF_CLASS_UNKNOWN 223*a73be61aSHans Rosenfeld } ipadm_if_class_t; 224*a73be61aSHans Rosenfeld 2256e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s { 226*a73be61aSHans Rosenfeld struct ipadm_if_info_s *ifi_next; 2276e91bba0SGirish Moodalbail char ifi_name[LIFNAMSIZ]; /* interface name */ 228*a73be61aSHans Rosenfeld ipadm_if_class_t ifi_class; /* interface class */ 2296e91bba0SGirish Moodalbail ipadm_if_state_t ifi_state; /* see above */ 2306e91bba0SGirish Moodalbail uint_t ifi_cflags; /* current flags */ 2316e91bba0SGirish Moodalbail uint_t ifi_pflags; /* persistent flags */ 232*a73be61aSHans Rosenfeld ipadm_ipmp_members_t ifi_ipmp_cmembers; /* current IPMP members */ 233*a73be61aSHans Rosenfeld ipadm_ipmp_members_t ifi_ipmp_pmembers; /* persistent IPMP members */ 2346e91bba0SGirish Moodalbail } ipadm_if_info_t; 2356e91bba0SGirish Moodalbail 2366e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */ 2376e91bba0SGirish Moodalbail #define IFIF_BROADCAST 0x00000001 2386e91bba0SGirish Moodalbail #define IFIF_MULTICAST 0x00000002 2396e91bba0SGirish Moodalbail #define IFIF_POINTOPOINT 0x00000004 2406e91bba0SGirish Moodalbail #define IFIF_VIRTUAL 0x00000008 2416e91bba0SGirish Moodalbail #define IFIF_IPMP 0x00000010 2426e91bba0SGirish Moodalbail #define IFIF_STANDBY 0x00000020 2436e91bba0SGirish Moodalbail #define IFIF_INACTIVE 0x00000040 2446e91bba0SGirish Moodalbail #define IFIF_VRRP 0x00000080 2456e91bba0SGirish Moodalbail #define IFIF_NOACCEPT 0x00000100 2466e91bba0SGirish Moodalbail #define IFIF_IPV4 0x00000200 2476e91bba0SGirish Moodalbail #define IFIF_IPV6 0x00000400 248550b6e40SSowmini Varadhan #define IFIF_L3PROTECT 0x00000800 2496e91bba0SGirish Moodalbail 2506e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */ 2516e91bba0SGirish Moodalbail typedef enum { 2526e91bba0SGirish Moodalbail IFA_DISABLED, /* Address not in active configuration. */ 2536e91bba0SGirish Moodalbail IFA_DUPLICATE, /* DAD failed. */ 2546e91bba0SGirish Moodalbail IFA_DOWN, /* Address is not IFF_UP */ 2556e91bba0SGirish Moodalbail IFA_TENTATIVE, /* DAD verification initiated */ 2566e91bba0SGirish Moodalbail IFA_OK, /* Address is usable */ 2576e91bba0SGirish Moodalbail IFA_INACCESSIBLE /* Interface has failed */ 2586e91bba0SGirish Moodalbail } ipadm_addr_state_t; 2596e91bba0SGirish Moodalbail 2606e91bba0SGirish Moodalbail /* possible address types */ 2616e91bba0SGirish Moodalbail typedef enum { 2626e91bba0SGirish Moodalbail IPADM_ADDR_NONE, 2636e91bba0SGirish Moodalbail IPADM_ADDR_STATIC, 2646e91bba0SGirish Moodalbail IPADM_ADDR_IPV6_ADDRCONF, 2656e91bba0SGirish Moodalbail IPADM_ADDR_DHCP 2666e91bba0SGirish Moodalbail } ipadm_addr_type_t; 2676e91bba0SGirish Moodalbail 2686e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s { 2696e91bba0SGirish Moodalbail struct ifaddrs ia_ifa; /* list of addresses */ 2706e91bba0SGirish Moodalbail char ia_sname[NI_MAXHOST]; /* local hostname */ 2716e91bba0SGirish Moodalbail char ia_dname[NI_MAXHOST]; /* remote hostname */ 2726e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2736e91bba0SGirish Moodalbail uint_t ia_cflags; /* active flags */ 2746e91bba0SGirish Moodalbail uint_t ia_pflags; /* persistent flags */ 2756e91bba0SGirish Moodalbail ipadm_addr_type_t ia_atype; /* see above */ 2766e91bba0SGirish Moodalbail ipadm_addr_state_t ia_state; /* see above */ 2776e91bba0SGirish Moodalbail } ipadm_addr_info_t; 2786e91bba0SGirish Moodalbail #define IA_NEXT(ia) ((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next)) 2796e91bba0SGirish Moodalbail 2806e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */ 2816e91bba0SGirish Moodalbail #define IA_UP 0x00000001 2826e91bba0SGirish Moodalbail #define IA_UNNUMBERED 0x00000002 2836e91bba0SGirish Moodalbail #define IA_PRIVATE 0x00000004 2846e91bba0SGirish Moodalbail #define IA_TEMPORARY 0x00000008 2856e91bba0SGirish Moodalbail #define IA_DEPRECATED 0x00000010 2866e91bba0SGirish Moodalbail 2876e91bba0SGirish Moodalbail /* open/close libipadm handle */ 2886e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open(ipadm_handle_t *, uint32_t); 2896e91bba0SGirish Moodalbail extern void ipadm_close(ipadm_handle_t); 2906e91bba0SGirish Moodalbail 2916e91bba0SGirish Moodalbail /* Check authorization for network configuration */ 2926e91bba0SGirish Moodalbail extern boolean_t ipadm_check_auth(void); 2936e91bba0SGirish Moodalbail /* 294b31320a7SChris Fraire * Interface management functions 2956e91bba0SGirish Moodalbail */ 2966e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_if(ipadm_handle_t, char *, sa_family_t, 2976e91bba0SGirish Moodalbail uint32_t); 2986e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *, 2996e91bba0SGirish Moodalbail uint32_t); 3006e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t); 3016e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *, 302*a73be61aSHans Rosenfeld ipadm_if_info_t **, uint32_t, int64_t); 303*a73be61aSHans Rosenfeld extern void ipadm_free_if_info(ipadm_if_info_t *); 3046e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_if(ipadm_handle_t, const char *, 3056e91bba0SGirish Moodalbail sa_family_t, uint32_t); 30636b41818SGirish Moodalbail extern void ipadm_if_move(ipadm_handle_t, const char *); 307*a73be61aSHans Rosenfeld extern ipadm_status_t ipadm_add_ipmp_member(ipadm_handle_t, const char *, 308*a73be61aSHans Rosenfeld const char *, uint32_t); 309*a73be61aSHans Rosenfeld extern ipadm_status_t ipadm_remove_ipmp_member(ipadm_handle_t, const char *, 310*a73be61aSHans Rosenfeld const char *, uint32_t); 3116e91bba0SGirish Moodalbail 3126e91bba0SGirish Moodalbail /* 3136e91bba0SGirish Moodalbail * Address management functions 3146e91bba0SGirish Moodalbail */ 3156e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t, 3166e91bba0SGirish Moodalbail uint32_t); 3176e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_addr(ipadm_handle_t, const char *, 3186e91bba0SGirish Moodalbail uint32_t); 3196e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_addr(ipadm_handle_t, const char *, 3206e91bba0SGirish Moodalbail uint32_t); 3216e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_addr_info(ipadm_handle_t, const char *, 3226e91bba0SGirish Moodalbail ipadm_addr_info_t **, uint32_t, int64_t); 3236e91bba0SGirish Moodalbail extern void ipadm_free_addr_info(ipadm_addr_info_t *); 3246e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_up_addr(ipadm_handle_t, const char *, 3256e91bba0SGirish Moodalbail uint32_t); 3266e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_down_addr(ipadm_handle_t, const char *, 3276e91bba0SGirish Moodalbail uint32_t); 3286e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_refresh_addr(ipadm_handle_t, const char *, 3296e91bba0SGirish Moodalbail uint32_t); 3306e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_addr(ipadm_handle_t, const char *, 3316e91bba0SGirish Moodalbail uint32_t); 3326e91bba0SGirish Moodalbail 3336e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */ 3346e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addrobj(ipadm_addr_type_t, const char *, 3356e91bba0SGirish Moodalbail ipadm_addrobj_t *); 3366e91bba0SGirish Moodalbail extern void ipadm_destroy_addrobj(ipadm_addrobj_t); 337f6da83d4SAnurag S. Maskey extern ipadm_status_t ipadm_get_aobjname(const ipadm_addrobj_t, char *, 338f6da83d4SAnurag S. Maskey size_t); 3396e91bba0SGirish Moodalbail 3406e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */ 3416e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addr(ipadm_addrobj_t, const char *, 3426e91bba0SGirish Moodalbail sa_family_t); 3436e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_dst_addr(ipadm_addrobj_t, const char *, 3446e91bba0SGirish Moodalbail sa_family_t); 345f6da83d4SAnurag S. Maskey extern ipadm_status_t ipadm_get_addr(const ipadm_addrobj_t, 346f6da83d4SAnurag S. Maskey struct sockaddr_storage *); 3476e91bba0SGirish Moodalbail 3486e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */ 3496e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_interface_id(ipadm_addrobj_t, const char *); 3506e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateless(ipadm_addrobj_t, boolean_t); 3516e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateful(ipadm_addrobj_t, boolean_t); 3526e91bba0SGirish Moodalbail 3536e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */ 3546e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_primary(ipadm_addrobj_t, boolean_t); 3556e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_wait_time(ipadm_addrobj_t, int32_t); 356b31320a7SChris Fraire extern ipadm_status_t ipadm_set_reqhost(ipadm_addrobj_t, const char *); 3576e91bba0SGirish Moodalbail 3586e91bba0SGirish Moodalbail /* 3596e91bba0SGirish Moodalbail * Property management functions 3606e91bba0SGirish Moodalbail */ 3616e91bba0SGirish Moodalbail /* call back function for the property walker */ 3626e91bba0SGirish Moodalbail typedef boolean_t ipadm_prop_wfunc_t(void *, const char *, uint_t); 3636e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *, 3646e91bba0SGirish Moodalbail void *); 3656e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_prop(const char *, uint_t, uint_t, 3666e91bba0SGirish Moodalbail ipadm_prop_wfunc_t *, void *); 3676e91bba0SGirish Moodalbail 3686e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */ 3696e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_ifprop(ipadm_handle_t, const char *, 3706e91bba0SGirish Moodalbail const char *, const char *, uint_t, uint_t); 3716e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_ifprop(ipadm_handle_t, const char *, 3726e91bba0SGirish Moodalbail const char *, char *, uint_t *, uint_t, uint_t); 3736e91bba0SGirish Moodalbail 3746e91bba0SGirish Moodalbail /* Address property management - set, reset and get */ 3756e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addrprop(ipadm_handle_t, const char *, 3766e91bba0SGirish Moodalbail const char *, const char *, uint_t); 3776e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_addrprop(ipadm_handle_t, const char *, char *, 3786e91bba0SGirish Moodalbail uint_t *, const char *, uint_t); 3796e91bba0SGirish Moodalbail 3806e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */ 3816e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_prop(ipadm_handle_t, const char *, 3826e91bba0SGirish Moodalbail const char *, uint_t, uint_t); 3836e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *, 3846e91bba0SGirish Moodalbail uint_t *, uint_t, uint_t); 3856e91bba0SGirish Moodalbail 3866e91bba0SGirish Moodalbail /* 3876e91bba0SGirish Moodalbail * miscellaneous helper functions. 3886e91bba0SGirish Moodalbail */ 389ed1e9379SHans Rosenfeld extern const char *ipadm_status2str(ipadm_status_t); 390*a73be61aSHans Rosenfeld extern ipadm_status_t ipadm_str2nvlist(const char *, nvlist_t **, uint_t); 3916e91bba0SGirish Moodalbail extern size_t ipadm_nvlist2str(nvlist_t *, char *, size_t); 3926e91bba0SGirish Moodalbail extern char *ipadm_proto2str(uint_t); 3936e91bba0SGirish Moodalbail extern uint_t ipadm_str2proto(const char *); 3946e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open_arp_on_udp(const char *, int *); 3958887b57dSGirish Moodalbail extern int ipadm_legacy2new_propname(const char *, char *, 3968887b57dSGirish Moodalbail uint_t, uint_t *); 3978887b57dSGirish Moodalbail extern int ipadm_new2legacy_propname(const char *, char *, 3988887b57dSGirish Moodalbail uint_t, uint_t); 399b31320a7SChris Fraire extern boolean_t ipadm_is_valid_hostname(const char *hostname); 400b31320a7SChris Fraire extern boolean_t ipadm_is_nil_hostname(const char *hostname); 4016e91bba0SGirish Moodalbail 4026e91bba0SGirish Moodalbail #ifdef __cplusplus 4036e91bba0SGirish Moodalbail } 4046e91bba0SGirish Moodalbail #endif 4056e91bba0SGirish Moodalbail 4066e91bba0SGirish Moodalbail #endif /* _LIBIPADM_H */ 407