Re: [PATCH v5 006/101] net: Move the checksum functions to lib/
Hi Simon, On Thu, Dec 5, 2019 at 12:28 PM Simon Glass wrote: > > Hi Bin, > > On Mon, 25 Nov 2019 at 08:11, Bin Meng wrote: > > > > Hi Simon, > > > > On Mon, Nov 25, 2019 at 12:11 PM Simon Glass wrote: > > > > > > These functions are used by code outside the network support, so move them > > > to lib/ to be more accessible. > > > > > > Without this, the functions are only accessible if CONFIG_NET is defined. > > > > I still don't understand this. net/checksum.c is built unconditionally > > and is not controlled by CONFIG_NET. > > The net/ subdir is built unconditionally for U-Boot but not for SPL > and TPL. So if we want this function without networking, we must move > it. > Thanks. I guess we will need a clearer commit message :) Regards, Bin
Re: [PATCH v5 006/101] net: Move the checksum functions to lib/
Hi Bin, On Mon, 25 Nov 2019 at 08:11, Bin Meng wrote: > > Hi Simon, > > On Mon, Nov 25, 2019 at 12:11 PM Simon Glass wrote: > > > > These functions are used by code outside the network support, so move them > > to lib/ to be more accessible. > > > > Without this, the functions are only accessible if CONFIG_NET is defined. > > I still don't understand this. net/checksum.c is built unconditionally > and is not controlled by CONFIG_NET. The net/ subdir is built unconditionally for U-Boot but not for SPL and TPL. So if we want this function without networking, we must move it. > > > Many boards do not enable that option but still want to do checksums in > > this format. > > > > Fix up a few code-style nits while we are here. > > > > Signed-off-by: Simon Glass > > --- > > > > Changes in v5: None > > Changes in v4: > > - Expand commit message to better explain the need to checksum functions > > > > Changes in v3: None > > Changes in v2: None > > > > lib/Makefile| 2 +- > > lib/net_utils.c | 48 > > net/Makefile| 1 - > > net/checksum.c | 59 - > > 4 files changed, 49 insertions(+), 61 deletions(-) > > delete mode 100644 net/checksum.c > > > Regards, Simon
Re: [U-Boot] [PATCH v5 006/101] net: Move the checksum functions to lib/
> -Original Message- > From: Simon Glass > Sent: Sunday, November 24, 2019 10:09 PM > To: U-Boot Mailing List > Cc: Bin Meng ; Simon Glass ; > Joseph Hershberger > Subject: [EXTERNAL] [PATCH v5 006/101] net: Move the checksum functions > to lib/ > > These functions are used by code outside the network support, so move > them to lib/ to be more accessible. > > Without this, the functions are only accessible if CONFIG_NET is defined. > Many boards do not enable that option but still want to do checksums in this > format. > > Fix up a few code-style nits while we are here. > > Signed-off-by: Simon Glass Acked-by: Joe Hershberger ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Re: [U-Boot] [PATCH v5 006/101] net: Move the checksum functions to lib/
Hi Simon, On Mon, Nov 25, 2019 at 12:11 PM Simon Glass wrote: > > These functions are used by code outside the network support, so move them > to lib/ to be more accessible. > > Without this, the functions are only accessible if CONFIG_NET is defined. I still don't understand this. net/checksum.c is built unconditionally and is not controlled by CONFIG_NET. > Many boards do not enable that option but still want to do checksums in > this format. > > Fix up a few code-style nits while we are here. > > Signed-off-by: Simon Glass > --- > > Changes in v5: None > Changes in v4: > - Expand commit message to better explain the need to checksum functions > > Changes in v3: None > Changes in v2: None > > lib/Makefile| 2 +- > lib/net_utils.c | 48 > net/Makefile| 1 - > net/checksum.c | 59 - > 4 files changed, 49 insertions(+), 61 deletions(-) > delete mode 100644 net/checksum.c > Regards, Bin ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
[U-Boot] [PATCH v5 006/101] net: Move the checksum functions to lib/
These functions are used by code outside the network support, so move them to lib/ to be more accessible. Without this, the functions are only accessible if CONFIG_NET is defined. Many boards do not enable that option but still want to do checksums in this format. Fix up a few code-style nits while we are here. Signed-off-by: Simon Glass --- Changes in v5: None Changes in v4: - Expand commit message to better explain the need to checksum functions Changes in v3: None Changes in v2: None lib/Makefile| 2 +- lib/net_utils.c | 48 net/Makefile| 1 - net/checksum.c | 59 - 4 files changed, 49 insertions(+), 61 deletions(-) delete mode 100644 net/checksum.c diff --git a/lib/Makefile b/lib/Makefile index 0c89b4896f..505527d58a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -76,7 +76,7 @@ endif ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16.o obj-$(CONFIG_$(SPL_TPL_)HASH_SUPPORT) += crc16.o -obj-$(CONFIG_SPL_NET_SUPPORT) += net_utils.o +obj-y += net_utils.o endif obj-$(CONFIG_ADDR_MAP) += addr_map.o obj-y += qsort.o diff --git a/lib/net_utils.c b/lib/net_utils.c index 9fb9d4a4b0..252290210f 100644 --- a/lib/net_utils.c +++ b/lib/net_utils.c @@ -41,3 +41,51 @@ struct in_addr string_to_ip(const char *s) addr.s_addr = htonl(addr.s_addr); return addr; } + +uint compute_ip_checksum(const void *vptr, uint nbytes) +{ + int sum, oddbyte; + const unsigned short *ptr = vptr; + + sum = 0; + while (nbytes > 1) { + sum += *ptr++; + nbytes -= 2; + } + if (nbytes == 1) { + oddbyte = 0; + ((u8 *))[0] = *(u8 *)ptr; + ((u8 *))[1] = 0; + sum += oddbyte; + } + sum = (sum >> 16) + (sum & 0x); + sum += (sum >> 16); + sum = ~sum & 0x; + + return sum; +} + +uint add_ip_checksums(uint offset, uint sum, uint new) +{ + ulong checksum; + + sum = ~sum & 0x; + new = ~new & 0x; + if (offset & 1) { + /* +* byte-swap the sum if it came from an odd offset; since the +* computation is endian-independent this works. +*/ + new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00); + } + checksum = sum + new; + if (checksum > 0x) + checksum -= 0x; + + return (~checksum) & 0x; +} + +int ip_checksum_ok(const void *addr, uint nbytes) +{ + return !(compute_ip_checksum(addr, nbytes) & 0xfffe); +} diff --git a/net/Makefile b/net/Makefile index 2a700c8401..fef71b940a 100644 --- a/net/Makefile +++ b/net/Makefile @@ -5,7 +5,6 @@ #ccflags-y += -DDEBUG -obj-y += checksum.o obj-$(CONFIG_NET) += arp.o obj-$(CONFIG_CMD_BOOTP) += bootp.o obj-$(CONFIG_CMD_CDP) += cdp.o diff --git a/net/checksum.c b/net/checksum.c deleted file mode 100644 index 16ef416356..00 --- a/net/checksum.c +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: BSD-2-Clause -/* - * This file was originally taken from the FreeBSD project. - * - * Copyright (c) 2001 Charles Mott - * Copyright (c) 2008 coresystems GmbH - * All rights reserved. - */ - -#include -#include - -unsigned compute_ip_checksum(const void *vptr, unsigned nbytes) -{ - int sum, oddbyte; - const unsigned short *ptr = vptr; - - sum = 0; - while (nbytes > 1) { - sum += *ptr++; - nbytes -= 2; - } - if (nbytes == 1) { - oddbyte = 0; - ((u8 *))[0] = *(u8 *)ptr; - ((u8 *))[1] = 0; - sum += oddbyte; - } - sum = (sum >> 16) + (sum & 0x); - sum += (sum >> 16); - sum = ~sum & 0x; - - return sum; -} - -unsigned add_ip_checksums(unsigned offset, unsigned sum, unsigned new) -{ - unsigned long checksum; - - sum = ~sum & 0x; - new = ~new & 0x; - if (offset & 1) { - /* -* byte-swap the sum if it came from an odd offset; since the -* computation is endian independant this works. -*/ - new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00); - } - checksum = sum + new; - if (checksum > 0x) - checksum -= 0x; - - return (~checksum) & 0x; -} - -int ip_checksum_ok(const void *addr, unsigned nbytes) -{ - return !(compute_ip_checksum(addr, nbytes) & 0xfffe); -} -- 2.24.0.432.g9d3f5f5b63-goog ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot