'\" t .\" Title: gpsfake .\" Author: Eric S. Raymond .\" Generator: Asciidoctor 2.0.26 .\" Date: 2025-11-04 .\" Manual: GPSD Documentation .\" Source: GPSD, Version 3.27.5 .\" Language: English .\" .TH "GPSFAKE" "1" "2025-11-04" "GPSD, Version 3.27.5" "GPSD Documentation" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" gpsfake \- آزمون شبیه‌سازی کلاینت‌های gpsd با داده‌های ثبت‌شده .SH "خلاصه دستور (SYNOPSIS)" .sp \fBgpsfake\fP [\fIگزینه‌ها\fR] \fIinfile\fR .sp \fBgpsfake\fP \-h .sp \fBgpsfake\fP \-V .SH "توضیحات (DESCRIPTION)" .sp \fBgpsfake\fP یک چارچوب آزمایشی برای \fBgpsd\fP و کلاینت‌های آن است. این ابزار یک pty (شبه‌ترمینال یا pseudo\-TTY) باز می‌کند، نمونه‌ای از \fBgpsd\fP را اجرا می‌کند که سمت اسلیو (slave) pty را دستگاه GNSS خود فرض می‌کند، و به‌طور مکرر محتویات یک یا چند فایل لاگ آزمایشی را از سمت مستر (master) به گیرنده GNSS تزریق می‌کند. اگر چند فایل لاگ وجود داشته باشد، جملات آن‌ها به ترتیبی که فایل‌ها مشخص شده‌اند در یکدیگر ادغام (interleave) می‌شوند. .sp \fBgpsfake\fP نیازی به دسترسی ریشه (root) ندارد، اما با دسترسی ریشه نیز به‌خوبی اجرا می‌شود. تا زمانی که از گزینه \fB\-P\fP استفاده کنید، می‌تواند هم‌زمان با یک نمونه عملیاتی \fBgpsd\fP بدون ایجاد مشکل اجرا شود. اجرا با sudo باعث از دست رفتن جزئی عملکردها خواهد شد. .sp فایل‌های لاگ می‌توانند شامل بسته‌ها در هر قالب پشتیبانی‌شده‌ای، به‌ویژه NMEA، SiRF، TSIP یا Zodiac باشند. خطوط ابتدایی که با # شروع می‌شوند به‌عنوان توضیح (کامنت) تلقی شده و نادیده گرفته می‌شوند، مگر در موارد خاص زیر. .sp این موارد مستقیماً توسط \fBgpsfake\fP تفسیر می‌شوند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} یک کامنت به‌صورت \fB#Serial: [0\-9] [78][NOE][12]\fP می‌تواند برای تنظیم پارامترهای سریال لاگ به‌کار رود \- نرخ باود، طول کلمه، بیت‌های توقف. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} یک کامنت به‌صورت \fB#Transport: UDP\fP می‌تواند برای شبیه‌سازی یک منبع UDP به‌جای pty عادی استفاده شود. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} یک کامنت به‌صورت \fB#Transport: TCP\fP می‌تواند برای شبیه‌سازی یک منبع TCP به‌جای pty عادی استفاده شود. .RE .sp این موارد مستقیماً توسط \fBgpsd\fP تفسیر می‌شوند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} یک کامنت به‌صورت \fB# Date: yyyy\-mm\-dd\fP (قالب تاریخ ISO8601) می‌تواند برای تنظیم تاریخ اولیه لاگ استفاده شود. .RE .sp نمونه \fBgpsd\fP در پیش‌زمینه اجرا می‌شود. نخی (thread) که داده‌های جعلی GNSS را به دیمن ارسال می‌کند، در پس‌زمینه اجرا می‌شود. .SH "گزینه‌ها (OPTIONS)" .sp \fB\-?\fP, \fB\-h\fP, \fB\-\-help\fP .RS 4 چاپ پیام راهنمای نحوه استفاده و خروج. .RE .sp \fB\-1\fP, \fB\-\-singleshot\fP .RS 4 فایل لاگ فقط یک بار تفسیر می‌شود نه به‌صورت مکرر. این گزینه برای تسهیل آزمون‌های بازگشت (regression testing) در نظر گرفته شده است. .RE .sp \fB\-b\fP, \fB\-\-baton\fP .RS 4 فعال‌سازی نشانگر پیشرفت چرخشی (twirling\-baton) در خطای استاندارد (stderr). هنگام پایان، زمان سپری‌شده را گزارش می‌دهد. .RE .sp \fB\-c COUNT\fP, \fB\-\-cycle COUNT\fP .RS 4 تنظیم تاخیر بین جملات بر حسب ثانیه. مقادیر کسری ثانیه نیز مجاز هستند. مقدار پیش‌فرض صفر است (بدون تاخیر). .RE .sp \fB\-d LVL\fP, \fB\-\-debug LVL\fP .RS 4 ارسال گزینه \fB\-D\fP به دیمن: بنابراین \fB\-D 4\fP کوتاه‌نوشت \fB\-o="\-D 4"\fP است. .RE .sp \fB\-g\fP, \fB\-G\fP, \fB\-\-gdb\fP, \fB\-\-lldb\fP .RS 4 استفاده از قابلیت مانیتور برای اجرای نمونه \fBgpsd\fP درون \fBgpsfake\fP تحت کنترل \fBgdb\fP یا \fBlldb\fP. این گزینه‌ها همچنین مهلت زمانی (timeout) عدم فعالیت دیمن را غیرفعال می‌کنند تا امکان تعیین نقاط توقف (breakpoint) فراهم شود. در صورت نیاز، مهلت زمانی را می‌توان با گزینه بعدی \fB\-W\fP یا \fB\-\-wait\fP مجدداً فعال کرد. اگر \fBxterm\fP و متغیر DISPLAY$ در دسترس باشند، این گزینه‌ها دیباگر را در یک پنجره مجزای \fBxterm\fP اجرا می‌کنند تا دیالوگ دیباگر از خروجی برنامه تفکیک شود، در غیر این صورت آن را مستقیماً اجرا می‌کنند. در مورد \fBgdb\fP، گزینه \fB\-tui\fP همراه با \fBxterm\fP استفاده می‌شود اما در حالت‌های دیگر خیر، زیرا curses و خروجی برنامه با یکدیگر به‌خوبی سازگار نیستند. اگرچه \fBlldb\fP فاقد گزینه معادل است، برخی نسخه‌ها دارای دستور \*(Aqgui\*(Aq هستند. .RE .sp \fB\-i\fP, \fB\-\-promptme\fP .RS 4 گام‌به‌گام در طول فایل‌های لاگ پیش می‌رود. شماره خط یا بسته (و در صورت متنی بودن پروتکل، جمله) را همراه با "? " چاپ می‌کند. خط فقط زمانی به \fBgpsd\fP ارسال می‌شود که کاربر کلید Enter را فشار دهد. .RE .sp \fB\-l\fP, \fB\-\-linedump\fP .RS 4 چاپ شماره خط یا بسته درست پیش از ارسال هر جمله به دیمن. اگر جمله متنی باشد (مانند NMEA)، متن نیز چاپ می‌شود. در غیر این صورت، بسته به‌صورت هگزادسیمال چاپ خواهد شد (به جز بسته‌های RTCM که اصلاً چاپ نمی‌شوند). این گزینه برای بررسی صحت تشخیص مرز بسته‌ها توسط \fBgpsfake\fP مفید است. .RE .sp \fB\-m PROG\fP, \fB\-\-monitor PROG\fP .RS 4 مشخص کردن یک برنامه پایشگر (PROG) که دیمن باید درون آن اجرا شود. این گزینه برای استفاده با \fBvalgrind\fP(1)، \fBgdb\fP(1) و برنامه‌های مشابه در نظر گرفته شده است. .RE .sp \fB\-n\fP, \fB\-\-nowait\fP .RS 4 ارسال گزینه \fB\-n\fP به دیمن تا خواندن گیرنده GNSS را بدون منتظر ماندن برای کلاینت آغاز کند (معادل \fB\-o="\-n"\fP). .RE .sp \fB\-o="OPTS"\fP, \fB\-\-option="OPTS"\fP .RS 4 مشخص کردن گزینه‌های ارسالی به دیمن. علامت مساوی (=) و نقل‌قول‌ها الزامی هستند تا گزینه‌های \fBgpsd\fP با گزینه‌های \fBgpsfake\fP اشتباه گرفته نشوند. برای شروع خواندن گیرنده GNSS توسط دیمن بدون انتظار برای کلاینت از \fB\-o="\-n"\fP استفاده کنید (معادل \fB\-n\fP) که \fB\-n\fP را به دیمن \fBgpsd\fP می‌فرستد. گزینه \fB\-o="\-D 4"\fP گزینه \fB\-D 4\fP را به دیمن می‌فرستد که معادل استفاده از \fB\-D 4\fP است. .RE .sp \fB\-p\fP, \fB\-\-pipe\fP .RS 4 تنظیم حالت ناظر (watcher mode) و انتقال اعلان‌های NMEA و GPSD تولیدشده توسط لاگ به خروجی استاندارد. این گزینه برای آزمون‌های بازگشت مفید است. .RE .sp \fB\-P PORT\fP, \fB\-\-port PORT\fP .RS 4 تنظیم پورت شنود دیمن روی PORT. .RE .sp \fB\-q\fP, \fB\-\-quiet\fP .RS 4 دستور به \fBgpsfake\fP برای متوقف کردن خروجی معمول پیشرفت و کار در حالت بی‌صدا. .RE .sp \fB\-r STR\fP, \fB\-\-clientinit STR\fP .RS 4 مشخص کردن دستور مقداردهی اولیه برای استفاده در حالت pipe. مقدار پیش‌فرض \fB?WATCH={"enable":true,"json":true}\fP است. .RE .sp \fB\-s SPEED\fP, \fB\-\-speed SPEED\fP .RS 4 تنظیم نرخ باود برای tty اسلیو. مقدار پیش‌فرض ۴۸۰۰ است. .RE .sp \fB\-S\fP, \fB\-\-slow\fP .RS 4 دستور به \fBgpsfake\fP برای ایجاد تاخیرهای واقع‌گرایانه در ورودی آزمون به‌جای تلاش برای تزریق با حداکثر سرعت ممکن به دیمن. این کار اجرای آزمون(ها) را بسیار کندتر می‌کند، اما از خطاهای تصادفی ناشی از بار سیستم و شرایط رقابتی احتمالی در لایه pty جلوگیری می‌کند. .RE .sp \fB\-t\fP, \fB\-\-tcp\fP .RS 4 اجبار چارچوب آزمون به استفاده از TCP به‌جای دستگاه‌های pty. علاوه بر آزمایش مدیریت منابع TCP، این گزینه برای آزمون درون محیط‌های ایزوله chroot که دسترسی به دستگاه‌های pty در آن‌ها مسدود است کاربرد دارد. .RE .sp \fB\-T\fP, \fB\-\-sysinfo\fP .RS 4 باعث می‌شود \fBgpsfake\fP برخی اطلاعات سیستمی را چاپ کرده و خارج شود. .RE .sp \fB\-u\fP, \fB\-\-udp\fP .RS 4 اجبار چارچوب آزمون به استفاده از UDP به‌جای دستگاه‌های pty. علاوه بر آزمایش مدیریت منابع UDP، این گزینه برای آزمون درون محیط‌های ایزوله chroot که دسترسی به دستگاه‌های pty در آن‌ها مسدود است کاربرد دارد. .RE .sp \fB\-v\fP, \fB\-\-verbose\fP .RS 4 فعال‌سازی گزارش‌های پیشرفت با جزئیات در stderr. تکرار این گزینه سطح جزئیات را افزایش می‌دهد. عمدتاً برای اشکال‌زدایی خود \fBgpsfake\fP مفید است. .RE .sp \fB\-w SEC\fP, \fB\-\-wait SEC\fP .RS 4 تنظیم مهلت زمانی (timeout) عدم فعالیت دیمن بر حسب ثانیه. مقدار پیش‌فرض ۶۰ ثانیه است و مقدار ۰ مهلت زمانی را به طور کامل غیرفعال می‌کند. توجه داشته باشید که مهلت زمانی واقعی به دلیل تاخیرهای داخلی طولانی‌تر است و معمولاً حدود ۲۰ ثانیه بیشتر طول می‌کشد. .RE .sp \fB\-x\fP, \fB\-\-predump\fP .RS 4 چاپ بسته‌ها به محض جمع‌آوری توسط \fBgpsfake\fP. این گزینه عمدتاً برای اشکال‌زدایی خود \fBgpsfake\fP مفید است. .RE .sp آخرین آرگومان(ها) باید نام فایل یا فایل‌های حاوی داده‌هایی باشد که قرار است به دستگاه تزریق شوند. \fBgpsfake\fP هر بار که داده‌ها دور می‌زنند (cycle)، یک اعلان چاپ می‌کند. .sp در حالت عادی، \fBgpsfake\fP برای هر فایل لاگ یک pty ایجاد می‌کند و سمت اسلیو دستگاه را به دیمن تحویل می‌دهد. اگر در کامنت هدر فایل لاگ رشته "UDP" وجود داشته باشد، بسته‌ها از طریق پورت UDP شماره ۵۰۰۰ به آدرس 192.168.0.1.255 ارسال می‌شوند. می‌توانید بسته‌ها را با \fBtcpdump\fP به این صورت پایش کنید: .sp .if n .RS 4 .nf .fam C tcpdump \-s0 \-n \-A \-i lo udp and port 5000 .fam .fi .if n .RE .SH "کامنت‌های جادویی (MAGIC COMMENTS)" .sp برخی کامنت‌های جادویی در هدرهای ورودی آزمون می‌توانند شرایط آزمون را تغییر دهند. این موارد عبارتند از: .sp \fBSerial\fP .RS 4 می‌تواند شامل تنظیمات پورت سریال مانند 4800 7N2 باشد \- نرخ باود و به دنبال آن ۷ یا ۸ برای طول بایت، N یا O یا E برای توازن (parity) و ۱ یا ۲ برای بیت‌های توقف. آزمون با این تنظیمات روی پورت اسلیو که دیمن مشاهده می‌کند اجرا می‌شود. .RE .sp \fBTransport\fP .RS 4 مقادیر \*(AqTCP\*(Aq و \*(AqUDP\*(Aq به ترتیب استفاده از جریان‌های TCP و UDP را اجباری می‌کنند (حالت پیش‌فرض pty است). .RE .sp \fBDelay\-Cookie\fP .RS 4 باید دو فیلد جداشده با فاصله به همراه داشته باشد: یک نویسه جداکننده و یک تاخیر عددی بر حسب ثانیه. به‌جای تقسیم شدن بر اساس مرز بسته‌ها، ورودی آزمون بر اساس جداکننده‌ها تقسیم می‌شود. تاخیر پس از هر ارسال اعمال می‌گردد. می‌تواند برای اعمال مرزهای نوشتن در میانه بسته‌ها مفید باشد. .RE .SH "آزمون‌های سفارشی (CUSTOM TESTS)" .sp \fBgpsfake\fP یک پوسته ساده حول یک ماژول پایتون، با همان نام \fBgpsfake\fP است که می‌تواند برای اسکریپت‌نویسی کامل نشست‌ها شامل یک نمونه \fBgpsd\fP، هر تعداد نشست کلاینت و هر تعداد GPS ساختگی که داده‌های لاگ جملات مشخص‌شده را به نمونه دیمن تزریق می‌کنند، استفاده شود. .sp کد منبع و مستندات تعبیه‌شده این ماژول همراه با ابزارهای توسعه \fBgpsd\fP عرضه می‌شود. می‌توانید از آن برای آزمون فشار (torture test) خود \fBgpsd\fP یا هر برنامه کلاینت سازگار با \fBgpsd\fP استفاده کنید. .sp فایل‌های لاگ برای استفاده با \fBgpsfake\fP را می‌توان با \fBgpspipe\fP، \fBgpscat\fP یا \fBcgps\fP از توزیع \fBgpsd\fP یا هر برنامه دیگری که قادر به ایجاد خروجی سازگار است، استخراج کرد. .SH "محیط (ENVIRONMENT)" .SS "WRITE_PAD" .sp به دلایل نامشخص ممکن است \fBgpsfake\fP گاهی دچار مهلت زمانی شده و با شکست مواجه شود. برای جلوگیری از این مشکل، متغیر محیطی WRITE_PAD را روی مقدار بزرگ‌تری تنظیم کنید. مقدار اولیه می‌تواند "WRITE_PAD = 0.005" باشد. ممکن است مقادیری تا 0.200 نیز مورد نیاز باشد. .SS "GPSD_HOME" .sp اگر \fBgpsfake\fP با خطای "Cannot execute gpsd: executable not found." خارج شود، متغیر محیطی GPSD_HOME را می‌توان روی مسیری که \fBgpsd\fP در آن قرار دارد تنظیم کرد (به‌جای اضافه کردن آن پوشه به متغیر محیطی PATH). .SH "کدهای بازگشتی (RETURN VALUES)" .sp \fB0\fP .RS 4 در صورت موفقیت. .RE .sp \fB1\fP .RS 4 در صورت شکست. .RE .SH "همچنین ببینید (SEE ALSO)" .sp \fBgpsd\fP(8), \fBgps\fP(1), \fBgpspipe\fP(1), \fBgpscat\fP(1), \fBcgps\fP(1), \fBtcpdump\fP(1), \fBgdb\fP(1), \fBlldb\fP(1), \fBvalgrind\fP(1) .SH "منابع (RESOURCES)" .sp \fBتارنمای پروژه:\fP \c .URL "https://gpsd.io" "" "" .SH "کپی‌رایت و تکثیر (COPYING)" .sp حق نشر این پرونده متعلق به پروژه GPSD سال 2013 است. .br شناسه مجوز SPDX: BSD\-2\-clause .SH "نویسنده (AUTHOR)" .sp اریک اس. ریموند (Eric S. Raymond)