GPSFAKE(1) GPSD Documentation GPSFAKE(1)

gpsfake - آزمون شبیه‌سازی کلاینت‌های gpsd با داده‌های ثبت‌شده

gpsfake [گزینه‌ها] infile

gpsfake -h

gpsfake -V

gpsfake یک چارچوب آزمایشی برای gpsd و کلاینت‌های آن است. این ابزار یک pty (شبه‌ترمینال یا pseudo-TTY) باز می‌کند، نمونه‌ای از gpsd را اجرا می‌کند که سمت اسلیو (slave) pty را دستگاه GNSS خود فرض می‌کند، و به‌طور مکرر محتویات یک یا چند فایل لاگ آزمایشی را از سمت مستر (master) به گیرنده GNSS تزریق می‌کند. اگر چند فایل لاگ وجود داشته باشد، جملات آن‌ها به ترتیبی که فایل‌ها مشخص شده‌اند در یکدیگر ادغام (interleave) می‌شوند.

gpsfake نیازی به دسترسی ریشه (root) ندارد، اما با دسترسی ریشه نیز به‌خوبی اجرا می‌شود. تا زمانی که از گزینه -P استفاده کنید، می‌تواند هم‌زمان با یک نمونه عملیاتی gpsd بدون ایجاد مشکل اجرا شود. اجرا با sudo باعث از دست رفتن جزئی عملکردها خواهد شد.

فایل‌های لاگ می‌توانند شامل بسته‌ها در هر قالب پشتیبانی‌شده‌ای، به‌ویژه NMEA، SiRF، TSIP یا Zodiac باشند. خطوط ابتدایی که با # شروع می‌شوند به‌عنوان توضیح (کامنت) تلقی شده و نادیده گرفته می‌شوند، مگر در موارد خاص زیر.

این موارد مستقیماً توسط gpsfake تفسیر می‌شوند:

•یک کامنت به‌صورت #Serial: [0-9] [78][NOE][12] می‌تواند برای تنظیم پارامترهای سریال لاگ به‌کار رود - نرخ باود، طول کلمه، بیت‌های توقف.
•یک کامنت به‌صورت #Transport: UDP می‌تواند برای شبیه‌سازی یک منبع UDP به‌جای pty عادی استفاده شود.
•یک کامنت به‌صورت #Transport: TCP می‌تواند برای شبیه‌سازی یک منبع TCP به‌جای pty عادی استفاده شود.

این موارد مستقیماً توسط gpsd تفسیر می‌شوند:

•یک کامنت به‌صورت # Date: yyyy-mm-dd (قالب تاریخ ISO8601) می‌تواند برای تنظیم تاریخ اولیه لاگ استفاده شود.

نمونه gpsd در پیش‌زمینه اجرا می‌شود. نخی (thread) که داده‌های جعلی GNSS را به دیمن ارسال می‌کند، در پس‌زمینه اجرا می‌شود.

-?, -h, --help

چاپ پیام راهنمای نحوه استفاده و خروج.

-1, --singleshot

فایل لاگ فقط یک بار تفسیر می‌شود نه به‌صورت مکرر. این گزینه برای تسهیل آزمون‌های بازگشت (regression testing) در نظر گرفته شده است.

-b, --baton

فعال‌سازی نشانگر پیشرفت چرخشی (twirling-baton) در خطای استاندارد (stderr). هنگام پایان، زمان سپری‌شده را گزارش می‌دهد.

-c COUNT, --cycle COUNT

تنظیم تاخیر بین جملات بر حسب ثانیه. مقادیر کسری ثانیه نیز مجاز هستند. مقدار پیش‌فرض صفر است (بدون تاخیر).

-d LVL, --debug LVL

ارسال گزینه -D به دیمن: بنابراین -D 4 کوتاه‌نوشت -o="-D 4"; است.

-g, -G, --gdb, --lldb

استفاده از قابلیت مانیتور برای اجرای نمونه gpsd درون gpsfake تحت کنترل gdb یا lldb. این گزینه‌ها همچنین مهلت زمانی (timeout) عدم فعالیت دیمن را غیرفعال می‌کنند تا امکان تعیین نقاط توقف (breakpoint) فراهم شود. در صورت نیاز، مهلت زمانی را می‌توان با گزینه بعدی -W یا --wait مجدداً فعال کرد. اگر xterm و متغیر DISPLAY$ در دسترس باشند، این گزینه‌ها دیباگر را در یک پنجره مجزای xterm اجرا می‌کنند تا دیالوگ دیباگر از خروجی برنامه تفکیک شود، در غیر این صورت آن را مستقیماً اجرا می‌کنند. در مورد gdb، گزینه -tui همراه با xterm استفاده می‌شود اما در حالت‌های دیگر خیر، زیرا curses و خروجی برنامه با یکدیگر به‌خوبی سازگار نیستند. اگرچه lldb فاقد گزینه معادل است، برخی نسخه‌ها دارای دستور 'gui' هستند.

