diff --git a/multimedia/librist/Makefile b/multimedia/librist/Makefile index d80c6dd6fb43..6766b5c6f90b 100644 --- a/multimedia/librist/Makefile +++ b/multimedia/librist/Makefile @@ -1,33 +1,32 @@ PORTNAME= librist -DISTVERSION= 0.2.11 -PORTREVISION= 2 +DISTVERSION= 0.2.14 CATEGORIES= multimedia MAINTAINER= yuri@FreeBSD.org COMMENT= Library for Reliable Internet Stream Transport (RIST) protocol WWW= https://code.videolan.org/rist/librist LICENSE= BSD2CLAUSE LICENSE_FILE= ${WRKSRC}/COPYING LIB_DEPENDS= libcjson.so:devel/libcjson \ libmbedcrypto.so:security/mbedtls3 \ libmicrohttpd.so:www/libmicrohttpd USES= localbase:ldflags meson pkgconfig USE_GITLAB= yes USE_LDCONFIG= yes GL_SITE= https://code.videolan.org GL_ACCOUNT= rist -GL_TAGNAME= c526858020ce14c1ef156c0c68a655ba8dfe8b00 +GL_TAGNAME= 91a88de284542ec0414e32e5b884ba33b3fd3b91 MESON_ARGS= -Dtest=false do-test: @cd ${WRKSRC} && \ ${SETENV} ${CONFIGURE_ENV} ${CONFIGURE_CMD} --reconfigure ${CONFIGURE_ARGS} -Dtest=true && \ cd ${BUILD_WRKSRC} && \ ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} ${ALL_TARGET} test .include diff --git a/multimedia/librist/distinfo b/multimedia/librist/distinfo index b142fbf6bdc4..343aaae3936d 100644 --- a/multimedia/librist/distinfo +++ b/multimedia/librist/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1735785318 -SHA256 (rist-librist-c526858020ce14c1ef156c0c68a655ba8dfe8b00_GL0.tar.gz) = a5aac150969db099057c564996fdacd60da00a8be93fb340ce6547067868e7de -SIZE (rist-librist-c526858020ce14c1ef156c0c68a655ba8dfe8b00_GL0.tar.gz) = 3097583 +TIMESTAMP = 1778380554 +SHA256 (rist-librist-91a88de284542ec0414e32e5b884ba33b3fd3b91_GL0.tar.gz) = 5d7f6d139961a7dd983aa8d100531f6fd6ea1306361cd44416b9fc967dee4b7b +SIZE (rist-librist-91a88de284542ec0414e32e5b884ba33b3fd3b91_GL0.tar.gz) = 2942011 diff --git a/multimedia/librist/files/patch-meson.build b/multimedia/librist/files/patch-meson.build index 7827e9a52871..8467e57c0141 100644 --- a/multimedia/librist/files/patch-meson.build +++ b/multimedia/librist/files/patch-meson.build @@ -1,23 +1,33 @@ - workaround for https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=280210 - code uses the c11 feature stdatomic.h while it uses --std=c99 +- add FreeBSD TUN support: include src/tun_freebsd.c in the platform build ---- meson.build.orig 2024-11-15 20:43:07 UTC +--- meson.build.orig 2026-04-25 03:38:38 UTC +++ meson.build @@ -5,7 +5,7 @@ project('libRIST', 'c', project('libRIST', 'c', - version: '0.2.11', + version: '0.2.14', - default_options: ['c_std=c99', 'warning_level=3', 'libdir=lib'], + default_options: ['c_std=c11', 'warning_level=3', 'libdir=lib'], meson_version: '>= 0.51.0') cc = meson.get_compiler('c') -@@ -379,7 +379,7 @@ if get_option('static_analyze') +@@ -156,6 +156,8 @@ void test(void) { + platform_files += 'src/tun_darwin.c' + test_args += '-D_DARWIN_C_SOURCE' + add_project_arguments('-D_DARWIN_C_SOURCE', language: 'c') ++ elif host_machine.system() == 'freebsd' ++ platform_files += 'src/tun_freebsd.c' + elif host_machine.system() == 'gnu' + test_args += '-D_GNU_SOURCE' + add_project_arguments('-D_GNU_SOURCE', language: 'c') +@@ -391,7 +393,7 @@ if get_option('static_analyze') if get_option('static_analyze') run_target('cppcheck', command : ['cppcheck', '--quiet', - '--std=c99', + '--std=c11', '--suppressions-list=' + join_paths(librist_src_root, 'common/configs/cppcheck-suppressions.txt'), '--project=' + join_paths(meson.build_root(), 'compile_commands.json')]) diff --git a/multimedia/librist/files/patch-src_tun__freebsd.c b/multimedia/librist/files/patch-src_tun__freebsd.c new file mode 100644 index 000000000000..4f25de329bda --- /dev/null +++ b/multimedia/librist/files/patch-src_tun__freebsd.c @@ -0,0 +1,176 @@ +-- Add FreeBSD TUN interface support (tun_freebsd.c). +-- The upstream source ships tun_linux.c and tun_darwin.c but has no +-- FreeBSD implementation, causing undefined symbol errors at link time. +-- This file implements the same rist_tun_* API using FreeBSD's /dev/tun +-- cloning device and BSD socket ioctls (SIOCAIFADDR, SIOCSIFMTU, etc.). + +--- src/tun_freebsd.c.orig 2026-05-10 02:43:09 UTC ++++ src/tun_freebsd.c +@@ -0,0 +1,167 @@ ++/* librist. Copyright © 2026 SipRadius LLC. All right reserved. ++ * Author: Sergio Ammirata, Ph.D. ++ * ++ * SPDX-License-Identifier: BSD-2-Clause ++ */ ++ ++#ifdef __FreeBSD__ ++ ++#include "librist/tun.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int rist_tun_open(const char *requested_name, char *actual_name, size_t name_len) ++{ ++ char path[64]; ++ int fd; ++ ++ if (requested_name && requested_name[0]) ++ snprintf(path, sizeof(path), "/dev/%s", requested_name); ++ else ++ snprintf(path, sizeof(path), "/dev/tun"); ++ ++ fd = open(path, O_RDWR); ++ if (fd < 0) { ++ perror("open tun"); ++ return -1; ++ } ++ ++ if (actual_name && name_len > 0) { ++ struct ifreq ifr; ++ memset(&ifr, 0, sizeof(ifr)); ++ if (ioctl(fd, TUNGIFNAME, &ifr) < 0) { ++ perror("ioctl TUNGIFNAME"); ++ close(fd); ++ return -1; ++ } ++ strncpy(actual_name, ifr.ifr_name, name_len - 1); ++ actual_name[name_len - 1] = '\0'; ++ } ++ ++ return fd; ++} ++ ++void rist_tun_close(int fd) ++{ ++ if (fd >= 0) ++ close(fd); ++} ++ ++int rist_tun_read(int fd, uint8_t *buf, size_t len) ++{ ++ return (int)read(fd, buf, len); ++} ++ ++int rist_tun_write(int fd, const uint8_t *buf, size_t len) ++{ ++ return (int)write(fd, buf, len); ++} ++ ++static int tun_ioctl_socket(void) ++{ ++ int s = socket(AF_INET, SOCK_DGRAM, 0); ++ if (s < 0) ++ perror("socket AF_INET"); ++ return s; ++} ++ ++int rist_tun_set_ip(const char *dev, const char *ip, int prefix_len) ++{ ++ int s = tun_ioctl_socket(); ++ if (s < 0) ++ return -1; ++ ++ struct ifaliasreq ifra; ++ memset(&ifra, 0, sizeof(ifra)); ++ strncpy(ifra.ifra_name, dev, IFNAMSIZ - 1); ++ ++ struct sockaddr_in *addr = (struct sockaddr_in *)&ifra.ifra_addr; ++ addr->sin_len = sizeof(*addr); ++ addr->sin_family = AF_INET; ++ if (inet_pton(AF_INET, ip, &addr->sin_addr) != 1) { ++ fprintf(stderr, "Invalid IP address: %s\n", ip); ++ close(s); ++ return -1; ++ } ++ ++ struct sockaddr_in *mask = (struct sockaddr_in *)&ifra.ifra_mask; ++ mask->sin_len = sizeof(*mask); ++ mask->sin_family = AF_INET; ++ mask->sin_addr.s_addr = prefix_len ? ++ htonl(~((1U << (32 - prefix_len)) - 1)) : 0; ++ ++ struct sockaddr_in *dst = (struct sockaddr_in *)&ifra.ifra_broadaddr; ++ dst->sin_len = sizeof(*dst); ++ dst->sin_family = AF_INET; ++ dst->sin_addr = addr->sin_addr; ++ ++ if (ioctl(s, SIOCAIFADDR, &ifra) < 0) { ++ perror("ioctl SIOCAIFADDR"); ++ close(s); ++ return -1; ++ } ++ ++ close(s); ++ return 0; ++} ++ ++int rist_tun_set_mtu(const char *dev, int mtu) ++{ ++ int s = tun_ioctl_socket(); ++ if (s < 0) ++ return -1; ++ ++ struct ifreq ifr; ++ memset(&ifr, 0, sizeof(ifr)); ++ strncpy(ifr.ifr_name, dev, IFNAMSIZ - 1); ++ ifr.ifr_mtu = mtu; ++ ++ if (ioctl(s, SIOCSIFMTU, &ifr) < 0) { ++ perror("ioctl SIOCSIFMTU"); ++ close(s); ++ return -1; ++ } ++ ++ close(s); ++ return 0; ++} ++ ++int rist_tun_bring_up(const char *dev) ++{ ++ int s = tun_ioctl_socket(); ++ if (s < 0) ++ return -1; ++ ++ struct ifreq ifr; ++ memset(&ifr, 0, sizeof(ifr)); ++ strncpy(ifr.ifr_name, dev, IFNAMSIZ - 1); ++ ++ if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) { ++ perror("ioctl SIOCGIFFLAGS"); ++ close(s); ++ return -1; ++ } ++ ++ ifr.ifr_flags |= IFF_UP | IFF_RUNNING; ++ ++ if (ioctl(s, SIOCSIFFLAGS, &ifr) < 0) { ++ perror("ioctl SIOCSIFFLAGS"); ++ close(s); ++ return -1; ++ } ++ ++ close(s); ++ return 0; ++} ++ ++#endif /* __FreeBSD__ */ diff --git a/multimedia/librist/pkg-plist b/multimedia/librist/pkg-plist index 7b10f3cfdba8..daeba6f252ae 100644 --- a/multimedia/librist/pkg-plist +++ b/multimedia/librist/pkg-plist @@ -1,23 +1,26 @@ bin/rist2rist bin/ristreceiver bin/ristsender bin/ristsrppasswd +bin/udp2udp include/librist/common.h include/librist/headers.h include/librist/librist.h include/librist/librist_config.h include/librist/librist_srp.h include/librist/logging.h include/librist/oob.h include/librist/opt.h include/librist/peer.h include/librist/receiver.h include/librist/sender.h include/librist/stats.h +include/librist/tun.h +include/librist/tunnel.h include/librist/udpsocket.h include/librist/urlparam.h include/librist/version.h lib/librist.so lib/librist.so.4 -lib/librist.so.4.4.0 +lib/librist.so.4.6.2 libdata/pkgconfig/librist.pc