The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=9e425a8a7ef075706c901b27091a79e2911b7595
commit 9e425a8a7ef075706c901b27091a79e2911b7595 Author: John Baldwin <j...@freebsd.org> AuthorDate: 2025-02-05 19:54:09 +0000 Commit: John Baldwin <j...@freebsd.org> CommitDate: 2025-02-05 19:55:16 +0000 ctld: Move kernel_limits into login.c where it is used Reviewed by: asomers Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D48771 --- usr.sbin/ctld/ctld.h | 8 ++----- usr.sbin/ctld/kernel.c | 56 +-------------------------------------------- usr.sbin/ctld/login.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 64 insertions(+), 62 deletions(-) diff --git a/usr.sbin/ctld/ctld.h b/usr.sbin/ctld/ctld.h index c57bd32c77a2..241785199cda 100644 --- a/usr.sbin/ctld/ctld.h +++ b/usr.sbin/ctld/ctld.h @@ -47,7 +47,6 @@ #define DEFAULT_CD_BLOCKSIZE 2048 #define MAX_LUNS 1024 -#define MAX_DATA_SEGMENT_LENGTH (128 * 1024) #define SOCKBUF_SIZE 1048576 struct auth { @@ -246,6 +245,8 @@ struct ctld_connection { struct chap *conn_chap; }; +extern int ctl_fd; + int parse_conf(struct conf *newconf, const char *path); int uclparse_conf(struct conf *conf, const char *path); @@ -352,11 +353,6 @@ int kernel_lun_add(struct lun *lun); int kernel_lun_modify(struct lun *lun); int kernel_lun_remove(struct lun *lun); void kernel_handoff(struct ctld_connection *conn); -void kernel_limits(const char *offload, int s, - int *max_recv_data_segment_length, - int *max_send_data_segment_length, - int *max_burst_length, - int *first_burst_length); int kernel_port_add(struct port *port); int kernel_port_update(struct port *port, struct port *old); int kernel_port_remove(struct port *port); diff --git a/usr.sbin/ctld/kernel.c b/usr.sbin/ctld/kernel.c index 1fa05cb159c3..7e9ef8ec42c2 100644 --- a/usr.sbin/ctld/kernel.c +++ b/usr.sbin/ctld/kernel.c @@ -77,7 +77,7 @@ extern bool proxy_mode; -static int ctl_fd = 0; +int ctl_fd = 0; void kernel_init(void) @@ -907,60 +907,6 @@ kernel_handoff(struct ctld_connection *conn) } } -void -kernel_limits(const char *offload, int s, int *max_recv_dsl, int *max_send_dsl, - int *max_burst_length, int *first_burst_length) -{ - struct ctl_iscsi req; - struct ctl_iscsi_limits_params *cilp; - - bzero(&req, sizeof(req)); - - req.type = CTL_ISCSI_LIMITS; - cilp = (struct ctl_iscsi_limits_params *)&(req.data.limits); - if (offload != NULL) { - strlcpy(cilp->offload, offload, sizeof(cilp->offload)); - } - cilp->socket = s; - - if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) { - log_err(1, "error issuing CTL_ISCSI ioctl; " - "dropping connection"); - } - - if (req.status != CTL_ISCSI_OK) { - log_errx(1, "error returned from CTL iSCSI limits request: " - "%s; dropping connection", req.error_str); - } - - if (cilp->max_recv_data_segment_length != 0) { - *max_recv_dsl = cilp->max_recv_data_segment_length; - *max_send_dsl = cilp->max_recv_data_segment_length; - } - if (cilp->max_send_data_segment_length != 0) - *max_send_dsl = cilp->max_send_data_segment_length; - if (cilp->max_burst_length != 0) - *max_burst_length = cilp->max_burst_length; - if (cilp->first_burst_length != 0) - *first_burst_length = cilp->first_burst_length; - if (*max_burst_length < *first_burst_length) - *first_burst_length = *max_burst_length; - - if (offload != NULL) { - log_debugx("Kernel limits for offload \"%s\" are " - "MaxRecvDataSegment=%d, max_send_dsl=%d, " - "MaxBurstLength=%d, FirstBurstLength=%d", - offload, *max_recv_dsl, *max_send_dsl, *max_burst_length, - *first_burst_length); - } else { - log_debugx("Kernel limits are " - "MaxRecvDataSegment=%d, max_send_dsl=%d, " - "MaxBurstLength=%d, FirstBurstLength=%d", - *max_recv_dsl, *max_send_dsl, *max_burst_length, - *first_burst_length); - } -} - int kernel_port_add(struct port *port) { diff --git a/usr.sbin/ctld/login.c b/usr.sbin/ctld/login.c index f57582f4e62f..b763104a092e 100644 --- a/usr.sbin/ctld/login.c +++ b/usr.sbin/ctld/login.c @@ -29,20 +29,80 @@ * */ -#include <sys/cdefs.h> +#include <sys/time.h> #include <assert.h> #include <stdbool.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> +#include <cam/ctl/ctl.h> +#include <cam/ctl/ctl_io.h> +#include <cam/ctl/ctl_ioctl.h> #include "ctld.h" #include "iscsi_proto.h" +#define MAX_DATA_SEGMENT_LENGTH (128 * 1024) + static void login_send_error(struct pdu *request, char class, char detail); +static void +kernel_limits(const char *offload, int s, int *max_recv_dsl, int *max_send_dsl, + int *max_burst_length, int *first_burst_length) +{ + struct ctl_iscsi req; + struct ctl_iscsi_limits_params *cilp; + + bzero(&req, sizeof(req)); + + req.type = CTL_ISCSI_LIMITS; + cilp = (struct ctl_iscsi_limits_params *)&(req.data.limits); + if (offload != NULL) { + strlcpy(cilp->offload, offload, sizeof(cilp->offload)); + } + cilp->socket = s; + + if (ioctl(ctl_fd, CTL_ISCSI, &req) == -1) { + log_err(1, "error issuing CTL_ISCSI ioctl; " + "dropping connection"); + } + + if (req.status != CTL_ISCSI_OK) { + log_errx(1, "error returned from CTL iSCSI limits request: " + "%s; dropping connection", req.error_str); + } + + if (cilp->max_recv_data_segment_length != 0) { + *max_recv_dsl = cilp->max_recv_data_segment_length; + *max_send_dsl = cilp->max_recv_data_segment_length; + } + if (cilp->max_send_data_segment_length != 0) + *max_send_dsl = cilp->max_send_data_segment_length; + if (cilp->max_burst_length != 0) + *max_burst_length = cilp->max_burst_length; + if (cilp->first_burst_length != 0) + *first_burst_length = cilp->first_burst_length; + if (*max_burst_length < *first_burst_length) + *first_burst_length = *max_burst_length; + + if (offload != NULL) { + log_debugx("Kernel limits for offload \"%s\" are " + "MaxRecvDataSegment=%d, max_send_dsl=%d, " + "MaxBurstLength=%d, FirstBurstLength=%d", + offload, *max_recv_dsl, *max_send_dsl, *max_burst_length, + *first_burst_length); + } else { + log_debugx("Kernel limits are " + "MaxRecvDataSegment=%d, max_send_dsl=%d, " + "MaxBurstLength=%d, FirstBurstLength=%d", + *max_recv_dsl, *max_send_dsl, *max_burst_length, + *first_burst_length); + } +} + static void login_set_nsg(struct pdu *response, int nsg) {