Skip to content

Commit c5a9371

Browse files
dwsuseigaw
authored andcommitted
tree: add getter/setters for TLS PSK
Extend the ctrl API to allow the users to set TLS key on the ctrl object directly. Signed-off-by: Daniel Wagner <[email protected]>
1 parent 42e00d8 commit c5a9371

7 files changed

Lines changed: 118 additions & 1 deletion

File tree

doc/config-schema.json.in

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,12 @@
102102
"description": "Keyring for TLS key lookup",
103103
"type": "string"
104104
},
105+
"tls_key_identity": {
106+
"description": "PSK identity for the TLS PSK (tls_key)",
107+
"type": "string"
108+
},
105109
"tls_key": {
106-
"description": "TLS key for the connection",
110+
"description": "TLS PSK in PSK interchange format",
107111
"type": "string"
108112
},
109113
"nr_io_queues": {

src/libnvme.map

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# SPDX-License-Identifier: LGPL-2.1-or-later
22
LIBNVME_1.11 {
33
global:
4+
nvme_ctrl_get_keyring;
5+
nvme_ctrl_get_tls_key;
6+
nvme_ctrl_get_tls_key_identity;
7+
nvme_ctrl_set_keyring;
8+
nvme_ctrl_set_tls_key;
9+
nvme_ctrl_set_tls_key_identity;
410
nvme_export_tls_key_versioned;
511
nvme_import_tls_key_versioned;
612
};

src/nvme/fabrics.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,15 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
864864
key = nvme_ctrl_get_dhchap_key(fc);
865865
if (key)
866866
nvme_ctrl_set_dhchap_key(c, key);
867+
key = nvme_ctrl_get_keyring(fc);
868+
if (key)
869+
nvme_ctrl_set_keyring(c, key);
870+
key = nvme_ctrl_get_tls_key_identity(fc);
871+
if (key)
872+
nvme_ctrl_set_tls_key_identity(c, key);
873+
key = nvme_ctrl_get_tls_key(fc);
874+
if (key)
875+
nvme_ctrl_set_tls_key(c, key);
867876
}
868877

869878
}

src/nvme/fabrics.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @tos: Type of service
3838
* @keyring: Keyring to store and lookup keys
3939
* @tls_key: TLS PSK for the connection
40+
* @tls_configured_key: TLS PSK for connect command for the connection
4041
* @duplicate_connect: Allow multiple connections to the same target
4142
* @disable_sqflow: Disable controller sq flow control
4243
* @hdr_digest: Generate/verify header digest (TCP)
@@ -58,6 +59,7 @@ struct nvme_fabrics_config {
5859
int tos;
5960
long keyring;
6061
long tls_key;
62+
long tls_configured_key;
6163

6264
bool duplicate_connect;
6365
bool disable_sqflow;

src/nvme/private.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ struct nvme_ctrl {
8585
char *trsvcid;
8686
char *dhchap_key;
8787
char *dhchap_ctrl_key;
88+
char *keyring;
89+
char *tls_key_identity;
90+
char *tls_key;
8891
char *cntrltype;
8992
char *cntlid;
9093
char *dctype;

src/nvme/tree.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,51 @@ void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key)
11511151
c->dhchap_ctrl_key = strdup(key);
11521152
}
11531153

