aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2011-07-25 14:48:40 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-08-27 10:36:00 -0400
commit8d07913dbe79568eafe5bb73806a08aac294d4e6 (patch)
tree125b845b1157dbe44640f83bfdfe36c187d061a9 /include/scsi
parent2bab08fc770ccd6c56859371356a4a905e8c0bd4 (diff)
[SCSI] iscsi class: add iface representation
A iscsi host can have multiple interfaces. This patch adds a new iface iscsi class for this. It exports the network settings now, and will be extended to also export iscsi initiator port settings like the isid and initiator name for drivers that can support multiple initiator ports. Based on patch from Lalit Chandivade. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/iscsi_if.h21
-rw-r--r--include/scsi/scsi_transport_iscsi.h26
2 files changed, 45 insertions, 2 deletions
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h
index e93831e87878..a563753d578b 100644
--- a/include/scsi/iscsi_if.h
+++ b/include/scsi/iscsi_if.h
@@ -296,10 +296,27 @@ enum iscsi_net_param {
296 ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG = 11, 296 ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG = 11,
297 ISCSI_NET_PARAM_IFACE_ENABLE = 12, 297 ISCSI_NET_PARAM_IFACE_ENABLE = 12,
298 ISCSI_NET_PARAM_VLAN_ID = 13, 298 ISCSI_NET_PARAM_VLAN_ID = 13,
299 ISCSI_NET_IFACE_TYPE = 14, 299 ISCSI_NET_PARAM_IFACE_TYPE = 14,
300 ISCSI_NET_IFACE_NAME = 15, 300 ISCSI_NET_PARAM_IFACE_NAME = 15,
301}; 301};
302 302
303#define ISCSI_NET_IPV4_ADDR (1ULL << ISCSI_NET_PARAM_IPV4_ADDR)
304#define ISCSI_NET_IPV4_SUBNET (1ULL << ISCSI_NET_PARAM_IPV4_SUBNET)
305#define ISCSI_NET_IPV4_GW (1ULL << ISCSI_NET_PARAM_IPV4_GW)
306#define ISCSI_NET_IPV4_BOOTPROTO (1ULL << ISCSI_NET_PARAM_IPV4_BOOTPROTO)
307#define ISCSI_NET_MAC (1ULL << ISCSI_NET_PARAM_MAC)
308#define ISCSI_NET_IPV6_LINKLOCAL (1ULL << ISCSI_NET_PARAM_IPV6_LINKLOCAL)
309#define ISCSI_NET_IPV6_ADDR (1ULL << ISCSI_NET_PARAM_IPV6_ADDR)
310#define ISCSI_NET_IPV6_ROUTER (1ULL << ISCSI_NET_PARAM_IPV6_ROUTER)
311#define ISCSI_NET_IPV6_ADDR_AUTOCFG \
312 (1ULL << ISCSI_NET_PARAM_IPV6_ADDR_AUTOCFG)
313#define ISCSI_NET_IPV6_LINKLOCAL_AUTOCFG \
314 (1ULL << ISCSI_NET_PARAM_IPV6_LINKLOCAL_AUTOCFG)
315#define ISCSI_NET_IPV6_ROUTER_AUTOCFG \
316 (1ULL << ISCSI_NET_PARAM_IPV6_ROUTER_AUTOCFG)
317#define ISCSI_NET_IFACE_ENABLE (1ULL << ISCSI_NET_PARAM_IFACE_ENABLE)
318#define ISCSI_NET_VLAN_ID (1ULL << ISCSI_NET_PARAM_VLAN_ID)
319
303/* 320/*
304 * Common error codes 321 * Common error codes
305 */ 322 */
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
index 9fcce7cd3673..e1f210a173a5 100644
--- a/include/scsi/scsi_transport_iscsi.h
+++ b/include/scsi/scsi_transport_iscsi.h
@@ -37,6 +37,7 @@ struct iscsi_cls_conn;
37struct iscsi_conn; 37struct iscsi_conn;
38struct iscsi_task; 38struct iscsi_task;
39struct sockaddr; 39struct sockaddr;
40struct iscsi_iface;
40 41
41/** 42/**
42 * struct iscsi_transport - iSCSI Transport template 43 * struct iscsi_transport - iSCSI Transport template
@@ -87,6 +88,8 @@ struct iscsi_transport {
87 /* LLD sets this to indicate what values it can export to sysfs */ 88 /* LLD sets this to indicate what values it can export to sysfs */
88 uint64_t param_mask; 89 uint64_t param_mask;
89 uint64_t host_param_mask; 90 uint64_t host_param_mask;
91 uint64_t iface_param_mask;
92
90 struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep, 93 struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep,
91 uint16_t cmds_max, uint16_t qdepth, 94 uint16_t cmds_max, uint16_t qdepth,
92 uint32_t sn); 95 uint32_t sn);
@@ -138,6 +141,9 @@ struct iscsi_transport {
138 uint32_t enable, struct sockaddr *dst_addr); 141 uint32_t enable, struct sockaddr *dst_addr);
139 int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params); 142 int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params);
140 int (*set_iface_param) (struct Scsi_Host *shost, char *data, int count); 143 int (*set_iface_param) (struct Scsi_Host *shost, char *data, int count);
144 int (*get_iface_param) (struct iscsi_iface *iface,
145 enum iscsi_param_type param_type,
146 int param, char *buf);
141}; 147};
142 148
143/* 149/*
@@ -229,6 +235,20 @@ struct iscsi_endpoint {
229 struct iscsi_cls_conn *conn; 235 struct iscsi_cls_conn *conn;
230}; 236};
231 237
238struct iscsi_iface {
239 struct device dev;
240 struct iscsi_transport *transport;
241 uint32_t iface_type; /* IPv4 or IPv6 */
242 uint32_t iface_num; /* iface number, 0 - n */
243 void *dd_data; /* LLD private data */
244};
245
246#define iscsi_dev_to_iface(_dev) \
247 container_of(_dev, struct iscsi_iface, dev)
248
249#define iscsi_iface_to_shost(_iface) \
250 dev_to_shost(_iface->dev.parent)
251
232/* 252/*
233 * session and connection functions that can be used by HW iSCSI LLDs 253 * session and connection functions that can be used by HW iSCSI LLDs
234 */ 254 */
@@ -262,5 +282,11 @@ extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size);
262extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); 282extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep);
263extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); 283extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle);
264extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd); 284extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd);
285extern struct iscsi_iface *iscsi_create_iface(struct Scsi_Host *shost,
286 struct iscsi_transport *t,
287 uint32_t iface_type,
288 uint32_t iface_num, int dd_size);
289extern void iscsi_destroy_iface(struct iscsi_iface *iface);
290extern struct iscsi_iface *iscsi_lookup_iface(int handle);
265 291
266#endif 292#endif