Ejemplo n.º 1
0
/*
 * 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;
}
Ejemplo n.º 2
0
/*
 * 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;
}