/* * Address configuration state (aka leases) */ ni_addrconf_lease_t * ni_addrconf_lease_new(int type, int family) { ni_addrconf_lease_t *lease; lease = calloc(1, sizeof(*lease)); lease->seqno = __ni_global_seqno++; lease->type = type; lease->family = family; ni_config_addrconf_update_mask(lease->type, lease->family); return lease; }
/* * utils to parse lease or a lease data group from xml */ static int __ni_addrconf_lease_info_from_xml(ni_addrconf_lease_t *lease, const xml_node_t *node) { ni_bool_t update = FALSE; xml_node_t *child; int value; if (!lease || !node) return -1; for (child = node->children; child; child = child->next) { if (ni_string_eq(child->name, "family")) { if ((value = ni_addrfamily_name_to_type(child->cdata)) == -1) return -1; lease->family = value; } else if (ni_string_eq(child->name, "type")) { if ((value = ni_addrconf_name_to_type(child->cdata)) == -1) return -1; lease->type = value; } else if (ni_string_eq(child->name, "owner")) { if (!ni_string_empty(child->cdata)) ni_string_dup(&lease->owner, child->cdata); } else if (ni_string_eq(child->name, "uuid")) { if (ni_uuid_parse(&lease->uuid, child->cdata) != 0) return -1; } else if (ni_string_eq(child->name, "update")) { if (ni_parse_uint(child->cdata, &lease->update, 16) != 0) return -1; update = TRUE; } if (ni_string_eq(child->name, "acquired")) { if (ni_parse_uint(child->cdata, &lease->time_acquired, 10) != 0) return -1; } } if (!update) lease->update = ni_config_addrconf_update_mask(lease->type, lease->family); return 0; }