From patchwork Fri Mar 1 18:35:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1050340 X-Patchwork-Delegate: dsahern@gmail.com 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=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="l9lsUBe9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 449ylj4Sxjz9s5R for ; Sat, 2 Mar 2019 05:35:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728313AbfCASfY (ORCPT ); Fri, 1 Mar 2019 13:35:24 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:38675 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726195AbfCASfX (ORCPT ); Fri, 1 Mar 2019 13:35:23 -0500 Received: by mail-qt1-f195.google.com with SMTP id s1so28913317qte.5 for ; Fri, 01 Mar 2019 10:35:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Iq/2Tp2YlbluJXkLD/Zw85IfQAoN+wAvf5NGtzHI9DI=; b=l9lsUBe9FnhOKiwe5FYvWeivP/SRpr315nbWYACiKDFsHgmXo5wmPr/KWH9d8DBeAt 27XqWxwuRmrB9iQnlBt7eMwa46J1mtxR2b1GYJdJAnyzP8sd0d7InRj8py3XQC1isYFc wdrPDGVtuFCclLfskX9+Uh6EAYvdSBb1H4aq7yuc9oKHs5V06j8ESxWLuzBjz4fcN8Tf QxoYvy5hBmKXYxUmTxw4zljt4Qefm9z5bBwNYQWO3oZsc+043gWJEXMVyhOGU+MHiTEQ 20sn0Mt6VlYiynirKs8Hf6d9Qg9WZN3f3Z6NfNWIlX6JHaKR2Pl4dMDHQMNEgyziqi8q sVXg== 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:mime-version:content-transfer-encoding; bh=Iq/2Tp2YlbluJXkLD/Zw85IfQAoN+wAvf5NGtzHI9DI=; b=YtKM0dkV7Mf19SoDygI+iYKSHyK7EdtBY2LvDEys3G0SUSj1hbsFBvcw3326+oavH+ ghAGgjRrFDgbXgY7ddp8OR7OcOYJ4vDiXEcpn75WeSBHFABpGt8nKQOviuYWoe2NL2Tz Nk5tf/77nRoMfKrv8vcLR04GNo5+wv/JewOv/V881OPYZr9PO9hivpyH5Vbp3WXq7nHw do67u2Ij2EvIGhpNb/NONNfOMPU3E8L6o5dyViGsje7g3OIzQxIphpxyW2pUFmu0tiWn V5VjeUGcl136KRGMAt3CXddgKoIGW2l+pTKNGlawavV2X9ZMmoJlqbCT3Ej/Xlc7koQI n05w== X-Gm-Message-State: APjAAAWQeCI4NIIJ91fEIGeokKIcKvFSELQOHMpFx1m5iYFJAZ4Eldw+ z8B8Jpwy8wWEPN1UODOKO5YMlQ== X-Google-Smtp-Source: APXvYqxgZOnr5v5MpCNAIKrOKSB91bI9JrWf64qfal1kkQ9LDDNRazN8DkoSdIoH2AFLDHNhhwaASA== X-Received: by 2002:ac8:2b34:: with SMTP id 49mr5141705qtu.32.1551465322055; Fri, 01 Mar 2019 10:35:22 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id y21sm15542906qth.90.2019.03.01.10.35.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 10:35:21 -0800 (PST) From: Jakub Kicinski To: jiri@resnulli.us Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [RFC iproute2-next 1/3] devlink: add support for PCIe port flavours Date: Fri, 1 Mar 2019 10:35:08 -0800 Message-Id: <20190301183510.9028-2-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190301183510.9028-1-jakub.kicinski@netronome.com> References: <20190301183510.9028-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for decoding PCIe port flavours. Example: $ devlink port pci/0000:82:00.0/0: type eth netdev p4p1 flavour physical pci/0000:82:00.0/10000: type eth netdev eth0 flavour pcie_pf pf 0 pci/0000:82:00.0/10001: type eth netdev eth1 flavour pcie_vf pf 0 vf 0 pci/0000:82:00.0/10002: type eth netdev eth2 flavour pcie_vf pf 0 vf 1 $ devlink -jp port { "port": { "pci/0000:82:00.0/0": { "type": "eth", "netdev": "p4p1", "flavour": "physical" }, "pci/0000:82:00.0/10000": { "type": "eth", "netdev": "eth0", "flavour": "pci_pf", "pf": 0, }, "pci/0000:82:00.0/10001": { "type": "eth", "netdev": "eth1", "flavour": "pci_vf", "pf": 0, "vf": 0 }, "pci/0000:82:00.0/10002": { "type": "eth", "netdev": "eth2", "flavour": "pci_vf", "pf": 0, "vf": 1 } } } Signed-off-by: Jakub Kicinski --- devlink/devlink.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/devlink/devlink.c b/devlink/devlink.c index dc6e73fec20c..055b09808226 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -414,6 +414,8 @@ static const enum mnl_attr_data_type devlink_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT] = MNL_TYPE_U64, [DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS] = MNL_TYPE_U64, [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = MNL_TYPE_U64, + [DEVLINK_ATTR_PORT_PCI_PF_NUMBER] = MNL_TYPE_U32, + [DEVLINK_ATTR_PORT_PCI_VF_NUMBER] = MNL_TYPE_U32, }; static int attr_cb(const struct nlattr *attr, void *data) @@ -2771,6 +2773,10 @@ static const char *port_flavour_name(uint16_t flavour) return "cpu"; case DEVLINK_PORT_FLAVOUR_DSA: return "dsa"; + case DEVLINK_PORT_FLAVOUR_PCI_PF: + return "pci_pf"; + case DEVLINK_PORT_FLAVOUR_PCI_VF: + return "pci_vf"; default: return ""; } @@ -2809,6 +2815,13 @@ static void pr_out_port(struct dl *dl, struct nlattr **tb) if (tb[DEVLINK_ATTR_PORT_SPLIT_GROUP]) pr_out_uint(dl, "split_group", mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_SPLIT_GROUP])); + if (tb[DEVLINK_ATTR_PORT_PCI_PF_NUMBER]) + pr_out_uint(dl, "pf", + mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_PCI_PF_NUMBER])); + if (tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER]) + pr_out_uint(dl, "vf", + mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER])); + pr_out_port_handle_end(dl); } From patchwork Fri Mar 1 18:35:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1050338 X-Patchwork-Delegate: dsahern@gmail.com 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=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="ymN33HBP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 449ylf28PWz9s47 for ; Sat, 2 Mar 2019 05:35:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728392AbfCASfZ (ORCPT ); Fri, 1 Mar 2019 13:35:25 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:34480 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728033AbfCASfY (ORCPT ); Fri, 1 Mar 2019 13:35:24 -0500 Received: by mail-qt1-f195.google.com with SMTP id w4so28962876qtc.1 for ; Fri, 01 Mar 2019 10:35:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ucAtqmEPCGyZpY9/WqtDKlPAHF73igkhvCRu3ZpSf+c=; b=ymN33HBPTVE4tpzY2z78aJli1VENCVMF+MLd7Md4GneQQmuw+Q7zMaaorJqO0YiCTl qsmu9wVz2vexnLxYwj5WWhB6ioBOI9H7ofAyv5gjuUARq4zpE2Bv5OjXSdI31RJktjz7 zQiAMpjDPw2TXVuyGFKu7khKGI4+RuNvCzB8/fiAVz3Q97a14EpCehjUnULrwluDf2Bs NnNgoFs4VxUj2AoKU0H4vmEHmw4R2SytjpXs+j0aFIswXGs8TOZvSUqKZV6PrhhUNH0f I59Nj4Xs1qTvehZnOUaWlmjQhLmTyhGiie3hV1NGpCFm/tnNV+xW0W7vadj846fm+W7Q hXCQ== 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:mime-version:content-transfer-encoding; bh=ucAtqmEPCGyZpY9/WqtDKlPAHF73igkhvCRu3ZpSf+c=; b=fqEgEvDQR5uWWjYgIZ2MjarbQCR/BSeHFs4dmw3LhKvhZr6v1oCGS/Ac02mA7QCDwy Zpqbp6wGmAmFPOmSswKJY+4rZy6Vc3Ivn7NWCnvPNv+ANb6wkyfPSR+HqKHfSI7fXWe4 TeBy0+lA6DLGjLQYhUp94OZDwE4XduNN8jCOJMQgtoolSwCfhU3S874afT8K6/cSArEZ 3PDtEFrJUIdLGm6zhv1mNbCxBX5fZzDi/l7r53x2ejmElLskjyq0CUwdlvKLH7EKODi6 fOq9fVefCDx7I9R6nV+DrIlIaAvLRMJuVHK8Tt8YgXt/CQgznkchO98K43bZduElYn4R fmAg== X-Gm-Message-State: APjAAAUFzw7n3giBEOw/YLK0PmP/EPM143DGVAMp9CLbtva/WlsjrSs6 dVvZFMEXU5sVJ4zJvlmKkxlsuQ== X-Google-Smtp-Source: APXvYqx/TagAYS2pz5ZxfKozb8FTCAIsMovopGtgwIIk6ZY9SjBqiPI1nJKdeC6lAzKHNCVp9JbshQ== X-Received: by 2002:ac8:2b17:: with SMTP id 23mr4998210qtu.157.1551465323319; Fri, 01 Mar 2019 10:35:23 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id y21sm15542906qth.90.2019.03.01.10.35.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 10:35:22 -0800 (PST) From: Jakub Kicinski To: jiri@resnulli.us Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [RFC iproute2-next 2/3] devlink: add support for PCIe subports Date: Fri, 1 Mar 2019 10:35:09 -0800 Message-Id: <20190301183510.9028-3-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190301183510.9028-1-jakub.kicinski@netronome.com> References: <20190301183510.9028-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for reporting PCIe subports. Example (bus 05 device has subports, bus 82 has only one port per function): $ devlink port pci/0000:05:00.0/0: type eth netdev enp5s0np0 flavour physical pci/0000:05:00.0/10000: type eth netdev enp5s0npf0s0 flavour pci_pf pf 0 subport 0 pci/0000:05:00.0/4: type eth netdev enp5s0np1 flavour physical pci/0000:05:00.0/11000: type eth netdev enp5s0npf0s1 flavour pci_pf pf 0 subport 1 pci/0000:82:00.0/0: type eth netdev p4p1 flavour physical pci/0000:82:00.0/10000: type eth netdev eth0 flavour pci_pf pf 0 $ devlink -jp port { "port": { "pci/0000:05:00.0/0": { "type": "eth", "netdev": "enp5s0np0", "flavour": "physical" }, "pci/0000:05:00.0/10000": { "type": "eth", "netdev": "enp5s0npf0s0", "flavour": "pci_pf", "pf": 0, "subport": 0 }, "pci/0000:05:00.0/4": { "type": "eth", "netdev": "enp5s0np1", "flavour": "physical" }, "pci/0000:05:00.0/11000": { "type": "eth", "netdev": "enp5s0npf0s1", "flavour": "pci_pf", "pf": 0, "subport": 1 }, "pci/0000:82:00.0/0": { "type": "eth", "netdev": "p4p1", "flavour": "physical" }, "pci/0000:82:00.0/10000": { "type": "eth", "netdev": "eth0", "flavour": "pci_pf", "pf": 0 } } } Signed-off-by: Jakub Kicinski --- devlink/devlink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 055b09808226..c130305b94ff 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -416,6 +416,7 @@ static const enum mnl_attr_data_type devlink_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD] = MNL_TYPE_U64, [DEVLINK_ATTR_PORT_PCI_PF_NUMBER] = MNL_TYPE_U32, [DEVLINK_ATTR_PORT_PCI_VF_NUMBER] = MNL_TYPE_U32, + [DEVLINK_ATTR_PORT_PCI_SUBPORT] = MNL_TYPE_U32, }; static int attr_cb(const struct nlattr *attr, void *data) @@ -2821,7 +2822,9 @@ static void pr_out_port(struct dl *dl, struct nlattr **tb) if (tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER]) pr_out_uint(dl, "vf", mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_PCI_VF_NUMBER])); - + if (tb[DEVLINK_ATTR_PORT_PCI_SUBPORT]) + pr_out_uint(dl, "subport", + mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_PCI_SUBPORT])); pr_out_port_handle_end(dl); } From patchwork Fri Mar 1 18:35:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Kicinski X-Patchwork-Id: 1050339 X-Patchwork-Delegate: dsahern@gmail.com 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=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="QdxTnqlS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 449ylh68Htz9s47 for ; Sat, 2 Mar 2019 05:35:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728507AbfCASf1 (ORCPT ); Fri, 1 Mar 2019 13:35:27 -0500 Received: from mail-qt1-f195.google.com ([209.85.160.195]:34483 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728361AbfCASf0 (ORCPT ); Fri, 1 Mar 2019 13:35:26 -0500 Received: by mail-qt1-f195.google.com with SMTP id w4so28962959qtc.1 for ; Fri, 01 Mar 2019 10:35:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=B0+WFGtfOnBzENqlAOtXEKAo2IIqmAgjl2wBr0WSOk0=; b=QdxTnqlSX8dD/i6y87aATOtb2LOe+fanqAn8RA/i2qSCyts1hs55nLEGZJnO44g7F3 oXvE0+Q9xCDBcufgkuFJTYwGi4Jh5GqI5WKT1nBVhYFmOWInMWsLdz8abpmQcTvdT+sx 01KSwr1P4tHUePYr75ctr9pAPDu1xxcHfEJtkRzVFmnxS4UEhwMKaEFzr6Vq7qhon8Ga ECXxftDTh6J4IssXeV/oMYv2LshdcjU+JU1GTh58FTmyssT7J1bckjrqf8tJAN7x1BLS 7s8NVp6UoIco/CxugLHPWDMQDY2NeK2TLMPRHjowWO22qeZvOaBVYrj3Gvg1JsCbmM0q +Yhw== 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:mime-version:content-transfer-encoding; bh=B0+WFGtfOnBzENqlAOtXEKAo2IIqmAgjl2wBr0WSOk0=; b=adSAzPkU6oVu/WePI2S7zXbAoxE1CNHIZ79xli2A+7t5DOpt2JJRN3rgWhZv8dziKD EEG5LDEG6uVPL7BLIjUguaZ9GP/qmL7EgivSgPxDRy8hJ6ohrEtWrRxVm3mF3Kkb2Luo ENDkpiWCxGymoJM9HPhtIpGDN0xbi8dzwA5og4iHW70/xyOUZWEjoNblqJ6kEpSXCUpJ WB7Lg9ePHBgmapz4vZG+yDBAycQEyVuXvQgS+/J85qNyQRsgDNz0fLptE9a/wKuBVRTi NN6xrWU58Y0xYC9vgg376QbSpIB1EEySfG2+66kJjtIH1IJuUyfdY/Jgw7xPgKNOfN8I sygg== X-Gm-Message-State: APjAAAX/N65NQfWl+r22RzAYtjOkOT5wLD5SU/kn/VqWu0gFlUzXeOYo 8GJPZwMHl/0eiZllM4f7REkI6w== X-Google-Smtp-Source: APXvYqy5lXEXeZP1GlIGSDC6cWBtEW208wOK/+gNvxHAx+t5BJUXfkYBZARmbjlchmt5G5g0FK8rfw== X-Received: by 2002:ac8:2a39:: with SMTP id k54mr5247291qtk.26.1551465324512; Fri, 01 Mar 2019 10:35:24 -0800 (PST) Received: from jkicinski-Precision-T1700.netronome.com ([66.60.152.14]) by smtp.gmail.com with ESMTPSA id y21sm15542906qth.90.2019.03.01.10.35.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 10:35:24 -0800 (PST) From: Jakub Kicinski To: jiri@resnulli.us Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jakub Kicinski Subject: [RFC iproute2-next 3/3] devlink: add support for PCIe device peers Date: Fri, 1 Mar 2019 10:35:10 -0800 Message-Id: <20190301183510.9028-4-jakub.kicinski@netronome.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190301183510.9028-1-jakub.kicinski@netronome.com> References: <20190301183510.9028-1-jakub.kicinski@netronome.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Print peer netdev information. $ devlink port pci/0000:82:00.0/0: type eth netdev p4p1 flavour physical pci/0000:82:00.0/10000: type eth netdev eth1 flavour pci_pf pf 0 peer_netdev enp130s0 $ devlink -jp port { "port": { "pci/0000:82:00.0/0": { "type": "eth", "netdev": "p4p1", "flavour": "physical" }, "pci/0000:82:00.0/10000": { "type": "eth", "netdev": "eth1", "flavour": "pci_pf", "pf": 0, "peer": { "netdev": "enp130s0" } } } } Signed-off-by: Jakub Kicinski --- devlink/devlink.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/devlink/devlink.c b/devlink/devlink.c index c130305b94ff..e4b66aa28f71 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -417,6 +417,8 @@ static const enum mnl_attr_data_type devlink_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_PORT_PCI_PF_NUMBER] = MNL_TYPE_U32, [DEVLINK_ATTR_PORT_PCI_VF_NUMBER] = MNL_TYPE_U32, [DEVLINK_ATTR_PORT_PCI_SUBPORT] = MNL_TYPE_U32, + [DEVLINK_ATTR_PORT_PEER_NETDEV_NAME] = MNL_TYPE_STRING, + [DEVLINK_ATTR_PORT_PEER_IBDEV_NAME] = MNL_TYPE_STRING, }; static int attr_cb(const struct nlattr *attr, void *data) @@ -2783,6 +2785,36 @@ static const char *port_flavour_name(uint16_t flavour) } } +static void pr_out_port_peer(struct dl *dl, struct nlattr *peer) +{ + struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {}; + const char *netdev = NULL, *ibdev = NULL; + + mnl_attr_parse_nested(peer, attr_cb, tb); + + if (tb[DEVLINK_ATTR_PORT_PEER_NETDEV_NAME]) + netdev = mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_PEER_NETDEV_NAME]); + if (tb[DEVLINK_ATTR_PORT_PEER_IBDEV_NAME]) + ibdev = mnl_attr_get_str(tb[DEVLINK_ATTR_PORT_PEER_IBDEV_NAME]); + + if (dl->jw) { + jsonw_name(dl->jw, "peer"); + jsonw_start_object(dl->jw); + + if (netdev) + pr_out_str(dl, "netdev", netdev); + if (ibdev) + pr_out_str(dl, "ibdev", ibdev); + + jsonw_end_object(dl->jw); + } else { + if (netdev) + pr_out_str(dl, "peer_netdev", netdev); + if (ibdev) + pr_out_str(dl, "peer_ibdev", ibdev); + } +} + static void pr_out_port(struct dl *dl, struct nlattr **tb) { struct nlattr *pt_attr = tb[DEVLINK_ATTR_PORT_TYPE]; @@ -2825,6 +2857,8 @@ static void pr_out_port(struct dl *dl, struct nlattr **tb) if (tb[DEVLINK_ATTR_PORT_PCI_SUBPORT]) pr_out_uint(dl, "subport", mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_PCI_SUBPORT])); + if (tb[DEVLINK_ATTR_PORT_PEER]) + pr_out_port_peer(dl, tb[DEVLINK_ATTR_PORT_PEER]); pr_out_port_handle_end(dl); }