From patchwork Thu Aug 3 23:38:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 797516 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="urLS+5DZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xNmhn4Mx7z9s7M for ; Fri, 4 Aug 2017 09:38:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751996AbdHCXib (ORCPT ); Thu, 3 Aug 2017 19:38:31 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:35790 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751754AbdHCXia (ORCPT ); Thu, 3 Aug 2017 19:38:30 -0400 Received: by mail-pg0-f68.google.com with SMTP id l64so144512pge.2 for ; Thu, 03 Aug 2017 16:38:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=jaGVNeYtbp5EHvxwK7WOX4Y+NQPk4KEr76HCLX2/CB8=; b=urLS+5DZmUjNaxbVSSFCkL8ws8RLsRIJnYO3DnF28Sx9ark12pzae4NMSjChjzxX+M lnmNco4P5BqIUGTJB7dV1vZR3/3+PGVZEdcz+i/ivtAceqR6BTJ6TaWN20rq7p1EoNmH pPrY4Eehinm1ZpQ3dqw7d5AKd6aMLW0QWaPChHDfyk0VkcwNgdv/1m+Ce5SDbP294cLB Dr+PdZZKj9OkfA9BLxuELwkYAScvBJ2EEAdYo013AmwTG+t47S0wz3ciW/rB3BuYDsiz zajz2nE7EDszRuFZWFquiOfT8WrRfKvYVKNFNOuHyFWHBdJfkqF6bGRpE1NHxuFOGC38 DYlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=jaGVNeYtbp5EHvxwK7WOX4Y+NQPk4KEr76HCLX2/CB8=; b=RN9gb7cvGvKd0yv1VFSB8lCin9arP97Ptc1zWygrgFLwGqLHaWOs6+KjIpIE6ztDG8 BwGP+eHbAJHbW5ZZP1awSuAP0iq22dWesYxQNCKWD8Xl9ISX1lSVyA3f84QYT0cOPPCg 9ZfeyzTTK7NvWRdz5E93NSHE5zobSaN3xXHdHQpv7gsdeCVdrwyx5z46ixd11G/0Uop8 isoZILq+zYarLClO19e1stGFLmZ8Z8RIcDi+6xsVZGvqf2v+vnMA6SKn10/jNaWTNnZ7 7ill530AhfW5PDw6cqkHT/Z638AkQrXdezxNFAB8pOMmI3ehruj21Rm+fTAPqsCFK0Zz U7mw== X-Gm-Message-State: AIVw110x+qtNYG5tEoE9j/D+qWGZW0+Z/h5rtMIh/ikKlajn5mm1yR/e cgAsxWu9LmmSoUXg X-Received: by 10.84.213.16 with SMTP id f16mr574653pli.158.1501803510082; Thu, 03 Aug 2017 16:38:30 -0700 (PDT) Received: from [127.0.1.1] ([72.168.145.101]) by smtp.gmail.com with ESMTPSA id c19sm160842pfk.3.2017.08.03.16.38.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 03 Aug 2017 16:38:29 -0700 (PDT) Subject: [RFC PATCH 5/6] net: bpf, add skb to sk lookup routines From: John Fastabend To: davem@davemloft.net, ast@fb.com Cc: netdev@vger.kernel.org, daniel@iogearbox.net Date: Thu, 03 Aug 2017 16:38:16 -0700 Message-ID: <20170803233816.12107.48409.stgit@john-Precision-Tower-5810> In-Reply-To: <20170803232443.12107.24752.stgit@john-Precision-Tower-5810> References: <20170803232443.12107.24752.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add some useful skb to sk routines to fine ports on a connected socket. This is for testing, we may prefer to put sk in bpf sk_buff representation and access these fields directly. Similar to sock ops ctx access. Signed-off-by: John Fastabend --- include/uapi/linux/bpf.h | 2 ++ net/core/filter.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index a89e831..c626c8f 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -604,6 +604,8 @@ enum bpf_attach_type { FN(redirect_map), \ FN(sk_redirect_map), \ FN(map_ctx_update_elem), \ + FN(skb_get_local_port), \ + FN(skb_get_remote_port), \ /* integer value in 'imm' field of BPF_CALL instruction selects which helper * function eBPF program intends to call diff --git a/net/core/filter.c b/net/core/filter.c index 2644f2d..3234200 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2993,6 +2993,38 @@ static unsigned long bpf_xdp_copy(void *dst_buff, const void *src_buff, .arg1_type = ARG_PTR_TO_CTX, }; +BPF_CALL_1(bpf_get_remote_port, struct sk_buff *, skb) +{ + struct sock *sk = skb->sk;//sk_to_full_sk(skb->sk); + + if (!sk)// || !sk_fullsock(sk)) + return overflowuid; + return sk->sk_dport; +} + +static const struct bpf_func_proto bpf_skb_get_remote_port_proto = { + .func = bpf_get_remote_port, + .gpl_only = false, + .ret_type = RET_INTEGER, + .arg1_type = ARG_PTR_TO_CTX, +}; + +BPF_CALL_1(bpf_get_local_port, struct sk_buff *, skb) +{ + struct sock *sk = skb->sk; + + if (!sk)// || !sk_fullsock(sk)) + return overflowuid; + return sk->sk_num; +} + +static const struct bpf_func_proto bpf_skb_get_local_port_proto = { + .func = bpf_get_local_port, + .gpl_only = false, + .ret_type = RET_INTEGER, + .arg1_type = ARG_PTR_TO_CTX, +}; + BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, int, level, int, optname, char *, optval, int, optlen) { @@ -3135,6 +3167,10 @@ static unsigned long bpf_xdp_copy(void *dst_buff, const void *src_buff, return &bpf_get_socket_cookie_proto; case BPF_FUNC_get_socket_uid: return &bpf_get_socket_uid_proto; + case BPF_FUNC_skb_get_remote_port: + return &bpf_skb_get_remote_port_proto; + case BPF_FUNC_skb_get_local_port: + return &bpf_skb_get_local_port_proto; case BPF_FUNC_sk_redirect_map: return &bpf_sk_redirect_map_proto; case BPF_FUNC_map_ctx_update_elem: