• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt/router/dnsmasq/src/

Lines Matching refs:lease

28   struct dhcp_lease *lease;
39 lease database. */
61 die(_("cannot open or create lease file %s: %s"), daemon->lease_file, EC_FILE);
93 (lease = lease4_allocate(addr.addr.addr4)))
100 lease_set_hwaddr(lease, (unsigned char *)daemon->dhcp_buff2, (unsigned char *)daemon->packet,
104 lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain(lease->addr), NULL);
121 if ((lease = lease6_allocate(&addr.addr.addr6, lease_type)))
123 lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, 0, clid_len, now, 0);
124 lease_set_iaid(lease, iaid);
126 lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain6((struct in6_addr *)lease->hwaddr), NULL);
133 if (!lease)
138 lease->expires = (time_t)ei + now;
140 lease->expires = (time_t)0;
142 lease->length = ei;
147 lease->expires = (time_t)ei;
152 lease->flags &= ~(LEASE_NEW | LEASE_CHANGED);
167 die(_("cannot run lease-init script %s: %s"), daemon->lease_change_command, EC_FILE);
173 die(_("lease-init script returned exit code %s"), daemon->dhcp_buff, WEXITSTATUS(rc) + EC_INIT_OFFSET);
188 struct dhcp_lease *lease;
192 for (lease = leases; lease; lease = lease->next)
193 if (lease->flags & (LEASE_TA | LEASE_NA))
195 else if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len,
196 lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) &&
198 (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr))
199 lease_set_hostname(lease, config->hostname, 1, get_domain(lease->addr), NULL);
200 else if ((name = host_from_dns(lease->addr)))
201 lease_set_hostname(lease, name, 1, get_domain(lease->addr), NULL); /* updates auth flag only */
232 struct dhcp_lease *lease;
243 for (lease = leases; lease; lease = lease->next)
247 if (lease->flags & (LEASE_TA | LEASE_NA))
254 (lease->length == 0) ? 0 :
256 (lease->expires == 0) ? 0 :
258 (unsigned int)difftime(lease->expires, now));
260 ourprintf(&err, "%u ", lease->length);
262 ourprintf(&err, "%lu ", (unsigned long)lease->expires);
265 if (lease->hwaddr_type != ARPHRD_ETHER || lease->hwaddr_len == 0)
266 ourprintf(&err, "%.2x-", lease->hwaddr_type);
267 for (i = 0; i < lease->hwaddr_len; i++)
269 ourprintf(&err, "%.2x", lease->hwaddr[i]);
270 if (i != lease->hwaddr_len - 1)
274 inet_ntop(AF_INET, &lease->addr, daemon->addrbuff, ADDRSTRLEN);
277 ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
279 if (lease->clid && lease->clid_len != 0)
281 for (i = 0; i < lease->clid_len - 1; i++)
282 ourprintf(&err, "%.2x:", lease->clid[i]);
283 ourprintf(&err, "%.2x\n", lease->clid[i]);
297 for (lease = leases; lease; lease = lease->next)
300 if (!(lease->flags & (LEASE_TA | LEASE_NA)))
306 (lease->length == 0) ? 0 :
308 (lease->expires == 0) ? 0 :
310 (unsigned int)difftime(lease->expires, now));
312 ourprintf(&err, "%u ", lease->length);
314 ourprintf(&err, "%lu ", (unsigned long)lease->expires);
317 inet_ntop(AF_INET6, &lease->addr6, daemon->addrbuff, ADDRSTRLEN);
319 ourprintf(&err, "%s%u %s ", (lease->flags & LEASE_TA) ? "T" : "",
320 lease->iaid, daemon->addrbuff);
321 ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*");
323 if (lease->clid && lease->clid_len != 0)
325 for (i = 0; i < lease->clid_len - 1; i++)
326 ourprintf(&err, "%.2x:", lease->clid[i]);
327 ourprintf(&err, "%.2x\n", lease->clid[i]);
343 /* Set alarm for when the first lease expires. */
366 for (lease = leases; lease; lease = lease->next)
367 if (lease->expires != 0 &&
368 (next_event == 0 || difftime(next_event, lease->expires) > 0.0))
369 next_event = lease->expires;
388 struct dhcp_lease *lease;
395 for (lease = leases; lease; lease = lease->next)
396 if (!(lease->flags & (LEASE_TA | LEASE_NA)) &&
397 is_same_net(local, lease->addr, netmask) &&
398 prefix > lease->new_prefixlen)
400 lease->new_interface = if_index;
401 lease->new_prefixlen = prefix;
412 struct dhcp_lease *lease;
420 for (lease = leases; lease; lease = lease->next)
421 if ((lease->flags & (LEASE_TA | LEASE_NA)))
422 if (is_same_net6(local, &lease->addr6, prefix) && prefix > lease->new_prefixlen) {
426 lease->new_interface = if_index;
427 lease->new_prefixlen = prefix;
435 /* We may be doing RA but not DHCPv4, in which case the lease
446 struct dhcp_lease *lease;
449 for (lease = leases; lease; lease = lease->next)
450 slaac_add_addrs(lease, now, 0);
462 struct dhcp_lease *lease;
464 for (lease = leases; lease; lease = lease->next)
465 lease->new_prefixlen = lease->new_interface = 0;
472 for (lease = leases; lease; lease = lease->next)
473 if (lease->new_interface != 0)
474 lease_set_interface(lease, lease->new_interface, now);
494 struct dhcp_lease *lease;
505 for (lease = leases; lease; lease = lease->next)
510 if (lease->flags & (LEASE_TA | LEASE_NA))
512 else if (lease->hostname || lease->fqdn)
516 for (slaac = lease->slaac_address; slaac; slaac = slaac->next)
519 if (lease->fqdn)
520 cache_add_dhcp_entry(lease->fqdn, AF_INET6, (struct all_addr *)&slaac->addr, lease->expires);
521 if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
522 cache_add_dhcp_entry(lease->hostname, AF_INET6, (struct all_addr *)&slaac->addr, lease->expires);
526 if (lease->fqdn)
527 cache_add_dhcp_entry(lease->fqdn, prot,
528 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6,
529 lease->expires);
531 if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
532 cache_add_dhcp_entry(lease->hostname, prot,
533 prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6,
534 lease->expires);
537 if (lease->fqdn)
538 cache_add_dhcp_entry(lease->fqdn, prot, (struct all_addr *)&lease->addr, lease->expires);
540 if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
541 cache_add_dhcp_entry(lease->hostname, prot, (struct all_addr *)&lease->addr, lease->expires);
551 struct dhcp_lease *lease, *tmp, **up;
553 for (lease = leases, up = &leases; lease; lease = tmp)
555 tmp = lease->next;
556 if ((lease->expires != 0 && difftime(now, lease->expires) > 0) || lease == target)
559 if (lease->hostname)
562 *up = lease->next; /* unlink */
566 lease->next = old_leases;
567 old_leases = lease;
572 up = &lease->next;
580 struct dhcp_lease *lease;
583 for (lease = leases; lease; lease = lease->next)
586 if (lease->flags & (LEASE_TA | LEASE_NA))
589 if (lease->clid && clid_len == lease->clid_len &&
590 memcmp(clid, lease->clid, clid_len) == 0)
591 return lease;
594 for (lease = leases; lease; lease = lease->next)
597 if (lease->flags & (LEASE_TA | LEASE_NA))
600 if ((!lease->clid || !clid) &&
602 lease->hwaddr_len == hw_len &&
603 lease->hwaddr_type == hw_type &&
604 memcmp(hwaddr, lease->hwaddr, hw_len) == 0)
605 return lease;
613 struct dhcp_lease *lease;
615 for (lease = leases; lease; lease = lease->next)
618 if (lease->flags & (LEASE_TA | LEASE_NA))
621 if (lease->addr.s_addr == addr.s_addr)
622 return lease;
633 struct dhcp_lease *lease;
635 for (lease = leases; lease; lease = lease->next)
637 if (!(lease->flags & lease_type) || lease->iaid != iaid)
640 if (!IN6_ARE_ADDR_EQUAL(&lease->addr6, addr))
643 if ((clid_len != lease->clid_len ||
644 memcmp(clid, lease->clid, clid_len) != 0))
647 return lease;
656 struct dhcp_lease *lease;
658 for (lease = leases; lease; lease = lease->next)
659 lease->flags &= ~LEASE_USED;
665 struct dhcp_lease *lease;
672 for (lease = first; lease; lease = lease->next)
674 if (lease->flags & LEASE_USED)
677 if (!(lease->flags & lease_type) || lease->iaid != iaid)
680 if ((clid_len != lease->clid_len ||
681 memcmp(clid, lease->clid, clid_len) != 0))
684 return lease;
692 struct dhcp_lease *lease;
694 for (lease = leases; lease; lease = lease->next)
696 if (!(lease->flags & (LEASE_TA | LEASE_NA)))
699 if (is_same_net6(&lease->addr6, net, prefix) &&
700 (prefix == 128 || addr6part(&lease->addr6) == addr))
701 return lease;
710 struct dhcp_lease *lease;
714 for (lease = leases; lease; lease = lease->next)
716 if (!(lease->flags & (LEASE_TA | LEASE_NA)))
719 if (is_same_net6(&lease->addr6, &context->start6, 64) &&
720 addr6part(&lease->addr6) > addr6part(&context->start6) &&
721 addr6part(&lease->addr6) <= addr6part(&context->end6) &&
722 addr6part(&lease->addr6) > addr)
723 addr = addr6part(&lease->addr6);
734 struct dhcp_lease *lease;
738 for (lease = leases; lease; lease = lease->next)
741 if (lease->flags & (LEASE_TA | LEASE_NA))
744 if (((unsigned)ntohl(lease->addr.s_addr)) > ((unsigned)ntohl(context->start.s_addr)) &&
745 ((unsigned)ntohl(lease->addr.s_addr)) <= ((unsigned)ntohl(context->end.s_addr)) &&
746 ((unsigned)ntohl(lease->addr.s_addr)) > ((unsigned)ntohl(addr.s_addr)))
747 addr = lease->addr;
755 struct dhcp_lease *lease;
756 if (!leases_left || !(lease = whine_malloc(sizeof(struct dhcp_lease))))
759 memset(lease, 0, sizeof(struct dhcp_lease));
760 lease->flags = LEASE_NEW;
761 lease->expires = 1;
763 lease->length = 0xffffffff; /* illegal value */
765 lease->hwaddr_len = 256; /* illegal value */
766 lease->next = leases;
767 leases = lease;
772 return lease;
777 struct dhcp_lease *lease = lease_allocate();
778 if (lease)
779 lease->addr = addr;
781 return lease;
787 struct dhcp_lease *lease = lease_allocate();
789 if (lease)
791 lease->addr6 = *addrp;
792 lease->flags |= lease_type;
793 lease->iaid = 0;
796 return lease;
800 void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now)
812 /* Check for 2038 overflow. Make the lease
819 if (exp != lease->expires)
822 lease->expires = exp;
824 lease->flags |= LEASE_AUX_CHANGED;
830 if (len != lease->length)
832 lease->length = len;
833 lease->flags |= LEASE_AUX_CHANGED;
840 void lease_set_iaid(struct dhcp_lease *lease, int iaid)
842 if (lease->iaid != iaid)
844 lease->iaid = iaid;
845 lease->flags |= LEASE_CHANGED;
850 void lease_set_hwaddr(struct dhcp_lease *lease, const unsigned char *hwaddr,
856 lease->flags |= LEASE_HAVE_HWADDR;
862 if (hw_len != lease->hwaddr_len ||
863 hw_type != lease->hwaddr_type ||
864 (hw_len != 0 && memcmp(lease->hwaddr, hwaddr, hw_len) != 0))
867 memcpy(lease->hwaddr, hwaddr, hw_len);
868 lease->hwaddr_len = hw_len;
869 lease->hwaddr_type = hw_type;
870 lease->flags |= LEASE_CHANGED;
879 if (!lease->clid)
880 lease->clid_len = 0;
882 if (lease->clid_len != clid_len)
884 lease->flags |= LEASE_AUX_CHANGED;
886 free(lease->clid);
887 if (!(lease->clid = whine_malloc(clid_len)))
893 else if (memcmp(lease->clid, clid, clid_len) != 0)
895 lease->flags |= LEASE_AUX_CHANGED;
902 lease->clid_len = clid_len;
903 memcpy(lease->clid, clid, clid_len);
908 slaac_add_addrs(lease, now, force);
912 static void kill_name(struct dhcp_lease *lease)
918 free(lease->old_hostname);
923 if (lease->fqdn)
925 lease->old_hostname = lease->fqdn;
926 free(lease->hostname);
929 lease->old_hostname = lease->hostname;
931 lease->hostname = lease->fqdn = NULL;
934 void lease_set_hostname(struct dhcp_lease *lease, const char *name, int auth, char *domain, char *config_domain)
942 if (lease->hostname && name && hostname_isequal(lease->hostname, name))
945 lease->flags |= LEASE_AUTH_NAME;
949 if (!name && !lease->hostname)
952 /* If a machine turns up on a new net without dropping the old lease,
954 the same name. Check for that here and remove the name from the old lease.
987 if (lease->flags & (LEASE_TA | LEASE_NA))
992 /* another lease for the same DUID is OK for IPv6 */
993 if (lease->clid_len == lease_tmp->clid_len &&
994 lease->clid && lease_tmp->clid &&
995 memcmp(lease->clid, lease_tmp->clid, lease->clid_len) == 0)
1013 if (lease->hostname)
1014 kill_name(lease);
1016 lease->hostname = new_name;
1017 lease->fqdn = new_fqdn;
1020 lease->flags |= LEASE_AUTH_NAME;
1024 lease->flags |= LEASE_CHANGED; /* run script on change */
1027 void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now)
1031 if (lease->last_interface == interface)
1034 lease->last_interface = interface;
1035 lease->flags |= LEASE_CHANGED;
1038 slaac_add_addrs(lease, now, 0);
1044 struct dhcp_lease *lease;
1046 for (lease = leases; lease; lease = lease->next)
1047 lease->flags |= LEASE_CHANGED;
1051 remove them here, after calling the lease change
1052 script. Also run the lease change script on new/modified leases.
1057 struct dhcp_lease *lease;
1070 lease = old_leases;
1072 /* If the lease still has an old_hostname, do the "old" action on that first */
1073 if (lease->old_hostname)
1076 queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
1078 free(lease->old_hostname);
1079 lease->old_hostname = NULL;
1086 for (slaac = lease->slaac_address; slaac; slaac = tmp)
1092 kill_name(lease);
1094 queue_script(ACTION_DEL, lease, lease->old_hostname, now);
1097 emit_dbus_signal(ACTION_DEL, lease, lease->old_hostname);
1099 old_leases = lease->next;
1101 free(lease->old_hostname);
1102 free(lease->clid);
1103 free(lease->extradata);
1104 free(lease);
1111 for (lease = leases; lease; lease = lease->next)
1112 if (lease->old_hostname)
1115 queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
1117 free(lease->old_hostname);
1118 lease->old_hostname = NULL;
1122 for (lease = leases; lease; lease = lease->next)
1123 if ((lease->flags & (LEASE_NEW | LEASE_CHANGED)) ||
1124 ((lease->flags & LEASE_AUX_CHANGED) && option_bool(OPT_LEASE_RO)))
1127 queue_script((lease->flags & LEASE_NEW) ? ACTION_ADD : ACTION_OLD, lease,
1128 lease->fqdn ? lease->fqdn : lease->hostname, now);
1131 emit_dbus_signal((lease->flags & LEASE_NEW) ? ACTION_ADD : ACTION_OLD, lease,
1132 lease->fqdn ? lease->fqdn : lease->hostname);
1134 lease->flags &= ~(LEASE_NEW | LEASE_CHANGED | LEASE_AUX_CHANGED);
1137 free(lease->extradata);
1138 lease->extradata = NULL;
1147 void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data, unsigned int len, int delim)
1159 if ((lease->extradata_size - lease->extradata_len) < (len + 1))
1161 size_t newsz = lease->extradata_len + len + 100;
1167 if (lease->extradata)
1169 memcpy(new, lease->extradata, lease->extradata_len);
1170 free(lease->extradata);
1173 lease->extradata = new;
1174 lease->extradata_size = newsz;
1178 memcpy(lease->extradata + lease->extradata_len, data, len);
1179 lease->extradata[lease->extradata_len + len] = delim;
1180 lease->extradata_len += len + 1;