* [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply @ 2023-11-15 21:58 Alexandre Derumier 2023-11-15 21:58 ` [pve-devel] [PATCH dnsmasq 1/1] purge old ip-mac lease on dhcpreply Alexandre Derumier 2023-11-16 9:43 ` [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Stefan Hanreich 0 siblings, 2 replies; 11+ messages in thread From: Alexandre Derumier @ 2023-11-15 21:58 UTC (permalink / raw) To: pve-devel This patch is specific and work only with dnsmask static lease. If we try to allocate an existing leased ip to a new mac, we need to purge first the lease. This patch is doing it directly in dhcp reply phase. I have made a deb with the patch for testing: https://mutulin1.odiso.net:/dnsmasq-base_2.89-1_amd64.deb ex: guest ask for ip 192.168.2.10 with mac 12:45:6f:39:c2:a6 Nov 15 22:45:05 formationkvm3 dnsmasq-dhcp[846333]: DHCPDISCOVER(vnetpve) 192.168.2.10 12:45:6f:39:c2:a6 Nov 15 22:45:05 formationkvm3 dnsmasq-dhcp[846333]: DHCPOFFER(vnetpve) 192.168.2.10 12:45:6f:39:c2:a6 Nov 15 22:45:05 formationkvm3 dnsmasq-dhcp[846333]: DHCPREQUEST(vnetpve) 192.168.2.10 12:45:6f:39:c2:a6 Nov 15 22:45:05 formationkvm3 dnsmasq-dhcp[846333]: DHCPACK(vnetpve) 192.168.2.10 12:45:6f:39:c2:a6 testovn1 remove remove nic from guest create a new nic in another guest, 192.168.2.10 is allocated to new mac 12:45:a3:ed:c8:36 we write ether file and reload dnsmasq Nov 15 22:45:53 formationkvm3 systemd[1]: Reloading dnsmasq@simpve.service - dnsmasq (simpve) - A lightweight DHCP and caching DNS server... Nov 15 22:45:53 formationkvm3 dnsmasq[846333]: cleared cache Nov 15 22:45:53 formationkvm3 dnsmasq-dhcp[846333]: read /etc/dnsmasq.d/simpve/ethers Nov 15 22:45:53 formationkvm3 systemd[1]: Reloaded dnsmasq@simpve.service - dnsmasq (simpve) - A lightweight DHCP and caching DNS server. but the old mac:ip is still in lease memory of dnsmasq process the guest is doing a dhcp query here the patch: we purge the old lease Nov 15 22:45:59 formationkvm3 dnsmasq-dhcp[846333]: workaround - pruning old lease then the guest is able to retrieve the ip. Nov 15 22:45:59 formationkvm3 dnsmasq-dhcp[846333]: DHCPDISCOVER(vnetpve) 192.168.2.10 12:45:a3:ed:c8:36 no address available Nov 15 22:46:02 formationkvm3 dnsmasq-dhcp[846333]: DHCPDISCOVER(vnetpve) 192.168.2.10 12:45:a3:ed:c8:36 Nov 15 22:46:02 formationkvm3 dnsmasq-dhcp[846333]: DHCPOFFER(vnetpve) 192.168.2.10 12:45:a3:ed:c8:36 Nov 15 22:46:02 formationkvm3 dnsmasq-dhcp[846333]: DHCPREQUEST(vnetpve) 192.168.2.10 12:45:a3:ed:c8:36 Nov 15 22:46:02 formationkvm3 dnsmasq-dhcp[846333]: DHCPACK(vnetpve) 192.168.2.10 12:45:a3:ed:c8:36 testovn1 Alexandre Derumier (1): purge old ip-mac lease on dhcpreply src/rfc2131.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH dnsmasq 1/1] purge old ip-mac lease on dhcpreply 2023-11-15 21:58 [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Alexandre Derumier @ 2023-11-15 21:58 ` Alexandre Derumier 2023-11-16 9:43 ` [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Stefan Hanreich 1 sibling, 0 replies; 11+ messages in thread From: Alexandre Derumier @ 2023-11-15 21:58 UTC (permalink / raw) To: pve-devel --- src/rfc2131.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/rfc2131.c b/src/rfc2131.c index 17e97b5..2a4ce76 100644 --- a/src/rfc2131.c +++ b/src/rfc2131.c @@ -1095,7 +1095,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if ((opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ))) addr = option_addr(opt); - + if (have_config(config, CONFIG_ADDR)) { inet_ntop(AF_INET, &config->addr, daemon->addrbuff, ADDRSTRLEN); @@ -1104,11 +1104,14 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, ltmp != lease && !config_has_mac(config, ltmp->hwaddr, ltmp->hwaddr_len, ltmp->hwaddr_type)) { - int len; - unsigned char *mac = extended_hwaddr(ltmp->hwaddr_type, ltmp->hwaddr_len, - ltmp->hwaddr, ltmp->clid_len, ltmp->clid, &len); - my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it is leased to %s"), - daemon->addrbuff, print_mac(daemon->namebuff, mac, len)); + lease_prune(ltmp, now); + my_syslog(MS_DHCP | LOG_WARNING, _("workaround - pruning old lease")); + + //int len; + //unsigned char *mac = extended_hwaddr(ltmp->hwaddr_type, ltmp->hwaddr_len, + // ltmp->hwaddr, ltmp->clid_len, ltmp->clid, &len); + //my_syslog(MS_DHCP | LOG_WARNING, _("not using configured address %s because it is leased to %s"), + // daemon->addrbuff, print_mac(daemon->namebuff, mac, len)); } else { -- 2.39.2 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-15 21:58 [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Alexandre Derumier 2023-11-15 21:58 ` [pve-devel] [PATCH dnsmasq 1/1] purge old ip-mac lease on dhcpreply Alexandre Derumier @ 2023-11-16 9:43 ` Stefan Hanreich 2023-11-16 13:47 ` DERUMIER, Alexandre 1 sibling, 1 reply; 11+ messages in thread From: Stefan Hanreich @ 2023-11-16 9:43 UTC (permalink / raw) To: Proxmox VE development discussion, Alexandre Derumier Maybe this [1][2] could be a less intrusive solution for this issue? [1] https://manpages.ubuntu.com/manpages/focal/en/man1/dhcp_release.1.html [2] https://packages.debian.org/de/sid/dnsmasq-utils ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-16 9:43 ` [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Stefan Hanreich @ 2023-11-16 13:47 ` DERUMIER, Alexandre 2023-11-17 6:49 ` DERUMIER, Alexandre 0 siblings, 1 reply; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-16 13:47 UTC (permalink / raw) To: pve-devel, aderumier, s.hanreich >>Maybe this [1][2] could be a less intrusive solution for this issue? Yes, dhcp release packet should be the way, but I don't known if can simply forge packet why any mac ? I'll test it this afternoon to see if it's work. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-16 13:47 ` DERUMIER, Alexandre @ 2023-11-17 6:49 ` DERUMIER, Alexandre 2023-11-17 8:55 ` Wolfgang Bumiller 0 siblings, 1 reply; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-17 6:49 UTC (permalink / raw) To: pve-devel, aderumier, s.hanreich -------- Message initial -------- De: "DERUMIER, Alexandre" <alexandre.derumier@groupe-cyllene.com> À: pve-devel@lists.proxmox.com <pve-devel@lists.proxmox.com>, aderumier@odiso.com <aderumier@odiso.com>, s.hanreich@proxmox.com <s.hanreich@proxmox.com> Objet: Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Date: 16/11/2023 14:47:20 > > Maybe this [1][2] could be a less intrusive solution for this > > issue? >>Yes, dhcp release packet should be the way, but I don't known if can >simply forge packet why any mac ? >>> >>I'll test it this afternoon to see if it's work. mmm,It's not working, the dhcp release packet never reach the bridge I have also try to forge the packet in python with scapy, same bahviour. from scapy.all import send, IP, UDP, BOOTP, DHCP, str2mac import random releaseMAC = '12:45:a3:ed:c8:36' releaseIP='192.168.2.10' serverIP='192.168.2.1' releaseMACraw = str2mac(releaseMAC) dhcp_release = IP(dst=serverIP)/UDP(sport=68,dport=67)/BOOTP(chaddr=releaseMACraw, ciaddr=releaseIP, xid=random.randint(0, 0xFFFFFFFF))/DHCP(options=[('message-type','release'), 'end']) send(dhcp_release) ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 6:49 ` DERUMIER, Alexandre @ 2023-11-17 8:55 ` Wolfgang Bumiller 2023-11-17 9:19 ` DERUMIER, Alexandre 0 siblings, 1 reply; 11+ messages in thread From: Wolfgang Bumiller @ 2023-11-17 8:55 UTC (permalink / raw) To: DERUMIER, Alexandre; +Cc: pve-devel, aderumier, s.hanreich On Fri, Nov 17, 2023 at 06:49:27AM +0000, DERUMIER, Alexandre wrote: > -------- Message initial -------- > De: "DERUMIER, Alexandre" <alexandre.derumier@groupe-cyllene.com> > À: pve-devel@lists.proxmox.com <pve-devel@lists.proxmox.com>, > aderumier@odiso.com <aderumier@odiso.com>, s.hanreich@proxmox.com > <s.hanreich@proxmox.com> > Objet: Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease > of dhcp reply > Date: 16/11/2023 14:47:20 > > > > Maybe this [1][2] could be a less intrusive solution for this > > > issue? > > >>Yes, dhcp release packet should be the way, but I don't known if can > >simply forge packet why any mac ? > >>> > >>I'll test it this afternoon to see if it's work. > > > mmm,It's not working, the dhcp release packet never reach the bridge What command did you use? If all you need is the `lease_prune()` call from your C patch, dnsmasq also does this on a SIGALRM so you could try to see if sending that helps. (dnsmasq also has a dbus api to add/remove leases for the worst case...) Otherwise, at first glance the C patch seems to potentially break some other cases, but I don't know the code at all. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 8:55 ` Wolfgang Bumiller @ 2023-11-17 9:19 ` DERUMIER, Alexandre 2023-11-17 9:42 ` DERUMIER, Alexandre 0 siblings, 1 reply; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-17 9:19 UTC (permalink / raw) To: w.bumiller; +Cc: pve-devel, aderumier, s.hanreich #What command did you use? dhcp_release <bridge> <maclease> <iplease> or dhcp_release <vmtap> <maclease> <iplease> >>If all you need is the `lease_prune()` call from your C patch, >>dnsmasq >>also does this on a SIGALRM so you could try to see if sending that >>helps. >> >>(dnsmasq also has a dbus api to add/remove leases for the worst >>case...) ah ok ! didn't known that, I'll try the SIGALRM && dbus to see. Thanks ! >>Otherwise, at first glance the C patch seems to potentially break >>some >>other cases, but I don't know the code at all. Yes, this will break dynamic leases as it's always flush leases at any request. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 9:19 ` DERUMIER, Alexandre @ 2023-11-17 9:42 ` DERUMIER, Alexandre 2023-11-17 10:46 ` DERUMIER, Alexandre 0 siblings, 1 reply; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-17 9:42 UTC (permalink / raw) To: w.bumiller; +Cc: pve-devel, aderumier, s.hanreich > > If all you need is the `lease_prune()` call from your C patch, > > dnsmasq > > also does this on a SIGALRM so you could try to see if sending that > > helps. > > > > (dnsmasq also has a dbus api to add/remove leases for the worst > > case...) >>ah ok ! didn't known that, I'll try the SIGALRM && dbus to see. >>Thanks >>! SIGALRM don't seem to work, but looking at dbus doc, that seem really even better https://github.com/imp/dnsmasq/blob/master/dbus/DBus-interface we could directly manage leases, without need to manage the ether file and without reload. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 9:42 ` DERUMIER, Alexandre @ 2023-11-17 10:46 ` DERUMIER, Alexandre 2023-11-17 10:49 ` Stefan Hanreich 0 siblings, 1 reply; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-17 10:46 UTC (permalink / raw) To: w.bumiller; +Cc: pve-devel, aderumier, s.hanreich > > If all you need is the `lease_prune()` call from your C patch, > > dnsmasq > > also does this on a SIGALRM so you could try to see if sending that > > helps. > > > > (dnsmasq also has a dbus api to add/remove leases for the worst > > case...) > > ah ok ! didn't known that, I'll try the SIGALRM && dbus to see. > > Thanks > > ! >>SIGALRM don't seem to work, >> >>but looking at dbus doc, that seem really even better >>https://github.com/imp/dnsmasq/blob/master/dbus/DBus-interface >> >>we could directly manage leases, without need to manage the ether >>file >>and without reload. Ok, it's working with dbus to update the lease (and etherfile still needed) ex: use Net::DBus; my $bus = Net::DBus->system(); my $dnsmasq = $bus->get_service("uk.org.thekelleys.dnsmasq"); my $manager = $dnsmasq- >get_object("/uk/org/thekelleys/dnsmasq","uk.org.thekelleys.dnsmasq"); my @hostname = unpack("C*", "vmhostname"); $manager->AddDhcpLease('192.168.2.10','12:45:6D:33:3C:E8', \@hostname, undef, 0, 0, 0); The problem is that dbus is only working with 1 instance of dnsmasq. :/ That mean it'll not work if we need mulitple instance, in differents zones/vrf for example ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 10:46 ` DERUMIER, Alexandre @ 2023-11-17 10:49 ` Stefan Hanreich 2023-11-17 10:52 ` DERUMIER, Alexandre 0 siblings, 1 reply; 11+ messages in thread From: Stefan Hanreich @ 2023-11-17 10:49 UTC (permalink / raw) To: DERUMIER, Alexandre, w.bumiller; +Cc: pve-devel, aderumier On 11/17/23 11:46, DERUMIER, Alexandre wrote: > The problem is that dbus is only working with 1 instance of dnsmasq. :/ > > That mean it'll not work if we need mulitple instance, in differents > zones/vrf for example You should be able to set the service name via `--enable-dbus` then you can handle multiple instances if I'm not mistaken. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply 2023-11-17 10:49 ` Stefan Hanreich @ 2023-11-17 10:52 ` DERUMIER, Alexandre 0 siblings, 0 replies; 11+ messages in thread From: DERUMIER, Alexandre @ 2023-11-17 10:52 UTC (permalink / raw) To: w.bumiller, s.hanreich; +Cc: pve-devel, aderumier On 11/17/23 11:46, DERUMIER, Alexandre wrote: > The problem is that dbus is only working with 1 instance of dnsmasq. > :/ > > That mean it'll not work if we need mulitple instance, in differents > zones/vrf for example >>You should be able to set the service name via `--enable-dbus` then >>you >>can handle multiple instances if I'm not mistaken. oh yes , indeed, just found the doc about it. So, I think it should work. thanks ! ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-11-17 10:53 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-11-15 21:58 [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Alexandre Derumier 2023-11-15 21:58 ` [pve-devel] [PATCH dnsmasq 1/1] purge old ip-mac lease on dhcpreply Alexandre Derumier 2023-11-16 9:43 ` [pve-devel] [PATCH dnsmasq 0/1] purge previous ip/mac lease of dhcp reply Stefan Hanreich 2023-11-16 13:47 ` DERUMIER, Alexandre 2023-11-17 6:49 ` DERUMIER, Alexandre 2023-11-17 8:55 ` Wolfgang Bumiller 2023-11-17 9:19 ` DERUMIER, Alexandre 2023-11-17 9:42 ` DERUMIER, Alexandre 2023-11-17 10:46 ` DERUMIER, Alexandre 2023-11-17 10:49 ` Stefan Hanreich 2023-11-17 10:52 ` DERUMIER, Alexandre
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox