Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jul 2014 11:38:01 +0800
From:      Chen Wen <pokkys@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   usr.sbin/ctld/login.c do not reply TargetPortalGroupTag in Login response
Message-ID:  <CB12983AE11B45F28F414DCA3FFB4766@gmail.com>

next in thread | raw e-mail | index | archive | help
Hi =20

I am a mac user, when I try to use xtendsan iSCSI initiator to connect na=
tive iSCSI target, I found that the login response pdu do not have Target=
PortalGroupTag key-pair.

xtendsan told me TargetPortalGroupTag is missing and disconnected.

I try to do a workaround to it and it works.

Add some codes in usr.sbin/ctld/login.c:login=5Fnegotiate()

> login=5Fnegotiate(struct connection *conn, struct pdu *request)
> =7B
>         struct pdu *response;
>         struct iscsi=5Fbhs=5Flogin=5Fresponse *bhslr2;
>         struct keys *request=5Fkeys, *response=5Fkeys;
>         int i;
>         bool skipped=5Fsecurity;

        char *portal=5Fgroup=5Ftag;
        int rv;
> =20
>         if (request =3D=3D NULL) =7B
>                 log=5Fdebugx(=22beginning parameter negotiation; =22
>                     =22waiting for Login PDU=22);
>                 request =3D login=5Freceive(conn, false);
>                 skipped=5Fsecurity =3D false;
>         =7D else
>                 skipped=5Fsecurity =3D true;
> =20
>         request=5Fkeys =3D keys=5Fnew();
>         keys=5Fload(request=5Fkeys, request);
> =20
>         response =3D login=5Fnew=5Fresponse(request);
>         bhslr2 =3D (struct iscsi=5Fbhs=5Flogin=5Fresponse *)response->p=
du=5Fbhs;
>         bhslr2->bhslr=5Fflags =7C=3D BHSLR=5F=46LAGS=5FTRANSIT;
>         bhslr2->bhslr=5Ftsih =3D htons(0xbadd);
>         login=5Fset=5Fcsg(response, BHSLR=5FSTAGE=5FOPERATIONAL=5FNEGOT=
IATION);
>         login=5Fset=5Fnsg(response, BHSLR=5FSTAGE=5F=46ULL=5F=46EATURE=5F=
PHASE);
>         response=5Fkeys =3D keys=5Fnew();

        if (conn->conn=5Fsession=5Ftype =3D=3D CONN=5FSESSION=5FTYPE=5FNO=
RMAL) =7B
                if (conn->conn=5Ftarget->t=5Falias =21=3D NULL)
                        keys=5Fadd(response=5Fkeys,
                            =22TargetAlias=22, conn->conn=5Ftarget->t=5Fa=
lias);
                rv =3D asprintf(&portal=5Fgroup=5Ftag, =22%d=22,
                    conn->conn=5Fportal->p=5Fportal=5Fgroup->pg=5Ftag);
                if (rv <=3D 0)
                        log=5Ferr(1, =22asprintf=22);
                keys=5Fadd(response=5Fkeys,
                    =22TargetPortalGroupTag=22, portal=5Fgroup=5Ftag);
                free(portal=5Fgroup=5Ftag);
        =7D   =20
>     for (i =3D 0; i < KEYS=5FMAX; i++) =7B
>                 if (request=5Fkeys->keys=5Fnames=5Bi=5D =3D=3D NULL)
>                         break;
> =20
>                 login=5Fnegotiate=5Fkey(request, request=5Fkeys->keys=5F=
names=5Bi=5D,
>                     request=5Fkeys->keys=5Fvalues=5Bi=5D, skipped=5Fsec=
urity,
>                     response=5Fkeys);
>         =7D




I don=E2=80=99t read whole iSCSI R=46C, is this right to add missing Targ=
etPortalGroupTag=3F
Maybe you have better solution to fix this, please help me and thanks.

-- =20
Chen Wen
Sent with Sparrow (http://www.sparrowmailapp.com/=3Fsig)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CB12983AE11B45F28F414DCA3FFB4766>