[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