Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Feb 2018 10:50:28 +0100
From:      Maurizio Vairani <maurizio1018@gmail.com>
To:        John Nielsen <lists@jnielsen.net>
Cc:        freebsd-current <freebsd-current@freebsd.org>, Daisuke Aoyama <aoyama@peach.ne.jp>
Subject:   Re: Fatal trap 12 booting FreeBSD-CURRENT via isboot kernel module.
Message-ID:  <CAN0zgYWY0QqjHNfnVmOv%2B06H8qAvjKu0N7qvSMgcUo7vi6Bt-A@mail.gmail.com>
In-Reply-To: <3E242843-7D43-4A36-A448-E4B0DACB2AB4@jnielsen.net>
References:  <CAN0zgYXfKjKo3CjjfbEX7oSrd2NXqU6kmSXy__OVPr0y3R2Log@mail.gmail.com> <3E242843-7D43-4A36-A448-E4B0DACB2AB4@jnielsen.net>

next in thread | previous in thread | raw e-mail | index | archive | help
2018-01-29 18:38 GMT+01:00 John Nielsen <lists@jnielsen.net>:

> [ resending from correct email address ]
>
> On Jan 29, 2018, at 6:05 AM, Maurizio Vairani <maurizio1018@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@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.

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,
Maurizio



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAN0zgYWY0QqjHNfnVmOv%2B06H8qAvjKu0N7qvSMgcUo7vi6Bt-A>