Module Name: src Committed By: mlelstv Date: Sun Apr 21 11:26:46 UTC 2019
Modified Files: src/sys/dev/iscsi: iscsi_globals.h iscsi_main.c iscsi_text.c Log Message: Replace build option to enable hex encoded bignum parameters with a sysctl. To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/dev/iscsi/iscsi_globals.h cvs rdiff -u -r1.28 -r1.29 src/sys/dev/iscsi/iscsi_main.c cvs rdiff -u -r1.11 -r1.12 src/sys/dev/iscsi/iscsi_text.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/iscsi/iscsi_globals.h diff -u src/sys/dev/iscsi/iscsi_globals.h:1.23 src/sys/dev/iscsi/iscsi_globals.h:1.24 --- src/sys/dev/iscsi/iscsi_globals.h:1.23 Sun Dec 3 19:07:10 2017 +++ src/sys/dev/iscsi/iscsi_globals.h Sun Apr 21 11:26:46 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsi_globals.h,v 1.23 2017/12/03 19:07:10 christos Exp $ */ +/* $NetBSD: iscsi_globals.h,v 1.24 2019/04/21 11:26:46 mlelstv Exp $ */ /*- * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc. @@ -532,6 +532,7 @@ extern login_isid_t iscsi_InitiatorISID; #ifdef ISCSI_DEBUG extern int iscsi_debug_level; /* How much debug info to display */ +extern bool iscsi_hex_bignums; /* Wether to encode parameters in hex or base64 */ #define DEBOUT(x) printf x #define DEB(lev,x) { if (iscsi_debug_level >= lev) printf x ;} Index: src/sys/dev/iscsi/iscsi_main.c diff -u src/sys/dev/iscsi/iscsi_main.c:1.28 src/sys/dev/iscsi/iscsi_main.c:1.29 --- src/sys/dev/iscsi/iscsi_main.c:1.28 Thu Apr 11 11:40:58 2019 +++ src/sys/dev/iscsi/iscsi_main.c Sun Apr 21 11:26:46 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsi_main.c,v 1.28 2019/04/11 11:40:58 kamil Exp $ */ +/* $NetBSD: iscsi_main.c,v 1.29 2019/04/21 11:26:46 mlelstv Exp $ */ /*- * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc. @@ -47,6 +47,7 @@ extern struct cfdriver iscsi_cd; #if defined(ISCSI_DEBUG) int iscsi_debug_level = ISCSI_DEBUG; #endif +bool iscsi_hex_bignums = false; bool iscsi_detaching; @@ -383,7 +384,7 @@ map_session(session_t *sess, device_t de chan->chan_channel = 0; chan->chan_flags = SCSIPI_CHAN_NOSETTLE | SCSIPI_CHAN_CANGROW; chan->chan_ntargets = 1; - chan->chan_nluns = 16; /* ToDo: ??? */ + chan->chan_nluns = 16; chan->chan_id = sess->s_id; sess->s_child_dev = config_found(dev, chan, scsiprint); @@ -618,6 +619,12 @@ SYSCTL_SETUP(sysctl_iscsi_setup, "ISCSI SYSCTL_DESCR("iscsi controls"), NULL, 0, NULL, 0, CTL_HW, CTL_CREATE, CTL_EOL); + sysctl_createv(clog, 0, &node, NULL, + CTLFLAG_PERMANENT|CTLFLAG_READWRITE, + CTLTYPE_BOOL, "hexbignums", + SYSCTL_DESCR("encode parameters in hex"), + NULL, 0, &iscsi_hex_bignums, 0, + CTL_CREATE, CTL_EOL); #ifdef ISCSI_DEBUG sysctl_createv(clog, 0, &node, NULL, Index: src/sys/dev/iscsi/iscsi_text.c diff -u src/sys/dev/iscsi/iscsi_text.c:1.11 src/sys/dev/iscsi/iscsi_text.c:1.12 --- src/sys/dev/iscsi/iscsi_text.c:1.11 Sun Dec 3 19:07:10 2017 +++ src/sys/dev/iscsi/iscsi_text.c Sun Apr 21 11:26:46 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsi_text.c,v 1.11 2017/12/03 19:07:10 christos Exp $ */ +/* $NetBSD: iscsi_text.c,v 1.12 2019/04/21 11:26:46 mlelstv Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -34,9 +34,6 @@ #include <sys/md5.h> #include <sys/cprng.h> -/* define to send T_BIGNUM in hex format instead of base64 */ -/* #define ISCSI_HEXBIGNUMS */ - #define isdigit(x) ((x) >= '0' && (x) <= '9') #define toupper(x) ((x) & ~0x20) @@ -175,6 +172,7 @@ typedef struct { text_key_t key; /* the key */ int list_num; /* number of elements in list, doubles as */ + bool hex_bignums; /* wether to encode in hex or base64 */ /* data size for large numeric values */ union { @@ -633,22 +631,21 @@ my_strcpy(uint8_t *dest, const uint8_t * STATIC unsigned put_bignumval(negotiation_parameter_t *par, uint8_t *buf) { -#ifdef ISCSI_HEXBIGNUMS int k, c; - my_strcpy(buf, "0x"); - for (k=0; k<par->list_num; ++k) { - c = par->val.sval[k] >> 4; - buf[2+2*k] = c < 10 ? '0' + c : 'a' + (c-10); - c = par->val.sval[k] & 0xf; - buf[2+2*k+1] = c < 10 ? '0' + c : 'a' + (c-10); - } - buf[2+2*k] = '\0'; + if (par->hex_bignums) { + my_strcpy(buf, "0x"); + for (k=0; k<par->list_num; ++k) { + c = par->val.sval[k] >> 4; + buf[2+2*k] = c < 10 ? '0' + c : 'a' + (c-10); + c = par->val.sval[k] & 0xf; + buf[2+2*k+1] = c < 10 ? '0' + c : 'a' + (c-10); + } + buf[2+2*k] = '\0'; - return 2+2*par->list_num; -#else + return 2+2*par->list_num; + } return base64_encode(par->val.sval, par->list_num, buf); -#endif } /* @@ -829,11 +826,10 @@ parameter_size(negotiation_parameter_t * case T_BIGNUM: /* list_num holds value size */ -#ifdef ISCSI_HEXBIGNUMS - size += 2 + 2*par->list_num; -#else - size += base64_enclen(par->list_num); -#endif + if (par->hex_bignums) + size += 2 + 2*par->list_num; + else + size += base64_enclen(par->list_num); i = par->list_num; break; @@ -1002,6 +998,7 @@ set_key_s(negotiation_state_t *state, te par->key = key; par->list_num = 1; par->val.sval = val; + par->hex_bignums = iscsi_hex_bignums; state->num_pars++; state->kflags[key] |= NS_SENT;