On Thu, Apr 29, 2010 at 09:39:15AM -0400, Stefan Berger wrote: > The local DHCP server on virtbr0 sends DHCP ACK messages when a VM is > started and requests an IP address while the initial DHCP lease on the > VM's MAC address hasn't expired. So, also pick the IP address of the VM > if that type of message is seen. > Thanks to Gerhard Stenzel for providing a test case for this. > > Changes from V1 to V2: > - cleanup: replacing DHCP option numbers through constants > > Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx> > > --- > src/nwfilter/nwfilter_learnipaddr.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > Index: libvirt-acl/src/nwfilter/nwfilter_learnipaddr.c > =================================================================== > --- libvirt-acl.orig/src/nwfilter/nwfilter_learnipaddr.c > +++ libvirt-acl/src/nwfilter/nwfilter_learnipaddr.c > @@ -98,6 +98,11 @@ struct dhcp { > } ATTRIBUTE_PACKED; > > #define DHCP_MSGT_DHCPOFFER 2 > +#define DHCP_MSGT_DHCPACK 5 > + > + > +#define DHCP_OPT_BCASTADDRESS 28 > +#define DHCP_OPT_MESSAGETYPE 53 > > struct ether_vlan_header > { > @@ -336,17 +341,18 @@ procDHCPOpts(struct dhcp *dhcp, int dhcp > > switch (dhcpopt->code) { > > - case 28: /* Broadcast address */ > + case DHCP_OPT_BCASTADDRESS: /* Broadcast address */ > if (dhcp_opts_len >= 6) { > uint32_t *tmp = (uint32_t *)&dhcpopt->value; > (*bcastaddr) = ntohl(*tmp); > } > break; > > - case 53: /* Message type */ > + case DHCP_OPT_MESSAGETYPE: /* Message type */ > if (dhcp_opts_len >= 3) { > uint8_t *val = (uint8_t *)&dhcpopt->value; > switch (*val) { > + case DHCP_MSGT_DHCPACK: > case DHCP_MSGT_DHCPOFFER: > *vmaddr = dhcp->yiaddr; > *howDetected = DETECT_DHCP; > Okay, ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list