void ni_server_trace_interface_nduseropt_events(ni_netdev_t *dev, ni_event_t event) { ni_ipv6_devinfo_t *ipv6 = dev->ipv6; if (!ni_debug_guard(NI_LOG_DEBUG2, NI_TRACE_IPV6|NI_TRACE_EVENTS)) return; switch (event) { case NI_EVENT_RDNSS_UPDATE: if (ipv6 && ipv6->radv.rdnss) { ni_ipv6_ra_rdnss_t *rdnss; char buf[32] = {'\0'}; const char *rainfo; rainfo = ipv6->radv.managed_addr ? "managed" : ipv6->radv.other_config ? "config" : "unmanaged"; for (rdnss = ipv6->radv.rdnss; rdnss; rdnss = rdnss->next) { ni_stringbuf_t lft = NI_STRINGBUF_INIT_BUFFER(buf); ni_trace("%s: update IPv6 RA<%s> RDNSS<%s>[%s]", dev->name, rainfo, ni_sockaddr_print(&rdnss->server), ni_lifetime_print_valid(&lft, rdnss->lifetime)); ni_stringbuf_destroy(&lft); } } break; case NI_EVENT_DNSSL_UPDATE: if (ipv6 && ipv6->radv.dnssl) { ni_ipv6_ra_dnssl_t *dnssl; char buf[32] = {'\0'}; const char *rainfo; rainfo = ipv6->radv.managed_addr ? "managed" : ipv6->radv.other_config ? "config" : "unmanaged"; for (dnssl = ipv6->radv.dnssl; dnssl; dnssl = dnssl->next) { ni_stringbuf_t lft = NI_STRINGBUF_INIT_BUFFER(buf); ni_trace("%s: update IPv6 RA<%s> DNSSL<%s>[%s]", dev->name, rainfo, dnssl->domain, ni_lifetime_print_valid(&lft, dnssl->lifetime)); ni_stringbuf_destroy(&lft); } } break; default: ni_debug_verbose(NI_LOG_DEBUG2, NI_TRACE_IPV6|NI_TRACE_EVENTS, "%s: IPv6 RA %s event: ", dev->name, ni_event_type_to_name(event)); break; } }
/* * Callback for xml_node_print_fn that writes the output to the trace log */ static void xml_node_trace_printer(const char *line, void *user_data) { if (user_data == NULL || (ni_debug & *(unsigned int *) user_data) != 0) ni_trace("%s", line); }
/* * Match modem devices */ static ni_bool_t ni_objectmodel_modem_match_attr(const ni_dbus_object_t *object, const char *name, const char *match) { ni_modem_t *modem; const char *value = NULL; if (!(modem = ni_objectmodel_unwrap_modem(object, NULL))) return FALSE; if (!strcmp(name, "equipment-id")) value = modem->identify.equipment; else if (!strcmp(name, "device")) value = modem->identify.device; else if (!strcmp(name, "manufacturer")) value = modem->identify.manufacturer; else if (!strcmp(name, "model")) value = modem->identify.model; else if (!strcmp(name, "version")) value = modem->identify.version; else { ni_warn("%s: unsupported query attribute %s", __func__, name); return FALSE; } ni_trace("%s(%s): match=\"%s\", value=\"%s\"", __func__, name, match, value); return ni_string_eq_nocase(match, value); }
/* * Process a request to reconfigure the device (ie rebind a lease, or discover * a new lease). */ int ni_dhcp4_acquire(ni_dhcp4_device_t *dev, const ni_dhcp4_request_t *info) { ni_dhcp4_config_t *config; const char *classid; size_t len; int rv; if ((rv = ni_dhcp4_device_refresh(dev)) < 0) return rv; config = xcalloc(1, sizeof(*config)); config->dry_run = info->dry_run; config->resend_timeout = NI_DHCP4_RESEND_TIMEOUT_INIT; config->request_timeout = info->acquire_timeout?: NI_DHCP4_REQUEST_TIMEOUT; config->initial_discovery_timeout = NI_DHCP4_DISCOVERY_TIMEOUT; config->uuid = info->uuid; config->flags = info->flags; config->update = info->update; config->route_priority = info->route_priority; config->start_delay = info->start_delay; config->recover_lease = info->recover_lease; config->release_lease = info->release_lease; config->max_lease_time = ni_dhcp4_config_max_lease_time(); if (config->max_lease_time == 0) config->max_lease_time = ~0U; if (info->lease_time && info->lease_time < config->max_lease_time) config->max_lease_time = info->lease_time; if ((len = ni_string_len(info->hostname)) > 0) { if (ni_check_domain_name(info->hostname, len, 0)) { strncpy(config->hostname, info->hostname, sizeof(config->hostname) - 1); } else { ni_debug_dhcp("Discarded request to use suspect hostname: '%s'", ni_print_suspect(info->hostname, len)); } } if (info->clientid) { ni_dhcp4_parse_client_id(&config->client_id, dev->system.hwaddr.type, info->clientid); } else { /* Set client ID from interface hwaddr */ ni_dhcp4_set_client_id(&config->client_id, &dev->system.hwaddr); } if ((classid = info->vendor_class) == NULL) classid = ni_dhcp4_config_vendor_class(); if (classid) strncpy(config->classid, classid, sizeof(config->classid) - 1); config->doflags = DHCP4_DO_DEFAULT; config->doflags |= ni_dhcp4_do_bits(info->update); if (ni_debug & NI_TRACE_DHCP) { ni_trace("Received request:"); ni_trace(" acquire-timeout %u", config->request_timeout); ni_trace(" lease-time %u", config->max_lease_time); ni_trace(" start-delay %u", config->start_delay); ni_trace(" hostname %s", config->hostname[0]? config->hostname : "<none>"); ni_trace(" vendor-class %s", config->classid[0]? config->classid : "<none>"); ni_trace(" client-id %s", ni_print_hex(config->client_id.data, config->client_id.len)); ni_trace(" uuid %s", ni_uuid_print(&config->uuid)); ni_trace(" update-flags %s", __ni_dhcp4_print_doflags(config->doflags)); ni_trace(" recover_lease %s", config->recover_lease ? "true" : "false"); ni_trace(" release_lease %s", config->release_lease ? "true" : "false"); } ni_dhcp4_device_set_config(dev, config); if (!dev->lease) ni_dhcp4_recover_lease(dev); if (dev->lease) { if (!ni_addrconf_lease_is_valid(dev->lease) || (config->client_id.len && !ni_opaque_eq(&config->client_id, &dev->lease->dhcp4.client_id))) { ni_debug_dhcp("%s: lease doesn't match request", dev->ifname); ni_dhcp4_device_drop_lease(dev); dev->notify = 1; } } ni_note("%s: Request to acquire DHCPv4 lease with UUID %s", dev->ifname, ni_uuid_print(&config->uuid)); if (ni_dhcp4_device_start(dev) < 0) return -1; return 1; }