From patchwork Tue Dec 11 23:30:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Taht X-Patchwork-Id: 1011445 X-Patchwork-Delegate: davem@davemloft.net 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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fr+kH0+q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43Dx5K3s6sz9s1c for ; Wed, 12 Dec 2018 10:30:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726239AbeLKXao (ORCPT ); Tue, 11 Dec 2018 18:30:44 -0500 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42295 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726183AbeLKXan (ORCPT ); Tue, 11 Dec 2018 18:30:43 -0500 Received: by mail-pf1-f194.google.com with SMTP id 64so7879841pfr.9 for ; Tue, 11 Dec 2018 15:30:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=26ftHmo+qebgHt/kw+t44hS8Xba9bmEs8KqqPkcduYs=; b=fr+kH0+q3OoqwCj8LMtKeWwxhwwZrte0t03hLAVX+CtMiwQDYMcCtphCZb8iM0T+Nv CHSLKhWHVk490wje10DtUbfSRZ2kCxQuXdYfFuOl+EnmwlRMGF4nf1zK+IvCXFLMSjKy HfApdAxOh7bDMI5PETC1CD+vLLNmCZUjuuZTX8JtM9eHc+PSww+cogBiE2u4VvBeYHdX JD689AutT0/1QrzMzUO1QK4YceK7RpG4UK+JwOT/htZwP+gJZ2imnG2yLE4mjoPRrIDl /28qhTFI0FsviDOGlhPMqlQc9S2jIk832Zzx2ufQElBUa9dP4AbxZe0Qd6znAotkkAWJ H2YQ== 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; bh=26ftHmo+qebgHt/kw+t44hS8Xba9bmEs8KqqPkcduYs=; b=oX9vNG5O/alf043neMSl6UHIIVHc+09U2oPswJO28Rmyjox2rsWs8jCfA9hTizvS+1 VJNxgnejXDRu3sH/6b5EYA+9Dghd4aTkahiF4p6WRqs2V7/HETssQ7jvgdP2PVFucSN+ +rwPDe2LK5HfK8PwnFkfQDkcs8JiKdUDeqea3urwvAlswjLp0viQG67vMcZ5kx/MjINw VPYr2pUkdZKjukOyM3FaqaCqC2iBtQWJcQNfSuj3UF8dnqFfHfIB4eHmvdFe7tLmksBf jBm4Q7YT96cWsEfvIcsGqSjCTU4T1wwCp4EHGT0XCh1Q/ezlJ+60WJTH2H1GIFCZp0CF 7zuw== X-Gm-Message-State: AA+aEWZT79VWaH3cgse7ZXmGGWLfHNyZ9/5ZTADMNQAdw1HwdIU6IKLg ukbDFmv8pFTS7TqFEWn3rFGWuALC X-Google-Smtp-Source: AFSGD/U1tcXWmDbQNYX1/RbQEI0W7Y/OMYll/49S+WuuFcpdmgfYwy65iaEv94oRXolEqimwFgRyww== X-Received: by 2002:a63:df13:: with SMTP id u19mr16460055pgg.294.1544571042144; Tue, 11 Dec 2018 15:30:42 -0800 (PST) Received: from dancer.lab.teklibre.com ([2603:3024:1536:86f0:eea8:6bff:fefe:9a2]) by smtp.gmail.com with ESMTPSA id p67sm24392506pfg.44.2018.12.11.15.30.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 11 Dec 2018 15:30:41 -0800 (PST) From: Dave Taht To: netdev@vger.kernel.org Cc: Dave Taht Subject: [PATCH] Allow class-e address assignment via ifconfig ioctl Date: Tue, 11 Dec 2018 15:30:34 -0800 Message-Id: <1544571034-25925-1-git-send-email-dave.taht@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org While most distributions long ago switched to the iproute2 suite of utilities, which allow class-e (240.0.0.0/4) address assignment, distributions relying on busybox, toybox and other forms of ifconfig cannot assign class-e addresses without this kernel patch. While CIDR has been obsolete for 2 decades, and a survey of all the open source code in the world shows the IN_whatever macros are also obsolete... rather than obsolete CIDR from this ioctl entirely, this patch merely enables class-e assignment, sanely. Signed-off-by: Dave Taht --- include/uapi/linux/in.h | 10 +++++++--- net/ipv4/devinet.c | 5 +++-- net/ipv4/ipconfig.c | 2 ++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/uapi/linux/in.h b/include/uapi/linux/in.h index 48e8a225b985..eba44371231f 100644 --- a/include/uapi/linux/in.h +++ b/include/uapi/linux/in.h @@ -266,10 +266,14 @@ struct sockaddr_in { #define IN_CLASSD(a) ((((long int) (a)) & 0xf0000000) == 0xe0000000) #define IN_MULTICAST(a) IN_CLASSD(a) -#define IN_MULTICAST_NET 0xF0000000 +#define IN_MULTICAST_NET 0xe0000000 -#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000) -#define IN_BADCLASS(a) IN_EXPERIMENTAL((a)) +#define IN_BADCLASS(a) ((((long int) (a) ) == 0xffffffff) +#define IN_EXPERIMENTAL(a) IN_BADCLASS((a)) + +#define IN_CLASSE(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000) +#define IN_CLASSE_NET 0xffffffff +#define IN_CLASSE_NSHIFT 0 /* Address to accept any incoming messages. */ #define INADDR_ANY ((unsigned long int) 0x00000000) diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index a34602ae27de..608a6f4223fb 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -952,17 +952,18 @@ static int inet_abc_len(__be32 addr) { int rc = -1; /* Something else, probably a multicast. */ - if (ipv4_is_zeronet(addr)) + if (ipv4_is_zeronet(addr) || ipv4_is_lbcast(addr)) rc = 0; else { __u32 haddr = ntohl(addr); - if (IN_CLASSA(haddr)) rc = 8; else if (IN_CLASSB(haddr)) rc = 16; else if (IN_CLASSC(haddr)) rc = 24; + else if (IN_CLASSE(haddr)) + rc = 32; } return rc; diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index 88212615bf4c..2393e5c106bf 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c @@ -429,6 +429,8 @@ static int __init ic_defaults(void) ic_netmask = htonl(IN_CLASSB_NET); else if (IN_CLASSC(ntohl(ic_myaddr))) ic_netmask = htonl(IN_CLASSC_NET); + else if (IN_CLASSE(ntohl(ic_myaddr))) + ic_netmask = htonl(IN_CLASSE_NET); else { pr_err("IP-Config: Unable to guess netmask for address %pI4\n", &ic_myaddr);