[U-Boot] [PATCH v3 010/108] net: Move the checksum functions to lib/
Bin Meng
bmeng.cn at gmail.com
Mon Oct 28 04:45:27 UTC 2019
Hi Simon,
On Mon, Oct 21, 2019 at 11:33 AM Simon Glass <sjg at chromium.org> wrote:
>
> These functions are used by code outside the network support, so move them
> to lib/ to be more accessible.
>
> Fix up a few code-style nits while we are here.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> 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 0c89b4896fe..505527d58aa 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 9fb9d4a4b05..252290210f1 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 *)&oddbyte)[0] = *(u8 *)ptr;
> + ((u8 *)&oddbyte)[1] = 0;
> + sum += oddbyte;
> + }
> + sum = (sum >> 16) + (sum & 0xffff);
> + sum += (sum >> 16);
> + sum = ~sum & 0xffff;
> +
> + return sum;
> +}
> +
> +uint add_ip_checksums(uint offset, uint sum, uint new)
> +{
> + ulong checksum;
> +
> + sum = ~sum & 0xffff;
> + new = ~new & 0xffff;
> + 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 > 0xffff)
> + checksum -= 0xffff;
> +
> + return (~checksum) & 0xffff;
> +}
> +
> +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 2a700c8401c..fef71b940a0 100644
> --- a/net/Makefile
> +++ b/net/Makefile
> @@ -5,7 +5,6 @@
>
> #ccflags-y += -DDEBUG
>
> -obj-y += checksum.o
So I don't get it. checksum.o is built unconditionally here, why do we
move it to another file?
> 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 16ef4163567..00000000000
> --- 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 <cm at linktel.net>
> - * Copyright (c) 2008 coresystems GmbH
> - * All rights reserved.
> - */
> -
> -#include <common.h>
> -#include <net.h>
> -
> -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 *)&oddbyte)[0] = *(u8 *)ptr;
> - ((u8 *)&oddbyte)[1] = 0;
> - sum += oddbyte;
> - }
> - sum = (sum >> 16) + (sum & 0xffff);
> - sum += (sum >> 16);
> - sum = ~sum & 0xffff;
> -
> - return sum;
> -}
> -
> -unsigned add_ip_checksums(unsigned offset, unsigned sum, unsigned new)
> -{
> - unsigned long checksum;
> -
> - sum = ~sum & 0xffff;
> - new = ~new & 0xffff;
> - 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 > 0xffff)
> - checksum -= 0xffff;
> -
> - return (~checksum) & 0xffff;
> -}
> -
> -int ip_checksum_ok(const void *addr, unsigned nbytes)
> -{
> - return !(compute_ip_checksum(addr, nbytes) & 0xfffe);
> -}
> --
Regards,
Bin
More information about the U-Boot
mailing list