meta-openembedded/meta-networking/recipes-protocols/frr/frr_10.5.0.bb
Khem Raj d198cdc0d4
frr: Upgrade to 10.5.0
Relase Overview:

* BFD the ability to listen for specific VRFs only
  - Configure which VRFs the BFD daemon will listen to. By default, BFD listens to  all VRFs
    present in the system, including the default VRF. Default VRF must be specified as `default`.

* BGP SRv6/MPLS coexistence
  - Allow MPLS and SRv6 to coexist on the same L3VRF, even for a given prefix. This feature is
    important in brown fields where some operators want to migrate from MPLS to SRv6 backbone.

* BGP SRv6 locator per VRF support
  - Ability to choose SRv6 locator per VRF.

* BGP Error handling (RFC 7606) for iBGP peers
  - Before 10.5.0, once we received a malformed packet between iBGP peers, we always reset the
    session, and with this release, we handle malformed packets the same way as for eBGP
    (by withdrawing or discarding the malformed packets).

* BGP IPv6 Link-Local Capability is disabled by default
  - In 10.4.0, this capability was enabled by default for a “datacenter” profile, but it’s disabled
    for 10.5.0 and will be backported to 10.4.2 as well. The problem arises when the receiver has
    configured a route-map with `set ipv6 next-hop prefer-global` and we send only an IPv6 Link-Local
    address; therefore, it was decided to revert it to be disabled by default.

* BGP BGPID Next-Hop Characteristic
  - In some cases, the BGP speaker sending a route might encode only a link-local address and no
    global address. To provide uniqueness in this case, it is sufficient to associate the BGP
    Identifier and AS Number of the route's sender. The BGP Identifier Characteristic
    (BGPID) provides a way to convey this information if required.

* BGP EVPN flooding per VNI support
  - Add an ability to adjust BUM flooding per VNI, instead of just globally. E.g., disable flooding
    only for an arbitrary VNI.

* BGP RPKI strict mode
  - RPKI strict mode prevents BGP from establishing a session if no RPKI cache server
    is connected.

* BGP rejects AS_SET by default**
  - Until 10.5.0, it was disabled by default, and since RFC 9774 was published, we switched this on
    by default (to reject).

* BGP has lots of improvements for Graceful-Restart**

* PIM/PIMv6 route-map support to allow users to filter IGMP/MLD joins using source, group, and
  interface combinations

* Support for multiple SRv6 locators
  - This extends the SRv6 SID Manager to add support for multiple locators.

* Zebra 16-bit next hop weights support
  - The weights used in ECMP’s consistent hashing have been widened from 8 bits to 16 bits since
    the 6.12 Linux kernel.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2025-12-10 08:56:14 -08:00

135 lines
5.3 KiB
BlitzBasic

