[Buildroot] [PATCH v2 1/1] package/libteam: new package
Yann E. MORIN
yann.morin.1998 at free.fr
Sat Jul 17 17:04:11 UTC 2021
Joachim, All,
On 2021-07-15 10:34 +0200, Joachim Wiberg spake thusly:
> This package is the userspace daemon, client tool, and library for the
> team device implementation in the Linux kernel. Team is an alternative
> to the traditional bonding driver and provides more "runners", or modes,
> of operation for aggregates.
>
> Team devices require the following kernel config, the most common modes
> have been included to be enabled when this package is selected:
>
> CONFIG_NET_TEAM=y
This also needs NETDEVICES and NET_CORE. Arguably, those two will most
probably be selected, but still...
> CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=y
> CONFIG_NET_TEAM_MODE_LOADBALANCE=y
Is it really necessary to select those last two?
Load-balancing requires BPF, too, to load the BPF function that will do
the port selection.
But I would really just leave it up to the user to enable whatever mode
they need/want; just enforce CONFIG_NET_TEAM=y (and NETDEVICES and
NET_CORE, of course).
> Other possible, but not enabled, modes are:
>
> CONFIG_NET_TEAM_MODE_BROADCAST=y
> CONFIG_NET_TEAM_MODE_ROUNDROBIN=y
> CONFIG_NET_TEAM_MODE_RANDOM=y
Those do look like they are not really usefull in production, and are
rather for testing pruposes, indeed.
> Backported the three most relevant patches to fix musl build, revert of
> a fix prior to 1.31 that can cause high CPU load, and a fix to prevent
> failing to stop the daemon due to too short timeout for kill command.
>
> Reviewed-by: Yegor Yefremov <yegorslists at googlemail.com>
> Signed-off-by: Joachim Wiberg <troglobit at gmail.com>
> ---
[--SNIP--]
> diff --git a/package/libteam/Config.in b/package/libteam/Config.in
> new file mode 100644
> index 0000000000..e44bdeeba8
> --- /dev/null
> +++ b/package/libteam/Config.in
> @@ -0,0 +1,26 @@
> +config BR2_PACKAGE_LIBTEAM
> + bool "libteam"
> + depends on BR2_USE_MMU # fork()
> + select BR2_PACKAGE_JANSSON
> + select BR2_PACKAGE_LIBDAEMON
> + select BR2_PACKAGE_LIBNL
> + select BR2_PACKAGE_LIBNL_TOOLS
As noted by Yegor previopusly, you need to propagate the dependencies of
the packags you select;
depends on BR2_TOOLCHAIN_HAS_THREADS # libnl
depends on !BR2_STATIC_LIBS # libnl-tools
select BR2_PACKAGE_LIBNL
select BR2_PACKAGE_LIBNL_TOOLS
> + help
> + The purpose of the Team driver is to provide a mechanism to
> + team multiple NICs (ports) into one logical one (teamdev) at
> + L2 layer. The process is called "channel bonding", "Ethernet
> + bonding", "channel teaming", "link aggregation", etc.
> +
> + Team tries to provide similar functionality as the bonding
> + driver, however architecturally it is quite different. Team is
> + modular, userspace driven, very lean and efficient, and it
> + does have some distinct advantages over bonding. The way Team
> + is configured differs dramatically from the way bonding is.
> +
> + https://github.com/jpirko/libteam
> +
> +comment "libnl tools needs a toolchain w/ dynamic library"
This is not libnl, but libteam (the comment is about this package).
> + depends on BR2_STATIC_LIBS
The comment should also depend on MMU, so that it is not visible when
MMU is not enabled.
> +
> +comment "libnl needs a toolchain w/ threads"
> + depends on !BR2_TOOLCHAIN_HAS_THREADS
Ditto, this is libteam, and it should also depend on MMU.
> diff --git a/package/libteam/libteam.hash b/package/libteam/libteam.hash
> new file mode 100644
> index 0000000000..39d29425d3
> --- /dev/null
> +++ b/package/libteam/libteam.hash
> @@ -0,0 +1,3 @@
> +# Locally calculated
> +sha256 c69f7cf5a98203d66db10e67b396fe325b77a5a9491d1e07e8a07cba3ba841bb libteam-1.31.tar.gz
> +sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 COPYING
> diff --git a/package/libteam/libteam.mk b/package/libteam/libteam.mk
> new file mode 100644
> index 0000000000..2a66345192
> --- /dev/null
> +++ b/package/libteam/libteam.mk
> @@ -0,0 +1,22 @@
> +################################################################################
> +#
> +# libteam
> +#
> +################################################################################
> +
> +LIBTEAM_VERSION = 1.31
> +LIBTEAM_SITE = $(call github,jpirko,libteam,v$(LIBTEAM_VERSION))
> +LIBTEAM_AUTORECONF = YES
> +LIBTEAM_LICENSE = LGPL-2.1+
> +LIBTEAM_LICENSE_FILES = COPYING
> +LIBTEAM_INSTALL_STAGING = YES
> +LIBTEAM_DEPENDENCIES = host-pkgconf jansson libdaemon libnl
Pet-peeve of mine, about the ordering:
_VERSION = ...
_SITE = ...
_CPE_ID_xxx = ... (if any)
_LICENSE = ...
_LICENSE_FILES = ...
_DEPENDENCIES = ...
_AUTORECONF = YES
_INSTALL_STAGING = YES
This is enforced nowhere, is decribed nowhere, but it follows quite a
logical ordering and grouping:
- where to find it
- what it is (cpe) and the conditions to use it (license)
- what it needs
- how to pre-configure it
- where to instal it (staging., target...)
Regards,
Yann E. MORIN.
> +# The most common team modes, use a custom kernel config to enable more.
> +define LIBTEAM_LINUX_CONFIG_FIXUPS
> + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_TEAM)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_TEAM_MODE_ACTIVEBACKUP)
> + $(call KCONFIG_ENABLE_OPT,CONFIG_NET_TEAM_MODE_LOADBALANCE)
> +endef
> +
> +$(eval $(autotools-package))
> --
> 2.25.1
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
More information about the buildroot
mailing list