> On Feb 6, 2018, at 10:54 AM, John Nielsen <lists_at_jnielsen.net> wrote: > >> >> On Feb 4, 2018, at 2:50 AM, Maurizio Vairani <maurizio1018_at_gmail.com> wrote: >> >> 2018-01-29 18:38 GMT+01:00 John Nielsen <lists_at_jnielsen.net>: >> [ resending from correct email address ] >> >>> On Jan 29, 2018, at 6:05 AM, Maurizio Vairani <maurizio1018_at_gmail.com> wrote: >>> >>> I am running >>> # uname >>> -a >>> >>> FreeBSD 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r328383: Thu Jan 25 04:48:52 >>> UTC 2018 root_at_releng3.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC >>> amd64 >>> >>> After compiling the kernel module as discussed in this thread : >>> https://lists.freebsd.org/pipermail/freebsd-current/2018-January/068272.html >>> >>> I can boot FreeBSD via iSCSI using iPXE. But when the isboot, the iSCSI >>> boot driver version 0.2.13, starts I receive a panic: >>> https://mega.nz/#!tkVwBBKA!PUj14-Za6KCNaoo9hxuXORRLQoWkb4LMvTdUA1BorD4 >>> >>> Any idea? >> >> Bummer! >> >> Aoyama-san- >> >> Are you still maintaining isboot? Can you help debug this issue on FreeBSD 12-CURRENT? >> >> Once we get it working I will update the port with whatever is needed and send you the patches in case you'd like to cut a new release. >> >> Thank you! >> >> I have solved the issue changing the function isboot_ifup() in the source file isboot.c. > > Here is a patch with some changes to minimize the diff. Except for the printed error messages does that look functionally equivalent? > > Now the question is why is this change needed and for what values of __FreeBSD_version is it appropriate? Apparently sending a NULL socket pointer to ifioctl hasn't worked since this commit in 2011: https://svnweb.freebsd.org/base?view=revision&revision=218757 So I'm going to add this patch to the port unconditionally once it works. Unfortunately, I can't compile the port with either my patch below or your original replacement version of isboot_ifup(). :( Did you make other changes? Here's the error I'm getting: --- isboot.o --- isboot.c:425:53: error: incomplete definition of type 'struct thread' error = socreate(AF_INET, &so, SOCK_DGRAM, 0, td->td_ucred, td); ~~^ /usr/src/sys/sys/systm.h:185:8: note: forward declaration of 'struct thread' struct thread; ^ 1 error generated. > # diff -u isboot.c.patched1 isboot.c > --- isboot.c.patched1 2018-02-06 10:35:20.808692000 -0700 > +++ isboot.c 2018-02-06 10:50:05.347663000 -0700 > _at__at_ -417,28 +417,36 _at__at_ > isboot_ifup(struct ifnet *ifp) > { > struct ifreq ifr; > + struct socket *so; > struct thread *td; > int error; > > memset(&ifr, 0, sizeof(ifr)); > td = curthread; > > + error = socreate(AF_INET, &so, SOCK_DGRAM, 0, td->td_ucred, td); > + if (error) { > + printf("%s: socreate, error=%d\n", __func__, error); > + return (error); > + } > + > /* boot NIC */ > strlcpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name)); > > /* set IFF_UP */ > - error = ifioctl(NULL, SIOCGIFFLAGS, (caddr_t)&ifr, td); > + error = ifioctl(so, SIOCGIFFLAGS, (caddr_t)&ifr, td); > if (error) { > printf("ifioctl SIOCGIFFLAGS\n"); > return (error); > } > ifr.ifr_flags |= IFF_UP; > - error = ifioctl(NULL, SIOCSIFFLAGS, (caddr_t)&ifr, td); > + error = ifioctl(so, SIOCSIFFLAGS, (caddr_t)&ifr, td); > if (error) { > printf("ifioctl SIOCSIFFLAGS\n"); > return (error); > } > > + soclose(so); > return (0); > } > > >> static int >> isboot_ifup(struct ifnet *ifp) >> { >> struct socket *so; >> struct ifreq ifr; >> struct thread *td; >> int error; >> >> td = curthread; >> error = socreate(AF_INET, &so, SOCK_DGRAM, 0, td->td_ucred, td); >> if (error) { >> printf("%s: socreate, error=%d\n", __func__, error); >> return (error); >> } >> >> /* boot NIC */ >> memset(&ifr, 0, sizeof(ifr)); >> strlcpy(ifr.ifr_name, ifp->if_xname, sizeof(ifr.ifr_name)); >> >> /* set IFF_UP */ >> error = ifioctl(so, SIOCGIFFLAGS, (caddr_t)&ifr, td); >> if (error) { >> printf("%s: ifioctl SIOCGIFFLAGS, error=%d\n", __func__, error); >> return (error); >> } >> >> ifr.ifr_flags |= IFF_UP; >> error = ifioctl(so, SIOCSIFFLAGS, (caddr_t)&ifr, td); >> if (error) { >> printf("%s, ifioctl SIOCSIFFLAGS, error=%d\n", __func__, error); >> return (error); >> } >> soclose(so); >> return (0); >> } >> >> I have added a socket in the ifioctl() call as in the /usr/src/sys/nfs/bootp_subr.c source. >> Please let me know if you prefer a patch. >> -- >> Regards, >> MaurizioReceived on Tue Feb 06 2018 - 17:33:27 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:14 UTC