On Mon, Dec 10, 2018 at 07:27:40PM -0800, Carlos Cardenas wrote: > On Sat, Dec 08, 2018 at 10:13:47AM +0100, Anton Lindqvist wrote: > > Hi, > > I've been trying out the new fake netboot feature in vmd. Overall, a > > great addition that removed the need for me to run dhcpd/rebound locally > > to achieve auto install. It would be convenient if the DHCP lease > > included a hostname inferred from the VM name in order to use dedicated > > response files for different VMs. Maybe this is a behavior that > > shouldn't be limited to just netboot? The res_hnok() validation is > > borrowed from dhclient. > > > > Comments? OK? > > This is a cool idea. > > ok ccardenas@ > > +--+ > Carlos >
I am not opposed to this, but doesn't this assume that the vm name is the same as the desired hostname? (maybe that's ok?) reyk@, what do you think? -ml > > > > Index: dhcp.c > > =================================================================== > > RCS file: /cvs/src/usr.sbin/vmd/dhcp.c,v > > retrieving revision 1.7 > > diff -u -p -r1.7 dhcp.c > > --- dhcp.c 6 Dec 2018 09:20:06 -0000 1.7 > > +++ dhcp.c 8 Dec 2018 09:04:33 -0000 > > @@ -24,6 +24,7 @@ > > #include <netinet/if_ether.h> > > #include <arpa/inet.h> > > > > +#include <resolv.h> > > #include <stdlib.h> > > #include <string.h> > > #include <stddef.h> > > @@ -44,8 +45,10 @@ dhcp_request(struct vionet_dev *dev, cha > > struct packet_ctx pc; > > struct dhcp_packet req, resp; > > struct in_addr server_addr, mask, client_addr, requested_addr; > > - size_t resplen, o; > > + size_t len, resplen, o; > > uint32_t ltime; > > + struct vmd_vm *vm; > > + const char *hostname = NULL; > > > > if (buflen < (ssize_t)(BOOTP_MIN_LEN + sizeof(struct ether_header))) > > return (-1); > > @@ -108,8 +111,12 @@ dhcp_request(struct vionet_dev *dev, cha > > resp.hlen = req.hlen; > > resp.xid = req.xid; > > > > - if (dev->pxeboot) > > + if (dev->pxeboot) { > > strlcpy(resp.file, "auto_install", sizeof resp.file); > > + vm = vm_getbyvmid(dev->vm_vmid); > > + if (vm && res_hnok(vm->vm_params.vmc_params.vcp_name)) > > + hostname = vm->vm_params.vmc_params.vcp_name; > > + } > > > > if ((client_addr.s_addr = > > vm_priv_addr(&env->vmd_cfg, > > @@ -205,6 +212,14 @@ dhcp_request(struct vionet_dev *dev, cha > > resp.options[o++] = sizeof(server_addr); > > memcpy(&resp.options[o], &server_addr, sizeof(server_addr)); > > o += sizeof(server_addr); > > + > > + if (hostname != NULL) { > > + len = strlen(hostname); > > + resp.options[o++] = DHO_HOST_NAME; > > + resp.options[o++] = len; > > + memcpy(&resp.options[o], hostname, len); > > + o += len; > > + } > > > > resp.options[o++] = DHO_END; > > > > >