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

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