aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Drung <benjamin.drung@profitbricks.com>2018-02-27 17:06:01 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2018-05-31 21:19:08 +0200
commit55efddd7adf20d5849675179aa5cda87c86ed286 (patch)
treec25fc46d6733df3b6ef2f6095409e1563582472d
parent58b2828cc53477fd89d1e7dc4d871bbb5cb83186 (diff)
downloadslirp-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.c8
-rw-r--r--libslirp.h3
-rw-r--r--slirp.c5
-rw-r--r--slirp.h1
4 files changed, 15 insertions, 2 deletions
diff --git a/bootp.c b/bootp.c
index 810da0c..4abd455 100644
--- a/bootp.c
+++ b/bootp.c
@@ -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;
diff --git a/libslirp.h b/libslirp.h
index da7d777..eddac37 100644
--- a/libslirp.h
+++ b/libslirp.h
@@ -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);
diff --git a/slirp.c b/slirp.c
index c408f9c..0e8fa8c 100644
--- a/slirp.c
+++ b/slirp.c
@@ -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);
}
diff --git a/slirp.h b/slirp.h
index 049da65..318bd52 100644
--- a/slirp.h
+++ b/slirp.h
@@ -193,6 +193,7 @@ struct Slirp {
char *bootp_filename;
size_t vdnssearch_len;
uint8_t *vdnssearch;
+ char *vdomainname;
/* tcp states */
struct socket tcb;