From patchwork Mon Jan 11 07:18:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pravin B Shelar X-Patchwork-Id: 565663 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id 21E8D1402BD for ; Mon, 11 Jan 2016 18:18:53 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=nicira-com.20150623.gappssmtp.com header.i=@nicira-com.20150623.gappssmtp.com header.b=GSAYdQZg; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 9E1F110587; Sun, 10 Jan 2016 23:18:40 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id EFE5310546 for ; Sun, 10 Jan 2016 23:18:38 -0800 (PST) Received: from bar3.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id 3606E1624AE for ; Mon, 11 Jan 2016 00:18:38 -0700 (MST) X-ASG-Debug-ID: 1452496717-03dd7b07cf0c180001-byXFYA Received: from mx3-pf1.cudamail.com ([192.168.14.2]) by bar3.cudamail.com with ESMTP id 5AKZt6pQyVUS3EKl (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 11 Jan 2016 00:18:37 -0700 (MST) X-Barracuda-Envelope-From: pshelar@nicira.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.2 Received: from unknown (HELO mail-pa0-f50.google.com) (209.85.220.50) by mx3-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 11 Jan 2016 07:18:37 -0000 Received-SPF: unknown (mx3-pf1.cudamail.com: Multiple SPF records returned) X-Barracuda-Apparent-Source-IP: 209.85.220.50 X-Barracuda-RBL-IP: 209.85.220.50 Received: by mail-pa0-f50.google.com with SMTP id cy9so317121546pac.0 for ; Sun, 10 Jan 2016 23:18:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nicira-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bZH63sVXo3yQbXPRy/+mtgUyBVDCK1EtfwRC5/Q6+yo=; b=GSAYdQZgS2xAMjO/B2pW4leFglInuaRmbegERo2i+vjmehqln2rXoPSvNcJclAuMOg qHTHULifmNi3kvZtztEM0EjwAfGYdhm3NrP958azDqAC2/QR2rBLI9sS7JRutK4I0mD8 ma4N6m62Jzs73XYpgcY9OYwU6zaMxyClTg3Ma9d0NNLKeSF09Yp7Ax/L1VV5t1AFxO2G wTZalAvtf2ENbdHU9kJkcnhMpswPYNbmD0IWVIIAHOajWnwrukKMTR01jWfXH3vObZTu YbRqBj+/MdrN3r8Ny+dNc/vybGXNrCQD7G+eqTKXK8djTW11/yfba232aUL/KrZkLDOM DAFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bZH63sVXo3yQbXPRy/+mtgUyBVDCK1EtfwRC5/Q6+yo=; b=UbtUEhNp0MQOPNUOpf5Ij2pG1EH78iSUlpIwlHHHJhD7NYymyvlibb431AdCTz3J42 F0HoGG0Im6Otbs6cnzIptXV66eIzqiFzyUfnURFiRf5FLMCAJ16D/z5tUFn4dHNNa5nw TrD7x7kgH01ziL8Zgf5y1P6TW9IlK8MpaXzYzKQpn7DJFNgvQ45+dY1tjNCffVx40/hd /rRAz5ri9LvNAvPhzxSzZH6nqZG4NCKy91LJ48dhzfBkU0n4HdMyeeU0ldOTAX0mQNeR /AgDcekUX81laE2CwK6Z3KGqH7zkvbWo5v6qdd9J+/6n9u3tU7CGPme7VH7j+4TX1pVc dhrA== X-Gm-Message-State: ALoCoQl4NLyXJGZdH9SFhAatSm34WQCzQIi1YqjWjsWMefOiE8HfT0u3VlZ92lsdwhY9yBZl1TI8Ll7rAHGDE82q5GtRTJk6Hg== X-Received: by 10.66.102.106 with SMTP id fn10mr112742634pab.60.1452496717227; Sun, 10 Jan 2016 23:18:37 -0800 (PST) Received: from localhost.localdomain.localdomain (c-73-162-15-99.hsd1.ca.comcast.net. [73.162.15.99]) by smtp.gmail.com with ESMTPSA id z15sm20712017pfa.71.2016.01.10.23.18.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 10 Jan 2016 23:18:36 -0800 (PST) X-CudaMail-Envelope-Sender: pshelar@nicira.com From: Pravin B Shelar To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V1-110000251 X-CudaMail-DTE: 011116 X-CudaMail-Originating-IP: 209.85.220.50 Date: Sun, 10 Jan 2016 23:18:08 -0800 X-ASG-Orig-Subj: [##CM-V1-110000251##][PATCH 2/8] tunnel: Add IP ECN related functions. Message-Id: <1452496694-50996-3-git-send-email-pshelar@nicira.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1452496694-50996-1-git-send-email-pshelar@nicira.com> References: <1452496694-50996-1-git-send-email-pshelar@nicira.com> X-Barracuda-Connect: UNKNOWN[192.168.14.2] X-Barracuda-Start-Time: 1452496717 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [PATCH 2/8] tunnel: Add IP ECN related functions. X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" This function will be used by STT tunnel. Signed-off-by: Pravin B Shelar --- lib/packets.c | 22 ++++++++++++++++++++++ lib/packets.h | 7 +++++++ ofproto/tunnel.c | 6 +++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/packets.c b/lib/packets.c index d82341d..a910f50 100644 --- a/lib/packets.c +++ b/lib/packets.c @@ -1292,3 +1292,25 @@ packet_csum_pseudoheader6(const struct ovs_16aligned_ip6_hdr *ip6) return partial; } #endif + +void +IP_ECN_set_ce(struct dp_packet *pkt, bool is_ipv6) +{ + if (is_ipv6) { + struct ovs_16aligned_ip6_hdr *ip6 = dp_packet_l3(pkt); + + put_16aligned_be32((ovs_16aligned_be32 *)ip6, htonl(IP_ECN_CE << 20)); + } else { + struct ip_header *nh = dp_packet_l4(pkt); + uint8_t tos = nh->ip_tos; + + tos |= IP_ECN_CE; + if (nh->ip_tos != tos) { + uint8_t *field = &nh->ip_tos; + + nh->ip_csum = recalc_csum16(nh->ip_csum, htons((uint16_t) *field), + htons((uint16_t) tos)); + *field = tos; + } + } +} diff --git a/lib/packets.h b/lib/packets.h index 834e8a4..2157657 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -603,6 +603,12 @@ char *ip_parse_cidr(const char *s, ovs_be32 *ip, unsigned int *plen) #define IP_ECN_MASK 0x03 #define IP_DSCP_MASK 0xfc +static inline int +IP_ECN_is_ce(uint8_t dsfield) +{ + return (dsfield & IP_ECN_MASK) == IP_ECN_CE; +} + #define IP_VERSION 4 #define IP_DONT_FRAGMENT 0x4000 /* Don't fragment. */ @@ -1061,5 +1067,6 @@ void compose_arp(struct dp_packet *, uint16_t arp_op, void compose_nd(struct dp_packet *, const struct eth_addr eth_src, struct in6_addr *, struct in6_addr *); uint32_t packet_csum_pseudoheader(const struct ip_header *); +void IP_ECN_set_ce(struct dp_packet *pkt, bool is_ipv6); #endif /* packets.h */ diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c index 5cf6c75..7ac8841 100644 --- a/ofproto/tunnel.c +++ b/ofproto/tunnel.c @@ -342,7 +342,7 @@ tnl_process_ecn(struct flow *flow) return true; } - if (is_ip_any(flow) && (flow->tunnel.ip_tos & IP_ECN_MASK) == IP_ECN_CE) { + if (is_ip_any(flow) && IP_ECN_is_ce(flow->tunnel.ip_tos)) { if ((flow->nw_tos & IP_ECN_MASK) == IP_ECN_NOT_ECT) { VLOG_WARN_RL(&rl, "dropping tunnel packet marked ECN CE" " but is not ECN capable"); @@ -382,7 +382,7 @@ tnl_wc_init(struct flow *flow, struct flow_wildcards *wc) memset(&wc->masks.pkt_mark, 0xff, sizeof wc->masks.pkt_mark); if (is_ip_any(flow) - && (flow->tunnel.ip_tos & IP_ECN_MASK) == IP_ECN_CE) { + && IP_ECN_is_ce(flow->tunnel.ip_tos)) { wc->masks.nw_tos |= IP_ECN_MASK; } } @@ -451,7 +451,7 @@ tnl_port_send(const struct ofport_dpif *ofport, struct flow *flow, if (is_ip_any(flow)) { wc->masks.nw_tos |= IP_ECN_MASK; - if ((flow->nw_tos & IP_ECN_MASK) == IP_ECN_CE) { + if (IP_ECN_is_ce(flow->nw_tos)) { flow->tunnel.ip_tos |= IP_ECN_ECT_0; } else { flow->tunnel.ip_tos |= flow->nw_tos & IP_ECN_MASK;