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 /* 22*36b41818SGirish Moodalbail * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 236e91bba0SGirish Moodalbail */ 246e91bba0SGirish Moodalbail #ifndef _LIBIPADM_H 256e91bba0SGirish Moodalbail #define _LIBIPADM_H 266e91bba0SGirish Moodalbail 276e91bba0SGirish Moodalbail #ifdef __cplusplus 286e91bba0SGirish Moodalbail extern "C" { 296e91bba0SGirish Moodalbail #endif 306e91bba0SGirish Moodalbail 316e91bba0SGirish Moodalbail #include <sys/types.h> 326e91bba0SGirish Moodalbail #include <sys/socket.h> 336e91bba0SGirish Moodalbail #include <net/if.h> 346e91bba0SGirish Moodalbail #include <netdb.h> 356e91bba0SGirish Moodalbail #include <ifaddrs.h> 366e91bba0SGirish Moodalbail #include <libnvpair.h> 376e91bba0SGirish Moodalbail #include <netinet/tcp.h> 386e91bba0SGirish Moodalbail #include <sys/stropts.h> 396e91bba0SGirish Moodalbail 406e91bba0SGirish Moodalbail #define IPADM_AOBJ_USTRSIZ 32 416e91bba0SGirish Moodalbail #define IPADM_AOBJSIZ (LIFNAMSIZ + IPADM_AOBJ_USTRSIZ) 426e91bba0SGirish Moodalbail #define MAXPROPVALLEN 512 436e91bba0SGirish Moodalbail #define LOOPBACK_IF "lo0" 446e91bba0SGirish Moodalbail 456e91bba0SGirish Moodalbail /* special timeout values for dhcp operations */ 466e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_DEFAULT (-1) 476e91bba0SGirish Moodalbail #define IPADM_DHCP_WAIT_FOREVER (-2) 486e91bba0SGirish Moodalbail 496e91bba0SGirish Moodalbail /* 506e91bba0SGirish Moodalbail * Specifies that the string passed to ipadm_str2nvlist() is a string of comma 516e91bba0SGirish Moodalbail * separated names and that each name does not have values associated with it. 526e91bba0SGirish Moodalbail */ 536e91bba0SGirish Moodalbail #define IPADM_NORVAL 0x00000001 546e91bba0SGirish Moodalbail 556e91bba0SGirish Moodalbail /* error codes */ 566e91bba0SGirish Moodalbail typedef enum { 576e91bba0SGirish Moodalbail IPADM_SUCCESS, /* No error occurred */ 586e91bba0SGirish Moodalbail IPADM_FAILURE, /* Generic failure */ 596e91bba0SGirish Moodalbail IPADM_EAUTH, /* Insufficient user authorizations */ 606e91bba0SGirish Moodalbail IPADM_EPERM, /* Permission denied */ 616e91bba0SGirish Moodalbail IPADM_NO_BUFS, /* No Buffer space available */ 626e91bba0SGirish Moodalbail IPADM_NO_MEMORY, /* Insufficient memory */ 636e91bba0SGirish Moodalbail IPADM_BAD_ADDR, /* Invalid address */ 646e91bba0SGirish Moodalbail IPADM_BAD_PROTOCOL, /* Wrong protocol family for operation */ 656e91bba0SGirish Moodalbail IPADM_DAD_FOUND, /* Duplicate address detected */ 666e91bba0SGirish Moodalbail IPADM_EXISTS, /* Already exists */ 676e91bba0SGirish Moodalbail IPADM_IF_EXISTS, /* Interface already exists */ 686e91bba0SGirish Moodalbail IPADM_ADDROBJ_EXISTS, /* Address object already exists */ 696e91bba0SGirish Moodalbail IPADM_ADDRCONF_EXISTS, /* Addrconf already in progress */ 706e91bba0SGirish Moodalbail IPADM_ENXIO, /* Interface does not exist */ 716e91bba0SGirish Moodalbail IPADM_GRP_NOTEMPTY, /* IPMP Group non-empty on unplumb */ 726e91bba0SGirish Moodalbail IPADM_INVALID_ARG, /* Invalid argument */ 736e91bba0SGirish Moodalbail IPADM_INVALID_NAME, /* Invalid name */ 746e91bba0SGirish Moodalbail IPADM_DLPI_FAILURE, /* Could not open DLPI link */ 756e91bba0SGirish Moodalbail IPADM_DLADM_FAILURE, /* DLADM error encountered */ 766e91bba0SGirish Moodalbail IPADM_PROP_UNKNOWN, /* Unknown property */ 776e91bba0SGirish Moodalbail IPADM_ERANGE, /* Value is outside the allowed range */ 786e91bba0SGirish Moodalbail IPADM_ESRCH, /* Value does not exist */ 796e91bba0SGirish Moodalbail IPADM_EOVERFLOW, /* Number of values exceed the allowed limit */ 806e91bba0SGirish Moodalbail IPADM_NOTFOUND, /* Object not found */ 816e91bba0SGirish Moodalbail IPADM_IF_INUSE, /* Interface already in use */ 826e91bba0SGirish Moodalbail IPADM_ADDR_INUSE, /* Address alrelady in use */ 836e91bba0SGirish Moodalbail IPADM_BAD_HOSTNAME, /* hostname maps to multiple IP addresses */ 846e91bba0SGirish Moodalbail IPADM_ADDR_NOTAVAIL, /* Can't assign requested address */ 856e91bba0SGirish Moodalbail IPADM_ALL_ADDRS_NOT_ENABLED, /* All addresses could not be enabled */ 866e91bba0SGirish Moodalbail IPADM_NDPD_NOT_RUNNING, /* in.ndpd not running */ 876e91bba0SGirish Moodalbail IPADM_DHCP_START_ERROR, /* Cannot start dhcpagent */ 886e91bba0SGirish Moodalbail IPADM_DHCP_IPC_ERROR, /* Cannot communicate with dhcpagent */ 896e91bba0SGirish Moodalbail IPADM_DHCP_IPC_TIMEOUT, /* Communication with dhcpagent timed out */ 906e91bba0SGirish Moodalbail IPADM_TEMPORARY_OBJ, /* Permanent operation on temporary object */ 916e91bba0SGirish Moodalbail IPADM_IPC_ERROR, /* Cannot communicate with ipmgmtd */ 926e91bba0SGirish Moodalbail IPADM_OP_DISABLE_OBJ, /* Operation on disable object */ 936e91bba0SGirish Moodalbail IPADM_NOTSUP, /* Operation not supported */ 946e91bba0SGirish Moodalbail IPADM_EBADE /* Invalid data exchange with ipmgmtd */ 956e91bba0SGirish Moodalbail } ipadm_status_t; 966e91bba0SGirish Moodalbail 976e91bba0SGirish Moodalbail /* 986e91bba0SGirish Moodalbail * option flags taken by the libipadm functions 996e91bba0SGirish Moodalbail * 1006e91bba0SGirish Moodalbail * - IPADM_OPT_PERSIST: 1016e91bba0SGirish Moodalbail * For all the create/delete/up/down/set/get functions, 1026e91bba0SGirish Moodalbail * requests to persist the configuration so that it can be 1036e91bba0SGirish Moodalbail * re-enabled or reapplied on boot. 1046e91bba0SGirish Moodalbail * 1056e91bba0SGirish Moodalbail * - IPADM_OPT_ACTIVE: 1066e91bba0SGirish Moodalbail * Requests to apply configuration without persisting it and 1076e91bba0SGirish Moodalbail * used by show-* subcommands to retrieve current values. 1086e91bba0SGirish Moodalbail * 1096e91bba0SGirish Moodalbail * - IPADM_OPT_DEFAULT: 1106e91bba0SGirish Moodalbail * retrieves the default value for a given property 1116e91bba0SGirish Moodalbail * 1126e91bba0SGirish Moodalbail * - IPADM_OPT_PERM 1136e91bba0SGirish Moodalbail * retrieves the permission for a given property 1146e91bba0SGirish Moodalbail * 1156e91bba0SGirish Moodalbail * - IPADM_OPT_POSSIBLE 1166e91bba0SGirish Moodalbail * retrieves the range of values for a given property 1176e91bba0SGirish Moodalbail * 1186e91bba0SGirish Moodalbail * - IPADM_OPT_APPEND 1196e91bba0SGirish Moodalbail * for multi-valued properties, appends a new value. 1206e91bba0SGirish Moodalbail * 1216e91bba0SGirish Moodalbail * - IPADM_OPT_REMOVE 1226e91bba0SGirish Moodalbail * for multi-valued properties, removes the specified value 1236e91bba0SGirish Moodalbail * 1246e91bba0SGirish Moodalbail * - IPADM_OPT_IPMP 1256e91bba0SGirish Moodalbail * Used in ipadm_create_if() to plumb ipmp interfaces. 1266e91bba0SGirish Moodalbail * 1276e91bba0SGirish Moodalbail * - IPADM_OPT_GENPPA 1286e91bba0SGirish Moodalbail * Used in ipadm_create_if() to generate a ppa for the given interface. 1296e91bba0SGirish Moodalbail * 1306e91bba0SGirish Moodalbail * - IPADM_OPT_ZEROADDR 1316e91bba0SGirish Moodalbail * return :: or INADDR_ANY 1326e91bba0SGirish Moodalbail * 1336e91bba0SGirish Moodalbail * - IPADM_OPT_RELEASE 1346e91bba0SGirish Moodalbail * Used to release the lease on a dhcp address object 1356e91bba0SGirish Moodalbail * 1366e91bba0SGirish Moodalbail * - IPADM_OPT_INFORM 1376e91bba0SGirish Moodalbail * Used to perform DHCP_INFORM on a specified static address object 1386e91bba0SGirish Moodalbail * 1396e91bba0SGirish Moodalbail * - IPADM_OPT_UP 1406e91bba0SGirish Moodalbail * Used to bring up a static address on creation 1416e91bba0SGirish Moodalbail */ 1426e91bba0SGirish Moodalbail #define IPADM_OPT_PERSIST 0x00000001 1436e91bba0SGirish Moodalbail #define IPADM_OPT_ACTIVE 0x00000002 1446e91bba0SGirish Moodalbail #define IPADM_OPT_DEFAULT 0x00000004 1456e91bba0SGirish Moodalbail #define IPADM_OPT_PERM 0x00000008 1466e91bba0SGirish Moodalbail #define IPADM_OPT_POSSIBLE 0x00000010 1476e91bba0SGirish Moodalbail #define IPADM_OPT_APPEND 0x00000020 1486e91bba0SGirish Moodalbail #define IPADM_OPT_REMOVE 0x00000040 1496e91bba0SGirish Moodalbail #define IPADM_OPT_IPMP 0x00000080 1506e91bba0SGirish Moodalbail #define IPADM_OPT_GENPPA 0x00000100 1516e91bba0SGirish Moodalbail #define IPADM_OPT_ZEROADDR 0x00000200 1526e91bba0SGirish Moodalbail #define IPADM_OPT_RELEASE 0x00000400 1536e91bba0SGirish Moodalbail #define IPADM_OPT_INFORM 0x00000800 1546e91bba0SGirish Moodalbail #define IPADM_OPT_UP 0x00001000 1556e91bba0SGirish Moodalbail 1566e91bba0SGirish Moodalbail /* IPADM property class */ 1576e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODULE 0x00000001 /* on 'protocol' only */ 1586e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_IF 0x00000002 /* on 'IP interface' only */ 1596e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_ADDR 0x00000004 /* on 'IP address' only */ 1606e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */ 1616e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODIF (IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF) 1626e91bba0SGirish Moodalbail 1636e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */ 1646e91bba0SGirish Moodalbail struct ipadm_handle; 1656e91bba0SGirish Moodalbail typedef struct ipadm_handle *ipadm_handle_t; 1666e91bba0SGirish Moodalbail 1676e91bba0SGirish Moodalbail /* ipadm_handle flags */ 1686e91bba0SGirish Moodalbail #define IPH_VRRP 0x00000001 /* Caller is VRRP */ 1696e91bba0SGirish Moodalbail #define IPH_LEGACY 0x00000002 /* Caller is legacy app */ 1706e91bba0SGirish Moodalbail 1716e91bba0SGirish Moodalbail /* opaque address object structure */ 1726e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s *ipadm_addrobj_t; 1736e91bba0SGirish Moodalbail 1746e91bba0SGirish Moodalbail /* ipadm_if_info_t states */ 1756e91bba0SGirish Moodalbail typedef enum { 1766e91bba0SGirish Moodalbail IFIS_OK, /* Interface is usable */ 1776e91bba0SGirish Moodalbail IFIS_DOWN, /* Interface has no UP addresses */ 1786e91bba0SGirish Moodalbail IFIS_FAILED, /* Interface has failed. */ 1796e91bba0SGirish Moodalbail IFIS_OFFLINE, /* Interface has been offlined */ 1806e91bba0SGirish Moodalbail IFIS_DISABLED /* Interface has been disabled. */ 1816e91bba0SGirish Moodalbail } ipadm_if_state_t; 1826e91bba0SGirish Moodalbail 1836e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s { 1846e91bba0SGirish Moodalbail struct ipadm_if_info_s *ifi_next; 1856e91bba0SGirish Moodalbail char ifi_name[LIFNAMSIZ]; /* interface name */ 1866e91bba0SGirish Moodalbail ipadm_if_state_t ifi_state; /* see above */ 1876e91bba0SGirish Moodalbail uint_t ifi_cflags; /* current flags */ 1886e91bba0SGirish Moodalbail uint_t ifi_pflags; /* persistent flags */ 1896e91bba0SGirish Moodalbail } ipadm_if_info_t; 1906e91bba0SGirish Moodalbail 1916e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */ 1926e91bba0SGirish Moodalbail #define IFIF_BROADCAST 0x00000001 1936e91bba0SGirish Moodalbail #define IFIF_MULTICAST 0x00000002 1946e91bba0SGirish Moodalbail #define IFIF_POINTOPOINT 0x00000004 1956e91bba0SGirish Moodalbail #define IFIF_VIRTUAL 0x00000008 1966e91bba0SGirish Moodalbail #define IFIF_IPMP 0x00000010 1976e91bba0SGirish Moodalbail #define IFIF_STANDBY 0x00000020 1986e91bba0SGirish Moodalbail #define IFIF_INACTIVE 0x00000040 1996e91bba0SGirish Moodalbail #define IFIF_VRRP 0x00000080 2006e91bba0SGirish Moodalbail #define IFIF_NOACCEPT 0x00000100 2016e91bba0SGirish Moodalbail #define IFIF_IPV4 0x00000200 2026e91bba0SGirish Moodalbail #define IFIF_IPV6 0x00000400 2036e91bba0SGirish Moodalbail 2046e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */ 2056e91bba0SGirish Moodalbail typedef enum { 2066e91bba0SGirish Moodalbail IFA_DISABLED, /* Address not in active configuration. */ 2076e91bba0SGirish Moodalbail IFA_DUPLICATE, /* DAD failed. */ 2086e91bba0SGirish Moodalbail IFA_DOWN, /* Address is not IFF_UP */ 2096e91bba0SGirish Moodalbail IFA_TENTATIVE, /* DAD verification initiated */ 2106e91bba0SGirish Moodalbail IFA_OK, /* Address is usable */ 2116e91bba0SGirish Moodalbail IFA_INACCESSIBLE /* Interface has failed */ 2126e91bba0SGirish Moodalbail } ipadm_addr_state_t; 2136e91bba0SGirish Moodalbail 2146e91bba0SGirish Moodalbail /* possible address types */ 2156e91bba0SGirish Moodalbail typedef enum { 2166e91bba0SGirish Moodalbail IPADM_ADDR_NONE, 2176e91bba0SGirish Moodalbail IPADM_ADDR_STATIC, 2186e91bba0SGirish Moodalbail IPADM_ADDR_IPV6_ADDRCONF, 2196e91bba0SGirish Moodalbail IPADM_ADDR_DHCP 2206e91bba0SGirish Moodalbail } ipadm_addr_type_t; 2216e91bba0SGirish Moodalbail 2226e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s { 2236e91bba0SGirish Moodalbail struct ifaddrs ia_ifa; /* list of addresses */ 2246e91bba0SGirish Moodalbail char ia_sname[NI_MAXHOST]; /* local hostname */ 2256e91bba0SGirish Moodalbail char ia_dname[NI_MAXHOST]; /* remote hostname */ 2266e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2276e91bba0SGirish Moodalbail uint_t ia_cflags; /* active flags */ 2286e91bba0SGirish Moodalbail uint_t ia_pflags; /* persistent flags */ 2296e91bba0SGirish Moodalbail ipadm_addr_type_t ia_atype; /* see above */ 2306e91bba0SGirish Moodalbail ipadm_addr_state_t ia_state; /* see above */ 2316e91bba0SGirish Moodalbail } ipadm_addr_info_t; 2326e91bba0SGirish Moodalbail #define IA_NEXT(ia) ((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next)) 2336e91bba0SGirish Moodalbail 2346e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */ 2356e91bba0SGirish Moodalbail #define IA_UP 0x00000001 2366e91bba0SGirish Moodalbail #define IA_UNNUMBERED 0x00000002 2376e91bba0SGirish Moodalbail #define IA_PRIVATE 0x00000004 2386e91bba0SGirish Moodalbail #define IA_TEMPORARY 0x00000008 2396e91bba0SGirish Moodalbail #define IA_DEPRECATED 0x00000010 2406e91bba0SGirish Moodalbail 2416e91bba0SGirish Moodalbail /* open/close libipadm handle */ 2426e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open(ipadm_handle_t *, uint32_t); 2436e91bba0SGirish Moodalbail extern void ipadm_close(ipadm_handle_t); 2446e91bba0SGirish Moodalbail 2456e91bba0SGirish Moodalbail /* Check authorization for network configuration */ 2466e91bba0SGirish Moodalbail extern boolean_t ipadm_check_auth(void); 2476e91bba0SGirish Moodalbail /* 2486e91bba0SGirish Moodalbail * Interface mangement functions 2496e91bba0SGirish Moodalbail */ 2506e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_if(ipadm_handle_t, char *, sa_family_t, 2516e91bba0SGirish Moodalbail uint32_t); 2526e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *, 2536e91bba0SGirish Moodalbail uint32_t); 2546e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t); 2556e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *, 2566e91bba0SGirish Moodalbail ipadm_if_info_t **, uint32_t, int64_t); 2576e91bba0SGirish Moodalbail extern void ipadm_free_if_info(ipadm_if_info_t *); 2586e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_if(ipadm_handle_t, const char *, 2596e91bba0SGirish Moodalbail sa_family_t, uint32_t); 260*36b41818SGirish Moodalbail extern void ipadm_if_move(ipadm_handle_t, const char *); 2616e91bba0SGirish Moodalbail 2626e91bba0SGirish Moodalbail /* 2636e91bba0SGirish Moodalbail * Address management functions 2646e91bba0SGirish Moodalbail */ 2656e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t, 2666e91bba0SGirish Moodalbail uint32_t); 2676e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_addr(ipadm_handle_t, const char *, 2686e91bba0SGirish Moodalbail uint32_t); 2696e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_addr(ipadm_handle_t, const char *, 2706e91bba0SGirish Moodalbail uint32_t); 2716e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_addr_info(ipadm_handle_t, const char *, 2726e91bba0SGirish Moodalbail ipadm_addr_info_t **, uint32_t, int64_t); 2736e91bba0SGirish Moodalbail extern void ipadm_free_addr_info(ipadm_addr_info_t *); 2746e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_up_addr(ipadm_handle_t, const char *, 2756e91bba0SGirish Moodalbail uint32_t); 2766e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_down_addr(ipadm_handle_t, const char *, 2776e91bba0SGirish Moodalbail uint32_t); 2786e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_refresh_addr(ipadm_handle_t, const char *, 2796e91bba0SGirish Moodalbail uint32_t); 2806e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_addr(ipadm_handle_t, const char *, 2816e91bba0SGirish Moodalbail uint32_t); 2826e91bba0SGirish Moodalbail 2836e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */ 2846e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addrobj(ipadm_addr_type_t, const char *, 2856e91bba0SGirish Moodalbail ipadm_addrobj_t *); 2866e91bba0SGirish Moodalbail extern void ipadm_destroy_addrobj(ipadm_addrobj_t); 2876e91bba0SGirish Moodalbail 2886e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */ 2896e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addr(ipadm_addrobj_t, const char *, 2906e91bba0SGirish Moodalbail sa_family_t); 2916e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_dst_addr(ipadm_addrobj_t, const char *, 2926e91bba0SGirish Moodalbail sa_family_t); 2936e91bba0SGirish Moodalbail 2946e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */ 2956e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_interface_id(ipadm_addrobj_t, const char *); 2966e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateless(ipadm_addrobj_t, boolean_t); 2976e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateful(ipadm_addrobj_t, boolean_t); 2986e91bba0SGirish Moodalbail 2996e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */ 3006e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_primary(ipadm_addrobj_t, boolean_t); 3016e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_wait_time(ipadm_addrobj_t, int32_t); 3026e91bba0SGirish Moodalbail 3036e91bba0SGirish Moodalbail /* 3046e91bba0SGirish Moodalbail * Property management functions 3056e91bba0SGirish Moodalbail */ 3066e91bba0SGirish Moodalbail /* call back function for the property walker */ 3076e91bba0SGirish Moodalbail typedef boolean_t ipadm_prop_wfunc_t(void *, const char *, uint_t); 3086e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *, 3096e91bba0SGirish Moodalbail void *); 3106e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_prop(const char *, uint_t, uint_t, 3116e91bba0SGirish Moodalbail ipadm_prop_wfunc_t *, void *); 3126e91bba0SGirish Moodalbail 3136e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */ 3146e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_ifprop(ipadm_handle_t, const char *, 3156e91bba0SGirish Moodalbail const char *, const char *, uint_t, uint_t); 3166e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_ifprop(ipadm_handle_t, const char *, 3176e91bba0SGirish Moodalbail const char *, char *, uint_t *, uint_t, uint_t); 3186e91bba0SGirish Moodalbail 3196e91bba0SGirish Moodalbail /* Address property management - set, reset and get */ 3206e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addrprop(ipadm_handle_t, const char *, 3216e91bba0SGirish Moodalbail const char *, const char *, uint_t); 3226e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_addrprop(ipadm_handle_t, const char *, char *, 3236e91bba0SGirish Moodalbail uint_t *, const char *, uint_t); 3246e91bba0SGirish Moodalbail 3256e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */ 3266e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_prop(ipadm_handle_t, const char *, 3276e91bba0SGirish Moodalbail const char *, uint_t, uint_t); 3286e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *, 3296e91bba0SGirish Moodalbail uint_t *, uint_t, uint_t); 3306e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_init_prop(void); 3316e91bba0SGirish Moodalbail 3326e91bba0SGirish Moodalbail /* 3336e91bba0SGirish Moodalbail * miscellaneous helper functions. 3346e91bba0SGirish Moodalbail */ 3356e91bba0SGirish Moodalbail extern const char *ipadm_status2str(ipadm_status_t); 3366e91bba0SGirish Moodalbail extern int ipadm_str2nvlist(const char *, nvlist_t **, uint_t); 3376e91bba0SGirish Moodalbail extern size_t ipadm_nvlist2str(nvlist_t *, char *, size_t); 3386e91bba0SGirish Moodalbail extern char *ipadm_proto2str(uint_t); 3396e91bba0SGirish Moodalbail extern uint_t ipadm_str2proto(const char *); 3406e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open_arp_on_udp(const char *, int *); 3416e91bba0SGirish Moodalbail 3426e91bba0SGirish Moodalbail #ifdef __cplusplus 3436e91bba0SGirish Moodalbail } 3446e91bba0SGirish Moodalbail #endif 3456e91bba0SGirish Moodalbail 3466e91bba0SGirish Moodalbail #endif /* _LIBIPADM_H */ 347