diff --git a/src/include/gpxe/iscsi.h b/src/include/gpxe/iscsi.h index c1161de9..4d0da132 100644 --- a/src/include/gpxe/iscsi.h +++ b/src/include/gpxe/iscsi.h @@ -11,6 +11,9 @@ #include #include +/** Default iSCSI port */ +#define ISCSI_PORT 3260 + /** * iSCSI segment lengths * diff --git a/src/tests/iscsiboot.c b/src/tests/iscsiboot.c new file mode 100644 index 00000000..ef1c4a1a --- /dev/null +++ b/src/tests/iscsiboot.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include +#include + +static struct iscsi_device test_iscsidev; + +int test_iscsiboot ( const char *initiator_iqn, + struct in_addr target, + const char *target_iqn ) { + struct int13_drive drive; + int rc; + + memset ( &test_iscsidev, 0, sizeof ( test_iscsidev ) ); + test_iscsidev.iscsi.tcp.sin.sin_addr = target; + test_iscsidev.iscsi.tcp.sin.sin_port = htons ( ISCSI_PORT ); + test_iscsidev.iscsi.initiator = initiator_iqn; + test_iscsidev.iscsi.target = target_iqn; + + printf ( "Initialising %s\n", target_iqn ); + if ( ( rc = init_iscsidev ( &test_iscsidev ) ) != 0 ) { + printf ( "Could not reach %s\n", target_iqn ); + return rc; + } + + memset ( &drive, 0, sizeof ( drive ) ); + drive.blockdev = &test_iscsidev.scsi.blockdev; + register_int13_drive ( &drive ); + printf ( "Registered %s as BIOS drive %#02x\n", + target_iqn, drive.drive ); + printf ( "Booting from BIOS drive %#02x\n", drive.drive ); + rc = int13_boot ( drive.drive ); + printf ( "Boot failed\n" ); + + printf ( "Unregistering BIOS drive %#02x\n", drive.drive ); + unregister_int13_drive ( &drive ); + + return rc; +}