-i, --promptme

گام‌به‌گام در طول فایل‌های لاگ پیش می‌رود. شماره خط یا بسته (و در صورت متنی بودن پروتکل، جمله) را همراه با "? " چاپ می‌کند. خط فقط زمانی به gpsd ارسال می‌شود که کاربر کلید Enter را فشار دهد.

-l, --linedump

چاپ شماره خط یا بسته درست پیش از ارسال هر جمله به دیمن. اگر جمله متنی باشد (مانند NMEA)، متن نیز چاپ می‌شود. در غیر این صورت، بسته به‌صورت هگزادسیمال چاپ خواهد شد (به جز بسته‌های RTCM که اصلاً چاپ نمی‌شوند). این گزینه برای بررسی صحت تشخیص مرز بسته‌ها توسط gpsfake مفید است.

-m PROG, --monitor PROG

مشخص کردن یک برنامه پایشگر (PROG) که دیمن باید درون آن اجرا شود. این گزینه برای استفاده با valgrind(1)، gdb(1) و برنامه‌های مشابه در نظر گرفته شده است.

-n, --nowait

ارسال گزینه -n به دیمن تا خواندن گیرنده GNSS را بدون منتظر ماندن برای کلاینت آغاز کند (معادل -o="-n").

-o="OPTS", --option="OPTS"

مشخص کردن گزینه‌های ارسالی به دیمن. علامت مساوی (=) و نقل‌قول‌ها الزامی هستند تا گزینه‌های gpsd با گزینه‌های gpsfake اشتباه گرفته نشوند. برای شروع خواندن گیرنده GNSS توسط دیمن بدون انتظار برای کلاینت از -o="-n" استفاده کنید (معادل -n) که -n را به دیمن gpsd می‌فرستد. گزینه -o="-D 4"; گزینه -D 4 را به دیمن می‌فرستد که معادل استفاده از -D 4 است.

-p, --pipe

تنظیم حالت ناظر (watcher mode) و انتقال اعلان‌های NMEA و GPSD تولیدشده توسط لاگ به خروجی استاندارد. این گزینه برای آزمون‌های بازگشت مفید است.

-P PORT, --port PORT

تنظیم پورت شنود دیمن روی PORT.

-q, --quiet

دستور به gpsfake برای متوقف کردن خروجی معمول پیشرفت و کار در حالت بی‌صدا.

-r STR, --clientinit STR

مشخص کردن دستور مقداردهی اولیه برای استفاده در حالت pipe. مقدار پیش‌فرض ?WATCH={"enable":true,"json":true} است.

-s SPEED, --speed SPEED

تنظیم نرخ باود برای tty اسلیو. مقدار پیش‌فرض ۴۸۰۰ است.

-S, --slow

دستور به gpsfake برای ایجاد تاخیرهای واقع‌گرایانه در ورودی آزمون به‌جای تلاش برای تزریق با حداکثر سرعت ممکن به دیمن. این کار اجرای آزمون(ها) را بسیار کندتر می‌کند، اما از خطاهای تصادفی ناشی از بار سیستم و شرایط رقابتی احتمالی در لایه pty جلوگیری می‌کند.

-t, --tcp

اجبار چارچوب آزمون به استفاده از TCP به‌جای دستگاه‌های pty. علاوه بر آزمایش مدیریت منابع TCP، این گزینه برای آزمون درون محیط‌های ایزوله chroot که دسترسی به دستگاه‌های pty در آن‌ها مسدود است کاربرد دارد.

-T, --sysinfo

باعث می‌شود gpsfake برخی اطلاعات سیستمی را چاپ کرده و خارج شود.

-u, --udp

اجبار چارچوب آزمون به استفاده از UDP به‌جای دستگاه‌های pty. علاوه بر آزمایش مدیریت منابع UDP، این گزینه برای آزمون درون محیط‌های ایزوله chroot که دسترسی به دستگاه‌های pty در آن‌ها مسدود است کاربرد دارد.

-v, --verbose

فعال‌سازی گزارش‌های پیشرفت با جزئیات در stderr. تکرار این گزینه سطح جزئیات را افزایش می‌دهد. عمدتاً برای اشکال‌زدایی خود gpsfake مفید است.

-w SEC, --wait SEC

