+
+sub Attach {
+ my $err = 0;
+ my $type = shift;
+ my $data;
+ my $datalen = 0;
+
+ if ($type eq "obdscsi" ) {
+ my $adapter = shift;
+ my $bus = shift;
+ my $tid = shift;
+ my $lun = shift;
+ $data = pack("iiiii", $adapter, $bus, $tid, $lun, $size);
+ $datalen = 4 * 4;
+ }
+
+ my $packed = pack("ipip", length($type), $type, $datalen, $data);
+
+ my $rc = ioctl(DEV_OBD, &OBD_IOC_ATTACH, $packed);
+
+ if (!defined $rc) {
+ print STDERR "ioctl failed: $!\n";
+ } elsif ($rc eq "0 but true") {
+ print "Finished (success)\n";
+ } else {
+ print "ioctl returned error code $rc.\n";
+ }
+}
+
+sub Format {
+ my $err = 0;
+ my $size = shift;
+ my $data = pack("i", $size);
+ my $datalen = 4;
+
+ my $packed = pack("ip", $datalen, $data);
+ my $rc = ioctl(DEV_OBD, &OBD_IOC_FORMATOBD, $packed);
+
+ if (!defined $rc) {
+ print STDERR "ioctl failed: $!\n";
+ } elsif ($rc eq "0 but true") {
+ print "Finished (success)\n";
+ } else {
+ print "ioctl returned error code $rc.\n";
+ }
+}
+
+sub Partition {
+ my $err = 0;
+ my $partno = shift;
+ my $size = shift;
+ my $data = pack("ii", $partno, $size);
+ my $datalen = 2 * 4;
+
+ my $packed = pack("ip", $datalen, $data);
+ my $rc = ioctl(DEV_OBD, &OBD_IOC_PARTITION, $packed);
+
+ if (!defined $rc) {
+ print STDERR "ioctl failed: $!\n";
+ } elsif ($rc eq "0 but true") {
+ print "Finished (success)\n";
+ } else {
+ print "ioctl returned error code $rc.\n";
+ }
+}
+