You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

iscsiboot.c 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <stdint.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <byteswap.h>
  5. #include <gpxe/netdevice.h>
  6. #include <gpxe/iscsi.h>
  7. #include <gpxe/ibft.h>
  8. #include <int13.h>
  9. static struct iscsi_device test_iscsidev;
  10. int test_iscsiboot ( const char *initiator_iqn,
  11. struct sockaddr_tcpip *target,
  12. const char *target_iqn,
  13. unsigned int lun,
  14. const char *username,
  15. const char *password,
  16. struct net_device *netdev,
  17. unsigned int drivenum ) {
  18. struct int13_drive drive;
  19. int rc;
  20. memset ( &test_iscsidev, 0, sizeof ( test_iscsidev ) );
  21. memcpy ( &test_iscsidev.iscsi.target, target,
  22. sizeof ( test_iscsidev.iscsi.target ) );
  23. test_iscsidev.iscsi.initiator_iqn = initiator_iqn;
  24. test_iscsidev.iscsi.target_iqn = target_iqn;
  25. test_iscsidev.iscsi.lun = lun;
  26. test_iscsidev.iscsi.username = username;
  27. test_iscsidev.iscsi.password = password;
  28. printf ( "Initialising %s\n", target_iqn );
  29. if ( ( rc = init_iscsidev ( &test_iscsidev ) ) != 0 ) {
  30. printf ( "Could not reach %s: %s\n", target_iqn,
  31. strerror ( rc ) );
  32. return rc;
  33. }
  34. ibft_fill_data ( netdev, &test_iscsidev.iscsi );
  35. memset ( &drive, 0, sizeof ( drive ) );
  36. drive.drive = drivenum;
  37. drive.blockdev = &test_iscsidev.scsi.blockdev;
  38. register_int13_drive ( &drive );
  39. printf ( "Registered %s as BIOS drive %#02x\n",
  40. target_iqn, drive.drive );
  41. printf ( "Booting from BIOS drive %#02x\n", drive.drive );
  42. rc = int13_boot ( drive.drive );
  43. printf ( "Boot failed\n" );
  44. printf ( "Unregistering BIOS drive %#02x\n", drive.drive );
  45. unregister_int13_drive ( &drive );
  46. fini_iscsidev ( &test_iscsidev );
  47. return rc;
  48. }