From patchwork Wed Mar 4 14:10:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ihar Hrachyshka X-Patchwork-Id: 1249028 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.133; helo=hemlock.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=in8F8VfQ; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48XbQJ5cbFz9sR4 for ; Thu, 5 Mar 2020 01:11:04 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id A1F8B87A5F; Wed, 4 Mar 2020 14:11:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XTZTG+cZu+YM; Wed, 4 Mar 2020 14:11:00 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id 3809F87A12; Wed, 4 Mar 2020 14:11:00 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1E480C1AE2; Wed, 4 Mar 2020 14:11:00 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id BBB8EC013E for ; Wed, 4 Mar 2020 14:10:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id AA15E87A2F for ; Wed, 4 Mar 2020 14:10:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eYqSkWOdeYCc for ; Wed, 4 Mar 2020 14:10:55 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by hemlock.osuosl.org (Postfix) with ESMTPS id 4B1E087A12 for ; Wed, 4 Mar 2020 14:10:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583331053; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=B3hr0U8uvS/w77BB8eJAmCcxXA/9vEZnwqs9vddP+Zw=; b=in8F8VfQdME1HZGYOifKjwJ+wpKzb3f6oa1JTvd29V16yKB3yz2GxI/SRi1BLUs6T6P2Ei crUNMBQLXww7H8rnhhQzZaUJMSqorTCmX1MwC7JhhkZaXdpOarMziLm7melWTHBwqzpO4a A9KNyBnfZ9Orfgeaqobgt7hY2Y1Ou6U= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-419-35m34TweOH2Cfo0z41Jt_A-1; Wed, 04 Mar 2020 09:10:52 -0500 X-MC-Unique: 35m34TweOH2Cfo0z41Jt_A-1 Received: by mail-qv1-f71.google.com with SMTP id l16so945366qvo.15 for ; Wed, 04 Mar 2020 06:10:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/e80H54j6Vm/4MmACamCs89U0IaO9LBsXcI6Jy8qEpc=; b=oafpYfEZayQpGZnmk72SUsn6nPozHEvKIj9lHqkQGDVCpp4QEF6W2oqvdqtsGqALHV 5+XCSoy7TOusnsFY7caRRy7Wy3B8aJkQT8BB8x8BI9clGZab9iVjUpxJxz3SInRLVZbB PTFxSaLVfEXmG6wf2Zf/yvdLKImVX5Sqmc9fymggmcZaRqRI+txvui2YJzM0JxF0JBGW mV3w8cGHuZBEqU7cpgYlCJUuPVOc0VqueqalXCyssTe4J/77kJ/VcJEQTIv7xfg3lCQe 8vpSj63t1DEansrDGasZeGcvxUFq2H4G0rivmYmJcT9VN0OcXTWVA4vxKoocVfvaqnCU An6Q== X-Gm-Message-State: ANhLgQ0HSo6ZLU9dwKkRHXltiZTbL1H8b7YH/mTfppa2ri80lQqeQDee XudVivMeAxXeAkwr70rXCXkFRVRiqBlWqDw7AFXb6TEBYxAwcoX8+87chWsbQLZ0YqiBiTbPpm+ f/MPFdfYTfmlG X-Received: by 2002:a37:6395:: with SMTP id x143mr3045921qkb.209.1583331050516; Wed, 04 Mar 2020 06:10:50 -0800 (PST) X-Google-Smtp-Source: ADFU+vuxkiwuI9BJR82/LOThVmdGngn1CQrsHAAjeEB3pANXrpSM4THpMnzpayBcISAAGMdi0JmpxA== X-Received: by 2002:a37:6395:: with SMTP id x143mr3045856qkb.209.1583331049765; Wed, 04 Mar 2020 06:10:49 -0800 (PST) Received: from localhost.localdomain.com (cpe-172-73-180-250.carolina.res.rr.com. [172.73.180.250]) by smtp.googlemail.com with ESMTPSA id p2sm13226876qkm.64.2020.03.04.06.10.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2020 06:10:48 -0800 (PST) From: Ihar Hrachyshka To: dev@openvswitch.org Date: Wed, 4 Mar 2020 09:10:30 -0500 Message-Id: <20200304141030.546012-1-ihrachys@redhat.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200304021953.417802-1-ihrachys@redhat.com> References: <20200304021953.417802-1-ihrachys@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn] Broadcast DHCPREPLY when BROADCAST flag is set X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" As per RFC2131, section 4.1: A server or relay agent sending or relaying a DHCP message directly to a DHCP client (i.e., not to a relay agent specified in the 'giaddr' field) SHOULD examine the BROADCAST bit in the 'flags' field. If this bit is set to 1, the DHCP message SHOULD be sent as an IP broadcast using an IP broadcast address (preferably 0xffffffff) as the IP destination address and the link-layer broadcast address as the link-layer destination address. This patch changes destination IP address to 255.255.255.255 when client set BROADCAST flag in their DHCPREQUEST. Note: the offered IP address is still part of the DHCP payload. Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1801006 Signed-off-by: Ihar Hrachyshka --- controller/pinctrl.c | 11 +++++ northd/ovn-northd.c | 7 ++-- tests/ovn.at | 98 ++++++++++++++++++++++++++++++++------------ 3 files changed, 85 insertions(+), 31 deletions(-) diff --git a/controller/pinctrl.c b/controller/pinctrl.c index d06915a65..6197ea325 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -966,6 +966,8 @@ pinctrl_handle_tcp_reset(struct rconn *swconn, const struct flow *ip_flow, dp_packet_uninit(&packet); } +#define DHCP_FLAGS_BROADCAST(flags) (((flags) & (1UL << 7)) != 0) + /* Called with in the pinctrl_handler thread context. */ static void pinctrl_handle_put_dhcp_opts( @@ -1190,7 +1192,16 @@ pinctrl_handle_put_dhcp_opts( udp->udp_len = htons(new_l4_size); + /* Send a broadcast IP frame when BROADCAST flag is set */ struct ip_header *out_ip = dp_packet_l3(&pkt_out); + uint32_t ip_dst; + if DHCP_FLAGS_BROADCAST(dhcp_data->flags) { + ip_dst = htonl(0xffffffff); + } else { + ip_dst = *offer_ip; + } + put_16aligned_be32(&out_ip->ip_dst, ip_dst); + out_ip->ip_tot_len = htons(pkt_out.l4_ofs - pkt_out.l3_ofs + new_l4_size); udp->udp_csum = 0; /* Checksum needs to be initialized to zero. */ diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c index 3aba0487d..58dfee617 100644 --- a/northd/ovn-northd.c +++ b/northd/ovn-northd.c @@ -4271,10 +4271,9 @@ build_dhcpv4_action(struct ovn_port *op, ovs_be32 offer_ip, ds_put_cstr(options_action, "); next;"); ds_put_format(response_action, "eth.dst = eth.src; eth.src = %s; " - "ip4.dst = "IP_FMT"; ip4.src = %s; udp.src = 67; " - "udp.dst = 68; outport = inport; flags.loopback = 1; " - "output;", - server_mac, IP_ARGS(offer_ip), server_ip); + "ip4.src = %s; udp.src = 67; udp.dst = 68; " + "outport = inport; flags.loopback = 1; output;", + server_mac, server_ip); ds_put_format(ipv4_addr_match, "ip4.src == "IP_FMT" && ip4.dst == {%s, 255.255.255.255}", diff --git a/tests/ovn.at b/tests/ovn.at index cbaa6d4a2..a7842a35e 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -4595,10 +4595,11 @@ sleep 2 as hv1 ovs-vsctl show # This shell function sends a DHCP request packet -# test_dhcp INPORT SRC_MAC DHCP_TYPE OFFER_IP REQUEST_IP ... +# test_dhcp INPORT SRC_MAC DHCP_TYPE BROADCAST CIADDR OFFER_IP REQUEST_IP USE_IP ... test_dhcp() { - local inport=$1 src_mac=$2 dhcp_type=$3 ciaddr=$4 offer_ip=$5 request_ip=$6 use_ip=$7 - shift; shift; shift; shift; shift; shift; shift; + local inport=$1 src_mac=$2 dhcp_type=$3 broadcast=$4 ciaddr=$5 offer_ip=$6 request_ip=$7 use_ip=$8 + shift; shift; shift; shift; shift; shift; shift; shift; + if test $use_ip != 0; then src_ip=$1 dst_ip=$2 @@ -4607,6 +4608,7 @@ test_dhcp() { src_ip=`ip_to_hex 0 0 0 0` dst_ip=`ip_to_hex 255 255 255 255` fi + if test $request_ip != 0; then ip_len=0120 udp_len=010b @@ -4614,10 +4616,19 @@ test_dhcp() { ip_len=011a udp_len=0106 fi + + if test $broadcast != 0; then + flags=8000 + reply_dst_ip=`ip_to_hex 255 255 255 255` + else + flags=0000 + reply_dst_ip=${offer_ip} + fi + local request=ffffffffffff${src_mac}08004510${ip_len}0000000080110000${src_ip}${dst_ip} # udp header and dhcp header request=${request}00440043${udp_len}0000 - request=${request}010106006359aa7600000000${ciaddr}000000000000000000000000${src_mac} + request=${request}010106006359aa760000${flags}${ciaddr}000000000000000000000000${src_mac} # client hardware padding request=${request}00000000000000000000 # server hostname @@ -4655,10 +4666,10 @@ test_dhcp() { ip_len=$(printf "%x" $ip_len) udp_len=$(printf "%x" $udp_len) # $ip_len var will be in 3 digits i.e 134. So adding a '0' before $ip_len - local reply=${src_mac}${srv_mac}080045100${ip_len}000000008011XXXX${srv_ip}${offer_ip} + local reply=${src_mac}${srv_mac}080045100${ip_len}000000008011XXXX${srv_ip}${reply_dst_ip} # udp header and dhcp header. # $udp_len var will be in 3 digits. So adding a '0' before $udp_len - reply=${reply}004300440${udp_len}0000020106006359aa7600000000${ciaddr} + reply=${reply}004300440${udp_len}0000020106006359aa760000${flags}${ciaddr} # your ip address; 0 for NAK if test $dhcp_reply_type = 06; then reply=${reply}00000000 @@ -4729,7 +4740,7 @@ server_ip=`ip_to_hex 10 0 0 1` ciaddr=`ip_to_hex 0 0 0 0` request_ip=0 expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 1 f00000000001 01 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 02 $expected_dhcp_opts +test_dhcp 1 f00000000001 01 0 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 02 $expected_dhcp_opts # NXT_RESUMEs should be 1. OVS_WAIT_UNTIL([test 1 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4755,7 +4766,7 @@ server_ip=`ip_to_hex 10 0 0 1` ciaddr=`ip_to_hex 0 0 0 0` request_ip=$offer_ip expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 05 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 05 $expected_dhcp_opts # NXT_RESUMEs should be 2. OVS_WAIT_UNTIL([test 2 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4779,7 +4790,7 @@ server_ip=`ip_to_hex 10 0 0 1` ciaddr=`ip_to_hex 0 0 0 0` request_ip=`ip_to_hex 10 0 0 7` expected_dhcp_opts="" -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 06 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 06 $expected_dhcp_opts # NXT_RESUMEs should be 3. OVS_WAIT_UNTIL([test 3 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4803,7 +4814,7 @@ rm -f 2.expected ciaddr=`ip_to_hex 0 0 0 0` offer_ip=0 request_ip=0 -test_dhcp 2 f00000000002 08 $ciaddr $offer_ip $request_ip 0 1 1 +test_dhcp 2 f00000000002 08 0 $ciaddr $offer_ip $request_ip 0 1 1 # NXT_RESUMEs should be 4. OVS_WAIT_UNTIL([test 4 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4820,12 +4831,12 @@ rm -f 2.expected # ls2-lp2 (vif4-tx.pcap) should receive the DHCPv4 request packet once. ciaddr=`ip_to_hex 0 0 0 0` -test_dhcp 3 f00000000003 01 $ciaddr 0 0 4 0 +test_dhcp 3 f00000000003 01 0 $ciaddr 0 0 4 0 # Send DHCPv4 packet on ls2-lp2. "router" DHCPv4 option is not defined for # this lport. ciaddr=`ip_to_hex 0 0 0 0` -test_dhcp 4 f00000000004 01 $ciaddr 0 0 3 0 +test_dhcp 4 f00000000004 01 0 $ciaddr 0 0 3 0 # NXT_RESUMEs should be 4. OVS_WAIT_UNTIL([test 4 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4842,7 +4853,7 @@ request_ip=0 src_ip=$offer_ip dst_ip=$server_ip expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 05 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 05 $expected_dhcp_opts # NXT_RESUMEs should be 5. OVS_WAIT_UNTIL([test 5 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4868,7 +4879,7 @@ request_ip=0 src_ip=$offer_ip dst_ip=`ip_to_hex 255 255 255 255` expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 05 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 05 $expected_dhcp_opts # NXT_RESUMEs should be 6. OVS_WAIT_UNTIL([test 6 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4894,7 +4905,7 @@ request_ip=0 src_ip=$offer_ip dst_ip=`ip_to_hex 255 255 255 255` expected_dhcp_opts="" -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 06 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 06 $expected_dhcp_opts # NXT_RESUMEs should be 7. OVS_WAIT_UNTIL([test 7 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4920,7 +4931,7 @@ request_ip=0 src_ip=$offer_ip dst_ip=`ip_to_hex 255 255 255 255` expected_dhcp_opts="" -test_dhcp 2 f00000000002 03 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 06 $expected_dhcp_opts +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 1 $src_ip $dst_ip ff1000000001 $server_ip 06 $expected_dhcp_opts # NXT_RESUMEs should be 8. OVS_WAIT_UNTIL([test 8 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4942,7 +4953,7 @@ rm -f 2.expected ciaddr=`ip_to_hex 0 0 0 0` src_ip=`ip_to_hex 10 0 0 6` dst_ip=`ip_to_hex 10 0 0 4` -test_dhcp 2 f00000000002 03 $ciaddr 0 0 1 $src_ip $dst_ip 1 +test_dhcp 2 f00000000002 03 0 $ciaddr 0 0 1 $src_ip $dst_ip 1 # NXT_RESUMEs should be 8. OVS_WAIT_UNTIL([test 8 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) @@ -4950,6 +4961,29 @@ OVS_WAIT_UNTIL([test 8 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) # vif1-tx.pcap should have received the DHCPv4 request packet OVN_CHECK_PACKETS([hv1/vif1-tx.pcap], [1.expected]) +reset_pcap_file hv1-vif1 hv1/vif1 +reset_pcap_file hv1-vif2 hv1/vif2 +rm -f 1.expected +rm -f 2.expected + +# Send DHCPDISCOVER with BROADCAST flag on. +offer_ip=`ip_to_hex 10 0 0 4` +server_ip=`ip_to_hex 10 0 0 1` +ciaddr=`ip_to_hex 0 0 0 0` +request_ip=0 +expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 +test_dhcp 1 f00000000001 01 1 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 02 $expected_dhcp_opts + +# NXT_RESUMEs should be 9. +OVS_WAIT_UNTIL([test 9 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) + +$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" hv1/vif1-tx.pcap > 1.packets +cat 1.expected | cut -c -48 > expout +AT_CHECK([cat 1.packets | cut -c -48], [0], [expout]) +# Skipping the IPv4 checksum. +cat 1.expected | cut -c 53- > expout +AT_CHECK([cat 1.packets | cut -c 53-], [0], [expout]) + OVN_CLEANUP([hv1]) AT_CLEANUP @@ -13206,10 +13240,11 @@ as hv1 ovs-vsctl show # This shell function sends a DHCP request packet -# test_dhcp INPORT SRC_MAC DHCP_TYPE OFFER_IP ... +# test_dhcp INPORT SRC_MAC DHCP_TYPE BROADCAST OFFER_IP ... test_dhcp() { - local inport=$1 src_mac=$2 dhcp_type=$3 offer_ip=$4 use_ip=$5 - shift; shift; shift; shift; shift; + local inport=$1 src_mac=$2 dhcp_type=$3 broadcast=$4 offer_ip=$5 use_ip=$6 + shift; shift; shift; shift; shift; shift; + if test $use_ip != 0; then src_ip=$1 dst_ip=$2 @@ -13218,10 +13253,19 @@ test_dhcp() { src_ip=`ip_to_hex 0 0 0 0` dst_ip=`ip_to_hex 255 255 255 255` fi + + if test $broadcast != 0; then + flags=8000 + reply_dst_ip=`ip_to_hex 255 255 255 255` + else + flags=0000 + reply_dst_ip=${offer_ip} + fi + local request=ffffffffffff${src_mac}0800451001100000000080110000${src_ip}${dst_ip} # udp header and dhcp header request=${request}0044004300fc0000 - request=${request}010106006359aa760000000000000000000000000000000000000000${src_mac} + request=${request}010106006359aa760000${flags}00000000000000000000000000000000${src_mac} # client hardware padding request=${request}00000000000000000000 # server hostname @@ -13245,10 +13289,10 @@ test_dhcp() { ip_len=$(printf "%x" $ip_len) udp_len=$(printf "%x" $udp_len) # $ip_len var will be in 3 digits i.e 134. So adding a '0' before $ip_len - local reply=${src_mac}${srv_mac}080045100${ip_len}000000008011XXXX${srv_ip}${offer_ip} + local reply=${src_mac}${srv_mac}080045100${ip_len}000000008011XXXX${srv_ip}${reply_dst_ip} # udp header and dhcp header. # $udp_len var will be in 3 digits. So adding a '0' before $udp_len - reply=${reply}004300440${udp_len}0000020106006359aa760000000000000000 + reply=${reply}004300440${udp_len}0000020106006359aa760000${flags}00000000 # your ip address reply=${reply}${offer_ip} # next server ip address, relay agent ip address, client mac address @@ -13367,7 +13411,7 @@ offer_ip=`ip_to_hex 10 0 0 6` server_ip=`ip_to_hex 10 0 0 1` server_mac=ff1000000001 expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 1 f00000000003 01 $offer_ip 0 $server_mac $server_ip \ +test_dhcp 1 f00000000003 01 0 $offer_ip 0 $server_mac $server_ip \ $expected_dhcp_opts # NXT_RESUMEs should be 1 in hv1. @@ -13465,7 +13509,7 @@ offer_ip=`ip_to_hex 10 0 0 6` server_ip=`ip_to_hex 10 0 0 1` server_mac=ff1000000001 expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 1 f00000000003 01 $offer_ip 0 $server_mac $server_ip \ +test_dhcp 1 f00000000003 01 0 $offer_ip 0 $server_mac $server_ip \ $expected_dhcp_opts # NXT_RESUMEs should be 2 in hv1. @@ -13575,7 +13619,7 @@ offer_ip=`ip_to_hex 10 0 0 6` server_ip=`ip_to_hex 10 0 0 1` server_mac=ff1000000001 expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 1 f00000000003 01 $offer_ip 0 $server_mac $server_ip \ +test_dhcp 1 f00000000003 01 0 $offer_ip 0 $server_mac $server_ip \ $expected_dhcp_opts # NXT_RESUMEs should be 3 in hv1. @@ -13655,7 +13699,7 @@ offer_ip=`ip_to_hex 10 0 0 6` server_ip=`ip_to_hex 10 0 0 1` server_mac=ff1000000001 expected_dhcp_opts=330400000e100104ffffff0003040a00000136040a000001 -test_dhcp 1 f00000000003 01 $offer_ip 0 $server_mac $server_ip \ +test_dhcp 1 f00000000003 01 0 $offer_ip 0 $server_mac $server_ip \ $expected_dhcp_opts # NXT_RESUMEs should be 4 in hv1.