SUMMARY = "BGP/OSPF/RIP routing daemon"
DESCRIPTION = "FRRouting is a free and open source Internet routing protocol suite for Linux \
and Unix platforms. It implements BGP, OSPF, RIP, IS-IS, PIM, LDP, BFD, Babel, PBR, OpenFabric \
and VRRP, with alpha support for EIGRP and NHRP."
HOMEPAGE = "https://frrouting.org/"
SECTION = "net"
LICENSE = "GPL-2.0-only & LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://doc/licenses/LGPL-2.1;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/10.5;tag=frr-${PV} \
file://frr.pam \
"
SRCREV = "c41ba202c3f821a43091781181c73772501034ae"
UPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"
CVE_PRODUCT = "frrouting"
inherit autotools-brokensep python3native pkgconfig useradd systemd
DEPENDS:class-native = "bison-native elfutils-native"
DEPENDS:class-target = "bison-native json-c readline c-ares libyang frr-native protobuf-c-native protobuf-c"
RDEPENDS:${PN}:class-target = "iproute2 python3-core bash"
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
PACKAGECONFIG:class-native = ""
PACKAGECONFIG[fpm] = "--enable-fpm,--disable-fpm"
PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam"
PACKAGECONFIG[grpc] = "--enable-grpc,--disable-grpc,grpc-native grpc"
PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
PACKAGECONFIG[zeromq] = "--enable-zeromq,--disable-zeromq,zeromq"
PACKAGECONFIG[protobuf] = "--enable-protobuf,--disable-protobuf,protobuf-c-native protobuf-c"
PACKAGECONFIG[capabilities] = "--enable-capabilities,--disable-capabilities,libcap"
PACKAGECONFIG[cumulus] = "--enable-cumulus,--disable-cumulus"
PACKAGECONFIG[ospfclient] = "--enable-ospfapi --enable-ospfclient,--disable-ospfapi --disable-ospfclient"
EXTRA_OECONF:class-native = "--enable-clippy-only"
EXTRA_OECONF:class-target = "--sbindir=${libexecdir}/frr \
--sysconfdir=${sysconfdir}/frr \
--localstatedir=${localstatedir}/run/frr \
--enable-vtysh \
--enable-multipath=64 \
--enable-user=frr \
--enable-group=frr \
--enable-vty-group=frrvty \
--enable-configfile-mask=0640 \
--enable-logfile-mask=0640 \
--disable-doc \
--with-clippy=${RECIPE_SYSROOT_NATIVE}/usr/lib/clippy \
"
CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
# https://github.com/FRRouting/frr/issues/14469
DEBUG_PREFIX_MAP:remove = "-fcanon-prefix-map"
LDFLAGS:append:mips = " -latomic"
LDFLAGS:append:mipsel = " -latomic"
LDFLAGS:append:powerpc = " -latomic"
LDFLAGS:append:riscv32 = " -latomic"
SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE:${PN} = "frr.service"
SYSTEMD_AUTO_ENABLE = "disable"
inherit update-alternatives multilib_script multilib_header
ALTERNATIVE_PRIORITY = "100"
ALTERNATIVE:${PN} = " ietf-interfaces ietf-netconf-acm ietf-netconf-with-defaults ietf-netconf"
ALTERNATIVE_LINK_NAME[ietf-interfaces] = "${datadir}/yang/ietf-interfaces.yang"
ALTERNATIVE_LINK_NAME[ietf-netconf-acm] = "${datadir}/yang/ietf-netconf-acm.yang"
ALTERNATIVE_LINK_NAME[ietf-netconf-with-defaults] = "${datadir}/yang/ietf-netconf-with-defaults.yang"
ALTERNATIVE_LINK_NAME[ietf-netconf] = "${datadir}/yang/ietf-netconf.yang"
do_compile:prepend () {
sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' \
-e 's#${RECIPE_SYSROOT}##g' ${S}/lib/version.h
}
do_compile:class-native () {
oe_runmake clippy-only
}
do_install:class-native () {
install -d ${D}${libdir}
install -m 755 ${S}/lib/clippy ${D}${libdir}/clippy
}
do_install:append:class-target () {
install -m 0755 -d ${D}${sysconfdir}/frr
install -m 0755 -d ${D}${libexecdir}/frr
install -m 0640 ${S}/tools/etc/frr/* ${D}${sysconfdir}/frr/
chown frr:frrvty ${D}${sysconfdir}/frr
chown frr:frr ${D}${sysconfdir}/frr/*
chown frr:frrvty ${D}${sysconfdir}/frr/vtysh.conf
chmod 640 ${D}${sysconfdir}/frr/*
if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
install -d ${D}/${sysconfdir}/pam.d
install -m 644 ${UNPACKDIR}/frr.pam ${D}/${sysconfdir}/pam.d/frr
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${B}/tools/frrinit.sh ${D}${sysconfdir}/init.d/frr
install -d ${D}${sysconfdir}/default/volatiles
echo "d frr frr 0755 ${localstatedir}/run/frr none" \
> ${D}${sysconfdir}/default/volatiles/99_frr
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${B}/tools/frr*.service ${D}${systemd_system_unitdir}
install -d ${D}${sysconfdir}/tmpfiles.d
echo "d /run/frr 0755 frr frr -" \
> ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
fi
}
USERADD_PACKAGES = "${PN}"
GROUPADD_PARAM:${PN} = "--system frr ; --system frrvty"
USERADD_PARAM:${PN} = "--system --home ${localstatedir}/run/frr/ -M -g frr -G frrvty --shell /bin/false frr"
FILES:${PN} += "${datadir}/yang"
BBCLASSEXTEND = "native"