int ni_addrconf_lease_dns_from_xml(ni_addrconf_lease_t *lease, const xml_node_t *node) { if (!(node = xml_node_get_child(node, "dns"))) return 1; return ni_addrconf_lease_dns_data_from_xml(lease, node); }
static int __ni_addrconf_lease_static_data_from_xml(ni_addrconf_lease_t *lease, const xml_node_t *node) { xml_node_t *child; for (child = node->children; child; child = child->next) { if (ni_string_eq(child->name, "hostname") && child->cdata) { ni_string_dup(&lease->hostname, child->cdata); } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_ADDRS_DATA_NODE)) { if (ni_addrconf_lease_addrs_data_from_xml(lease, child) < 0) return -1; } if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_ROUTES_DATA_NODE)) { if (ni_addrconf_lease_routes_data_from_xml(lease, child) < 0) return -1; } if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_DNS_DATA_NODE)) { if (ni_addrconf_lease_dns_data_from_xml(lease, child) < 0) return -1; } } return 0; }
int ni_dhcp6_lease_data_from_xml(ni_addrconf_lease_t *lease, const xml_node_t *node, const char *ifname) { const char *ia_na_name = ni_dhcp6_option_name(NI_DHCP6_OPTION_IA_NA); const char *ia_ta_name = ni_dhcp6_option_name(NI_DHCP6_OPTION_IA_TA); const char *ia_pd_name = ni_dhcp6_option_name(NI_DHCP6_OPTION_IA_PD); unsigned int value; ni_sockaddr_t addr; xml_node_t *child; if (!lease || !node) return -1; lease->dhcp6.rapid_commit = FALSE; for (child = node->children; child; child = child->next) { if (ni_string_eq(child->name, "client-id") && child->cdata) { if (!ni_duid_parse_hex(&lease->dhcp6.client_id, child->cdata)) return -1; } else if (ni_string_eq(child->name, "server-id") && child->cdata) { if (!ni_duid_parse_hex(&lease->dhcp6.server_id, child->cdata)) return -1; } else if (ni_string_eq(child->name, "server-address") && child->cdata) { if (ni_sockaddr_parse(&addr, child->cdata, AF_INET6) < 0) return -1; lease->dhcp6.server_addr = addr.six.sin6_addr; } else if (ni_string_eq(child->name, "server-preference") && child->cdata) { if (ni_parse_uint(child->cdata, &value, 10) != 0 || value > 255) return -1; lease->dhcp6.server_pref = value; } else if (ni_string_eq(child->name, "rapid-commit")) { lease->dhcp6.rapid_commit = TRUE; } else if (ni_string_eq(child->name, "hostname") && child->cdata) { ni_string_dup(&lease->hostname, child->cdata); } if (ni_string_eq(child->name, ia_na_name)) { if (__ni_dhcp6_lease_ia_type_from_xml(&lease->dhcp6.ia_list, NI_DHCP6_OPTION_IA_NA, child) < 0) return -1; } else if (ni_string_eq(child->name, ia_ta_name)) { if (__ni_dhcp6_lease_ia_type_from_xml(&lease->dhcp6.ia_list, NI_DHCP6_OPTION_IA_TA, child) < 0) return -1; } else if (ni_string_eq(child->name, ia_pd_name)) { if (__ni_dhcp6_lease_ia_type_from_xml(&lease->dhcp6.ia_list, NI_DHCP6_OPTION_IA_PD, child) < 0) return -1; } else if (ni_string_eq(child->name, "boot")) { if (__ni_dhcp6_lease_boot_from_xml(lease, child) < 0) return -1; } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_DNS_DATA_NODE)) { if (ni_addrconf_lease_dns_data_from_xml(lease, child, ifname) < 0) return -1; } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_NTP_DATA_NODE)) { if (ni_addrconf_lease_ntp_data_from_xml(lease, child, ifname) < 0) return -1; } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_SIP_DATA_NODE)) { if (ni_addrconf_lease_sip_data_from_xml(lease, child, ifname) < 0) return -1; } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_PTZ_DATA_NODE)) { if (ni_addrconf_lease_ptz_data_from_xml(lease, child, ifname) < 0) return -1; } else if (ni_string_eq(child->name, NI_ADDRCONF_LEASE_XML_OPTS_DATA_NODE)) { if (ni_addrconf_lease_opts_data_from_xml(lease, child, ifname) < 0) return -1; } } return 0; }