From patchwork Mon Mar 6 02:49:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1752106 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=CURgopTO; dkim-atps=neutral Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PVNNF36g5z246g for ; Mon, 6 Mar 2023 13:50:04 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id EB7B781E18; Mon, 6 Mar 2023 02:50:01 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org EB7B781E18 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=CURgopTO X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id r3GefgtkHxJa; Mon, 6 Mar 2023 02:50:00 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 1DF3F819CC; Mon, 6 Mar 2023 02:49:59 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 1DF3F819CC Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4E6E5C0092; Mon, 6 Mar 2023 02:49:56 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 66081C0032 for ; Mon, 6 Mar 2023 02:49:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id C10F1819CC for ; Mon, 6 Mar 2023 02:49:52 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org C10F1819CC X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Mr89pWjEbf6s for ; Mon, 6 Mar 2023 02:49:51 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 9423B819F3 Received: from corp-ob09.yahoo-corp.jp (corp-ob09.yahoo-corp.jp [182.22.125.216]) by smtp1.osuosl.org (Postfix) with ESMTPS id 9423B819F3 for ; Mon, 6 Mar 2023 02:49:50 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2174.outbound.protection.outlook.com [104.47.23.174]) by corp-ob09.yahoo-corp.jp (Postfix) with ESMTPS id C80CB19FB183; Mon, 6 Mar 2023 11:49:48 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I7ywtwTszr0/Opu+Y0kVbStSYMVnhLaF7tGg58o7SJU8T6b6REr6YJ3JDZNU+7j0BvQO6uyibuQXl+C6bMYNJMi169PGYw0cHpdJasVbn0cma7whQB/c9kyLVOEMWRqM1KkYUjZSyVgZcIjFVxT6OwBLMPPWYNZO4HTeCUj/GwSshNW1bEAQU6RdnliwGSSa0NixVhcSoKFbg5rE46ZyKKBi4nbno5Ag0HXaKlSXxDqRwKCvpZRcEUDje8UKfEPSOg+S/vkRVRxAL8HJz6mOL2+JIKmOwyRU2R3i67HHYodzs6BqsGmQycmx9WFTh9oe05HGgJyW+WD5YpVvLee/Qw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xOGemqaslEOca/HZGm30wfyZy6FSa2pvW3ajFUvibLs=; b=NjexISGw+9qpjOvPg3HPL7B1KXoaR7HyYWK7+iof58QrxWgUEdBtE/yhmi8zC9YhLM58q/xEQSxu5sWhUtk1UcQrBIWjfN2vtPthJnj48bLi7N4XXk12YTQagGtfWTcqhsVaAwqLHXuj/XY1vsPJdtb7lupE3ECnB6lJe1B0ddBKhpZbW3o5MwA+hcPo6neCFnMX6fDjLfWSjvfseKVIZyo/8JfooqqwNUjjs083kKALd9k5P/ONGLVlK28k8j63dm4U41jBucthBTHp1I0v1lby4j4MUBKCdie7epeTOUBYQ+NzDycFtxtnecyhbiZHfg/yhlBFSyLOn68uARfPvg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xOGemqaslEOca/HZGm30wfyZy6FSa2pvW3ajFUvibLs=; b=CURgopTOHqN3SpBuhcQMdmW6oyge13bOb1CZyCU1zirowy2mdb4oaEvRU1gikflgV6GRukpFB/cfmPdPrPfvcbapKWPAIFHpDp6RqyGGs3ZC7a8WMCa+TLyC5Qi1b9Hml4AElvLNgFzxjVKl4+174TtRxTYAWGRDAkchLEQwQfg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TYAPR01MB4109.jpnprd01.prod.outlook.com (2603:1096:404:c4::10) by TYCPR01MB9911.jpnprd01.prod.outlook.com (2603:1096:400:221::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.28; Mon, 6 Mar 2023 02:49:47 +0000 Received: from TYAPR01MB4109.jpnprd01.prod.outlook.com ([fe80::f422:808b:237b:f10c]) by TYAPR01MB4109.jpnprd01.prod.outlook.com ([fe80::f422:808b:237b:f10c%7]) with mapi id 15.20.6156.028; Mon, 6 Mar 2023 02:49:47 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Mon, 6 Mar 2023 11:49:15 +0900 Message-Id: <20230306024919.69574-2-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230306024919.69574-1-nmiki@yahoo-corp.jp> References: <20230306024919.69574-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYAPR01CA0017.jpnprd01.prod.outlook.com (2603:1096:404::29) To TYAPR01MB4109.jpnprd01.prod.outlook.com (2603:1096:404:c4::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYAPR01MB4109:EE_|TYCPR01MB9911:EE_ X-MS-Office365-Filtering-Correlation-Id: 31fef66b-8627-482f-9106-08db1ded729e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +/78OIFght2a1oHBBpIdY22yEoGthZtDx11SV5wbATpi/MIOzq8xuS2iB/TmnVHEaeC068tC13VCHVNdKBptGlrwO53NTJKKg3exXAsi+IwN+3PULG32HesmT4yGh83yicYNAIsQRrGJgJ9tHM9Bd1MeOnvwoG7OxwVoSmxz0OEr6ZWv4fZ54kcUtlnHsBTytEKfRXMPbxpQr/SCqahVLoSkrUmoMhbD9iEzsRt2B2+Y9lPo2D1gc/VF6h89NTzt7MpTvdRWN6m3oxRnvyrcVV/I5iZFCg97k4WNMK+QFYD818+ZI6VNT3mZ8Tr0oXL/YqlyjcjUpx9ZAlMpzCDSwS05i444mV+ykykYXDe2FjllLlJZpix93woseoz88AM02ceuJFiPytk4al3jPr9fWbttIYZOET/QwzFgsrqFfzN+wgOGj2Gmf2pc31yvhhgntXZRRKryaYDqGlkwHwfcQ3vmNP5IMH6xJpZMyeA9CNaI85I6muWbXVX+arCEjVk9MN8IyLcDQP0pPB5s9TckRWWqfhIfyE8mRCpefqro4ywOaLVfDiXLGwFYyU7dUgGKSXnQ8MYOOADN3TZI67JLvSy8rGN0+GkHeQ4SZErBPB8tFgkspmhk9KL8uObw1x/PBDKuy8vhyNfA0C8PFhzkiYokfRdF+YK45o7+40KkeITdCkzzzWNFv6Sw7FQcRMxWNAU/72idGyOyHAiTdr7fAQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYAPR01MB4109.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(376002)(346002)(39860400002)(396003)(366004)(136003)(451199018)(6512007)(1076003)(6506007)(6486002)(6666004)(36756003)(83380400001)(86362001)(82960400001)(38100700002)(38350700002)(186003)(26005)(2616005)(41300700001)(66476007)(66946007)(66556008)(4326008)(6916009)(8676002)(2906002)(8936002)(5660300002)(478600001)(52116002)(316002)(54906003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ryt5Q81kUjB4DSiZRRRp7g6XXtr6XexBtbnFtyS0nMUpeJyq18GcHVxEonekUF+FBFdEfEX1IMsM7UD/XRlZGB/P8FFVXCm3MGW1l3pjTGLCJbFlc3t8tSN7lT+q6ims0RhxZKdk7Xq6+/e4u2bgWwEj5rGjfyYqw7DcL/hB4O2ZMv54UvYNWgN5fP6qJ491nDCmuluaX4E/UP6MSqt08nNdvkuFH3ix3r5sUukRTVkIeiCfm6skVjdpE2/+eQLl9ezMcKi89OeQ4vcbtf/9QfHbGoygcPeUgRYEv+IswYB+vVm9mWcO7wwlIe+13ZuZU/ua8u8lKn0XST6mxxU4KihkDcY8ksYdN6UG1WsATVNefNUa8OL0WPCZJn5m4UdCffgwRHhDICVQmUieC5l/O99ULqDtuP6S5GTm0HW2r54Kzb5bb1TsDjHg2V7mfWhms/X+NOH1Zgv/Sf1HvN/0sQWDn1AZXQ8BXp9Q2/4V8DG2SF2EBdSRpQ2DMu0t0doEfDDL1VtaxTYczZUwcn16EmDFGDKCtiNMC3rcCcNAw00plt6xB7k9CO/xZL7caPuxrd4d63f4kW1mCFZdzwIv5aOoM368eAfyGZDlNQLVrUdSnv3K8YJ09HmpXRPPmSFnI8dmdn4hRYZZT53JIno24qLVqyMUA7aRKFQRkTL+RC44z65bk5M7ZaHc9hvktb5X7z7BMLFlCddVe83Ws+ZrCkjE7EgwJnpQl4zZQDW234PKCRlLs3a86fTKsPe5CXNr/f6HNuwSLUcTVxPrV1ZhV5Zv3kfDzBMe1ET3QFB0wggz2iqJmRV46LoXjcsQcnSxhQtBov8IPtCcCUXXwdAsecLqg87El00IFHE7D7FJX4cLBKZaaw29/chQYo4aQz4MdvFicGFbwkhGWdReIiT9Rc6h/eR8B1QkLIXRp8GLKsjy09VLbFg8TGk5UfXTLMACBWRRiXerWneBnxBS4IYx4anX8vQJA3UuXFX7l5U5AIqxAsLUn8VfELN+Yr/QLwepGPqCkoJgCISDIVXyfwIf77XN0k5Sylo3h3ldTIOyv1ZtstFqkTcxG6LVIySsKTbm/Jg6GToyGWdlEGMbbL1Z4XA9c8He2qI1gdy+OVpV0evTELlWKrC9E7NszbJCLR+MIvYDmQ0BIxKLI496WGrH/RsGZ15OYEo2oDw5SW9vRrgVxeyAjvyXenaXJjYXgxjmmjVSOxgSeepFq1kkdWsJZUulP+kLpWzwyr+YIXUi+oi9hZZVWgRREsUK1w5txmX3oTCM5aUYxL+8iyp1Tr+UhONA12WZutfb3qZY5DuOYGQsxwTMHVVDj7wxR1gM2aYC2OAnew2oiG9abdz1grJndCQ7rgQAZlkFEtCmZiPw8bwnQR31C94aQIvoPdNSkVbA773qEp6UZozwPqTrohX9i4WCIgx/5GKxTGIBhbPDTxMEeDdE7y+HtY2s+vKCvuNZPnhA9+3067zDDDsizAhEutK/pOVsBiPj9hHQVrcaa13/NXQvu7WQwcBks/oDc+YFgdVZh8rBZNAFTAkDdR5CUXM5+4pTFmFHHo+5Ygbwa33ZFgkgw1rJzPhUbM4tmd5g X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 31fef66b-8627-482f-9106-08db1ded729e X-MS-Exchange-CrossTenant-AuthSource: TYAPR01MB4109.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2023 02:49:47.2381 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: X7jtMnD0CoHihwWyty5ImARbU6FK9U4+bRIwj+p2G77Ycfw3RA3Spdf/P4PR6HFqsvSrbjuMv8XzPNWWj20a1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB9911 Cc: Simon Horman Subject: [ovs-dev] [PATCH v7 1/5] netdev-dummy: Support multiple IP addresses. 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" This is useful in test cases where multiple IPv4/IPv6 addresses are assigned together. Acked-by: Eelco Chaudron Reviewed-by: Simon Horman Signed-off-by: Nobuhiro MIKI --- lib/netdev-dummy.c | 70 +++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 5d59c9c0312b..7467e9fbcb97 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -136,8 +136,7 @@ struct netdev_dummy { struct pcap_file *tx_pcap, *rxq_pcap OVS_GUARDED; - struct in_addr address, netmask; - struct in6_addr ipv6, ipv6_mask; + struct ovs_list addrs OVS_GUARDED; struct ovs_list rxes OVS_GUARDED; /* List of child "netdev_rxq_dummy"s. */ struct hmap offloaded_flows OVS_GUARDED; @@ -161,6 +160,12 @@ struct netdev_rxq_dummy { struct seq *seq; /* Reports newly queued packets. */ }; +struct netdev_addr_dummy { + struct in6_addr address; + struct in6_addr netmask; + struct ovs_list node; /* In netdev_dummy's "addrs" list. */ +}; + static unixctl_cb_func netdev_dummy_set_admin_state; static int netdev_dummy_construct(struct netdev *); static void netdev_dummy_queue_packet(struct netdev_dummy *, @@ -169,6 +174,7 @@ static void netdev_dummy_queue_packet(struct netdev_dummy *, static void dummy_packet_stream_close(struct dummy_packet_stream *); static void pkt_list_delete(struct ovs_list *); +static void addr_list_delete(struct ovs_list *); static bool is_dummy_class(const struct netdev_class *class) @@ -720,6 +726,7 @@ netdev_dummy_construct(struct netdev *netdev_) dummy_packet_conn_init(&netdev->conn); ovs_list_init(&netdev->rxes); + ovs_list_init(&netdev->addrs); hmap_init(&netdev->offloaded_flows); ovs_mutex_unlock(&netdev->mutex); @@ -756,6 +763,7 @@ netdev_dummy_destruct(struct netdev *netdev_) free(off_flow); } hmap_destroy(&netdev->offloaded_flows); + addr_list_delete(&netdev->addrs); ovs_mutex_unlock(&netdev->mutex); ovs_mutex_destroy(&netdev->mutex); @@ -803,32 +811,24 @@ netdev_dummy_get_addr_list(const struct netdev *netdev_, struct in6_addr **paddr struct netdev_dummy *netdev = netdev_dummy_cast(netdev_); int cnt = 0, i = 0, err = 0; struct in6_addr *addr, *mask; + struct netdev_addr_dummy *addr_dummy; ovs_mutex_lock(&netdev->mutex); - if (netdev->address.s_addr != INADDR_ANY) { - cnt++; - } - if (ipv6_addr_is_set(&netdev->ipv6)) { - cnt++; - } + cnt = ovs_list_size(&netdev->addrs); if (!cnt) { err = EADDRNOTAVAIL; goto out; } addr = xmalloc(sizeof *addr * cnt); mask = xmalloc(sizeof *mask * cnt); - if (netdev->address.s_addr != INADDR_ANY) { - in6_addr_set_mapped_ipv4(&addr[i], netdev->address.s_addr); - in6_addr_set_mapped_ipv4(&mask[i], netdev->netmask.s_addr); + + LIST_FOR_EACH (addr_dummy, node, &netdev->addrs) { + memcpy(&addr[i], &addr_dummy->address, sizeof *addr); + memcpy(&mask[i], &addr_dummy->netmask, sizeof *mask); i++; } - if (ipv6_addr_is_set(&netdev->ipv6)) { - memcpy(&addr[i], &netdev->ipv6, sizeof *addr); - memcpy(&mask[i], &netdev->ipv6_mask, sizeof *mask); - i++; - } if (paddr) { *paddr = addr; *pmask = mask; @@ -844,14 +844,16 @@ out: } static int -netdev_dummy_set_in4(struct netdev *netdev_, struct in_addr address, +netdev_dummy_add_in4(struct netdev *netdev_, struct in_addr address, struct in_addr netmask) { struct netdev_dummy *netdev = netdev_dummy_cast(netdev_); + struct netdev_addr_dummy *addr_dummy = xmalloc(sizeof *addr_dummy); ovs_mutex_lock(&netdev->mutex); - netdev->address = address; - netdev->netmask = netmask; + in6_addr_set_mapped_ipv4(&addr_dummy->address, address.s_addr); + in6_addr_set_mapped_ipv4(&addr_dummy->netmask, netmask.s_addr); + ovs_list_push_back(&netdev->addrs, &addr_dummy->node); netdev_change_seq_changed(netdev_); ovs_mutex_unlock(&netdev->mutex); @@ -859,14 +861,16 @@ netdev_dummy_set_in4(struct netdev *netdev_, struct in_addr address, } static int -netdev_dummy_set_in6(struct netdev *netdev_, struct in6_addr *in6, +netdev_dummy_add_in6(struct netdev *netdev_, struct in6_addr *in6, struct in6_addr *mask) { struct netdev_dummy *netdev = netdev_dummy_cast(netdev_); + struct netdev_addr_dummy *addr_dummy = xmalloc(sizeof *addr_dummy); ovs_mutex_lock(&netdev->mutex); - netdev->ipv6 = *in6; - netdev->ipv6_mask = *mask; + addr_dummy->address = *in6; + addr_dummy->netmask = *mask; + ovs_list_push_back(&netdev->addrs, &addr_dummy->node); netdev_change_seq_changed(netdev_); ovs_mutex_unlock(&netdev->mutex); @@ -1178,7 +1182,10 @@ netdev_dummy_send(struct netdev *netdev, int qid, dummy_packet_conn_send(&dev->conn, buffer, size); /* Reply to ARP requests for 'dev''s assigned IP address. */ - if (dev->address.s_addr) { + struct netdev_addr_dummy *addr_dummy; + LIST_FOR_EACH (addr_dummy, node, &dev->addrs) { + ovs_be32 address = in6_addr_get_mapped_ipv4(&addr_dummy->address); + struct dp_packet dp; struct flow flow; @@ -1186,11 +1193,12 @@ netdev_dummy_send(struct netdev *netdev, int qid, flow_extract(&dp, &flow); if (flow.dl_type == htons(ETH_TYPE_ARP) && flow.nw_proto == ARP_OP_REQUEST - && flow.nw_dst == dev->address.s_addr) { + && flow.nw_dst == address) { struct dp_packet *reply = dp_packet_new(0); compose_arp(reply, ARP_OP_REPLY, dev->hwaddr, flow.dl_src, false, flow.nw_dst, flow.nw_src); netdev_dummy_queue_packet(dev, reply, NULL, 0); + break; } } @@ -1677,6 +1685,16 @@ pkt_list_delete(struct ovs_list *l) } } +static void +addr_list_delete(struct ovs_list *l) +{ + struct netdev_addr_dummy *addr_dummy; + + LIST_FOR_EACH_POP (addr_dummy, node, l) { + free(addr_dummy); + } +} + static struct dp_packet * eth_from_packet(const char *s) { @@ -2009,7 +2027,7 @@ netdev_dummy_ip4addr(struct unixctl_conn *conn, int argc OVS_UNUSED, error = ip_parse_masked(argv[2], &ip.s_addr, &mask.s_addr); if (!error) { - netdev_dummy_set_in4(netdev, ip, mask); + netdev_dummy_add_in4(netdev, ip, mask); unixctl_command_reply(conn, "OK"); } else { unixctl_command_reply_error(conn, error); @@ -2038,7 +2056,7 @@ netdev_dummy_ip6addr(struct unixctl_conn *conn, int argc OVS_UNUSED, struct in6_addr mask; mask = ipv6_create_mask(plen); - netdev_dummy_set_in6(netdev, &ip6, &mask); + netdev_dummy_add_in6(netdev, &ip6, &mask); unixctl_command_reply(conn, "OK"); } else { unixctl_command_reply_error(conn, error);