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.5KB

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