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. 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 */ 94550b6e40SSowmini Varadhan IPADM_EBADE, /* Invalid data exchange with ipmgmtd */ 95550b6e40SSowmini Varadhan IPADM_GZ_PERM /* Operation not permitted on from-gz intf */ 966e91bba0SGirish Moodalbail } ipadm_status_t; 976e91bba0SGirish Moodalbail 986e91bba0SGirish Moodalbail /* 996e91bba0SGirish Moodalbail * option flags taken by the libipadm functions 1006e91bba0SGirish Moodalbail * 1016e91bba0SGirish Moodalbail * - IPADM_OPT_PERSIST: 1026e91bba0SGirish Moodalbail * For all the create/delete/up/down/set/get functions, 1036e91bba0SGirish Moodalbail * requests to persist the configuration so that it can be 1046e91bba0SGirish Moodalbail * re-enabled or reapplied on boot. 1056e91bba0SGirish Moodalbail * 1066e91bba0SGirish Moodalbail * - IPADM_OPT_ACTIVE: 1076e91bba0SGirish Moodalbail * Requests to apply configuration without persisting it and 1086e91bba0SGirish Moodalbail * used by show-* subcommands to retrieve current values. 1096e91bba0SGirish Moodalbail * 1106e91bba0SGirish Moodalbail * - IPADM_OPT_DEFAULT: 1116e91bba0SGirish Moodalbail * retrieves the default value for a given property 1126e91bba0SGirish Moodalbail * 1136e91bba0SGirish Moodalbail * - IPADM_OPT_PERM 1146e91bba0SGirish Moodalbail * retrieves the permission for a given property 1156e91bba0SGirish Moodalbail * 1166e91bba0SGirish Moodalbail * - IPADM_OPT_POSSIBLE 1176e91bba0SGirish Moodalbail * retrieves the range of values for a given property 1186e91bba0SGirish Moodalbail * 1196e91bba0SGirish Moodalbail * - IPADM_OPT_APPEND 1206e91bba0SGirish Moodalbail * for multi-valued properties, appends a new value. 1216e91bba0SGirish Moodalbail * 1226e91bba0SGirish Moodalbail * - IPADM_OPT_REMOVE 1236e91bba0SGirish Moodalbail * for multi-valued properties, removes the specified value 1246e91bba0SGirish Moodalbail * 1256e91bba0SGirish Moodalbail * - IPADM_OPT_IPMP 1266e91bba0SGirish Moodalbail * Used in ipadm_create_if() to plumb ipmp interfaces. 1276e91bba0SGirish Moodalbail * 1286e91bba0SGirish Moodalbail * - IPADM_OPT_GENPPA 1296e91bba0SGirish Moodalbail * Used in ipadm_create_if() to generate a ppa for the given interface. 1306e91bba0SGirish Moodalbail * 1316e91bba0SGirish Moodalbail * - IPADM_OPT_ZEROADDR 1326e91bba0SGirish Moodalbail * return :: or INADDR_ANY 1336e91bba0SGirish Moodalbail * 1346e91bba0SGirish Moodalbail * - IPADM_OPT_RELEASE 1356e91bba0SGirish Moodalbail * Used to release the lease on a dhcp address object 1366e91bba0SGirish Moodalbail * 1376e91bba0SGirish Moodalbail * - IPADM_OPT_INFORM 1386e91bba0SGirish Moodalbail * Used to perform DHCP_INFORM on a specified static address object 1396e91bba0SGirish Moodalbail * 1406e91bba0SGirish Moodalbail * - IPADM_OPT_UP 1416e91bba0SGirish Moodalbail * Used to bring up a static address on creation 142f6da83d4SAnurag S. Maskey * 143f6da83d4SAnurag S. Maskey * - IPADM_OPT_V46 144f6da83d4SAnurag S. Maskey * Used to plumb both IPv4 and IPv6 interfaces by ipadm_create_addr() 1456e91bba0SGirish Moodalbail */ 1466e91bba0SGirish Moodalbail #define IPADM_OPT_PERSIST 0x00000001 1476e91bba0SGirish Moodalbail #define IPADM_OPT_ACTIVE 0x00000002 1486e91bba0SGirish Moodalbail #define IPADM_OPT_DEFAULT 0x00000004 1496e91bba0SGirish Moodalbail #define IPADM_OPT_PERM 0x00000008 1506e91bba0SGirish Moodalbail #define IPADM_OPT_POSSIBLE 0x00000010 1516e91bba0SGirish Moodalbail #define IPADM_OPT_APPEND 0x00000020 1526e91bba0SGirish Moodalbail #define IPADM_OPT_REMOVE 0x00000040 1536e91bba0SGirish Moodalbail #define IPADM_OPT_IPMP 0x00000080 1546e91bba0SGirish Moodalbail #define IPADM_OPT_GENPPA 0x00000100 1556e91bba0SGirish Moodalbail #define IPADM_OPT_ZEROADDR 0x00000200 1566e91bba0SGirish Moodalbail #define IPADM_OPT_RELEASE 0x00000400 1576e91bba0SGirish Moodalbail #define IPADM_OPT_INFORM 0x00000800 1586e91bba0SGirish Moodalbail #define IPADM_OPT_UP 0x00001000 159f6da83d4SAnurag S. Maskey #define IPADM_OPT_V46 0x00002000 1606e91bba0SGirish Moodalbail 1616e91bba0SGirish Moodalbail /* IPADM property class */ 1626e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODULE 0x00000001 /* on 'protocol' only */ 1636e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_IF 0x00000002 /* on 'IP interface' only */ 1646e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_ADDR 0x00000004 /* on 'IP address' only */ 1656e91bba0SGirish Moodalbail /* protocol property that can be applied on interface too */ 1666e91bba0SGirish Moodalbail #define IPADMPROP_CLASS_MODIF (IPADMPROP_CLASS_MODULE | IPADMPROP_CLASS_IF) 1676e91bba0SGirish Moodalbail 1686e91bba0SGirish Moodalbail /* opaque ipadm handle to libipadm functions */ 1696e91bba0SGirish Moodalbail struct ipadm_handle; 1706e91bba0SGirish Moodalbail typedef struct ipadm_handle *ipadm_handle_t; 1716e91bba0SGirish Moodalbail 1726e91bba0SGirish Moodalbail /* ipadm_handle flags */ 1736e91bba0SGirish Moodalbail #define IPH_VRRP 0x00000001 /* Caller is VRRP */ 1746e91bba0SGirish Moodalbail #define IPH_LEGACY 0x00000002 /* Caller is legacy app */ 175550b6e40SSowmini Varadhan #define IPH_IPMGMTD 0x00000004 /* Caller is ipmgmtd itself */ 176*8887b57dSGirish Moodalbail /* 177*8887b57dSGirish Moodalbail * Indicates that the operation being invoked is in 'init' context. This is 178*8887b57dSGirish Moodalbail * a library private flag. 179*8887b57dSGirish Moodalbail */ 180*8887b57dSGirish Moodalbail #define IPH_INIT 0x10000000 1816e91bba0SGirish Moodalbail 1826e91bba0SGirish Moodalbail /* opaque address object structure */ 1836e91bba0SGirish Moodalbail typedef struct ipadm_addrobj_s *ipadm_addrobj_t; 1846e91bba0SGirish Moodalbail 1856e91bba0SGirish Moodalbail /* ipadm_if_info_t states */ 1866e91bba0SGirish Moodalbail typedef enum { 1876e91bba0SGirish Moodalbail IFIS_OK, /* Interface is usable */ 1886e91bba0SGirish Moodalbail IFIS_DOWN, /* Interface has no UP addresses */ 1896e91bba0SGirish Moodalbail IFIS_FAILED, /* Interface has failed. */ 1906e91bba0SGirish Moodalbail IFIS_OFFLINE, /* Interface has been offlined */ 1916e91bba0SGirish Moodalbail IFIS_DISABLED /* Interface has been disabled. */ 1926e91bba0SGirish Moodalbail } ipadm_if_state_t; 1936e91bba0SGirish Moodalbail 1946e91bba0SGirish Moodalbail typedef struct ipadm_if_info_s { 1956e91bba0SGirish Moodalbail struct ipadm_if_info_s *ifi_next; 1966e91bba0SGirish Moodalbail char ifi_name[LIFNAMSIZ]; /* interface name */ 1976e91bba0SGirish Moodalbail ipadm_if_state_t ifi_state; /* see above */ 1986e91bba0SGirish Moodalbail uint_t ifi_cflags; /* current flags */ 1996e91bba0SGirish Moodalbail uint_t ifi_pflags; /* persistent flags */ 2006e91bba0SGirish Moodalbail } ipadm_if_info_t; 2016e91bba0SGirish Moodalbail 2026e91bba0SGirish Moodalbail /* ipadm_if_info_t flags */ 2036e91bba0SGirish Moodalbail #define IFIF_BROADCAST 0x00000001 2046e91bba0SGirish Moodalbail #define IFIF_MULTICAST 0x00000002 2056e91bba0SGirish Moodalbail #define IFIF_POINTOPOINT 0x00000004 2066e91bba0SGirish Moodalbail #define IFIF_VIRTUAL 0x00000008 2076e91bba0SGirish Moodalbail #define IFIF_IPMP 0x00000010 2086e91bba0SGirish Moodalbail #define IFIF_STANDBY 0x00000020 2096e91bba0SGirish Moodalbail #define IFIF_INACTIVE 0x00000040 2106e91bba0SGirish Moodalbail #define IFIF_VRRP 0x00000080 2116e91bba0SGirish Moodalbail #define IFIF_NOACCEPT 0x00000100 2126e91bba0SGirish Moodalbail #define IFIF_IPV4 0x00000200 2136e91bba0SGirish Moodalbail #define IFIF_IPV6 0x00000400 214550b6e40SSowmini Varadhan #define IFIF_L3PROTECT 0x00000800 2156e91bba0SGirish Moodalbail 2166e91bba0SGirish Moodalbail /* ipadm_addr_info_t state */ 2176e91bba0SGirish Moodalbail typedef enum { 2186e91bba0SGirish Moodalbail IFA_DISABLED, /* Address not in active configuration. */ 2196e91bba0SGirish Moodalbail IFA_DUPLICATE, /* DAD failed. */ 2206e91bba0SGirish Moodalbail IFA_DOWN, /* Address is not IFF_UP */ 2216e91bba0SGirish Moodalbail IFA_TENTATIVE, /* DAD verification initiated */ 2226e91bba0SGirish Moodalbail IFA_OK, /* Address is usable */ 2236e91bba0SGirish Moodalbail IFA_INACCESSIBLE /* Interface has failed */ 2246e91bba0SGirish Moodalbail } ipadm_addr_state_t; 2256e91bba0SGirish Moodalbail 2266e91bba0SGirish Moodalbail /* possible address types */ 2276e91bba0SGirish Moodalbail typedef enum { 2286e91bba0SGirish Moodalbail IPADM_ADDR_NONE, 2296e91bba0SGirish Moodalbail IPADM_ADDR_STATIC, 2306e91bba0SGirish Moodalbail IPADM_ADDR_IPV6_ADDRCONF, 2316e91bba0SGirish Moodalbail IPADM_ADDR_DHCP 2326e91bba0SGirish Moodalbail } ipadm_addr_type_t; 2336e91bba0SGirish Moodalbail 2346e91bba0SGirish Moodalbail typedef struct ipadm_addr_info_s { 2356e91bba0SGirish Moodalbail struct ifaddrs ia_ifa; /* list of addresses */ 2366e91bba0SGirish Moodalbail char ia_sname[NI_MAXHOST]; /* local hostname */ 2376e91bba0SGirish Moodalbail char ia_dname[NI_MAXHOST]; /* remote hostname */ 2386e91bba0SGirish Moodalbail char ia_aobjname[IPADM_AOBJSIZ]; 2396e91bba0SGirish Moodalbail uint_t ia_cflags; /* active flags */ 2406e91bba0SGirish Moodalbail uint_t ia_pflags; /* persistent flags */ 2416e91bba0SGirish Moodalbail ipadm_addr_type_t ia_atype; /* see above */ 2426e91bba0SGirish Moodalbail ipadm_addr_state_t ia_state; /* see above */ 2436e91bba0SGirish Moodalbail } ipadm_addr_info_t; 2446e91bba0SGirish Moodalbail #define IA_NEXT(ia) ((ipadm_addr_info_t *)(ia->ia_ifa.ifa_next)) 2456e91bba0SGirish Moodalbail 2466e91bba0SGirish Moodalbail /* ipadm_addr_info_t flags */ 2476e91bba0SGirish Moodalbail #define IA_UP 0x00000001 2486e91bba0SGirish Moodalbail #define IA_UNNUMBERED 0x00000002 2496e91bba0SGirish Moodalbail #define IA_PRIVATE 0x00000004 2506e91bba0SGirish Moodalbail #define IA_TEMPORARY 0x00000008 2516e91bba0SGirish Moodalbail #define IA_DEPRECATED 0x00000010 2526e91bba0SGirish Moodalbail 2536e91bba0SGirish Moodalbail /* open/close libipadm handle */ 2546e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open(ipadm_handle_t *, uint32_t); 2556e91bba0SGirish Moodalbail extern void ipadm_close(ipadm_handle_t); 2566e91bba0SGirish Moodalbail 2576e91bba0SGirish Moodalbail /* Check authorization for network configuration */ 2586e91bba0SGirish Moodalbail extern boolean_t ipadm_check_auth(void); 2596e91bba0SGirish Moodalbail /* 2606e91bba0SGirish Moodalbail * Interface mangement functions 2616e91bba0SGirish Moodalbail */ 2626e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_if(ipadm_handle_t, char *, sa_family_t, 2636e91bba0SGirish Moodalbail uint32_t); 2646e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_if(ipadm_handle_t, const char *, 2656e91bba0SGirish Moodalbail uint32_t); 2666e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_if(ipadm_handle_t, const char *, uint32_t); 2676e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_if_info(ipadm_handle_t, const char *, 2686e91bba0SGirish Moodalbail ipadm_if_info_t **, uint32_t, int64_t); 2696e91bba0SGirish Moodalbail extern void ipadm_free_if_info(ipadm_if_info_t *); 2706e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_if(ipadm_handle_t, const char *, 2716e91bba0SGirish Moodalbail sa_family_t, uint32_t); 27236b41818SGirish Moodalbail extern void ipadm_if_move(ipadm_handle_t, const char *); 2736e91bba0SGirish Moodalbail 2746e91bba0SGirish Moodalbail /* 2756e91bba0SGirish Moodalbail * Address management functions 2766e91bba0SGirish Moodalbail */ 2776e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addr(ipadm_handle_t, ipadm_addrobj_t, 2786e91bba0SGirish Moodalbail uint32_t); 2796e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_disable_addr(ipadm_handle_t, const char *, 2806e91bba0SGirish Moodalbail uint32_t); 2816e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_enable_addr(ipadm_handle_t, const char *, 2826e91bba0SGirish Moodalbail uint32_t); 2836e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_addr_info(ipadm_handle_t, const char *, 2846e91bba0SGirish Moodalbail ipadm_addr_info_t **, uint32_t, int64_t); 2856e91bba0SGirish Moodalbail extern void ipadm_free_addr_info(ipadm_addr_info_t *); 2866e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_up_addr(ipadm_handle_t, const char *, 2876e91bba0SGirish Moodalbail uint32_t); 2886e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_down_addr(ipadm_handle_t, const char *, 2896e91bba0SGirish Moodalbail uint32_t); 2906e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_refresh_addr(ipadm_handle_t, const char *, 2916e91bba0SGirish Moodalbail uint32_t); 2926e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_delete_addr(ipadm_handle_t, const char *, 2936e91bba0SGirish Moodalbail uint32_t); 2946e91bba0SGirish Moodalbail 2956e91bba0SGirish Moodalbail /* Functions related to creating/deleting/modifying opaque address object */ 2966e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_create_addrobj(ipadm_addr_type_t, const char *, 2976e91bba0SGirish Moodalbail ipadm_addrobj_t *); 2986e91bba0SGirish Moodalbail extern void ipadm_destroy_addrobj(ipadm_addrobj_t); 299f6da83d4SAnurag S. Maskey extern ipadm_status_t ipadm_get_aobjname(const ipadm_addrobj_t, char *, 300f6da83d4SAnurag S. Maskey size_t); 3016e91bba0SGirish Moodalbail 3026e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for static addresses */ 3036e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addr(ipadm_addrobj_t, const char *, 3046e91bba0SGirish Moodalbail sa_family_t); 3056e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_dst_addr(ipadm_addrobj_t, const char *, 3066e91bba0SGirish Moodalbail sa_family_t); 307f6da83d4SAnurag S. Maskey extern ipadm_status_t ipadm_get_addr(const ipadm_addrobj_t, 308f6da83d4SAnurag S. Maskey struct sockaddr_storage *); 3096e91bba0SGirish Moodalbail 3106e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for IPv6 addrconf */ 3116e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_interface_id(ipadm_addrobj_t, const char *); 3126e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateless(ipadm_addrobj_t, boolean_t); 3136e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_stateful(ipadm_addrobj_t, boolean_t); 3146e91bba0SGirish Moodalbail 3156e91bba0SGirish Moodalbail /* Functions to set fields in addrobj for DHCP */ 3166e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_primary(ipadm_addrobj_t, boolean_t); 3176e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_wait_time(ipadm_addrobj_t, int32_t); 3186e91bba0SGirish Moodalbail 3196e91bba0SGirish Moodalbail /* 3206e91bba0SGirish Moodalbail * Property management functions 3216e91bba0SGirish Moodalbail */ 3226e91bba0SGirish Moodalbail /* call back function for the property walker */ 3236e91bba0SGirish Moodalbail typedef boolean_t ipadm_prop_wfunc_t(void *, const char *, uint_t); 3246e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_proptbl(uint_t, uint_t, ipadm_prop_wfunc_t *, 3256e91bba0SGirish Moodalbail void *); 3266e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_walk_prop(const char *, uint_t, uint_t, 3276e91bba0SGirish Moodalbail ipadm_prop_wfunc_t *, void *); 3286e91bba0SGirish Moodalbail 3296e91bba0SGirish Moodalbail /* Interface property management - set, reset and get */ 3306e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_ifprop(ipadm_handle_t, const char *, 3316e91bba0SGirish Moodalbail const char *, const char *, uint_t, uint_t); 3326e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_ifprop(ipadm_handle_t, const char *, 3336e91bba0SGirish Moodalbail const char *, char *, uint_t *, uint_t, uint_t); 3346e91bba0SGirish Moodalbail 3356e91bba0SGirish Moodalbail /* Address property management - set, reset and get */ 3366e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_addrprop(ipadm_handle_t, const char *, 3376e91bba0SGirish Moodalbail const char *, const char *, uint_t); 3386e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_addrprop(ipadm_handle_t, const char *, char *, 3396e91bba0SGirish Moodalbail uint_t *, const char *, uint_t); 3406e91bba0SGirish Moodalbail 3416e91bba0SGirish Moodalbail /* Protoocl property management - set, reset and get */ 3426e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_set_prop(ipadm_handle_t, const char *, 3436e91bba0SGirish Moodalbail const char *, uint_t, uint_t); 3446e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_get_prop(ipadm_handle_t, const char *, char *, 3456e91bba0SGirish Moodalbail uint_t *, uint_t, uint_t); 3466e91bba0SGirish Moodalbail 3476e91bba0SGirish Moodalbail /* 3486e91bba0SGirish Moodalbail * miscellaneous helper functions. 3496e91bba0SGirish Moodalbail */ 3506e91bba0SGirish Moodalbail extern const char *ipadm_status2str(ipadm_status_t); 3516e91bba0SGirish Moodalbail extern int ipadm_str2nvlist(const char *, nvlist_t **, uint_t); 3526e91bba0SGirish Moodalbail extern size_t ipadm_nvlist2str(nvlist_t *, char *, size_t); 3536e91bba0SGirish Moodalbail extern char *ipadm_proto2str(uint_t); 3546e91bba0SGirish Moodalbail extern uint_t ipadm_str2proto(const char *); 3556e91bba0SGirish Moodalbail extern ipadm_status_t ipadm_open_arp_on_udp(const char *, int *); 356*8887b57dSGirish Moodalbail extern int ipadm_legacy2new_propname(const char *, char *, 357*8887b57dSGirish Moodalbail uint_t, uint_t *); 358*8887b57dSGirish Moodalbail extern int ipadm_new2legacy_propname(const char *, char *, 359*8887b57dSGirish Moodalbail uint_t, uint_t); 3606e91bba0SGirish Moodalbail 3616e91bba0SGirish Moodalbail #ifdef __cplusplus 3626e91bba0SGirish Moodalbail } 3636e91bba0SGirish Moodalbail #endif 3646e91bba0SGirish Moodalbail 3656e91bba0SGirish Moodalbail #endif /* _LIBIPADM_H */ 366