From patchwork Tue Feb 4 21:41:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uday Shankar X-Patchwork-Id: 13959956 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-lf1-f100.google.com (mail-lf1-f100.google.com [209.85.167.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3268621C174 for ; Tue, 4 Feb 2025 21:41:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738705314; cv=none; b=oGI2HTTxWzEY+JcrdjQOc3NVDKLvEec9nQ04tYRDvMFD1jGDOLcP7ESzGJV2+AaktBayTM0wmcQgIHkOgE4wFTD2t1fXKor6Bckv8sJi7HONLoER4cwNRZLmJ9wEVz1BQjNpk+C/VE+/ZkQ2MzGDwLvti5jxYXMY85i8C+SEQVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738705314; c=relaxed/simple; bh=SkkgRL+aWhhRmH4pjJumNwBZl/4orWE7TU6iXYsD5o0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j/YnDVKeeZvVbGfNkzwhOurPJLoIO1OizNSJ2k1uDWo13UM/rvbNkl0GqaLlPrbTHda2Meg3pGfkT9Xm+WH3BTj7vEtmp7eR4KNYY1tob6YCeX3IjBAsKzuC0uMQT6796zJ9WnRpXDwbPebW5rDsIjwNjaWPlKXtWk+hTOXUoco= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=MgWeM643; arc=none smtp.client-ip=209.85.167.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="MgWeM643" Received: by mail-lf1-f100.google.com with SMTP id 2adb3069b0e04-5426fcb3c69so5437053e87.3 for ; Tue, 04 Feb 2025 13:41:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1738705308; x=1739310108; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7YkZDn5aiP46G0YmGmDePlUKCzJbx9gAEyIeepD9Ze8=; b=MgWeM6435d1eCDBJBaUGAog7dG8SftIWeb2+0FaTP/YPNyAFe9HB/KEPy2jYiuqAPj eXoEaoqlHCHlVtVRHo2lyf7sLkUWl7dVcuSVMAVS4poQTZ6wPdeOwIYLwKxywXQNmpeF GqwgQGwuaPmLM4XTz2d49LIIaVVpbDjrukBL92meKEm6ikk/7/ZH5PCJ9GaQn54m3+X0 ojseNaOlnLAoDa1CG+v07tZUWWvFodpNEuXIIgTg6g0rERVBGxljjKi7svF5zDuveYXr 09xti8ecVs0vnThXSHMDYC+fOyWViKKYeHCIxEcNYI8kFDSC57LOK2Z89Pnaxo5QjoCD 9VaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738705308; x=1739310108; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7YkZDn5aiP46G0YmGmDePlUKCzJbx9gAEyIeepD9Ze8=; b=E0Luye3Xt0MXI50n94j4HLxCI+ll79S5bzgg9bQunplHLzx11yRjuIIaeTwTzd/s/x vVq273d8AkcogItStxpCa0Rts/Y0M1cHNt9cD7OFBYbhHVEHMTrAuIPVlipL+mhhV9n8 NOO2jevfkdgoatE1wTc8a3DR+myLOTm3QmoIcdQJX1Kw0CKRZBnH9KbDdsVsNZzHSf3f EJA1c9OXopTh4CMdjkwFnkJA+Ycj9NRDrmo3V0V+zKmNhEBbs47ljrPtiGIvb02fM7DA rTEn06gmCn/eTjWE3JZtv4S3ULVgPHzER9/SHuQzOUCvL3RaJkbGXWQH/ty2NB7PcBgx znQA== X-Gm-Message-State: AOJu0YzzsuTUpvsQLIHrMDdOPV/UumTAKN0WVZATVoeOko779tziVuFL ItAREpS75Z++QVQ1myp1vNL3Gy3fjTRYbPnL34GJTUPQTFUtQcPQs18R7Ff6n9CPedF87b5JLKD /WF7GyJ+fCjVADjYcRNWPTh+2t1HecCm7 X-Gm-Gg: ASbGncsP+nPMUQcR4q/g3hhUVPnVwZxrzxwW1ZaCE6LqcItaSOKjfAf7H+loGZFH0W9 HJ6JpsUI5fZqvpQev3zZJKI+omwpcLVHrbU6gNThEeOguAlOA5YpceO+FQpDJ/tJjb7LessU6Sq 0d2O988/hkWrD2Owu50j1+zXowZKypTUodfcE2Mohmb3z2oPkXode6nnvrH27tdCbmwOP8cUFUW TYzEgq+exqq6rNEj1wK9divyLzAoajTE6Fh/yVgNEhOoTD493Ykcmnb6vTTWfTfP3/Kh8F4EGDV lYeNddV+UWG+IaFpbRSwM1MTZ7cu4G2yd9n6kdI= X-Google-Smtp-Source: AGHT+IFYytsAx7QnkQuNjUJtxyv3Dx96zeS9SwWEsuo4ceOYnCkESLc0Ls7mDKdivbKiWU1TQz2zgZ3ZQ6LP X-Received: by 2002:a05:6512:2245:b0:542:6f78:2ace with SMTP id 2adb3069b0e04-54405a68b4cmr81688e87.47.1738705307937; Tue, 04 Feb 2025 13:41:47 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id 2adb3069b0e04-543ebeb0459sm506587e87.89.2025.02.04.13.41.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 13:41:47 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-ushankar.dev.purestorage.com (dev-ushankar.dev.purestorage.com [10.7.70.36]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 286A934063A; Tue, 4 Feb 2025 14:41:46 -0700 (MST) Received: by dev-ushankar.dev.purestorage.com (Postfix, from userid 1557716368) id 03F44E41434; Tue, 4 Feb 2025 14:41:46 -0700 (MST) From: Uday Shankar Date: Tue, 04 Feb 2025 14:41:44 -0700 Subject: [PATCH v2 1/2] net, treewide: define and use MAC_ADDR_LEN Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250204-netconsole-v2-1-5ef5eb5f6056@purestorage.com> References: <20250204-netconsole-v2-0-5ef5eb5f6056@purestorage.com> In-Reply-To: <20250204-netconsole-v2-0-5ef5eb5f6056@purestorage.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Srinivas Kandagatla , =?utf-8?b?UmFmYcWC?= =?utf-8?b?IE1pxYJlY2tp?= , Simon Horman , Andrew Morton , Johannes Berg , Jonathan Corbet Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org, linux-doc@vger.kernel.org, Uday Shankar X-Mailer: b4 0.14.2 X-Patchwork-Delegate: kuba@kernel.org There are a few places in the tree which compute the length of the string representation of a MAC address as 3 * ETH_ALEN - 1. Define a constant for this and use it where relevant. No functionality changes are expected. Signed-off-by: Uday Shankar --- drivers/net/netconsole.c | 2 +- drivers/nvmem/brcm_nvram.c | 2 +- drivers/nvmem/layouts/u-boot-env.c | 2 +- include/linux/if_ether.h | 3 +++ lib/net_utils.c | 4 +--- net/mac80211/debugfs_sta.c | 5 +++-- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 86ab4a42769a49eebe5dd6f01dafafc6c86ec54f..78c143e65a3f337929f91f70b77e5bc88365eea7 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -675,7 +675,7 @@ static ssize_t remote_mac_store(struct config_item *item, const char *buf, if (!mac_pton(buf, remote_mac)) goto out_unlock; - if (buf[3 * ETH_ALEN - 1] && buf[3 * ETH_ALEN - 1] != '\n') + if (buf[MAC_ADDR_LEN] && buf[MAC_ADDR_LEN] != '\n') goto out_unlock; memcpy(nt->np.remote_mac, remote_mac, ETH_ALEN); diff --git a/drivers/nvmem/brcm_nvram.c b/drivers/nvmem/brcm_nvram.c index b810df727b446b1762a1851750f743e0de6e8788..43608e45c58aa96a505d82733de1b24ef8d18a1b 100644 --- a/drivers/nvmem/brcm_nvram.c +++ b/drivers/nvmem/brcm_nvram.c @@ -100,7 +100,7 @@ static int brcm_nvram_read_post_process_macaddr(void *context, const char *id, i { u8 mac[ETH_ALEN]; - if (bytes != 3 * ETH_ALEN - 1) + if (bytes != MAC_ADDR_LEN) return -EINVAL; if (!mac_pton(buf, mac)) diff --git a/drivers/nvmem/layouts/u-boot-env.c b/drivers/nvmem/layouts/u-boot-env.c index 731e6f4f12b2bf28e4547d128954a095545ad461..4a6c0d0e6dc90a138bfbb402d401d41f59c021f8 100644 --- a/drivers/nvmem/layouts/u-boot-env.c +++ b/drivers/nvmem/layouts/u-boot-env.c @@ -37,7 +37,7 @@ static int u_boot_env_read_post_process_ethaddr(void *context, const char *id, i { u8 mac[ETH_ALEN]; - if (bytes != 3 * ETH_ALEN - 1) + if (bytes != MAC_ADDR_LEN) return -EINVAL; if (!mac_pton(buf, mac)) diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h index 8a9792a6427ad9cf58b50c79cbfe185615800dcb..afb2fdc0af653626034ae5e19309c8427272a828 100644 --- a/include/linux/if_ether.h +++ b/include/linux/if_ether.h @@ -19,6 +19,9 @@ #include #include +/* XX:XX:XX:XX:XX:XX */ +#define MAC_ADDR_LEN (3 * ETH_ALEN - 1) + static inline struct ethhdr *eth_hdr(const struct sk_buff *skb) { return (struct ethhdr *)skb_mac_header(skb); diff --git a/lib/net_utils.c b/lib/net_utils.c index 42bb0473fb22f977409f7a6792bb1340f4e911c3..0aedd4854d85ba89dbf0e7451b3f6b197cfac1de 100644 --- a/lib/net_utils.c +++ b/lib/net_utils.c @@ -7,11 +7,9 @@ bool mac_pton(const char *s, u8 *mac) { - size_t maxlen = 3 * ETH_ALEN - 1; int i; - /* XX:XX:XX:XX:XX:XX */ - if (strnlen(s, maxlen) < maxlen) + if (strnlen(s, MAC_ADDR_LEN) < MAC_ADDR_LEN) return false; /* Don't dirty result unless string is valid MAC. */ diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c index a67a9d3160086ac492d77092a0c8a74d2384b28c..29f45382367e4f6cceb0e0b5f04db1c408da712e 100644 --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c @@ -457,11 +457,12 @@ static ssize_t link_sta_addr_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct link_sta_info *link_sta = file->private_data; - u8 mac[3 * ETH_ALEN + 1]; + u8 mac[MAC_ADDR_LEN + 2]; snprintf(mac, sizeof(mac), "%pM\n", link_sta->pub->addr); - return simple_read_from_buffer(userbuf, count, ppos, mac, 3 * ETH_ALEN); + return simple_read_from_buffer(userbuf, count, ppos, mac, + MAC_ADDR_LEN + 1); } LINK_STA_OPS(addr); From patchwork Tue Feb 4 21:41:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uday Shankar X-Patchwork-Id: 13959955 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-wm1-f100.google.com (mail-wm1-f100.google.com [209.85.128.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5CCE21ADA3 for ; Tue, 4 Feb 2025 21:41:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738705313; cv=none; b=ZQhdmEzhaRiAFg0dgZA+q9PgVzQVPVrADoy4LozODqs+HdKfW7NGWMTVK8CZ5TSUI7sVgTFP7aXgvc4XTUeEvaCb6Kp+OXWhI+tmX+Etwuhu/TeEpz0qvHLk0W9RMG/scELySLZYDAsP0pBPyjZwSC/8N0s/eERuUWWunl5/j7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738705313; c=relaxed/simple; bh=sSzdqym4sZoyr/rmSa6l3jQQ+kw4oamO6hBvh4Cn/NU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B85MmlTb9WH5LESLcpLAX7nNZg3XEyWPwTfZhPqdMvvbPCiFnnFNpAZk4il1JR3aBxBFGr2u3J50QE4vUZKV0fFJJDXcpIoiRjnSRITil8y4o4malpmlG85CYdWo25EFvna4tf2JHcz99FCvCdyjd41Ra0RxyK9Ac20lGWvMq5o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Ck+vYQ8v; arc=none smtp.client-ip=209.85.128.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Ck+vYQ8v" Received: by mail-wm1-f100.google.com with SMTP id 5b1f17b1804b1-4361815b96cso42603825e9.1 for ; Tue, 04 Feb 2025 13:41:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1738705308; x=1739310108; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=PV9AUvrwCJA5VPnpgRlNS/C2+Teqvu1ALhuWovCyEH0=; b=Ck+vYQ8vqzlVx5bQvsjfjBMfmbNtP9MgbsIMpAzCwfaVm5001ZUQ6LlzRmMLghuWOe aP5YDm01ZzVb5GsogFxEXOsE+SZyTHKzlWcQQHirexG9TvBjC7UNFuvDVF5BoCkqYZre XZyBHitKLTWkUMKJO3jLXsQavWIn0iLs6x+Mei7DHWVUovzb4GlJdDWcOVbkF9eoZjP3 7ox/uwXCoJ0WXH0JRaczaN9RZSj8ULvL0RBBDJCSmf+oAnQGqtZynpmTrQL6okdkg09A 5xK0G/ugFGHDqBk4MOqMzcwD6xwXr/iXIO9DFMTwlXp1YSC7nRHVZDiWvw5mn0+zhEeK 5+SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738705308; x=1739310108; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PV9AUvrwCJA5VPnpgRlNS/C2+Teqvu1ALhuWovCyEH0=; b=lrL+KElwabARniGZoSMBmxkPj63nEWIkzkIbQSGJBwZfmbhLQRKNnx+osgRVl9dBOK yyOjcnKIFNKUjzR7hHYUJxISBn/h4sDyG8Dj9R8bSlTc9q7zRSzu1goxrRxer7nHJHvv i8XFreSsYhEc34q5EOaybcrimgkNApPwoLgsMKqVcmk9avFvD1JZWd0xbrV+3X/qPOUk 7nsm29pIFCpVRrL31dgOSozYZVuaoeOJabFkGcj1RJtYWIW+OTRNKpLg/zi/+2ByJ+Ve wIeLlqngSubv7ZtpIJdePwOHW9Q12bvWd4eCyo6BvIb41TytvekigZvHhabeHqrl2QB6 LHxA== X-Gm-Message-State: AOJu0YyJnjEaO5hQmV+L/eN3LqUCBlbgb7CJIY4GlLjp/Af4sfn9iI02 INzmJichE1Yxkw3SdN1ZIBWFj1bGsiIPOQ0xwxmKhyXBsxzSJJYSk117RCFUoTv4ZwJRO697oiS 8i5Nlz/KMIhp3E2iW/MzsLHKPO1VIvaLMkgGGGpjauT7Ho2II X-Gm-Gg: ASbGncu6UTRCe15rhohd3E3cM7dWGVXo3q86SI5ziyNyXMgRbepIMhIwEMVkp7yHYtz VFhptu5QD270Ue52xHf2Ed0jP1uyO4Z8u/bNUM5fN5nDe1QlJTRtbE+JyjvU0aiWr30uSZpcQpj k12tAuWB9ToJajzHQCJNNif4p6CJFLtusVKiCzrtxQmd+LyhBLChfWmDFxcOkEjKxXK3+SbJnUn K3/UBnhUMdXUq3+miCHvoSIUsRIGXyn2LUlk/Peesalm6LDsDaWsoXeXqKhRUmVD4xrm9h1DSfG 7w0o0jFh2PCqkQ3Dq9onpC/8 X-Google-Smtp-Source: AGHT+IGhaewQbBaoTXZSAKHFJMCAhFK//sDV5ZUHJPRJ+3ng+fuv7wgumD/wxj76xopWMCJVj/2/utmFFcoA X-Received: by 2002:a05:600c:3150:b0:434:a4fe:cd71 with SMTP id 5b1f17b1804b1-4390d435ed6mr1660995e9.12.1738705307682; Tue, 04 Feb 2025 13:41:47 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 5b1f17b1804b1-4390da738c0sm30715e9.29.2025.02.04.13.41.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Feb 2025 13:41:47 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-ushankar.dev.purestorage.com (dev-ushankar.dev.purestorage.com [10.7.70.36]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 2A099340807; Tue, 4 Feb 2025 14:41:46 -0700 (MST) Received: by dev-ushankar.dev.purestorage.com (Postfix, from userid 1557716368) id 0937FE55E5B; Tue, 4 Feb 2025 14:41:46 -0700 (MST) From: Uday Shankar Date: Tue, 04 Feb 2025 14:41:45 -0700 Subject: [PATCH v2 2/2] netconsole: allow selection of egress interface via MAC address Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250204-netconsole-v2-2-5ef5eb5f6056@purestorage.com> References: <20250204-netconsole-v2-0-5ef5eb5f6056@purestorage.com> In-Reply-To: <20250204-netconsole-v2-0-5ef5eb5f6056@purestorage.com> To: Breno Leitao , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Srinivas Kandagatla , =?utf-8?b?UmFmYcWC?= =?utf-8?b?IE1pxYJlY2tp?= , Simon Horman , Andrew Morton , Johannes Berg , Jonathan Corbet Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org, linux-doc@vger.kernel.org, Uday Shankar X-Mailer: b4 0.14.2 X-Patchwork-Delegate: kuba@kernel.org Currently, netconsole has two methods of configuration - module parameter and configfs. The former interface allows for netconsole activation earlier during boot (by specifying the module parameter on the kernel command line), so it is preferred for debugging issues which arise before userspace is up/the configfs interface can be used. The module parameter syntax requires specifying the egress interface name. This requirement makes it hard to use for a couple reasons: - The egress interface name can be hard or impossible to predict. For example, installing a new network card in a system can change the interface names assigned by the kernel. - When constructing the module parameter, one may have trouble determining the original (kernel-assigned) name of the interface (which is the name that should be given to netconsole) if some stable interface naming scheme is in effect. A human can usually look at kernel logs to determine the original name, but this is very painful if automation is constructing the parameter. For these reasons, allow selection of the egress interface via MAC address when configuring netconsole using the module parameter. Update the netconsole documentation with an example of the new syntax. Selection of egress interface by MAC address via configfs is far less interesting (since when this interface can be used, one should be able to easily convert between MAC address and interface name), so it is left unimplemented. Signed-off-by: Uday Shankar --- Documentation/networking/netconsole.rst | 6 +++- include/linux/netpoll.h | 6 ++++ net/core/netpoll.c | 51 +++++++++++++++++++++++++-------- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/Documentation/networking/netconsole.rst b/Documentation/networking/netconsole.rst index 94c4680fdf3e7e1a0020d11b44547acfd68072a5..90a1bbb52918a0163828f4e96c89781e0bc6856b 100644 --- a/Documentation/networking/netconsole.rst +++ b/Documentation/networking/netconsole.rst @@ -45,7 +45,7 @@ following format:: r if present, prepend kernel version (release) to the message src-port source for UDP packets (defaults to 6665) src-ip source IP to use (interface address) - dev network interface (eth0) + dev network interface name (eth0) or MAC address tgt-port port for logging agent (6666) tgt-ip IP address for logging agent tgt-macaddr ethernet MAC address for logging agent (broadcast) @@ -62,6 +62,10 @@ or using IPv6:: insmod netconsole netconsole=@/,@fd00:1:2:3::1/ +or using a MAC address to select the egress interface:: + + linux netconsole=4444@10.0.0.1/22:33:44:55:66:77,9353@10.0.0.2/12:34:56:78:9a:bc + It also supports logging to multiple remote agents by specifying parameters for the multiple agents separated by semicolons and the complete string enclosed in "quotes", thusly:: diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index f91e50a76efd4b016381c632456397eea1ea877f..1ade65b59be49cfdcf86ed6e938287b949aa9f58 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -25,7 +25,13 @@ union inet_addr { struct netpoll { struct net_device *dev; netdevice_tracker dev_tracker; + /* + * Either dev_name or dev_mac can be used to specify the local + * interface - dev_name is used if it is a nonempty string, else + * dev_mac is used. + */ char dev_name[IFNAMSIZ]; + u8 dev_mac[ETH_ALEN]; const char *name; union inet_addr local_ip, remote_ip; diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 62b4041aae1ae8c7dc47c89fb40b14bbd4ad0e0e..c4b329fa874748eddff64bbba13902893faebbce 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -501,7 +501,8 @@ void netpoll_print_options(struct netpoll *np) np_info(np, "local IPv6 address %pI6c\n", &np->local_ip.in6); else np_info(np, "local IPv4 address %pI4\n", &np->local_ip.ip); - np_info(np, "interface '%s'\n", np->dev_name); + np_info(np, "interface name '%s'\n", np->dev_name); + np_info(np, "local ethernet address '%pM'\n", np->dev_mac); np_info(np, "remote port %d\n", np->remote_port); if (np->ipv6) np_info(np, "remote IPv6 address %pI6c\n", &np->remote_ip.in6); @@ -570,11 +571,18 @@ int netpoll_parse_options(struct netpoll *np, char *opt) cur++; if (*cur != ',') { - /* parse out dev name */ + /* parse out dev_name or dev_mac */ if ((delim = strchr(cur, ',')) == NULL) goto parse_failed; *delim = 0; - strscpy(np->dev_name, cur, sizeof(np->dev_name)); + + np->dev_name[0] = '\0'; + eth_broadcast_addr(np->dev_mac); + if (!strchr(cur, ':')) + strscpy(np->dev_name, cur, sizeof(np->dev_name)); + else if (!mac_pton(cur, np->dev_mac)) + goto parse_failed; + cur = delim; } cur++; @@ -679,27 +687,45 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev) } EXPORT_SYMBOL_GPL(__netpoll_setup); +/* + * Returns a pointer to a string representation of the identifier used + * to select the egress interface for the given netpoll instance. buf + * must be a buffer of length at least MAC_ADDR_LEN + 1. + */ +static char *egress_dev(struct netpoll *np, char *buf) +{ + if (np->dev_name[0]) + return np->dev_name; + + snprintf(buf, MAC_ADDR_LEN, "%pM", np->dev_mac); + return buf; +} + int netpoll_setup(struct netpoll *np) { + struct net *net = current->nsproxy->net_ns; struct net_device *ndev = NULL; bool ip_overwritten = false; + char buf[MAC_ADDR_LEN + 1]; struct in_device *in_dev; int err; rtnl_lock(); - if (np->dev_name[0]) { - struct net *net = current->nsproxy->net_ns; + if (np->dev_name[0]) ndev = __dev_get_by_name(net, np->dev_name); - } + else if (is_valid_ether_addr(np->dev_mac)) + ndev = dev_getbyhwaddr_rcu(net, ARPHRD_ETHER, np->dev_mac); + if (!ndev) { - np_err(np, "%s doesn't exist, aborting\n", np->dev_name); + np_err(np, "%s doesn't exist, aborting\n", egress_dev(np, buf)); err = -ENODEV; goto unlock; } netdev_hold(ndev, &np->dev_tracker, GFP_KERNEL); if (netdev_master_upper_dev_get(ndev)) { - np_err(np, "%s is a slave device, aborting\n", np->dev_name); + np_err(np, "%s is a slave device, aborting\n", + egress_dev(np, buf)); err = -EBUSY; goto put; } @@ -707,7 +733,8 @@ int netpoll_setup(struct netpoll *np) if (!netif_running(ndev)) { unsigned long atmost; - np_info(np, "device %s not up yet, forcing it\n", np->dev_name); + np_info(np, "device %s not up yet, forcing it\n", + egress_dev(np, buf)); err = dev_open(ndev, NULL); @@ -741,7 +768,7 @@ int netpoll_setup(struct netpoll *np) if (!ifa) { put_noaddr: np_err(np, "no IP address for %s, aborting\n", - np->dev_name); + egress_dev(np, buf)); err = -EDESTADDRREQ; goto put; } @@ -772,13 +799,13 @@ int netpoll_setup(struct netpoll *np) } if (err) { np_err(np, "no IPv6 address for %s, aborting\n", - np->dev_name); + egress_dev(np, buf)); goto put; } else np_info(np, "local IPv6 %pI6c\n", &np->local_ip.in6); #else np_err(np, "IPv6 is not supported %s, aborting\n", - np->dev_name); + egress_dev(np, buf)); err = -EINVAL; goto put; #endif