Merge branch 'disable-dhcp' into 'master'

Allow to disable internal DHCP server

See merge request slirp/libslirp!22
diff --git a/src/bootp.c b/src/bootp.c
index d78d61b..1a3517e 100644
--- a/src/bootp.c
+++ b/src/bootp.c
@@ -369,7 +369,7 @@
 {
     struct bootp_t *bp = mtod_check(m, sizeof(struct bootp_t));
 
-    if (bp && bp->bp_op == BOOTP_REQUEST) {
+    if (!m->slirp->disable_dhcp && bp && bp->bp_op == BOOTP_REQUEST) {
         bootp_reply(m->slirp, bp, m_end(m));
     }
 }
diff --git a/src/libslirp.h b/src/libslirp.h
index 8e4ea33..1e75501 100644
--- a/src/libslirp.h
+++ b/src/libslirp.h
@@ -74,7 +74,7 @@
 } SlirpCb;
 
 #define SLIRP_CONFIG_VERSION_MIN 1
-#define SLIRP_CONFIG_VERSION_MAX 3
+#define SLIRP_CONFIG_VERSION_MAX 4
 
 typedef struct SlirpConfig {
     /* Version must be provided */
@@ -120,6 +120,10 @@
      * Fields introduced in SlirpConfig version 3 begin
      */
     bool disable_dns;  /* slirp will not redirect/serve any DNS packet */
+    /*
+     * Fields introduced in SlirpConfig version 4 begin
+     */
+    bool disable_dhcp; /* slirp will not reply to any DHCP requests */
 } SlirpConfig;
 
 /* Create a new instance of a slirp stack */
diff --git a/src/slirp.c b/src/slirp.c
index 378a70b..568064f 100644
--- a/src/slirp.c
+++ b/src/slirp.c
@@ -457,6 +457,12 @@
         slirp->disable_dns = false;
     }
 
+    if (cfg->version >= 4) {
+        slirp->disable_dhcp = cfg->disable_dhcp;
+    } else {
+        slirp->disable_dhcp = false;
+    }
+
     return slirp;
 }
 
diff --git a/src/slirp.h b/src/slirp.h
index 89d79f3..64ab0dd 100644
--- a/src/slirp.h
+++ b/src/slirp.h
@@ -139,6 +139,7 @@
     struct in6_addr vprefix_addr6;
     uint8_t vprefix_len;
     struct in6_addr vhost_addr6;
+    bool disable_dhcp; /* slirp will not reply to any DHCP requests */
     struct in_addr vdhcp_startaddr;
     struct in_addr vnameserver_addr;
     struct in6_addr vnameserver_addr6;