From patchwork Thu Jun 11 20:44:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Sharma X-Patchwork-Id: 1307815 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.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nutanix.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nutanix.com header.i=@nutanix.com header.a=rsa-sha256 header.s=proofpoint20171006 header.b=UaxuSUTU; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49jbSL3jM2z9sRN for ; Fri, 12 Jun 2020 06:44:18 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 8311F26B1E; Thu, 11 Jun 2020 20:44:16 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3JRBzk+PypJo; Thu, 11 Jun 2020 20:43:55 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id BAAD2267EB; Thu, 11 Jun 2020 20:43:53 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 93C2EC0178; Thu, 11 Jun 2020 20:43:53 +0000 (UTC) X-Original-To: ovs-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 7C573C016F for ; Thu, 11 Jun 2020 20:43:52 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 6B251896A9 for ; Thu, 11 Jun 2020 20:43:52 +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 2avDstg0BMJv for ; Thu, 11 Jun 2020 20:43:49 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) by hemlock.osuosl.org (Postfix) with ESMTPS id 3F9FC89699 for ; Thu, 11 Jun 2020 20:43:49 +0000 (UTC) Received: from pps.filterd (m0127839.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 05BKdGTb030397 for ; Thu, 11 Jun 2020 13:43:48 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nutanix.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=proofpoint20171006; bh=62IEbMfHec/ZI1nWAeuP36qPOFcdL8OiPgfoiOyP9Rw=; b=UaxuSUTUKeYoeS6BHkVfOCZULiaVe0+RvBW+9crD7yckqwjcQrb6JFrjrZvQC1nQ3cyX 15LyBfsqHohPFcajjp0NZjoQqByoS7Wi3aE8kd1qdUvkg6ECBGQRHyJa9GqhYBuCZtIT /iVqBq5SX9H3zBq9PmHfOCrMLf49w+UK0auUqd0OJA2eU49eIi7IgF9FTj1K8f7W3WQZ MGub7MsOdE9A4oSTuDniVz96w0Eb9vP6J6jpwC2MuxrTk9FSOoD6Wkpn3ooq19RfmFeO wB4/9veSJjNU2y4kttwX5ojy2C3cPltvoWTItfwZYbbnbnNuJC/Omn/mQ/r9K1SkOrJP Eg== Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2175.outbound.protection.outlook.com [104.47.59.175]) by mx0a-002c1b01.pphosted.com with ESMTP id 31ga7jn0ak-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 11 Jun 2020 13:43:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B3Wb9ED4iqvH6uwNXFqa6frqGFAxC7i6Y//JO1ioBb42OpOh/BQPSoIegrztdIe7+vwFM8CI7JveZ7YFf4RvdcNpmsKczo3c6i4lDnYBZ9fm3sAIGmuyXaWxByuKITHD8sXjq6n9VU99zy95CIT+PgQR4IExY3BB0UjirBI2KOrAdNb3buwqqZILY6UNOVXdr+gTPuwDc9G2Rc/9agnbInO72hV+72jEl60rSM42dFlm5AH59fHwsv8gnoHsoCB9I+mmzxVwgDZv/0+hK9MpchguMrFi2X7lIKReLhtSKsbViVZEirM8mu1HqloXVccTtH7zwReqclpeBchz3Jh3tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=62IEbMfHec/ZI1nWAeuP36qPOFcdL8OiPgfoiOyP9Rw=; b=c7QdZ3808X3BlQGKUSoqZWfbZGZSkxk20GnCyoioh7AHagrUDwajGvbzqh7frz37ivsyC9MLrwJUmTRk24kZju4ECmhVFXkOh4h58Idcj6nNeI5ZSsndVVr+aQSavbUnKAbXBr1BmxCE8aPQB+5Nv3aSAme3DROyrayEeo71YvvZeJZmE5pT6j5SRmUEe8bpy0cHCoHUmPvWMyrM28ur2zZRuTxmzQipXAwJUqfLCAXbL2gweXm0dD+Iedf+cxMfjcmN2oL6sEit9Ae1vDEf+enH6XZSUwgH26G0ixZWKpPLtYI2Ouhyh+vjAcJI5nKXLw99jeNZ1gldv66Rcb1Yow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nutanix.com; dmarc=pass action=none header.from=nutanix.com; dkim=pass header.d=nutanix.com; arc=none Authentication-Results: openvswitch.org; dkim=none (message not signed) header.d=none;openvswitch.org; dmarc=none action=none header.from=nutanix.com; Received: from BL0PR02MB3714.namprd02.prod.outlook.com (2603:10b6:207:44::16) by BL0PR02MB3873.namprd02.prod.outlook.com (2603:10b6:207:49::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.22; Thu, 11 Jun 2020 20:43:44 +0000 Received: from BL0PR02MB3714.namprd02.prod.outlook.com ([fe80::445e:7f74:952e:2ccb]) by BL0PR02MB3714.namprd02.prod.outlook.com ([fe80::445e:7f74:952e:2ccb%5]) with mapi id 15.20.3088.022; Thu, 11 Jun 2020 20:43:44 +0000 From: Ankur Sharma To: ovs-dev@openvswitch.org Date: Thu, 11 Jun 2020 13:44:41 -0700 Message-Id: <1591908281-42017-2-git-send-email-svc.mail.git@nutanix.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1591908281-42017-1-git-send-email-svc.mail.git@nutanix.com> References: <1591908281-42017-1-git-send-email-svc.mail.git@nutanix.com> X-ClientProxiedBy: BYAPR01CA0034.prod.exchangelabs.com (2603:10b6:a02:80::47) To BL0PR02MB3714.namprd02.prod.outlook.com (2603:10b6:207:44::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from northd.localdomain (192.146.154.98) by BYAPR01CA0034.prod.exchangelabs.com (2603:10b6:a02:80::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.19 via Frontend Transport; Thu, 11 Jun 2020 20:43:43 +0000 X-Mailer: git-send-email 1.8.3.1 X-Originating-IP: [192.146.154.98] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 70f27d02-4764-4c97-b34b-08d80e482205 X-MS-TrafficTypeDiagnostic: BL0PR02MB3873: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-proofpoint-crosstenant: true X-MS-Oob-TLC-OOBClassifiers: OLM:1923; X-Forefront-PRVS: 0431F981D8 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: o5WeYHcX31sy1Nq2XuI8TEq+uoE4Tk9gGz4nYKxZtxIQt+vsghjGJc+a8HU59yb8k3zNW99S2cBub9hLqOzxQCNrFWPxtEn5gTW5bV9s/JUE+0nwNYbvhx5IgTDSaWq5U1snof0SrnVy8wUmui8Q5YPdWZLX9tWcKPy1vQI14SsvpYgPqVlpUnB5QTlIRqMovmi8nx08VZ/UPBnAgT4cJ2r1yWGh0ElZZGHN+FDisV/8pPcdttnBHmuJuAJBKW8uAHvx3uAraWNdFg1M2W5i7Rlzs5XJ2s68/evxSmr6388kvwHKUhAwjk7Mky82/4aKr1rq6O9cVYFOgLNorYCbBFCcPh4ZaXaau1eCJaAQR0oKwogQZ37tl9MouIVXMApCxCGRB6qJ7pWlyDjU+iMrvA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR02MB3714.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(6019001)(136003)(396003)(366004)(39860400002)(346002)(376002)(5660300002)(83080400001)(66556008)(66476007)(30864003)(66574014)(86362001)(2906002)(66946007)(6486002)(478600001)(16526019)(6512007)(316002)(8676002)(36756003)(186003)(8936002)(26005)(956004)(4326008)(54906003)(6506007)(83380400001)(2616005)(107886003)(6916009)(52116002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: sEfDMTZ0KFk5h42y6Ddfkdf4PfHxrHCd2/Ymoz65urcV7sxjfgU8vMor+8keJl/SeqkRXVXPmvPx8+a9salvK5Q0OmisNCRu8GMlhx0dvs9wm+nrvg6J+HDlHjwfXfdB3+NlNDwYCV9huArR9BFqXTVOfNNZQul61SMY1Mkf4MvPEC1tUd6Khci9Phyx4OrDh0N8/ZyXzteEC3c5fAt1o6Sd3NtLUN/x0q5IGC2ox6UUuhAivBSfZqrgFnOqyxlz+G8N2Vhj8ujLgCaOGRbqauXX1b4hL+sUr7du3xSVrMUy/G7jhtBF75PUWR0+DHZzX2mCNBwDETvMscbr3oOST0dBACUcV/e9r5bveSUEan/UXNwD+wvWKbLHABmaCTMCFsJbePRttptrXrDL/jHFzpK2/+utV9sMaWr3642dQT9Bgji4viTC6M70iqXFGKzGoWqBSnCE2YZnuOV2QhwddY3IIec/Eo17P7PonxTPX2w= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70f27d02-4764-4c97-b34b-08d80e482205 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jun 2020 20:43:44.6636 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MQP6UAwHewRztHK/eUKzha4QZ27wNz7KsXlSzzndnni4qCNoCaI2gPyXZnFiTtejfdAQIfR8jKuECzq2sRTSv6OQl5O/vOfSg16zeOpaOy0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR02MB3873 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-11_20:2020-06-11, 2020-06-11 signatures=0 X-Proofpoint-Spam-Reason: safe Cc: Dhathri Purohith , Dhathri Purohith Subject: [ovs-dev] [PATCH v5 2/2 ovn] Add support for DHCP domain search option (119) 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" From: Dhathri Purohith From: Dhathri Purohith Domain search list is encoded according to the specifications in RFC 1035, section 4.1.4. Signed-off-by: Dhathri Purohith Signed-off-by: Ankur Sharma Signed-off-by: Dhathri Purohith > Signed-off-by: Ankur Sharma > Signed-off-by: Dhathri Purohith >> Signed-off-by: Ankur Sharma >> --- lib/actions.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++- lib/ovn-l7.h | 3 ++ northd/ovn-northd.c | 1 + ovn-nb.xml | 15 +++++++++- ovn-sb.ovsschema | 6 ++-- ovn-sb.xml | 11 +++++++ tests/ovn.at | 36 ++++++++++++++++++++++ tests/test-ovn.c | 1 + 8 files changed, 154 insertions(+), 5 deletions(-) diff --git a/lib/actions.c b/lib/actions.c index f21be6d..24c9043 100644 --- a/lib/actions.c +++ b/lib/actions.c @@ -1982,7 +1982,8 @@ parse_gen_opt(struct action_context *ctx, struct ovnact_gen_option *o, return; } - if (!strcmp(o->option->type, "str")) { + if (!strcmp(o->option->type, "str") || + !strcmp(o->option->type, "domains")) { if (o->value.type != EXPR_C_STRING) { lexer_error(ctx->lexer, "%s option %s requires string value.", opts_type, o->option->name); @@ -2317,6 +2318,89 @@ encode_put_dhcpv4_option(const struct ovnact_gen_option *o, opt_header[1] = sizeof(ovs_be32); ofpbuf_put(ofpacts, &c->value.ipv4, sizeof(ovs_be32)); } + } else if (!strcmp(o->option->type, "domains")) { + /* Please refer to RFC 1035, section 4.1.4 for the format of encoding + * domain names. Below is an example for encoding a search list + * consisting of the "abc.com" and "xyz.abc.com". + * + * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * |119|14 | 3 |'a'|'b'|'c'| 3 |'c'|'o'|'m'| 0 |'x'|'y'|'z'|xC0|x00| + * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ + * + * The encoding of "abc.com" ends with 0 to mark the end of the + * domain name as required by RFC 1035. + * + * The encoding of "xyz" (for "xyz.abc.com") ends with the two-octet + * compression pointer C000 (hex), which points to offset 0 where + * another validly encoded domain name can be found to complete + * the name ("abc.com"). + * + * Encoding adds 2 bytes (one for length and one for delimiter) for + * every domain name that is unique. If all the domain names are unique + * (which probably never happens in real world), then encoded string + * could be longer than the original string. Just to be on the safer + * side, allocate the (approx.) worst case length here. + */ + uint8_t *dns_encoded = xzalloc(2 * strlen(c->string)); + uint16_t encode_offset = 0; + struct shash label_offset_map; + shash_init(&label_offset_map); + char *domain_list = xstrdup(c->string), *dom_ptr = NULL; + for (char *domain = strtok_r(domain_list, ",", &dom_ptr); + domain != NULL; + domain = strtok_r(NULL, ",", &dom_ptr)) { + if (strlen(domain) > DOMAIN_NAME_MAX_LEN) { + VLOG_WARN("Domain names longer than 255 characters are not" + "supported"); + goto out; + } + char *label_ptr = NULL, *label; + for (label = strtok_r(domain, ".", &label_ptr); + label != NULL; + label = strtok_r(NULL, ".", &label_ptr)) { + /* Check if we have already encoded this label. If yes, + * fill in the reference and break. */ + uint16_t *get_offset; + get_offset = shash_find_data(&label_offset_map, label); + if (get_offset != NULL) { + ovs_be16 temp = htons(0xc000) | htons(*get_offset); + memcpy(dns_encoded + encode_offset, &temp, + sizeof(temp)); + encode_offset += sizeof(temp); + break; + } else { + /* The label was not encoded before, encode it now and add + * the offset to the label_offset_map. */ + uint16_t *set_offset = xzalloc(sizeof(uint16_t)); + memcpy(set_offset, &encode_offset, sizeof(uint16_t)); + shash_add_once(&label_offset_map, label, set_offset); + + uint8_t len = strlen(label); + memcpy(dns_encoded + encode_offset, &len, sizeof(uint8_t)); + encode_offset += sizeof(uint8_t); + memcpy(dns_encoded + encode_offset, label, len); + encode_offset += len; + } + } + /* Add the end marker (0 byte) to determine the end of the + * domain. */ + if (label == NULL) { + uint8_t end = 0; + memcpy(dns_encoded + encode_offset, &end, sizeof(uint8_t)); + encode_offset += sizeof(uint8_t); + } + } + opt_header[1] = encode_offset; + ofpbuf_put(ofpacts, dns_encoded, encode_offset); + + out: + free(domain_list); + free(dns_encoded); + struct shash_node *node, *next; + SHASH_FOR_EACH_SAFE (node, next, &label_offset_map) { + shash_delete(&label_offset_map, node); + } + shash_destroy(&label_offset_map); } } diff --git a/lib/ovn-l7.h b/lib/ovn-l7.h index 38555db..f34bc0d 100644 --- a/lib/ovn-l7.h +++ b/lib/ovn-l7.h @@ -34,6 +34,7 @@ struct gen_opts_map { size_t code; }; +#define DOMAIN_NAME_MAX_LEN 255 #define DHCP_BROADCAST_FLAG 0x8000 #define DHCP_OPTION(NAME, CODE, TYPE) \ @@ -81,6 +82,8 @@ struct gen_opts_map { #define DHCP_OPT_PATH_PREFIX DHCP_OPTION("path_prefix", 210, "str") #define DHCP_OPT_TFTP_SERVER_ADDRESS \ DHCP_OPTION("tftp_server_address", 150, "ipv4") +#define DHCP_OPT_DOMAIN_SEARCH_LIST \ + DHCP_OPTION("domain_search_list", 119, "domains") #define DHCP_OPT_ARP_CACHE_TIMEOUT \ DHCP_OPTION("arp_cache_timeout", 35, "uint32") diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c index ef08414..4ec2034 100644 --- a/northd/ovn-northd.c +++ b/northd/ovn-northd.c @@ -11336,6 +11336,7 @@ static struct gen_opts_map supported_dhcp_opts[] = { DHCP_OPT_DOMAIN_NAME, DHCP_OPT_ARP_CACHE_TIMEOUT, DHCP_OPT_TCP_KEEPALIVE_INTERVAL, + DHCP_OPT_DOMAIN_SEARCH_LIST, }; static struct gen_opts_map supported_dhcpv6_opts[] = { diff --git a/ovn-nb.xml b/ovn-nb.xml index 54f5301..80e843c 100644 --- a/ovn-nb.xml +++ b/ovn-nb.xml @@ -2939,7 +2939,7 @@ - +

