diff options
author | Benjamin Drung <benjamin.drung@profitbricks.com> | 2018-02-27 17:06:01 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-05-31 21:19:08 +0200 |
commit | 55efddd7adf20d5849675179aa5cda87c86ed286 (patch) | |
tree | c25fc46d6733df3b6ef2f6095409e1563582472d | |
parent | 58b2828cc53477fd89d1e7dc4d871bbb5cb83186 (diff) | |
download | slirp-55efddd7adf20d5849675179aa5cda87c86ed286.zip slirp-55efddd7adf20d5849675179aa5cda87c86ed286.tar.gz slirp-55efddd7adf20d5849675179aa5cda87c86ed286.tar.bz2 |
slirp: Add domainname option to slirp's DHCP server
This patch will allow the user to include the domainname option in
replies from the built-in DHCP server.
Signed-off-by: Benjamin Drung <benjamin.drung@profitbricks.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
-rw-r--r-- | bootp.c | 8 | ||||
-rw-r--r-- | libslirp.h | 3 | ||||
-rw-r--r-- | slirp.c | 5 | ||||
-rw-r--r-- | slirp.h | 1 |
4 files changed, 15 insertions, 2 deletions
@@ -303,6 +303,14 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t *bp) q += val; } + if (slirp->vdomainname) { + val = strlen(slirp->vdomainname); + *q++ = RFC1533_DOMAINNAME; + *q++ = val; + memcpy(q, slirp->vdomainname, val); + q += val; + } + if (slirp->vdnssearch) { size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend); val = slirp->vdnssearch_len; @@ -15,7 +15,8 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork, const char *vhostname, const char *tftp_path, const char *bootfile, struct in_addr vdhcp_start, struct in_addr vnameserver, struct in6_addr vnameserver6, - const char **vdnssearch, void *opaque); + const char **vdnssearch, const char *vdomainname, + void *opaque); void slirp_cleanup(Slirp *slirp); void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout); @@ -284,7 +284,8 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork, const char *vhostname, const char *tftp_path, const char *bootfile, struct in_addr vdhcp_start, struct in_addr vnameserver, struct in6_addr vnameserver6, - const char **vdnssearch, void *opaque) + const char **vdnssearch, const char *vdomainname, + void *opaque) { Slirp *slirp = g_malloc0(sizeof(Slirp)); @@ -315,6 +316,7 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork, } slirp->tftp_prefix = g_strdup(tftp_path); slirp->bootp_filename = g_strdup(bootfile); + slirp->vdomainname = g_strdup(vdomainname); slirp->vdhcp_startaddr = vdhcp_start; slirp->vnameserver_addr = vnameserver; slirp->vnameserver_addr6 = vnameserver6; @@ -347,6 +349,7 @@ void slirp_cleanup(Slirp *slirp) g_free(slirp->vdnssearch); g_free(slirp->tftp_prefix); g_free(slirp->bootp_filename); + g_free(slirp->vdomainname); g_free(slirp); } @@ -193,6 +193,7 @@ struct Slirp { char *bootp_filename; size_t vdnssearch_len; uint8_t *vdnssearch; + char *vdomainname; /* tcp states */ struct socket tcb; |