From patchwork Wed Dec 26 08:50:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Maximets X-Patchwork-Id: 1018614 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="aWDEEVLr"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43PmxL73Qqz9s8J for ; Wed, 26 Dec 2018 19:54:30 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 319EEE46; Wed, 26 Dec 2018 08:51:13 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 5ECD0E24 for ; Wed, 26 Dec 2018 08:51:11 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id B06A17C3 for ; Wed, 26 Dec 2018 08:51:10 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20181226085109euoutp015f53b32034a9367ffc24ac73dd0b5053~z1eNMxdIn0259202592euoutp01E for ; Wed, 26 Dec 2018 08:51:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20181226085109euoutp015f53b32034a9367ffc24ac73dd0b5053~z1eNMxdIn0259202592euoutp01E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1545814269; bh=PtDfvhyCFiW952JzFxFhpTDPb6iyKkdrpgvUv94aI6g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aWDEEVLrPNNvMYxkzHTOKjzdoML5gM4DJcl4OXe6nhYaVipXg7z7lNpXS700Ms9/5 l6w/KQKfyYZJJ+0dTHFsd+Q7snisuaq5jlxQF8+2fxmrrVhBwfVQB+t/nAdUJVZmEQ 91Y6OnEJHvoe2JIFaQ+y+SU9jXjuq5dTKr25Zyso= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20181226085108eucas1p1879dcbc278fd48a4076321f821ab4925~z1eMpE3f30726207262eucas1p1X; Wed, 26 Dec 2018 08:51:08 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id C2.59.04294.CF0432C5; Wed, 26 Dec 2018 08:51:08 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20181226085108eucas1p2be5cafc53242baa233bda824711ddb33~z1eL9X3rF0946409464eucas1p2D; Wed, 26 Dec 2018 08:51:08 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20181226085107eusmtrp14562302998f31e5c26eb9fb299ba824a~z1eLu6B_43160831608eusmtrp1h; Wed, 26 Dec 2018 08:51:07 +0000 (GMT) X-AuditID: cbfec7f4-835ff700000010c6-1f-5c2340fcb727 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id E2.7B.04128.BF0432C5; Wed, 26 Dec 2018 08:51:07 +0000 (GMT) Received: from imaximets.rnd.samsung.ru (unknown [106.109.129.180]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20181226085107eusmtip2d8b4de20e7c05da07542f4bd000031fb~z1eLIQPCe0919609196eusmtip2M; Wed, 26 Dec 2018 08:51:07 +0000 (GMT) From: Ilya Maximets To: ovs-dev@openvswitch.org, Ian Stokes Date: Wed, 26 Dec 2018 11:50:42 +0300 Message-Id: <20181226085044.9311-8-i.maximets@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181226085044.9311-1-i.maximets@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjleLIzCtJLcpLzFFi42LZduznOd0/DsoxBg/OSVtsmTaZ1eJK+092 i40Pz7JarD30gd1i0pQTjBZzPz1ntLg9x8vi6cVfzA4cHov3vGTyeDb9MJC4+Z/R4/2+q2we fVtWMXr8b77KGsAWxWWTkpqTWZZapG+XwJVx5tUktoLDmhXrVqxnbWD8LNPFyMkhIWAicXPh bpYuRi4OIYEVjBITX81nhHC+MEp0rr7OCuF8ZpRY82UdC0zL+21noVqWM0rcu/YDyvnBKLFx zhZmkCo2AR2JU6uPMILYIgJ2EtNWNTGBFDELvGOUuH/iDhNIQljAQ+Jz23WwsSwCqhJLFv8C sjk4eAWsJDY1iUFsk5dYveEA2ExOAWuJ0097wO6TEPjPJrHn7XlWiCIXiSnP5zJC2MISr45v YYewZSROT+6BOrte4n7LS6jmDkaJ6Yf+MUEk7CW2vD7HDrKYWUBTYv0ufYiwo8TsSROYQMIS AnwSN94KgoSZgcxJ26YzQ4R5JTrahCCqVSR+H1zODGFLSdx89xnqAg+JnQumMEHCp49R4krn ZJYJjPKzEJYtYGRcxSieWlqcm55abJSXWq5XnJhbXJqXrpecn7uJEZg6Tv87/mUH464/SYcY BTgYlXh4f/goxQixJpYVV+YeYpTgYFYS4fX8DBTiTUmsrEotyo8vKs1JLT7EKM3BoiTOW83w IFpIID2xJDU7NbUgtQgmy8TBKdXA6Ps1ty//RuJ6zsfGvRd/2Dt32nKsqfx3dXNX1b9Xzhst kpcorV9xrsP1f3+a0OGNTEkSDKsiq70vX5u5tulTBY+0j2xgwJHkl39Dvk+uYxFouqBjd2aT AoNQ+R1LhXvLOVzeLX3S2bNT+Lf5Aec/0W8ePW6YV1TjIZV1+/Sbopa5m4IvhV6IVmIpzkg0 1GIuKk4EANzlv4cZAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOLMWRmVeSWpSXmKPExsVy+t/xe7q/HZRjDOae07DYMm0yq8WV9p/s FhsfnmW1WHvoA7vFpCknGC3mfnrOaHF7jpfF04u/mB04PBbvecnk8Wz6YSBx8z+jx/t9V9k8 +rasYvT433yVNYAtSs+mKL+0JFUhI7+4xFYp2tDCSM/Q0kLPyMRSz9DYPNbKyFRJ384mJTUn syy1SN8uQS/jzKtJbAWHNSvWrVjP2sD4WaaLkZNDQsBE4v22syxdjFwcQgJLGSV6T01ihEhI Sfz4dYEVwhaW+HOtiw2i6BujxL0/u9hBEmwCOhKnVh8BaxARcJDYfHcxK0gRs8AnRolzb2az gCSEBTwkPrddB7NZBFQlliz+BWRzcPAKWElsahKDWCAvsXrDAWYQm1PAWuL00x6wmUJAJXMe bmCewMi3gJFhFaNIamlxbnpusZFecWJucWleul5yfu4mRmAgbzv2c8sOxq53wYcYBTgYlXh4 f/goxQixJpYVV+YeYpTgYFYS4fX8DBTiTUmsrEotyo8vKs1JLT7EaAp000RmKdHkfGCU5ZXE G5oamltYGpobmxubWSiJ8543qIwSEkhPLEnNTk0tSC2C6WPi4JRqYDwmm3aR8WxBsdqyju2K c+492aW8KTecUUhdXai1sC7vTk/onMdzZSe4Jfs7Bz2Kmb52kmdzENvi9NV79f3u/nhwoiO0 jj82oJZra9HZzQfeerW/+qxf5ps652PMzhkK9S8Xn3/z+JMOV3+bvPqZvt5DnI8flGW8m1H2 /XL6jo28H17yzmV7UKTEUpyRaKjFXFScCADpOtFFegIAAA== X-CMS-MailID: 20181226085108eucas1p2be5cafc53242baa233bda824711ddb33 X-Msg-Generator: CA X-RootMTR: 20181226085108eucas1p2be5cafc53242baa233bda824711ddb33 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181226085108eucas1p2be5cafc53242baa233bda824711ddb33 References: <20181226085044.9311-1-i.maximets@samsung.com> X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Shahaf Shuler , Flavio Leitner , Ilya Maximets Subject: [ovs-dev] [PATCH v3 7/9] netdev-dummy: Set flow mark for offloaded flows. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Match packets received on dummy interfaces with offloaded flows and set up corresponding marks in dp-packet. Signed-off-by: Ilya Maximets --- lib/netdev-dummy.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 6ee3cbca8..2732fc2da 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -156,7 +156,7 @@ struct netdev_rxq_dummy { 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 *, - struct dp_packet *, int); + struct dp_packet *, struct flow *, int); static void dummy_packet_stream_close(struct dummy_packet_stream *); @@ -283,7 +283,7 @@ dummy_packet_stream_run(struct netdev_dummy *dev, struct dummy_packet_stream *s) if (retval == n && dp_packet_size(&s->rxbuf) > 2) { dp_packet_pull(&s->rxbuf, 2); netdev_dummy_queue_packet(dev, - dp_packet_clone(&s->rxbuf), 0); + dp_packet_clone(&s->rxbuf), NULL, 0); dp_packet_clear(&s->rxbuf); } } else if (retval != -EAGAIN) { @@ -1151,7 +1151,7 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED, 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, 0); + netdev_dummy_queue_packet(dev, reply, NULL, 0); } } @@ -1562,12 +1562,11 @@ eth_from_packet(const char *s) } static struct dp_packet * -eth_from_flow(const char *s, size_t packet_size) +eth_from_flow_str(const char *s, size_t packet_size, struct flow *flow) { enum odp_key_fitness fitness; struct dp_packet *packet; struct ofpbuf odp_key; - struct flow flow; int error; /* Convert string to datapath key. @@ -1584,7 +1583,7 @@ eth_from_flow(const char *s, size_t packet_size) } /* Convert odp_key to flow. */ - fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, &flow); + fitness = odp_flow_key_to_flow(odp_key.data, odp_key.size, flow); if (fitness == ODP_FIT_ERROR) { ofpbuf_uninit(&odp_key); return NULL; @@ -1592,15 +1591,15 @@ eth_from_flow(const char *s, size_t packet_size) packet = dp_packet_new(0); if (packet_size) { - flow_compose(packet, &flow, NULL, 0); + flow_compose(packet, flow, NULL, 0); if (dp_packet_size(packet) < packet_size) { - packet_expand(packet, &flow, packet_size); + packet_expand(packet, flow, packet_size); } else if (dp_packet_size(packet) > packet_size){ dp_packet_delete(packet); packet = NULL; } } else { - flow_compose(packet, &flow, NULL, 64); + flow_compose(packet, flow, NULL, 64); } ofpbuf_uninit(&odp_key); @@ -1620,14 +1619,28 @@ netdev_dummy_queue_packet__(struct netdev_rxq_dummy *rx, struct dp_packet *packe static void netdev_dummy_queue_packet(struct netdev_dummy *dummy, struct dp_packet *packet, - int queue_id) + struct flow *flow, int queue_id) OVS_REQUIRES(dummy->mutex) { struct netdev_rxq_dummy *rx, *prev; + struct offloaded_flow *data; + struct flow packet_flow; if (dummy->rxq_pcap) { ovs_pcap_write(dummy->rxq_pcap, packet); } + + if (!flow) { + flow = &packet_flow; + flow_extract(packet, flow); + } + HMAP_FOR_EACH (data, node, &dummy->offloaded_flows) { + if (flow_equal_except(flow, &data->match.flow, &data->match.wc)) { + dp_packet_set_flow_mark(packet, data->mark); + break; + } + } + prev = NULL; LIST_FOR_EACH (rx, node, &dummy->rxes) { if (rx->up.queue_id == queue_id && @@ -1673,6 +1686,7 @@ netdev_dummy_receive(struct unixctl_conn *conn, for (i = k; i < argc; i++) { struct dp_packet *packet; + struct flow flow; /* Try to parse 'argv[i]' as packet in hex. */ packet = eth_from_packet(argv[i]); @@ -1692,15 +1706,17 @@ netdev_dummy_receive(struct unixctl_conn *conn, i += 2; } /* Try parse 'argv[i]' as odp flow. */ - packet = eth_from_flow(flow_str, packet_size); + packet = eth_from_flow_str(flow_str, packet_size, &flow); if (!packet) { unixctl_command_reply_error(conn, "bad packet or flow syntax"); goto exit; } + } else { + flow_extract(packet, &flow); } - netdev_dummy_queue_packet(dummy_dev, packet, rx_qid); + netdev_dummy_queue_packet(dummy_dev, packet, &flow, rx_qid); } unixctl_command_reply(conn, NULL);