These options accept either an IPv4 address or a string value.

@@ -2950,6 +2950,19 @@

+ + +

+ These options accept string value which is a comma separated + list of domain names. The domain names are encoded based on RFC 1035. +

+ + +

+ The DHCPv4 option code for this option is 119. +

+
+
diff --git a/ovn-sb.ovsschema b/ovn-sb.ovsschema index 2ec729b..99c5de8 100644 --- a/ovn-sb.ovsschema +++ b/ovn-sb.ovsschema @@ -1,7 +1,7 @@ { "name": "OVN_Southbound", - "version": "2.8.1", - "cksum": "236203406 21905", + "version": "2.8.2", + "cksum": "464326363 21916", "tables": { "SB_Global": { "columns": { @@ -218,7 +218,7 @@ "type": "string", "enum": ["set", ["bool", "uint8", "uint16", "uint32", "ipv4", "static_routes", "str", - "host_id"]]}}}}, + "host_id", "domains"]]}}}}, "isRoot": true}, "DHCPv6_Options": { "columns": { diff --git a/ovn-sb.xml b/ovn-sb.xml index 208fb93..a6da80b 100644 --- a/ovn-sb.xml +++ b/ovn-sb.xml @@ -3232,6 +3232,17 @@ tcp.flags = RST;

+
value: domains
+
+

+ This indicates that the value of the DHCP option is a domain name + or a comma separated list of domain names. +

+ +

+ Example. "name=domain_search_list", "code=119", "type=domains". +

+
diff --git a/tests/ovn.at b/tests/ovn.at index d3b35ac..341641b 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -1218,6 +1218,9 @@ reg0[15] = put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.255.0, reg0[15] = put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.255.0,mtu=1400,ip_forward_enable=1,default_ttl=121,dns_server={8.8.8.8,7.7.7.7},classless_static_route={30.0.0.0/24,10.0.0.4,40.0.0.0/16,10.0.0.6,0.0.0.0/0,10.0.0.1},ethernet_encap=1,router_discovery=0,tftp_server="tftp_server_test"); formats as reg0[15] = put_dhcp_opts(offerip = 10.0.0.4, router = 10.0.0.1, netmask = 255.255.255.0, mtu = 1400, ip_forward_enable = 1, default_ttl = 121, dns_server = {8.8.8.8, 7.7.7.7}, classless_static_route = {30.0.0.0/24, 10.0.0.4, 40.0.0.0/16, 10.0.0.6, 0.0.0.0/0, 10.0.0.1}, ethernet_encap = 1, router_discovery = 0, tftp_server = "tftp_server_test"); encodes as controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.6f.0a.00.00.04.03.04.0a.00.00.01.01.04.ff.ff.ff.00.1a.02.05.78.13.01.01.17.01.79.06.08.08.08.08.08.07.07.07.07.79.14.18.1e.00.00.0a.00.00.04.10.28.00.0a.00.00.06.00.0a.00.00.01.24.01.01.1f.01.00.42.10.74.66.74.70.5f.73.65.72.76.65.72.5f.74.65.73.74,pause) +reg2[5] = put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.254.0,mtu=1400,domain_name="ovn.org",wpad="https://example.org",bootfile_name="https://127.0.0.1/boot.ipxe",path_prefix="/tftpboot",domain_search_list="ovn.org,abc.ovn.org"); + formats as reg2[5] = put_dhcp_opts(offerip = 10.0.0.4, router = 10.0.0.1, netmask = 255.255.254.0, mtu = 1400, domain_name = "ovn.org", wpad = "https://example.org", bootfile_name = "https://127.0.0.1/boot.ipxe", path_prefix = "/tftpboot", domain_search_list = "ovn.org,abc.ovn.org"); + encodes as controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.25.0a.00.00.04.03.04.0a.00.00.01.01.04.ff.ff.fe.00.1a.02.05.78.0f.07.6f.76.6e.2e.6f.72.67.fc.13.68.74.74.70.73.3a.2f.2f.65.78.61.6d.70.6c.65.2e.6f.72.67.43.1b.68.74.74.70.73.3a.2f.2f.31.32.37.2e.30.2e.30.2e.31.2f.62.6f.6f.74.2e.69.70.78.65.d2.09.2f.74.66.74.70.62.6f.6f.74.77.0f.03.6f.76.6e.03.6f.72.67.00.03.61.62.63.c0.00,pause) reg1[0..1] = put_dhcp_opts(offerip = 1.2.3.4, router = 10.0.0.1); Cannot use 2-bit field reg1[0..1] where 1-bit field is required. @@ -1235,6 +1238,8 @@ reg1[0] = put_dhcp_opts(offerip="xyzzy"); DHCPv4 option offerip requires numeric value. reg1[0] = put_dhcp_opts(offerip=1.2.3.4, domain_name=1.2.3.4); DHCPv4 option domain_name requires string value. +reg1[0] = put_dhcp_opts(offerip=1.2.3.4, domain_search_list=1.2.3.4); + DHCPv4 option domain_search_list requires string value. # nd_ns nd_ns { nd.target = xxreg0; output; }; @@ -5614,6 +5619,37 @@ AT_CHECK([cat 2.packets | cut -c -48], [0], [expout]) cat 2.expected | cut -c 53- > expout AT_CHECK([cat 2.packets | cut -c 53-], [0], [expout]) +reset_pcap_file hv1-vif1 hv1/vif1 +reset_pcap_file hv1-vif2 hv1/vif2 +rm -f 1.expected +rm -f 2.expected + +# Set domain search list option for ls1 +echo "------ Set domain search list --------" +ovn-nbctl dhcp-options-set-options $d1 server_id=10.0.0.1 \ +server_mac=ff:10:00:00:00:01 lease_time=3600 router=10.0.0.1 \ +domain_search_list=\"test1.com,test2.com\" +echo "------------------------------------------" + +# Send DHCPREQUEST in the SELECTING/INIT-REBOOT state with the offered IP +# address in the Requested IP Address option. +offer_ip=`ip_to_hex 10 0 0 6` +server_ip=`ip_to_hex 10 0 0 1` +ciaddr=`ip_to_hex 0 0 0 0` +request_ip=$offer_ip +expected_dhcp_opts=771305746573743103636f6d00057465737432c006330400000e100104ffffff0003040a00000136040a000001 +test_dhcp 2 f00000000002 03 0 $ciaddr $offer_ip $request_ip 0 ff1000000001 $server_ip 05 $expected_dhcp_opts + +# NXT_RESUMEs should be 12. +OVS_WAIT_UNTIL([test 12 = `cat ofctl_monitor*.log | grep -c NXT_RESUME`]) + +$PYTHON "$ovs_srcdir/utilities/ovs-pcap.in" hv1/vif2-tx.pcap > 2.packets +cat 2.expected | cut -c -48 > expout +AT_CHECK([cat 2.packets | cut -c -48], [0], [expout]) +# Skipping the IPv4 checksum. +cat 2.expected | cut -c 53- > expout +AT_CHECK([cat 2.packets | cut -c 53-], [0], [expout]) + OVN_CLEANUP([hv1]) AT_CLEANUP diff --git a/tests/test-ovn.c b/tests/test-ovn.c index 4391694..b43f67f 100644 --- a/tests/test-ovn.c +++ b/tests/test-ovn.c @@ -189,6 +189,7 @@ create_gen_opts(struct hmap *dhcp_opts, struct hmap *dhcpv6_opts, dhcp_opt_add(dhcp_opts, "tftp_server_address", 150, "ipv4"); dhcp_opt_add(dhcp_opts, "arp_cache_timeout", 35, "uint32"); dhcp_opt_add(dhcp_opts, "tcp_keepalive_interval", 38, "uint32"); + dhcp_opt_add(dhcp_opts, "domain_search_list", 119, "domains"); /* DHCPv6 options. */ hmap_init(dhcpv6_opts);