Browse Source

Added iSCSI boot test code

tags/v0.9.3
Michael Brown 18 years ago
parent
commit
cce2e47ff4
2 changed files with 44 additions and 0 deletions
  1. 3
    0
      src/include/gpxe/iscsi.h
  2. 41
    0
      src/tests/iscsiboot.c

+ 3
- 0
src/include/gpxe/iscsi.h View File

@@ -11,6 +11,9 @@
11 11
 #include <gpxe/tcp.h>
12 12
 #include <gpxe/scsi.h>
13 13
 
14
+/** Default iSCSI port */
15
+#define ISCSI_PORT 3260
16
+
14 17
 /**
15 18
  * iSCSI segment lengths
16 19
  *

+ 41
- 0
src/tests/iscsiboot.c View File

@@ -0,0 +1,41 @@
1
+#include <stdint.h>
2
+#include <byteswap.h>
3
+#include <vsprintf.h>
4
+#include <gpxe/netdevice.h>
5
+#include <gpxe/iscsi.h>
6
+#include <int13.h>
7
+
8
+static struct iscsi_device test_iscsidev;
9
+
10
+int test_iscsiboot ( const char *initiator_iqn,
11
+		     struct in_addr target,
12
+		     const char *target_iqn ) {
13
+	struct int13_drive drive;
14
+	int rc;
15
+
16
+	memset ( &test_iscsidev, 0, sizeof ( test_iscsidev ) );
17
+	test_iscsidev.iscsi.tcp.sin.sin_addr = target;
18
+	test_iscsidev.iscsi.tcp.sin.sin_port = htons ( ISCSI_PORT );
19
+	test_iscsidev.iscsi.initiator = initiator_iqn;
20
+	test_iscsidev.iscsi.target = target_iqn;
21
+
22
+	printf ( "Initialising %s\n", target_iqn );
23
+	if ( ( rc = init_iscsidev ( &test_iscsidev ) ) != 0 ) {
24
+		printf ( "Could not reach %s\n", target_iqn );
25
+		return rc;
26
+	}
27
+
28
+	memset ( &drive, 0, sizeof ( drive ) );
29
+	drive.blockdev = &test_iscsidev.scsi.blockdev;
30
+	register_int13_drive ( &drive );
31
+	printf ( "Registered %s as BIOS drive %#02x\n",
32
+		 target_iqn, drive.drive );
33
+	printf ( "Booting from BIOS drive %#02x\n", drive.drive );
34
+	rc = int13_boot ( drive.drive );
35
+	printf ( "Boot failed\n" );
36
+
37
+	printf ( "Unregistering BIOS drive %#02x\n", drive.drive );
38
+	unregister_int13_drive ( &drive );
39
+
40
+	return rc;
41
+}

Loading…
Cancel
Save