1154+
const char *nvme_ctrl_get_keyring(nvme_ctrl_t c)
1155+
{
1156+
return c->keyring;
1157+
}
1158+
1159+
void nvme_ctrl_set_keyring(nvme_ctrl_t c, const char *keyring)
1160+
{
1161+
if (c->keyring) {
1162+
free(c->keyring);
1163+
c->keyring = NULL;
1164+
}
1165+
if (keyring)
1166+
c->keyring = strdup(keyring);
1167+
}
1168+
1169+
const char *nvme_ctrl_get_tls_key_identity(nvme_ctrl_t c)
1170+
{
1171+
return c->tls_key_identity;
1172+
}
1173+
1174+
void nvme_ctrl_set_tls_key_identity(nvme_ctrl_t c, const char *identity)
1175+
{
1176+
if (c->tls_key_identity) {
1177+
free(c->tls_key_identity);
1178+
c->tls_key_identity = NULL;
1179+
}
1180+
if (identity)
1181+
c->tls_key_identity = strdup(identity);
1182+
}
1183+
1184+
const char *nvme_ctrl_get_tls_key(nvme_ctrl_t c)
1185+
{
1186+
return c->tls_key;
1187+
}
1188+
1189+
void nvme_ctrl_set_tls_key(nvme_ctrl_t c, const char *key)
1190+
{
1191+
if (c->tls_key) {
1192+
free(c->tls_key);
1193+
c->tls_key = NULL;
1194+
}
1195+
if (key)
1196+
c->tls_key = strdup(key);
1197+
}
1198+
11541199
void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)
11551200
{
11561201
c->discovered = discovered;
@@ -1232,6 +1277,9 @@ void nvme_deconfigure_ctrl(nvme_ctrl_t c)
12321277
FREE_CTRL_ATTR(c->sqsize);
12331278
FREE_CTRL_ATTR(c->dhchap_key);
12341279
FREE_CTRL_ATTR(c->dhchap_ctrl_key);
1280+
FREE_CTRL_ATTR(c->keyring);
1281+
FREE_CTRL_ATTR(c->tls_key_identity);
1282+
FREE_CTRL_ATTR(c->tls_key);
12351283
FREE_CTRL_ATTR(c->address);
12361284
FREE_CTRL_ATTR(c->dctype);
12371285
FREE_CTRL_ATTR(c->cntrltype);

src/nvme/tree.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,51 @@ const char *nvme_ctrl_get_dhchap_key(nvme_ctrl_t c);
10981098
*/
10991099
void nvme_ctrl_set_dhchap_key(nvme_ctrl_t c, const char *key);
11001100

1101+
/**
1102+
* nvme_ctrl_get_keyring() - Return keyring
1103+
* @c: Controller to be used for the lookup
1104+
*
1105+
* Return: Keyring or NULL if not set
1106+
*/
1107+
const char *nvme_ctrl_get_keyring(nvme_ctrl_t c);
1108+
1109+
/**
1110+
* nvme_ctrl_set_keyring() - Set keyring
1111+
* @c: Controller for which the keyring should be set
1112+
* @keyring: Keyring name
1113+
*/
1114+
void nvme_ctrl_set_keyring(nvme_ctrl_t c, const char *keyring);
1115+
1116+
/**
1117+
* nvme_ctrl_get_tls_key_identity() - Return Derive TLS Identity
1118+
* @c: Controller to be used for the lookup
1119+
*
1120+
* Return: Derive TLS Identity or NULL if not set
1121+
*/
1122+
const char *nvme_ctrl_get_tls_key_identity(nvme_ctrl_t c);
1123+
1124+
/**
1125+
* nvme_ctrl_set_tls_key_identity() - Set Derive TLS Identity
1126+
* @c: Controller for which the key should be set
1127+
* @identity: Derive TLS identity or NULL to clear existing key
1128+
*/
1129+
void nvme_ctrl_set_tls_key_identity(nvme_ctrl_t c, const char *identity);
1130+
1131+
/**
1132+
* nvme_ctrl_get_tls_key() - Return Derive TLS PSK
1133+
* @c: Controller to be used for the lookup
1134+
*
1135+
* Return: Key in PSK interchange format or NULL if not set
1136+
*/
1137+
const char *nvme_ctrl_get_tls_key(nvme_ctrl_t c);
1138+
1139+
/**
1140+
* nvme_ctrl_set_tls_key() - Set Derive TLS PSK
1141+
* @c: Controller for which the key should be set
1142+
* @key: Key in interchange format or NULL to clear existing key
1143+
*/
1144+
void nvme_ctrl_set_tls_key(nvme_ctrl_t c, const char *key);
1145+
11011146
/**
11021147
* nvme_ctrl_get_config() - Fabrics configuration of a controller
11031148
* @c: Controller instance

0 commit comments

Comments
 (0)