qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 5/7] slirp: Add DHCP vendor option to DHCP Offer/Ack


From: Fedor Lyakhov
Subject: [Qemu-devel] [PATCH 5/7] slirp: Add DHCP vendor option to DHCP Offer/Ack packet
Date: Sat, 26 Apr 2014 02:11:01 +0400

Signed-off-by: Fedor Lyakhov <address@hidden>
---
 slirp/bootp.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/slirp/bootp.c b/slirp/bootp.c
index b7db9fa..df8d527 100644
--- a/slirp/bootp.c
+++ b/slirp/bootp.c
@@ -21,7 +21,7 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-#include <slirp.h>
+#include "slirp.h"
 
 /* XXX: only DHCP is supported */
 
@@ -289,7 +289,7 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t 
*bp)
         }
 
         if (slirp->vdnssearch) {
-            size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend);
+            size_t spaceleft = DHCP_OPT_LEN - (q - rbp->bp_vend);
             val = slirp->vdnssearch_len;
             if (val + 1 > spaceleft) {
                 g_warning("DHCP packet size exceeded, "
@@ -299,6 +299,18 @@ static void bootp_reply(Slirp *slirp, const struct bootp_t 
*bp)
                 q += val;
             }
         }
+
+        if (slirp->dhcp_vendopt) {
+            size_t spaceleft = DHCP_OPT_LEN - (q - rbp->bp_vend);
+            val = slirp->dhcp_vendopt_len;
+            if (val + 1 > spaceleft) {
+                g_warning("DHCP packet size exceeded, "
+                    "omitting vendor-specific option.");
+            } else {
+                memcpy(q, slirp->dhcp_vendopt, val);
+                q += val;
+            }
+        }
     } else {
         static const char nak_msg[] = "requested address not available";
 
-- 
1.8.4.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]