Lines Matching refs:ipaddr

128  * `ipadm_atype' fields of the given `ipaddr'.
131 i_ipadm_init_addr(ipadm_addrobj_t ipaddr, const char *ifname,
134 bzero(ipaddr, sizeof (struct ipadm_addrobj_s));
135 (void) strlcpy(ipaddr->ipadm_ifname, ifname,
136 sizeof (ipaddr->ipadm_ifname));
137 (void) strlcpy(ipaddr->ipadm_aobjname, aobjname,
138 sizeof (ipaddr->ipadm_aobjname));
139 ipaddr->ipadm_atype = atype;
182 i_ipadm_get_addrobj(ipadm_handle_t iph, ipadm_addrobj_t ipaddr)
190 (void) strlcpy(larg.ia_aobjname, ipaddr->ipadm_aobjname,
198 (void) strlcpy(ipaddr->ipadm_ifname, rval.ir_ifname,
199 sizeof (ipaddr->ipadm_ifname));
200 ipaddr->ipadm_lifnum = rval.ir_lnum;
201 ipaddr->ipadm_atype = rval.ir_atype;
202 ipaddr->ipadm_af = rval.ir_family;
203 ipaddr->ipadm_flags = rval.ir_flags;
205 (void) memcpy(&ipaddr->ipadm_intfid, &rval.ir_ifid,
206 sizeof (ipaddr->ipadm_intfid));
214 * in `ipaddr' from persistent DB.
217 i_ipadm_get_static_addr_db(ipadm_handle_t iph, ipadm_addrobj_t ipaddr)
225 char *aobjname = ipaddr->ipadm_aobjname;
263 ipadm_set_addr(ipaddr, sname, af) != IPADM_SUCCESS) {
361 struct ipadm_addrobj_s ipaddr;
433 ipaddr.ipadm_aobjname[0] = '\0';
434 (void) strlcpy(ipaddr.ipadm_ifname, cifname,
435 sizeof (ipaddr.ipadm_ifname));
436 ipaddr.ipadm_lifnum = lnum;
437 ipaddr.ipadm_af = ifap->ifa_addr->sa_family;
438 status = i_ipadm_get_lif2addrobj(iph, &ipaddr);
449 (void) strlcpy(curr->ia_aobjname, ipaddr.ipadm_aobjname,
451 curr->ia_atype = ipaddr.ipadm_atype;
911 ipadm_addrobj_t ipaddr = (ipadm_addrobj_t)arg;
913 if (ipaddr->ipadm_atype == IPADM_ADDR_DHCP)
931 i_ipadm_addrobj2lifname(ipaddr, lifr.lifr_name,
964 ipadm_addrobj_t ipaddr = (ipadm_addrobj_t)arg;
966 if (ipaddr->ipadm_atype == IPADM_ADDR_DHCP &&
996 i_ipadm_addrobj2lifname(ipaddr, lifname, sizeof (lifname));
1056 ipadm_addrobj_t ipaddr = (ipadm_addrobj_t)arg;
1061 i_ipadm_addrobj2lifname(ipaddr, lifname, sizeof (lifname));
1062 if (ipaddr->ipadm_flags & IPMGMT_ACTIVE) {
1084 if (!(ipaddr->ipadm_flags & IPMGMT_ACTIVE)) {
1089 if (ipaddr->ipadm_atype == IPADM_ADDR_DHCP ||
1090 ipaddr->ipadm_af == AF_INET6) {
1098 status = i_ipadm_get_static_addr_db(iph, ipaddr);
1101 sin = SIN(&ipaddr->ipadm_static_addr);
1171 ipadm_addrobj_t ipaddr = (ipadm_addrobj_t)arg;
1179 i_ipadm_addrobj2lifname(ipaddr, lifname, sizeof (lifname));
1180 if (ipaddr->ipadm_flags & IPMGMT_ACTIVE) {
1201 if (ipaddr->ipadm_flags & IPMGMT_ACTIVE) {
1212 } else if ((ipaddr->ipadm_flags & IPMGMT_PERSIST) &&
1213 ipaddr->ipadm_atype == IPADM_ADDR_DHCP) {
1225 status = i_ipadm_get_static_addr_db(iph, ipaddr);
1229 &ipaddr->ipadm_static_addr, &prefixlen);
1268 ipadm_addrobj_t ipaddr = (ipadm_addrobj_t)arg;
1287 i_ipadm_addrobj2lifname(ipaddr, lifname, sizeof (lifname));
1396 struct ipadm_addrobj_s ipaddr;
1414 i_ipadm_init_addr(&ipaddr, "", aobjname, IPADM_ADDR_NONE);
1415 if ((status = i_ipadm_get_addrobj(iph, &ipaddr)) != IPADM_SUCCESS)
1418 if (ipaddr.ipadm_atype == IPADM_ADDR_IPV6_ADDRCONF)
1420 af = ipaddr.ipadm_af;
1431 if (!(ipaddr.ipadm_flags & IPMGMT_ACTIVE)) {
1434 status = pdp->ipd_get(iph, &ipaddr, pdp, buf, bufsize,
1439 status = pdp->ipd_get(iph, &ipaddr, pdp, buf, bufsize,
1444 status = pdp->ipd_get_range(iph, &ipaddr, pdp, buf,
1452 &ipaddr);
1470 struct ipadm_addrobj_s ipaddr;
1505 i_ipadm_init_addr(&ipaddr, "", aobjname, IPADM_ADDR_NONE);
1506 if ((status = i_ipadm_get_addrobj(iph, &ipaddr)) != IPADM_SUCCESS)
1509 if (!(ipaddr.ipadm_flags & IPMGMT_ACTIVE))
1514 !(ipaddr.ipadm_flags & IPMGMT_PERSIST))
1525 if (ipaddr.ipadm_atype == IPADM_ADDR_IPV6_ADDRCONF)
1532 if (!(ipaddr.ipadm_flags & IPMGMT_ACTIVE))
1535 af = ipaddr.ipadm_af;
1541 status = pdp->ipd_get(iph, &ipaddr, pdp, defbuf, &defbufsize,
1548 status = pdp->ipd_set(iph, &ipaddr, pdp, pval, af, pflags);
1557 status = i_ipadm_persist_propval(iph, pdp, pval, &ipaddr,
1728 ipadm_set_addr(ipadm_addrobj_t ipaddr, const char *astr, sa_family_t af)
1753 status = i_ipadm_resolve_addr(addrstr, af, &ipaddr->ipadm_static_addr);
1755 (void) strlcpy(ipaddr->ipadm_static_aname, addrstr,
1756 sizeof (ipaddr->ipadm_static_aname));
1757 ipaddr->ipadm_af = ipaddr->ipadm_static_addr.ss_family;
1758 ipaddr->ipadm_static_prefixlen = prefixlen;
1764 * Gets the static source address from the address object in `ipaddr'.
1768 ipadm_get_addr(const ipadm_addrobj_t ipaddr, struct sockaddr_storage *addr)
1770 if (ipaddr == NULL || ipaddr->ipadm_atype != IPADM_ADDR_STATIC ||
1774 *addr = ipaddr->ipadm_static_addr;
1779 * Set up tunnel destination address in ipaddr by contacting DNS.
1786 ipadm_set_dst_addr(ipadm_addrobj_t ipaddr, const char *daddrstr, sa_family_t af)
1795 &ipaddr->ipadm_static_dst_addr);
1797 (void) strlcpy(ipaddr->ipadm_static_dname, daddrstr,
1798 sizeof (ipaddr->ipadm_static_dname));
1804 * Sets the interface ID in the address object `ipaddr' with the address
1806 * ipadm_create_addr() is called with `ipaddr' with address type
1810 ipadm_set_interface_id(ipadm_addrobj_t ipaddr, const char *interface_id)
1818 if (ipaddr == NULL || interface_id == NULL ||
1819 ipaddr->ipadm_atype != IPADM_ADDR_IPV6_ADDRCONF)
1826 sin6 = &ipaddr->ipadm_intfid;
1833 ipaddr->ipadm_intfidlen = prefixlen;
1840 * Sets the value for the field `ipadm_stateless' in address object `ipaddr'.
1843 ipadm_set_stateless(ipadm_addrobj_t ipaddr, boolean_t stateless)
1845 if (ipaddr == NULL ||
1846 ipaddr->ipadm_atype != IPADM_ADDR_IPV6_ADDRCONF)
1848 ipaddr->ipadm_stateless = stateless;
1854 * Sets the value for the field `ipadm_stateful' in address object `ipaddr'.
1857 ipadm_set_stateful(ipadm_addrobj_t ipaddr, boolean_t stateful)
1859 if (ipaddr == NULL ||
1860 ipaddr->ipadm_atype != IPADM_ADDR_IPV6_ADDRCONF)
1862 ipaddr->ipadm_stateful = stateful;
1868 * Sets the dhcp parameter `ipadm_primary' in the address object `ipaddr'.
1874 ipadm_set_primary(ipadm_addrobj_t ipaddr, boolean_t primary)
1876 if (ipaddr == NULL || ipaddr->ipadm_atype != IPADM_ADDR_DHCP)
1878 ipaddr->ipadm_primary = primary;
1884 * Sets the dhcp parameter `ipadm_wait' in the address object `ipaddr'.
1895 ipadm_set_wait_time(ipadm_addrobj_t ipaddr, int32_t wait)
1897 if (ipaddr == NULL || ipaddr->ipadm_atype != IPADM_ADDR_DHCP)
1899 ipaddr->ipadm_wait = wait;
1908 * If the libipadm consumer set `ipaddr.ipadm_aobjname[0]' to `\0', then the
1909 * daemon will generate an `aobjname' for the given `ipaddr'.
1912 i_ipadm_lookupadd_addrobj(ipadm_handle_t iph, ipadm_addrobj_t ipaddr)
1920 (void) strlcpy(larg.ia_aobjname, ipaddr->ipadm_aobjname,
1922 (void) strlcpy(larg.ia_ifname, ipaddr->ipadm_ifname,
1924 larg.ia_family = ipaddr->ipadm_af;
1925 larg.ia_atype = ipaddr->ipadm_atype;
1930 if (err == 0 && ipaddr->ipadm_aobjname[0] == '\0') {
1932 (void) strlcpy(ipaddr->ipadm_aobjname, rval.ir_aobjname,
1933 sizeof (ipaddr->ipadm_aobjname));
1942 * address object `ipaddr'. If another address object has the same
1946 i_ipadm_setlifnum_addrobj(ipadm_handle_t iph, ipadm_addrobj_t ipaddr)
1957 (void) strlcpy(larg.ia_aobjname, ipaddr->ipadm_aobjname,
1959 larg.ia_lnum = ipaddr->ipadm_lifnum;
1960 (void) strlcpy(larg.ia_ifname, ipaddr->ipadm_ifname,
1962 larg.ia_family = ipaddr->ipadm_af;
1984 struct ipadm_addrobj_s ipaddr;
2026 i_ipadm_init_addr(&ipaddr, ifname, aobjname, IPADM_ADDR_STATIC);
2030 status = ipadm_set_addr(&ipaddr, cidraddr, af);
2033 status = ipadm_set_addr(&ipaddr, sname, af);
2039 status = ipadm_set_dst_addr(&ipaddr, dname, af);
2043 return (i_ipadm_create_addr(iph, &ipaddr, flags));
2058 struct ipadm_addrobj_s ipaddr;
2085 i_ipadm_init_addr(&ipaddr, ifname, aobjname, IPADM_ADDR_DHCP);
2086 ipaddr.ipadm_primary = primary;
2088 ipaddr.ipadm_wait = 0;
2090 ipaddr.ipadm_wait = wait;
2091 ipaddr.ipadm_af = AF_INET;
2092 return (i_ipadm_create_dhcp(iph, &ipaddr, IPADM_OPT_ACTIVE));
2102 struct ipadm_addrobj_s ipaddr;
2139 i_ipadm_init_addr(&ipaddr, ifname, aobjname, IPADM_ADDR_IPV6_ADDRCONF);
2141 ipaddr.ipadm_intfidlen = intfidlen;
2142 bcopy(addr6, &ipaddr.ipadm_intfid.sin6_addr.s6_addr, n);
2144 ipaddr.ipadm_stateless = (strcmp(stateless, "yes") == 0);
2145 ipaddr.ipadm_stateful = (strcmp(stateful, "yes") == 0);
2146 return (i_ipadm_create_ipv6addrs(iph, &ipaddr, IPADM_OPT_ACTIVE));
2159 ipadm_addrobj_t *ipaddr)
2167 if (ipaddr == NULL)
2169 *ipaddr = NULL;
2234 *ipaddr = newaddr;
2242 * Returns `aobjname' from the address object in `ipaddr'.
2245 ipadm_get_aobjname(const ipadm_addrobj_t ipaddr, char *aobjname, size_t len)
2247 if (ipaddr == NULL || aobjname == NULL)
2249 if (strlcpy(aobjname, ipaddr->ipadm_aobjname, len) >= len)
2256 * Frees the address object in `ipaddr'.
2259 ipadm_destroy_addrobj(ipadm_addrobj_t ipaddr)
2261 free(ipaddr);
2265 * Retrieves the logical interface name from `ipaddr' and stores the
2269 i_ipadm_addrobj2lifname(ipadm_addrobj_t ipaddr, char *lifname, int lifnamesize)
2271 if (ipaddr->ipadm_lifnum != 0) {
2273 ipaddr->ipadm_ifname, ipaddr->ipadm_lifnum);
2276 ipaddr->ipadm_ifname);
2396 * Adds the IP address contained in the 'ipaddr' argument to the physical
2445 struct ipadm_addrobj_s ipaddr;
2447 ipaddr = *addr;
2448 status = i_ipadm_get_lif2addrobj(iph, &ipaddr);
2455 if (ipaddr.ipadm_atype != IPADM_ADDR_STATIC)
2462 ipaddr.ipadm_aobjname, IPADM_AOBJSIZ);
2621 * Creates the static address in `ipaddr' in kernel. After successfully
2626 i_ipadm_create_addr(ipadm_handle_t iph, ipadm_addrobj_t ipaddr, uint32_t flags)
2632 const struct sockaddr_storage *addr = &ipaddr->ipadm_static_addr;
2633 const struct sockaddr_storage *daddr = &ipaddr->ipadm_static_dst_addr;
2641 af = ipaddr->ipadm_af;
2645 if (ipaddr->ipadm_static_prefixlen == 0) {
2648 &ipaddr->ipadm_static_addr,
2649 &ipaddr->ipadm_static_prefixlen);
2654 (void) plen2mask(ipaddr->ipadm_static_prefixlen, af,
2663 status = i_ipadm_do_addif(iph, ipaddr);
2674 status = i_ipadm_setlifnum_addrobj(iph, ipaddr);
2681 i_ipadm_addrobj2lifname(ipaddr, lifr.lifr_name,
2724 ipaddr->ipadm_aobjname,
2732 status = i_ipadm_addr_persist(iph, ipaddr, default_prefixlen,
2737 (void) i_ipadm_delete_addr(iph, ipaddr);
2762 struct ipadm_addrobj_s ipaddr;
2775 bzero(&ipaddr, sizeof (ipaddr));
2776 if (aobjname == NULL || strlcpy(ipaddr.ipadm_aobjname, aobjname,
2782 status = i_ipadm_get_addrobj(iph, &ipaddr);
2786 if (release && ipaddr.ipadm_atype != IPADM_ADDR_DHCP)
2792 if (!(ipaddr.ipadm_flags & IPMGMT_ACTIVE) &&
2801 if (ipaddr.ipadm_flags & IPMGMT_ACTIVE) {
2802 switch (ipaddr.ipadm_atype) {
2804 status = i_ipadm_delete_addr(iph, &ipaddr);
2807 status = i_ipadm_delete_dhcp(iph, &ipaddr, release);
2810 status = i_ipadm_delete_ipv6addrs(iph, &ipaddr);
2833 if (!(ipaddr.ipadm_flags & IPMGMT_PERSIST) &&
2837 status = i_ipadm_delete_addrobj(iph, &ipaddr, flags);
3029 * object in `ipaddr'. This door call also updates the persistent DB to
3034 i_ipadm_addr_persist(ipadm_handle_t iph, const ipadm_addrobj_t ipaddr,
3037 char *aname = ipaddr->ipadm_aobjname;
3051 ipaddr->ipadm_ifname)) != 0 ||
3054 ipaddr->ipadm_lifnum)) != 0) {
3058 switch (ipaddr->ipadm_atype) {
3060 status = i_ipadm_add_ipaddr2nvl(nvl, ipaddr);
3064 ipaddr->ipadm_static_prefixlen);
3072 status = i_ipadm_add_dhcp2nvl(nvl, ipaddr->ipadm_primary,
3073 ipaddr->ipadm_wait);
3076 status = i_ipadm_add_intfid2nvl(nvl, ipaddr);
3107 ipaddr->ipadm_atype == IPADM_ADDR_STATIC &&
3114 status = i_ipadm_persist_propval(iph, pdp, pval, ipaddr, flags);
3150 * Makes a door call to ipmgmtd to remove the address object in `ipaddr'
3157 i_ipadm_delete_addrobj(ipadm_handle_t iph, const ipadm_addrobj_t ipaddr,
3169 (void) strlcpy(arg.ia_aobjname, ipaddr->ipadm_aobjname,
3171 arg.ia_lnum = ipaddr->ipadm_lifnum;
3180 * The arguments `ipaddr' and `ifflags' must be allocated by the caller.
3184 ipadm_addrobj_t ipaddr, uint32_t ipadm_flags, uint64_t *ifflags)
3194 if (aobjname == NULL || strlcpy(ipaddr->ipadm_aobjname, aobjname,
3200 status = i_ipadm_get_addrobj(iph, ipaddr);
3204 if (!(ipaddr->ipadm_flags & IPMGMT_ACTIVE))
3207 !(ipaddr->ipadm_flags & IPMGMT_PERSIST))
3209 if (ipaddr->ipadm_atype == IPADM_ADDR_IPV6_ADDRCONF ||
3210 (ipaddr->ipadm_atype == IPADM_ADDR_DHCP &&
3214 i_ipadm_addrobj2lifname(ipaddr, lifname, sizeof (lifname));
3215 return (i_ipadm_get_flags(iph, lifname, ipaddr->ipadm_af, ifflags));
3227 struct ipadm_addrobj_s ipaddr;
3232 status = i_ipadm_updown_common(iph, aobjname, &ipaddr, ipadm_flags,
3245 i_ipadm_addrobj2lifname(&ipaddr, lifname, sizeof (lifname));
3246 status = i_ipadm_set_flags(iph, lifname, ipaddr.ipadm_af, IFF_UP, 0);
3254 "yes", &ipaddr, 0);
3269 struct ipadm_addrobj_s ipaddr;
3274 status = i_ipadm_updown_common(iph, aobjname, &ipaddr, ipadm_flags,
3278 i_ipadm_addrobj2lifname(&ipaddr, lifr.lifr_name,
3282 ipaddr.ipadm_af, 0, IFF_UP);
3298 "no", &ipaddr, 0);
3320 struct ipadm_addrobj_s ipaddr;
3331 bzero(&ipaddr, sizeof (ipaddr));
3333 if (aobjname == NULL || strlcpy(ipaddr.ipadm_aobjname, aobjname,
3339 status = i_ipadm_get_addrobj(iph, &ipaddr);
3343 if (!(ipaddr.ipadm_flags & IPMGMT_ACTIVE))
3346 if (i_ipadm_is_vni(ipaddr.ipadm_ifname))
3348 if (inform && ipaddr.ipadm_atype != IPADM_ADDR_STATIC)
3350 af = ipaddr.ipadm_af;
3351 if (ipaddr.ipadm_atype == IPADM_ADDR_STATIC) {
3352 i_ipadm_addrobj2lifname(&ipaddr, lifname, sizeof (lifname));
3360 ipaddr.ipadm_wait = IPADM_DHCP_WAIT_DEFAULT;
3361 return (i_ipadm_op_dhcp(&ipaddr, DHCP_INFORM, NULL));
3366 } else if (ipaddr.ipadm_atype == IPADM_ADDR_DHCP) {
3367 status = i_ipadm_op_dhcp(&ipaddr, DHCP_EXTEND, &dherr);
3373 ipaddr.ipadm_wait = IPADM_DHCP_WAIT_DEFAULT;
3374 status = i_ipadm_op_dhcp(&ipaddr, DHCP_START, NULL);
3397 i_ipadm_validate_create_addr(ipadm_handle_t iph, ipadm_addrobj_t ipaddr,
3410 if (ipaddr == NULL || flags == 0 || flags == IPADM_OPT_PERSIST ||
3415 if (ipaddr->ipadm_af == AF_UNSPEC)
3418 if (!legacy && ipaddr->ipadm_lifnum != 0)
3421 if (legacy && ipaddr->ipadm_atype != IPADM_ADDR_STATIC)
3424 ifname = ipaddr->ipadm_ifname;
3429 af = ipaddr->ipadm_af;
3470 switch (ipaddr->ipadm_atype) {
3472 if ((islo || isvni) && ipaddr->ipadm_static_dname[0] != '\0')
3476 (struct sockaddr *)&ipaddr->ipadm_static_addr))
3535 struct ipadm_addrobj_s ipaddr;
3544 if (aobjname == NULL || strlcpy(ipaddr.ipadm_aobjname, aobjname,
3550 status = i_ipadm_get_addrobj(iph, &ipaddr);
3553 if (ipaddr.ipadm_flags & IPMGMT_ACTIVE)