> On 21. Aug 2025, at 09:40, Bjoern A. Zeeb <b...@freebsd.org> wrote: > > On Thu, 21 Aug 2025, A FreeBSD User wrote: > >> Am Tage des Herren Wed, 20 Aug 2025 22:48:38 GMT >> "Simon J. Gerraty" <s...@freebsd.org> schrieb: >> >>> The branch main has been updated by sjg: >>> >>> URL: >>> https://cgit.FreeBSD.org/src/commit/?id=b44cc1b479fefc8570611309c3f5a6966fb26e3b >>> >>> commit b44cc1b479fefc8570611309c3f5a6966fb26e3b >>> Author: Simon J. Gerraty <s...@freebsd.org> >>> AuthorDate: 2025-08-20 22:45:54 +0000 >>> Commit: Simon J. Gerraty <s...@freebsd.org> >>> CommitDate: 2025-08-20 22:45:54 +0000 >>> >>> loader: do not try to open directories with TFTP >>> >>> Attempting to mount or even open / with some tftp servers >>> causes a several minute delay in boot. >>> >>> Since opening a directory via TFTP does not make sense, we >>> avoid it. We don't know if using TFTP until after net_open() >>> has been called. >>> >>> Add an is_tftp() accessor to avoid everyone having to include >>> all the net* headers. >>> >>> Sponsored by: Juniper Networks, Inc. >>> Differential Revision: https://reviews.freebsd.org/D51447 >>> --- >>> stand/common/dev_net.c | 9 ++++++++- >>> stand/libsa/mount.c | 5 ++++- >>> stand/libsa/open.c | 8 ++++++++ >>> stand/libsa/stand.h | 3 +++ >>> 4 files changed, 23 insertions(+), 2 deletions(-) >> >> Build of world/kernel fails with the error below: >> >> [...] >> >> --- all_subdir_stand/i386 --- >> --- all_subdir_stand/i386/gptzfsboot --- >> ld: error: undefined symbol: is_tftp >>>>> referenced by open.c >>>>> open.o:(open) in archive >>>>> /usr/obj/usr/src/amd64.amd64/stand/libsa32/libsa32.a >>>>> referenced by mount.c >>>>> mount.o:(mount) in archive >>>>> /usr/obj/usr/src/amd64.amd64/stand/libsa32/libsa32.a >> --- all_subdir_usr.sbin --- >> -function -Wno-enum-conversion -Wno-unused-local-typedef >> -Wno-address-of-packed-member >> -Qunused-arguments -c /usr/src/contrib/tcpdump/print-ntp.c -o >> print-ntp.pieo --- >> all_subdir_stand --- *** [gptzfsboot.out] Error code 1 > > shot in the dark (haven't checked that LOADER_NET_SUPPORT would be defined > for these files):
I do not think it is the approach you want to take there, because this means you would need to build all those variants to build different components… I would think of having weak is_tftp() implementation returning false for case the dev_net.c is not built or move dev_net.c into libsa. I’m not quite sure why dev_net.c is outside libsa anyhow;) rgds, toomas > > diff --git stand/libsa/mount.c stand/libsa/mount.c > index c866dc9c7055..4b579c17a782 100644 > --- stand/libsa/mount.c > +++ stand/libsa/mount.c > @@ -109,8 +109,10 @@ mount(const char *dev, const char *path, int flags > __unused, void *data) > continue; > DEBUG_PRINTF(1,("%s: fs=%s path=%s\n", > __func__, fs->fs_name, path)); > +#ifdef LOADER_NET_SUPPORT > if (is_tftp()) > break; > +#endif > if (fs->fo_mount(dev, path, &data) != 0) > continue; > > diff --git stand/libsa/open.c stand/libsa/open.c > index 91848aca7dbe..0e44dc7b0942 100644 > --- stand/libsa/open.c > +++ stand/libsa/open.c > @@ -138,8 +138,10 @@ open(const char *fname, int mode) > struct fs_ops *fs; > struct open_file *f; > int fd, i, error, besterror; > +#ifdef LOADER_NET_SUPPORT > bool is_dir; > size_t n; > +#endif > const char *file; > > TSENTER(); > @@ -184,14 +186,18 @@ open(const char *fname, int mode) > > /* pass file name to the different filesystem open routines */ > besterror = ENOENT; > +#ifdef LOADER_NET_SUPPORT > n = strlen(file); > is_dir = (n > 0 && file[n - 1] == '/'); > +#endif > for (i = 0; file_system[i] != NULL; i++) { > fs = file_system[i]; > +#ifdef LOADER_NET_SUPPORT > if (is_dir && is_tftp()) { > error = EOPNOTSUPP; > goto err; > } > +#endif > error = (fs->fo_open)(file, f); > if (error == 0) > goto ok; > > > -- > Bjoern A. Zeeb r15:7