[libvirt] [PATCH v2] nwfilter: Also pick IP address from a DHCP ACK message
Daniel Veillard
veillard at redhat.com
Fri Apr 30 11:50:02 UTC 2010
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 at us.ibm.com>
>
> ---
> 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 at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list