| RSCSI(1) | Schily´s USER COMMANDS | RSCSI(1) |
نام (NAME)
rscsi - سرور پروتکل انتقال عمومی SCSI از راه دور
خلاصه دستور (SYNOPSIS)
/opt/schily/sbin/rscsi
توضیحات (DESCRIPTION)
دستور rscsi یک برنامه سرور انتقال عمومی SCSI از راه دور است. rscsi برنامهای است که به صورت محلی روی ماشینی که دارای دستگاههای SCSI است اجرا میشود و توسط برنامههای راه دور مانند cdrecord(1)، cdda2wav(1)، readcd(1) و sformat(1) استفاده میشود که میخواهند از طریق یک اتصال ارتباط بینپردازشی به واسطه libscg به دستگاههای SCSI دسترسی داشته باشند. rscsi معمولاً با یک فراخوانی rexec(3) یا rcmd(3) راهاندازی میشود، اما میتواند از طریق یک پایپ داخلی به یک نشست ssh(1) که توسط کاربر راه دور ایجاد شده است نیز متصل شود.
برنامه rscsi درخواستهای scg_open، scg_close، scg_cmd و درخواستهای مشابه را که همگی مربوط به رابط libscg هستند، میپذیرد. rscsi دستورات را اجرا کرده و سپس با یک نشانگر وضعیت پاسخ میدهد.
برنامه rscsi آماده است تا به عنوان یک پوسته کاربری در فایل passwd نصب شود تا ورودها و بررسیهای امنیتی ویژه SCSI از راه دور را ایجاد کند.
تمام درخواستها با فرمت ASCII به برنامه rscsi ارسال میشوند و بنابراین مستقل از ترتیب بایت و نوع ماشین هستند.
تمام پاسخها با فرمت ASCII و در یکی از دو قالب زیر بازگردانده میشوند.
تمامی دستورات موفق (به جز دستور "S" که دستورات SCSI را ارسال میکند) پاسخی به شکل زیر دارند:
- Anumber\n
که در آن number نمایش ASCII یک عدد دهدهی است که معمولاً کد بازگشتی فراخوانی سیستم یا تابع مربوطه است.
تمامی دستورات ناموفق با قالبی به شکل زیر پاسخ داده میشوند:
- Eerror-number\nerror-message\nxerror-len\nxerror-txt
که در آن error-number یکی از شمارههای خطای ممکن شرح داده شده در intro(2) است، error-message رشته خطای مربوطه است که توسط strerror(3) دریافت شده است، xerror-len طول متن خطای اضافی xerror-txt است و میتواند ۰ باشد. در صورتی که xerror-len برابر ۰ باشد، هیچ xerror-txt ارسال نمیشود. توجه داشته باشید که یک دستور SCSI ناموفق که داده حسگری (sense data) مربوط به SCSI را بازگردانده است، به عنوان یک دستور موفق شمرده میشود و از قالب خطای پیشفرض استفاده نمیکند.
پروتکل rscsi دستورات زیر را پیادهسازی میکند:
- Vwhat\n
- نسخه ( version) چندین نمونه از نرمافزار را در سرور rscsi بازمیگرداند. پارامتر what میتواند مقادیر زیر را داشته باشد:
- 0
- مقدار SCG_VERSION را از libscg روی سرور rscsi بازمیگرداند. این مقدار، رشته نسخه لایه تطبیق انتقال SCSI سطح پایین را برمیگرداند.
- 1
- مقدار SCG_AUTHOR را از libscg روی سرور rscsi بازمیگرداند. این مقدار، نام نویسنده لایه تطبیق انتقال SCSI سطح پایین را برمیگرداند.
- 2
- مقدار SCG_SCCS_ID را از libscg روی سرور rscsi بازمیگرداند. این مقدار، رشته نسخه SCCS لایه تطبیق انتقال SCSI سطح پایین را برمیگرداند.
- 20
- مقدار SCG_KVERSION
را از libscg روی
سرور rscsi
بازمیگرداند.
این مقدار،
نسخه نمونه
کرنل
درایوری را
که زیر لایه
تطبیق
انتقال SCSI
سطح پایین
قرار دارد
بازمیگرداند.
این فراخوانی ممکن است در تمام سیستمهای عامل پشتیبانی نشود.
این دستور متناظر با تابع scg_version(3) از libscg است.
- Odevice\n
- دستگاه SCSI
مشخصشده
را با نام device
باز میکند.
برای اطلاعات بیشتر درباره مقادیر ممکن پارامتر device، توضیحات مربوط به گزینه dev= در cdrecord(1) را ببینید.
اگر دستگاهی از قبل باز باشد، پیش از اجرای بازگشایی جدید بسته میشود.
این دستور متناظر با تابع scg_open(3) از libscg است.
مقدار بازگشتی در صورت موفقیت 0 است.
- Cdevice\n
- دستگاه یا
فایل جاریِ
باز را
میبندد.
آرگومان device
نادیده
گرفته
میشود.
این دستور متناظر با تابع scg_close(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_close(3) است.
- Dsize\n
- حداکثر
اندازه DMA را
برای
دستگاه SCSI
جاریِ باز
تنظیم
میکند.
پارامتر size
اندازه
مورد نظر DMA
به بایت
است.
این دستور متناظر با تابع scg_bufsize(3) از libscg است.
مقدار بازگرداندهشده، اندازه واقعی DMA است که توانسته تنظیم شود. این مقدار ممکن است کمتر از پارامتر size باشد.
- Msize\n
- یک بافر
مناسب برای
انتقالهای
SCSI DMA تخصیص
میدهد.
این دستور متناظر با تابع scg_getbuf(3) از libscg است.
مقدار بازگرداندهشده، اندازه واقعی DMA است که توانسته تنظیم شود. این مقدار ممکن است کمتر از پارامتر size باشد.
- F\n
- بافری را که
قبلاً
تخصیص داده
شده آزاد
میکند.
این دستور متناظر با تابع scg_freebuf(3) از libscg است.
مقدار بازگشتی در صورت موفقیت 0 است.
- N\n
- حداکثر
مقدار مجاز
برای شماره
گذرگاه SCSI را
دریافت
میکند.
این دستور متناظر با تابع scg_numbus(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_numbus(3) است.
- Bbusno\nchan\n
- بررسی
میکند که
آیا گذرگاه
SCSI با شماره
گذرگاهی
برابر با busno
وجود دارد
یا خیر.
پارامتر chan
در حال حاضر
نادیده
گرفته
میشود.
این دستور متناظر با تابع scg_havebus(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_havebus(3) است.
- Tbusno\nchan\ntarget\nlun\n
- آدرس هدف SCSI
را به busno،
target، lun تنظیم
میکند.
پارامتر chan
در حال حاضر
نادیده
گرفته
میشود.
این دستور متناظر با تابع scg_settarget(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_havebus(3) است.
- I\n
- شناسه
آغازگر (initiator ID)
مربوط به SCSI
را برای
گذرگاه SCSI
جاری
دریافت
میکند.
این دستور متناظر با تابع scg_initiator_id(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_initiator_id(3) است.
- A\n
- بررسی
میکند که
آیا هدف
جاری یک
دستگاه ATAPI
هست یا
میتواند
باشد.
این دستور متناظر با تابع scg_isatapi(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_isatapi(3) است.
- Rwhat\n
- یک بازنشانی در SCSI انجام میدهد. پارامتر what میتواند مقادیر زیر را داشته باشد:
- 0
- آزمایش میکند که آیا بازنشانی SCSI پشتیبانی میشود یا خیر، مانند پارامتر SCG_RESET_NOP.
- 1
- یک بازنشانی هدف SCSI انجام میدهد، مانند پارامتر SCG_RESET_TGT.
- 2
- یک بازنشانی گذرگاه SCSI انجام میدهد، مانند پارامتر SCG_RESET_BUS.
این دستور متناظر با تابع scg_reset(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_reset(3) است.
- Scount\nflags\ncdb_len\nsense_len\ntimeout\n
- یک دستور SCSI را به هدف انتخابشده جاری ارسال میکند. این دستور پارامترهای زیر را میگیرد:
- count
- تعداد DMA برای این دستور. اگر دستور از نوعی باشد که داده را به هدف منتقل میکند، داده مربوطه مستقیماً پس از بلوک توصیفگر دستور SCSI که در بالا شرح داده شد ارسال میشود.
- flags
- فلگهایی که برای این دستور SCSI اعمال میشوند:
- 1
- به کرنل اطلاع میدهد که دستور SCSI دادهها را از هدف به میزبان منتقل خواهد کرد. این متناظر با مقدار فلگ SCG_RECV_DATA است.
- 2
- به کرنل اطلاع میدهد که دستور SCSI را با قطع/وصل مجدد فعال ارسال کند. این متناظر با مقدار فلگ SCG_DISRE_ENA است. این فلگ در تمام بسترها پشتیبانی نمیشود.
- 4
- کرنل را در صورت بروز خطاهای SCSI بیصدا میکند. این متناظر با مقدار فلگ SCG_SILENT است. این فلگ در تمام بسترها پشتیبانی نمیشود.
- 8
- به کرنل اطلاع میدهد در صورت بروز خطای انتقال SCSI قابل تلاش مجدد، دستور SCSI را دوباره امتحان کند. این متناظر با مقدار فلگ SCG_CMD_RETRY است. این فلگ در تمام بسترها پشتیبانی نمیشود.
- 16
- به کرنل اطلاع میدهد که دستور SCSI را با برابری (parity) غیرفعال ارسال کند. این متناظر با مقدار فلگ SCG_NOPARITY است. این فلگ در تمام بسترها پشتیبانی نمیشود.
- cdb_len
- طول توصیفگر دستور SCSI برای این دستور. توصیفگر دستور SCSI باید با طول صحیح، مستقیماً پس از خط جدید بعد از مقدار timeout ارسال شود.
- sense_len
- میزان داده حسگری (sense data) که در بازگشت یک دستور SCSI ناموفق که داده حسگری تولید میکند، مورد انتظار است.
- timeout
- مهلت زمانی (timeout) برای دستور SCSI به ثانیه. کسرهایی از ثانیه را میتوان با ارسال یک عدد اعشاری مشخص کرد.
پاسخ برای دستور SCSI که توانسته به هدف ارسال شود، عبارت است از:
Acount\nerror\nerrno\nscb\nsense_count\n
- count
- تعداد DMA برای هرگونه داده بازگرداندهشده از هدف. اگر این تعداد غیرصفر باشد، دادهها مستقیماً پس از بلوک پاسخ ذکرشده در بالا پس فرستاده میشوند.
- error
- طبقهبندی خطای SCSI از یکی از مقادیر زیر:
- 0
- هیچ خطایی رخ نداده است. این مقدار متناظر با مقدار SCG_NO_ERROR است.
- 1
- هنگام تلاش برای انتقال دستور SCSI به هدف، خطایی قابل تلاش مجدد رخ داده است. این مقدار متناظر با مقدار SCG_RETRYABLE است.
- 2
- هنگام تلاش برای انتقال دستور SCSI به هدف، یک خطای مهلک رخ داده است. این مقدار متناظر با مقدار SCG_FATAL است.
- 3
- مهلت زمانی در SCSI به پایان رسیده است. این مقدار متناظر با مقدار SCG_TIMEOUT است.
- errno
- هر مقدار ممکن errno یونیکس برای دستور SCSI.
- scb
- بایت وضعیت مربوط به SCSI.
- sense_count
- تعداد
حسگری
بازگرداندهشده
برای دستور
SCSI. دادههای
حسگری SCSI
مستقیماً
پس از هر
داده SCSI DMA
احتمالیِ
دریافتشده
از هدف
بازگردانده
میشوند.
این دستور متناظر با تابع scg_cmd(3) از libscg است.
مقدار بازگشتی، مقدار بازگشتی از تابع scg_cmd(3) است.
هر دستور دیگری باعث خروج rscsi میشود.
فایلها (FILES)
- /etc/default/rscsi
- مقادیر
پیشفرض
برای
گزینههای
زیر را
میتوان در
فایل /etc/default/rscsi
تنظیم کرد.
برای نمونه:
DEBUG=/tmp/rscsi.debug
USER=rscsi
ACCESS=rscsi myhost.mydomain.org 1 -1 3 0تمامی کلیدواژهها باید در ابتدای خط قرار گیرند.
- DEBUG
- اگر مایل به دریافت اطلاعات اشکالزدایی هستید، این مورد را روی نام فایلی تنظیم کنید که rscsi باید اطلاعات اشکالزدایی را در آن قرار دهد.
- USER
- نام کاربری (محلی در سرور RSCSI) که مجاز است از سرویسهای سرور rscsi استفاده کند. امکان درج بیش از یک خط USER=name وجود دارد. یک خط به شکل USER=* به تمامی کاربران دسترسی میدهد.
- ACCESS
- این
کلیدواژه
با شش
پارامتر که
با TAB از هم
جدا
شدهاند
دنبال
میشود. نام
( name) کاربری
(محلی در
میزبان
سرور RSCSI) که
مجاز به
استفاده از
سرویسهای
سرور rscsi
است، به
دنبال نام
میزبانی
که عملیات
از آن مجاز
دانسته
شده، به
دنبال
مشخصات
دستگاه SCSI
که از bus-number، channel
(در حال
حاضر
نادیده
گرفته
میشود)،
target-id و lun
تشکیل شده
است که
دستگاه SCSI را
که در صورت
تطابق این
خط ACCESS قابل
دسترسی
است، مشخص
میکند. اگر
یک یا چند
ورودی از
مشخصات bus-number،
channel، target-id یا lun
برابر -1
تنظیم شود،
با هر مقدار
ممکنی برای
بخش مربوطه
از مشخصات
دستگاه SCSI
تطابق پیدا
میکند.
امکان درج
بیش از یک
خط ACCESS=name host SCSI-device
وجود دارد.
اگر ورودی استاندارد rscsi یک سوکت از یک میزبان راه دور نباشد، rscsi مقدار ورودی میزبان را از /etc/default/rscsi با رشتههای زیر مقایسه میکند:
- PIPE
- اگر stdin یک
پایپ UNIX
باشد.
اگر میخواهید اتصالهای راه دور را که از پروتکل ssh استفاده میکنند مجاز کنید، باید از کلمه PIPE به جای نام میزبان واقعی در خط تطبیقیابنده ACCESS= استفاده کنید.
- ILLEGAL_SOCKET
- اگر getpeername() برای stdin کار نکند.
- NOT_IP
- اگر getpeername() برای stdin کار کند اما به یک سوکت اینترنتی متصل نباشد.
همچنین ببینید (SEE ALSO)
cdrecord(1), cdda2wav(1), readcd(1), sformat(1), ssh(1), intro(2), open(2), close(2), read(2), write(2), ioctl(2), getpeername(3), rcmd(3), rexec(3), strerror(3)
عیبیابی (DIAGNOSTICS)
تمامی پاسخها به اتصال شبکه ارسال میشوند. آنها از قالبی که در بالا شرح داده شد استفاده میکنند.
نکات (NOTES)
امکان ایجاد فایل اشکالزدایی با فراخوانی rscsi file به دلایل امنیتی غیرفعال شده است. اگر مایل به اشکالزدایی rscsi هستید، فایل /etc/default/rscsi را ویرایش کرده و یک ورودی DEBUG در آن درج نمایید.
اشکالات (BUGS)
هیچ موردی شناخته نشده است.
تاریخچه (HISTORY)
دستور rscsi توسط Joerg Schilling در ژوئن ۲۰۰۰ توسعه یافته است.
نویسنده (AUTHOR)
Joerg Schilling Seestr. 110 D-13353 Berlin Germany
گزارش اشکالات و پیشنهادات را به نشانیهای زیر ارسال کنید:
joerg.schilling@fokus.fraunhofer.de یا
js@cs.tu-berlin.de یا
joerg@schily.isdn.cs.tu-berlin.de
پایداری رابط (INTERFACE STABILITY)
رابطهای ارائهشده توسط rscsi برای پایداری بلندمدت طراحی شدهاند. از آنجا که rscsi به رابطهای ارائهشده توسط سیستمعامل زیربنایی وابسته است، پایداری رابطهای ارائهشده توسط rscsi به پایداری رابطهای سیستمعامل بستگی دارد. رابطهای تغییریافته در سیستمعامل ممکن است رابطهای تغییریافته را در rscsi الزام کنند.
| Release 3.0 | Joerg Schilling |