* [PATCH 10/10][RFC] linux-iscsi driver
@ 2005-01-10 23:04 Mike Christie
0 siblings, 0 replies; only message in thread
From: Mike Christie @ 2005-01-10 23:04 UTC (permalink / raw)
To: linux-scsi
[-- Attachment #1: Type: text/plain, Size: 146 bytes --]
functions to copy iscsi portal info and
a misc iscsi-protocol.h file which holds
defintitions using iscsi.h or will some
day be moved to iscsi.h.
[-- Attachment #2: 10-portal-helpers.patch --]
[-- Type: text/x-patch, Size: 6361 bytes --]
diff -Naurp scsi-misc-2.6.orig/drivers/scsi/iscsi-sfnet/iscsi-portal.c scsi-misc-2.6.patch/drivers/scsi/iscsi-sfnet/iscsi-portal.c
--- scsi-misc-2.6.orig/drivers/scsi/iscsi-sfnet/iscsi-portal.c 1969-12-31 16:00:00.000000000 -0800
+++ scsi-misc-2.6.patch/drivers/scsi/iscsi-sfnet/iscsi-portal.c 2005-01-10 12:35:57.790300833 -0800
@@ -0,0 +1,104 @@
+/*
+ * iSCSI driver for Linux
+ * Copyright (C) 2001 Cisco Systems, Inc.
+ * maintained by linux-iscsi-devel@lists.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * See the file COPYING included with this distribution for more details.
+ *
+ * Portal setup functions
+ */
+#include <linux/kernel.h>
+#include <linux/inet.h>
+#include <linux/in.h>
+
+#include "iscsi-session.h"
+#include "iscsi-ioctl.h"
+#include "iscsi-sfnet.h"
+
+/* caller must hold the session's portal_lock */
+void
+iscsi_set_portal_info(struct iscsi_session *session)
+{
+ /*
+ * Set the session timeouts and iSCSI op params based on the portal's
+ * settings. Don't change the address, since a termporary redirect may
+ * have already changed the address, and we want to use the redirected
+ * address rather than the portal's address.
+ */
+ session->login_timeout = session->portal.login_timeout;
+ session->active_timeout = session->portal.active_timeout;
+ session->idle_timeout = session->portal.idle_timeout;
+ session->ping_timeout = session->portal.ping_timeout;
+ session->abort_timeout = session->portal.abort_timeout;
+ session->reset_timeout = session->portal.reset_timeout;
+ session->replacement_timeout = session->portal.replacement_timeout;
+
+ session->initial_r2t = session->portal.initial_r2t;
+ session->immediate_data = session->portal.immediate_data;
+ session->max_recv_data_segment_len =
+ session->portal.max_recv_data_segment_len;
+ session->first_burst_len = session->portal.first_burst_len;
+ session->max_burst_len = session->portal.max_burst_len;
+ session->def_time2wait = session->portal.def_time2wait;
+ session->def_time2retain = session->portal.def_time2retain;
+
+ session->header_digest = session->portal.header_digest;
+ session->data_digest = session->portal.data_digest;
+
+ session->portal_group_tag = session->portal.tag;
+
+ /* TCP options */
+ session->tcp_window_size = session->portal.tcp_window_size;
+ /* FIXME: type_of_service */
+}
+
+/* caller must hold the session's portal_lock */
+void
+iscsi_set_portal(struct iscsi_session *session)
+{
+ /* address */
+ memcpy(&session->addr, &session->portal.addr, sizeof(struct sockaddr));
+ /* timeouts, operational params, other settings */
+ iscsi_set_portal_info(session);
+}
+
+/*
+ * returns 1 if a relogin is required.
+ * caller must hold the session's portal_lock
+ */
+int
+iscsi_update_portal_info(struct iscsi_portal_info *old,
+ struct iscsi_portal_info *new)
+{
+ int ret = 0;
+
+ /*
+ * ping_timeout change requires a relogin because we ask the target to
+ * use it as well with com.cisco.PingTimeout
+ */
+ if (new->ping_timeout != old->ping_timeout ||
+ new->initial_r2t != old->initial_r2t ||
+ new->immediate_data != old->immediate_data ||
+ new->max_recv_data_segment_len != old->max_recv_data_segment_len ||
+ new->first_burst_len != old->first_burst_len ||
+ new->max_burst_len != old->max_burst_len ||
+ new->def_time2wait != old->def_time2wait ||
+ new->def_time2retain != old->def_time2retain ||
+ new->header_digest != old->header_digest ||
+ new->data_digest != old->data_digest ||
+ new->tcp_window_size != old->tcp_window_size)
+ ret = 1;
+
+ memcpy(old, new, sizeof(*old));
+ return ret;
+}
diff -Naurp scsi-misc-2.6.orig/drivers/scsi/iscsi-sfnet/iscsi-portal.h scsi-misc-2.6.patch/drivers/scsi/iscsi-sfnet/iscsi-portal.h
--- scsi-misc-2.6.orig/drivers/scsi/iscsi-sfnet/iscsi-portal.h 1969-12-31 16:00:00.000000000 -0800
+++ scsi-misc-2.6.patch/drivers/scsi/iscsi-sfnet/iscsi-portal.h 2005-01-10 12:35:57.791300704 -0800
@@ -0,0 +1,62 @@
+/*
+ * iSCSI driver for Linux
+ * Copyright (C) 2001 Cisco Systems, Inc.
+ * Copyright (C) 2004 Mike Christie
+ * Copyright (C) 2004 IBM Corporation
+ * maintained by linux-iscsi-devel@lists.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * See the file COPYING included with this distribution for more details.
+ *
+ * portal info structure used in ioctls and the kernel module
+ */
+#ifndef ISCSI_PORTAL_H_
+#define ISCSI_PORTAL_H_
+
+#include <linux/socket.h>
+
+struct iscsi_session;
+
+/*
+ * iscsi_portal_info - contains the values userspace had
+ * requested. This differs from the session duplicates
+ * as those are the values we negotiated with the target
+ */
+struct iscsi_portal_info {
+ int login_timeout;
+ int active_timeout;
+ int idle_timeout;
+ int ping_timeout;
+ int abort_timeout;
+ int reset_timeout;
+ int replacement_timeout;
+ int initial_r2t;
+ int immediate_data;
+ int max_recv_data_segment_len;
+ int first_burst_len;
+ int max_burst_len;
+ int def_time2wait;
+ int def_time2retain;
+ int header_digest;
+ int data_digest;
+ int tag;
+ int tcp_window_size;
+ int type_of_service;
+ /* support ipv4 when we finish the interface */
+ struct sockaddr addr;
+};
+
+extern void iscsi_set_portal_info(struct iscsi_session *session);
+extern void iscsi_set_portal(struct iscsi_session *session);
+extern int iscsi_update_portal_info(struct iscsi_portal_info *old,
+ struct iscsi_portal_info *new);
+#endif
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-01-10 23:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-10 23:04 [PATCH 10/10][RFC] linux-iscsi driver Mike Christie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox