From patchwork Sat May 19 02:41:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 916761 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="H32217ai"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40nt4S65z9z9s52 for ; Sat, 19 May 2018 14:54:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750797AbeESEy3 (ORCPT ); Sat, 19 May 2018 00:54:29 -0400 Received: from mail-pl0-f67.google.com ([209.85.160.67]:32949 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750713AbeESEy2 (ORCPT ); Sat, 19 May 2018 00:54:28 -0400 Received: by mail-pl0-f67.google.com with SMTP id n10-v6so5732319plp.0 for ; Fri, 18 May 2018 21:54:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=4QvTGnbjc6RaotI0Ojk0owedmxjXV5x1keWtmG91V7o=; b=H32217aixsuBO8+s7KdNQL9voKI93ovnSkv+ke7aAdeoeGrb3HCacs4ct/zFiMTqnP NklXzpS732smsCCo/8kD4rME/LSMIbwT6yhy681Gdd7zQ0hOhe0WPnJ8yHmKPL+vc/OD 15l8t5yJyVshb1WJSpC/s8oCxEbTi3Swi9KJdB67K2eDoGH2a653Twsb7iI6+CbQwWJB umq+3OZwlomWgxJi7eEqW8N193yHOH1TMmz/1rWyygpUSeG+N1LU0bTqfX5BjG+PPmiG nnx/p9gTJsKdXJft0ofzPFSuU90gIMaZgzcRdRa31DjiapvsC4VvPyoGPCW9qquepuKN myUA== 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; bh=4QvTGnbjc6RaotI0Ojk0owedmxjXV5x1keWtmG91V7o=; b=hAQdZJwlFEjMcrQLYYr+814gxjNqhL2C+D0FexneM+hJa+yxm5Gn8yKA24sTTZNd1v kYW7a/TQhIrKyv8keCuEzUYz/o0bZ5pSh0Uc5qnxWALn18kRn7xPhmQVXcU2333dD7k3 DJSVijRp01z1wJpO40Y/HPP60F+wR50kJEgFWIze5FHQzvoyoIuiLdQqfEeL9abj8aPh bg1m+XzPRj4a+aetVk1l4qZtD+A3iOMleFGrdqipih2mj33OtKYMR+jgtczmCJI9Cidh FuulLPmDno0Zwpz84oalPjtmnP0GTcqO5a/OemG4jiV/urJZy5wJ+RbzTDDDFQuos0+K mmJw== X-Gm-Message-State: ALKqPwc/8n7d4ufpEXHQzgEVuk+WPEg9dWJIQ+w4pa7fcaF51KWJ3lPw 2uiIWi6rG/hr/GYvZi9zi5rnOtF5 X-Google-Smtp-Source: AB8JxZo05FKWAO/VFK03Q2c5M/gxiMrnTSZYG2Oo0C+M6E77lAztYnAsDbp0f5lZlj1jVZas6jUqiw== X-Received: by 2002:a17:902:1a8:: with SMTP id b37-v6mr12507023plb.326.1526705667941; Fri, 18 May 2018 21:54:27 -0700 (PDT) Received: from sc9-mailhost3.vmware.com (c-73-231-16-221.hsd1.ca.comcast.net. [73.231.16.221]) by smtp.gmail.com with ESMTPSA id v186-v6sm14774628pfb.45.2018.05.18.21.54.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 18 May 2018 21:54:27 -0700 (PDT) From: William Tu To: netdev@vger.kernel.org Cc: tobin@apporbit.com Subject: [PATCHv2 net-next] erspan: set bso bit based on mirrored packet's len Date: Fri, 18 May 2018 19:41:01 -0700 Message-Id: <1526697661-8958-1-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Before the patch, the erspan BSO bit (Bad/Short/Oversized) is not handled. BSO has 4 possible values: 00 --> Good frame with no error, or unknown integrity 11 --> Payload is a Bad Frame with CRC or Alignment Error 01 --> Payload is a Short Frame 10 --> Payload is an Oversized Frame Based the short/oversized definitions in RFC1757, the patch sets the bso bit based on the mirrored packet's size. Reported-by: Xiaoyan Jin Signed-off-by: William Tu --- v1->v2 Improve code comments, make enum erspan_bso clearer --- include/net/erspan.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/net/erspan.h b/include/net/erspan.h index d044aa60cc76..b39643ef4c95 100644 --- a/include/net/erspan.h +++ b/include/net/erspan.h @@ -219,6 +219,33 @@ static inline __be32 erspan_get_timestamp(void) return htonl((u32)h_usecs); } +/* ERSPAN BSO (Bad/Short/Oversized), see RFC1757 + * 00b --> Good frame with no error, or unknown integrity + * 01b --> Payload is a Short Frame + * 10b --> Payload is an Oversized Frame + * 11b --> Payload is a Bad Frame with CRC or Alignment Error + */ +enum erspan_bso { + BSO_NOERROR = 0x0, + BSO_SHORT = 0x1, + BSO_OVERSIZED = 0x2, + BSO_BAD = 0x3, +}; + +static inline u8 erspan_detect_bso(struct sk_buff *skb) +{ + /* BSO_BAD is not handled because the frame CRC + * or alignment error information is in FCS. + */ + if (skb->len < ETH_ZLEN) + return BSO_SHORT; + + if (skb->len > ETH_FRAME_LEN) + return BSO_OVERSIZED; + + return BSO_NOERROR; +} + static inline void erspan_build_header_v2(struct sk_buff *skb, u32 id, u8 direction, u16 hwid, bool truncate, bool is_ipv4) @@ -248,6 +275,7 @@ static inline void erspan_build_header_v2(struct sk_buff *skb, vlan_tci = ntohs(qp->tci); } + bso = erspan_detect_bso(skb); skb_push(skb, sizeof(*ershdr) + ERSPAN_V2_MDSIZE); ershdr = (struct erspan_base_hdr *)skb->data; memset(ershdr, 0, sizeof(*ershdr) + ERSPAN_V2_MDSIZE);