تنظیم مهلت زمانی (timeout) عدم فعالیت دیمن بر حسب ثانیه. مقدار پیش‌فرض ۶۰ ثانیه است و مقدار ۰ مهلت زمانی را به طور کامل غیرفعال می‌کند. توجه داشته باشید که مهلت زمانی واقعی به دلیل تاخیرهای داخلی طولانی‌تر است و معمولاً حدود ۲۰ ثانیه بیشتر طول می‌کشد.

-x, --predump

چاپ بسته‌ها به محض جمع‌آوری توسط gpsfake. این گزینه عمدتاً برای اشکال‌زدایی خود gpsfake مفید است.

آخرین آرگومان(ها) باید نام فایل یا فایل‌های حاوی داده‌هایی باشد که قرار است به دستگاه تزریق شوند. gpsfake هر بار که داده‌ها دور می‌زنند (cycle)، یک اعلان چاپ می‌کند.

در حالت عادی، gpsfake برای هر فایل لاگ یک pty ایجاد می‌کند و سمت اسلیو دستگاه را به دیمن تحویل می‌دهد. اگر در کامنت هدر فایل لاگ رشته "UDP" وجود داشته باشد، بسته‌ها از طریق پورت UDP شماره ۵۰۰۰ به آدرس 192.168.0.1.255 ارسال می‌شوند. می‌توانید بسته‌ها را با tcpdump به این صورت پایش کنید:

tcpdump -s0 -n -A -i lo udp and port 5000

برخی کامنت‌های جادویی در هدرهای ورودی آزمون می‌توانند شرایط آزمون را تغییر دهند. این موارد عبارتند از:

Serial

می‌تواند شامل تنظیمات پورت سریال مانند 4800 7N2 باشد - نرخ باود و به دنبال آن ۷ یا ۸ برای طول بایت، N یا O یا E برای توازن (parity) و ۱ یا ۲ برای بیت‌های توقف. آزمون با این تنظیمات روی پورت اسلیو که دیمن مشاهده می‌کند اجرا می‌شود.

Transport

مقادیر 'TCP' و 'UDP' به ترتیب استفاده از جریان‌های TCP و UDP را اجباری می‌کنند (حالت پیش‌فرض pty است).

Delay-Cookie

باید دو فیلد جداشده با فاصله به همراه داشته باشد: یک نویسه جداکننده و یک تاخیر عددی بر حسب ثانیه. به‌جای تقسیم شدن بر اساس مرز بسته‌ها، ورودی آزمون بر اساس جداکننده‌ها تقسیم می‌شود. تاخیر پس از هر ارسال اعمال می‌گردد. می‌تواند برای اعمال مرزهای نوشتن در میانه بسته‌ها مفید باشد.

gpsfake یک پوسته ساده حول یک ماژول پایتون، با همان نام gpsfake است که می‌تواند برای اسکریپت‌نویسی کامل نشست‌ها شامل یک نمونه gpsd، هر تعداد نشست کلاینت و هر تعداد GPS ساختگی که داده‌های لاگ جملات مشخص‌شده را به نمونه دیمن تزریق می‌کنند، استفاده شود.

کد منبع و مستندات تعبیه‌شده این ماژول همراه با ابزارهای توسعه gpsd عرضه می‌شود. می‌توانید از آن برای آزمون فشار (torture test) خود gpsd یا هر برنامه کلاینت سازگار با gpsd استفاده کنید.

فایل‌های لاگ برای استفاده با gpsfake را می‌توان با gpspipe، gpscat یا cgps از توزیع gpsd یا هر برنامه دیگری که قادر به ایجاد خروجی سازگار است، استخراج کرد.

به دلایل نامشخص ممکن است gpsfake گاهی دچار مهلت زمانی شده و با شکست مواجه شود. برای جلوگیری از این مشکل، متغیر محیطی WRITE_PAD را روی مقدار بزرگ‌تری تنظیم کنید. مقدار اولیه می‌تواند "WRITE_PAD = 0.005" باشد. ممکن است مقادیری تا 0.200 نیز مورد نیاز باشد.

اگر gpsfake با خطای "Cannot execute gpsd: executable not found." خارج شود، متغیر محیطی GPSD_HOME را می‌توان روی مسیری که gpsd در آن قرار دارد تنظیم کرد (به‌جای اضافه کردن آن پوشه به متغیر محیطی PATH).

0

در صورت موفقیت.

1

در صورت شکست.

gpsd(8), gps(1), gpspipe(1), gpscat(1), cgps(1), tcpdump(1), gdb(1), lldb(1), valgrind(1)

تارنمای پروژه: https://gpsd.io

حق نشر این پرونده متعلق به پروژه GPSD سال 2013 است.
شناسه مجوز SPDX: BSD-2-clause

اریک اس. ریموند (Eric S. Raymond)

2025-11-04 GPSD, Version 3.27.5