From patchwork Thu Aug 31 22:05:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 808438 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="eIkkKw5g"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xjxKS5qsHz9s81 for ; Fri, 1 Sep 2017 08:06:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751759AbdHaWGR (ORCPT ); Thu, 31 Aug 2017 18:06:17 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:35645 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751001AbdHaWGN (ORCPT ); Thu, 31 Aug 2017 18:06:13 -0400 Received: by mail-pf0-f196.google.com with SMTP id g13so532898pfm.2 for ; Thu, 31 Aug 2017 15:06:13 -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:in-reply-to:references; bh=84gOQRliaCEqW6/kI7OCGA5uhNpEl/D8paBEe0iTE00=; b=eIkkKw5gsGJKOU7x79yjDgA4J7fgeB3qX/WULSIzo1XxDbbgcylDRM+NPY3jhJPS85 FKbIm4+WVJ9lsnzb2yw5cBgRZR573B4VGFC1YvAqk3uR+DxXuLgYOZ6zNV+uuJnUMUhl 4fmdsW6zrxRyPFhzjUFibW+QXSRsWui89Qg9Q97Lw2yzk6xQ5whF0M/qUc00aHq7BUZ8 9YV6FFsZxJsredwmWX2EtE6fRKnXIEinHk5l1sfo0z4qFgrSQmv7dACOpGlLvGcALmbB EnATPVxNNTzR1CPyrrT7C4KiZuPB9/g4GPRrBrRFzAJWid3XxfgB2zLHIeNU13pbgSqz XMvQ== 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:in-reply-to :references; bh=84gOQRliaCEqW6/kI7OCGA5uhNpEl/D8paBEe0iTE00=; b=Z725C8Rr6kkQw9XINZVLgJcCtx+a2L31zMQ0BISPal+9SxAqLSNlGHKohEKYFSOeOS zxyzd6TMj80rvhtpzyLNk2oG1qAYgU5rJqIxzrWzjCRuy+asEJKLxUyzmm/WYz15DylO zOey2+wY6J78xtndwhkVLg18HPDKdVecE/oTfNUdPDe63OpMPzKyA+Hi4+0pw1nuoBiV JFNsMIsNKYZbftx6Jt3QTvNT0kz3eFV8e0dyqN5LTxIVagJI1BjRV1H6T48NgCo1GD6L Dv0h+vqupOI+P91VBzgSAjeGVcFuNWsvK4HJDgWcTgTZoK5A4HJqImRA4v71EaceEzVc bbrA== X-Gm-Message-State: AHYfb5ic+Dznt/1X8SuPOhPspdgdj5+GHL1iaRZCjXZqV/Snn8fqqsUZ 4XdwtdqGCBaWAkL7 X-Google-Smtp-Source: ADKCNb7BFgUYtF2dpgMv+BvL8lH10CAr0spFJsHgtgix6H39nLu+ml+/U78MRi2pZ6cBkCbVR9EgKA== X-Received: by 10.99.114.76 with SMTP id c12mr4105185pgn.22.1504217173213; Thu, 31 Aug 2017 15:06:13 -0700 (PDT) Received: from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com. [216.129.126.126]) by smtp.googlemail.com with ESMTPSA id x12sm845336pfk.42.2017.08.31.15.06.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 31 Aug 2017 15:06:12 -0700 (PDT) From: David Ahern To: netdev@vger.kernel.org, daniel@iogearbox.net, ast@kernel.org Cc: David Ahern Subject: [PATCH v3 net-next 5/7] samples/bpf: Add option to dump socket settings Date: Thu, 31 Aug 2017 15:05:48 -0700 Message-Id: <1504217150-16151-6-git-send-email-dsahern@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1504217150-16151-1-git-send-email-dsahern@gmail.com> References: <1504217150-16151-1-git-send-email-dsahern@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add option to dump socket settings. Will be used in the next patch to verify bpf programs are correctly setting mark, priority and device based on the cgroup attachment for the program run. Signed-off-by: David Ahern Acked-by: Alexei Starovoitov --- samples/bpf/test_cgrp2_sock.c | 75 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/samples/bpf/test_cgrp2_sock.c b/samples/bpf/test_cgrp2_sock.c index 15396761c5cc..5a688837720c 100644 --- a/samples/bpf/test_cgrp2_sock.c +++ b/samples/bpf/test_cgrp2_sock.c @@ -112,6 +112,70 @@ static int prog_load(__u32 idx, __u32 mark, __u32 prio) return ret; } +static int get_bind_to_device(int sd, char *name, size_t len) +{ + socklen_t optlen = len; + int rc; + + name[0] = '\0'; + rc = getsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, name, &optlen); + if (rc < 0) + perror("setsockopt(SO_BINDTODEVICE)"); + + return rc; +} + +static unsigned int get_somark(int sd) +{ + unsigned int mark = 0; + socklen_t optlen = sizeof(mark); + int rc; + + rc = getsockopt(sd, SOL_SOCKET, SO_MARK, &mark, &optlen); + if (rc < 0) + perror("getsockopt(SO_MARK)"); + + return mark; +} + +static unsigned int get_priority(int sd) +{ + unsigned int prio = 0; + socklen_t optlen = sizeof(prio); + int rc; + + rc = getsockopt(sd, SOL_SOCKET, SO_PRIORITY, &prio, &optlen); + if (rc < 0) + perror("getsockopt(SO_PRIORITY)"); + + return prio; +} + +static int show_sockopts(int family) +{ + unsigned int mark, prio; + char name[16]; + int sd; + + sd = socket(family, SOCK_DGRAM, 17); + if (sd < 0) { + perror("socket"); + return 1; + } + + if (get_bind_to_device(sd, name, sizeof(name)) < 0) + return 1; + + mark = get_somark(sd); + prio = get_priority(sd); + + close(sd); + + printf("sd %d: dev %s, mark %u, priority %u\n", sd, name, mark, prio); + + return 0; +} + static int usage(const char *argv0) { printf("Usage:\n"); @@ -120,6 +184,9 @@ static int usage(const char *argv0) printf("\n"); printf(" Detach a program\n"); printf(" %s -d cg-path\n", argv0); + printf("\n"); + printf(" Show inherited socket settings (mark, priority, and device)\n"); + printf(" %s [-6]\n", argv0); return EXIT_FAILURE; } @@ -128,10 +195,11 @@ int main(int argc, char **argv) __u32 idx = 0, mark = 0, prio = 0; const char *cgrp_path = NULL; int cg_fd, prog_fd, ret; + int family = PF_INET; int do_attach = 1; int rc; - while ((rc = getopt(argc, argv, "db:m:p:")) != -1) { + while ((rc = getopt(argc, argv, "db:m:p:6")) != -1) { switch (rc) { case 'd': do_attach = 0; @@ -152,13 +220,16 @@ int main(int argc, char **argv) case 'p': prio = strtoumax(optarg, NULL, 0); break; + case '6': + family = PF_INET6; + break; default: return usage(argv[0]); } } if (optind == argc) - return usage(argv[0]); + return show_sockopts(family); cgrp_path = argv[optind]; if (!cgrp_path) {