From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 53BD6C282C3 for ; Thu, 24 Jan 2019 19:58:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1EB5F21726 for ; Thu, 24 Jan 2019 19:58:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XzLEfDuA" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732204AbfAXTe3 (ORCPT ); Thu, 24 Jan 2019 14:34:29 -0500 Received: from mail-yw1-f74.google.com ([209.85.161.74]:43499 "EHLO mail-yw1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731833AbfAXTe2 (ORCPT ); Thu, 24 Jan 2019 14:34:28 -0500 Received: by mail-yw1-f74.google.com with SMTP id t205so3674452ywa.10 for ; Thu, 24 Jan 2019 11:34:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=IMkOQpAyMEKgf0D0sCZ/bXGNxiU4//NSwwIwOVnWns4=; b=XzLEfDuAdItnO2+ADuYQl8gKGNiD6yMoA9IPAj8+uBz9UhuacGGZIXIHsFb96sqlBp hIv3Lc7uAJ7xo5KFR6ipZVmznkvPEI3iiuT+NI95p1osK5yTHoreV0Rsk7wH2DPg/dMl Af3P9VtOqZWDpOjq44ic5THWKls3HlWmClO6TjTMWGacABbMAcdUal9c/ebTgP3YAFcC yjXcbDtWEm+L6AbjijwuJCiCvCnG8+Fxt0Mxtn/v3K4wyx7l7tUSOZ9zbM07/eYe7RKQ QRkiHVlZoEvcWVEtk4AczUzEvwRXMPI0a2v2rw1dGKBSDfgFmHUtO9XdHlYnrO+OvHHc iQ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=IMkOQpAyMEKgf0D0sCZ/bXGNxiU4//NSwwIwOVnWns4=; b=Gn/LpXzPnMpImACSnZLklu6tHidRYrtedxQqtISKuY4rL1CcKs75PAyuAb1AIr0cSC Eep6sOyR2lTwVvtSlshmERdqkmIry3yaH2Sl/FgOmxbH3KVU8tSE8vWDTvgYqEi2h4Sw y6LtA65g0FHjoBAPGlR0tcbuoGFs9wQyRBFyFm2d+AxMaObV7MRHyMcDCagb+Bob5kME pDrX+zQm75DTfL7Y2owqvNiUJGlJGxQTq9Khg3eYQ07xVT7G70KJfTK3JkPNy8z6VStt qtfTav7YOZEvORu1DtHZF9ZDmNayLS4YdqxbD3DKKThI3e8WNs+Ed0DqAUsJBO8K9q0X kfYw== X-Gm-Message-State: AJcUukcPLOvNk3jerPGQQU6DUzISRX8FkS05p0/njvazKHQKDgv/8mFa wEMYKxAAGeI6M0gqwe1TaPmRRg5s X-Google-Smtp-Source: ALg8bN70FT3lI1AJZZbpGZEinAUj34REYvvrhPQ4YXOKRWhgOBXvCtgSvxTjBUzvZrKDDqbvxf5pH4ih X-Received: by 2002:a5b:4b:: with SMTP id e11mr3823676ybp.15.1548358467252; Thu, 24 Jan 2019 11:34:27 -0800 (PST) Date: Thu, 24 Jan 2019 11:34:15 -0800 Message-Id: <20190124193418.81674-1-posk@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.20.1.321.g9e740568ce-goog Subject: [PATCH bpf-next v2 0/3] bpf: add BPF_LWT_ENCAP_IP option to bpf_lwt_push_encap From: Peter Oskolkov To: Alexei Starovoitov , Daniel Borkmann , netdev@vger.kernel.org Cc: Peter Oskolkov , David Ahern , Willem de Bruijn , Peter Oskolkov Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patchset implements BPF_LWT_ENCAP_IP mode in bpf_lwt_push_encap BPF helper. It enables BPF programs (specifically, BPF_PROG_TYPE_LWT_IN and BPF_PROG_TYPE_LWT_XMIT prog types) to add IP encapsulation headers to packets (e.g. IP/GRE, GUE, IPIP). This is useful when thousands of different short-lived flows should be encapped, each with different and dynamically determined destination. Although lwtunnels can be used in some of these scenarios, the ability to dynamically generate encap headers adds more flexibility, e.g. when routing depends on the state of the host (reflected in global bpf maps). V2 changes: Added flowi-based route lookup, IPv6 encapping, and encapping on ingress. Peter Oskolkov (3): bpf: add plumbing for BPF_LWT_ENCAP_IP in bpf_lwt_push_encap bpf: implement BPF_LWT_ENCAP_IP mode in bpf_lwt_push_encap selftests: bpf: add test_lwt_ip_encap selftest include/net/lwtunnel.h | 3 + include/uapi/linux/bpf.h | 23 +- net/core/filter.c | 47 ++- net/core/lwt_bpf.c | 142 ++++++++ tools/testing/selftests/bpf/Makefile | 5 +- .../testing/selftests/bpf/test_lwt_ip_encap.c | 125 +++++++ .../selftests/bpf/test_lwt_ip_encap.sh | 316 ++++++++++++++++++ 7 files changed, 652 insertions(+), 9 deletions(-) create mode 100644 tools/testing/selftests/bpf/test_lwt_ip_encap.c create mode 100755 tools/testing/selftests/bpf/test_lwt_ip_encap.sh -- 2.20.1.321.g9e740568ce-goog