vtep-ctl(8) Open vSwitch Manual vtep-ctl(8)

vtep-ctl - ابزاری برای پرس‌وجو و پیکربندی پایگاه‌داده VTEP

vtep-ctl [گزینه‌ها] -- [گزینه‌ها] دستور [آرگومان‌ها] [-- [گزینه‌ها] دستور [آرگومان‌ها]]...

برنامه vtep-ctl یک پایگاه‌داده VTEP را پیکربندی می‌کند. برای مستندات جامع طرحواره پایگاه‌داده به vtep(5) مراجعه کنید.

vtep-ctl به یک فرآیند ovsdb-server متصل می‌شود که یک پایگاه‌داده پیکربندی VTEP را نگهداری می‌کند. با استفاده از این اتصال، بسته به دستورات ارائه‌شده، پایگاه‌داده را پرس‌وجو کرده و احتمالاً تغییراتی را اعمال می‌کند.

vtep-ctl می‌تواند هر تعداد دستور را در یک اجرای واحد انجام دهد، که به‌صورت یک تراکنش اتمیک منفرد بر روی پایگاه‌داده پیاده‌سازی می‌شود.

خط فرمان vtep-ctl با گزینه‌های سراسری شروع می‌شود (برای جزئیات به بخش گزینه‌ها (OPTIONS) در زیر مراجعه کنید). پس از گزینه‌های سراسری، یک یا چند دستور قرار می‌گیرند. هر دستور باید با یک -- جداگانه به عنوان یک آرگومان خط فرمان شروع شود تا از دستورات بعدی جدا گردد. (-- قبل از دستور اول اختیاری است.) خود دستور با گزینه‌های مخصوص دستور (در صورت وجود) شروع می‌شود و پس از آن نام دستور و آرگومان‌ها می‌آیند. برای مثال‌های نحوه نگارش به بخش مثال‌ها (EXAMPLES) در زیر مراجعه کنید.

گزینه‌های زیر بر رفتار کلی vtep-ctl تأثیر می‌گذارند. برخی از دستورات منفرد نیز گزینه‌های خاص خود را می‌پذیرند که دقیقاً قبل از نام دستور مشخص می‌شوند. اگر اولین دستور در خط فرمان دارای گزینه باشد، آن گزینه‌ها باید با -- از گزینه‌های سراسری جدا شوند.

سرور پایگاه‌داده‌ای را تعیین می‌کند که vtep-ctl برای پرس‌وجو یا تغییر پیکربندی با آن تماس می‌گیرد. server می‌تواند یک روش اتصال فعال یا غیرفعال OVSDB باشد، همان‌طور که در ovsdb(7) توصیف شده است. مقدار پیش‌فرض unix:/run/openvswitch/db.sock است.
به‌طور پیش‌فرض، vtep-ctl آرگومان‌های خود و جزئیات هرگونه تغییری را که ایجاد می‌کند در لاگ سیستم ثبت می‌نماید. این گزینه این قابلیت ثبت وقایع را غیرفعال می‌کند.
این گزینه معادل --verbose=vtep_ctl:syslog:warn است.
قالب خروجی را تغییر می‌دهد تا خروجی هر دستور در یک خط چاپ شود. کاراکترهای خط جدید که در غیر این صورت خطوط را جدا می‌کردند به‌صورت \n چاپ می‌شوند، و هر نمونه از \ که در خروجی ظاهر شود دو برابر می‌شود. برای هر دستوری که خروجی ندارد یک خط خالی چاپ می‌کند. این گزینه بر قالب‌بندی خروجی دستورات list یا find تأثیری ندارد؛ به بخش گزینه‌های قالب‌بندی جدول در زیر مراجعه کنید.
از اعمال تغییرات واقعی در پایگاه‌داده توسط vtep-ctl جلوگیری می‌کند.

به‌طور پیش‌فرض، یا زمانی که secs برابر 0 باشد، vtep-ctl برای دریافت پاسخ از پایگاه‌داده تا ابد منتظر می‌ماند. این گزینه زمان اجرا را تقریباً به secs ثانیه محدود می‌کند. در صورت اتمام مهلت زمانی، vtep-ctl با سیگنال SIGALRM خارج می‌شود. (اتمام مهلت زمانی معمولاً فقط زمانی رخ می‌دهد که امکان تماس با پایگاه‌داده وجود نداشته باشد یا سیستم بیش از حد بارگذاری شده باشد.)

این گزینه‌ها قالب خروجی دستورات list و find را کنترل می‌کنند.


نوع قالب‌بندی جدول را تعیین می‌کند. انواع زیر برای format در دسترس هستند:
جدول‌های متنی دو بعدی با ستون‌های تراز شده.
یک فهرست با یک ستون در هر خط و سطرهایی که با یک خط خالی جدا شده‌اند.
جدول‌های HTML.
مقادیر جدا شده با کاما همان‌طور که در RFC 4180 تعریف شده است.
قالب JSON مطابق با تعریف RFC 4627. خروجی دنباله‌ای از شیء‌های JSON است که هر کدام متناظر با یک جدول است. هر شیء JSON دارای اعضای زیر با مقادیر ذکر شده است:
عنوان جدول. اگر جدول عنوانی نداشته باشد این عضو حذف می‌شود.
آرایه‌ای با یک عنصر به ازای هر ستون جدول. هر عنصر آرایه یک رشته است که سرستون متناظر را نشان می‌دهد.
آرایه‌ای با یک عنصر به ازای هر سطر جدول. هر عنصر نیز آرایه‌ای با یک عنصر به ازای هر ستون جدول است. عناصر این آرایه سطح دوم، سلول‌هایی هستند که جدول را تشکیل می‌دهند. سلول‌هایی که داده‌ها یا انواع داده‌های OVSDB را نشان می‌دهند در قالبی که در مشخصات OVSDB توضیح داده شده بیان می‌شوند؛ سایر سلول‌ها صرفاً به صورت رشته‌های متنی بیان می‌شوند.

قالب‌بندی سلول‌ها را در جداول خروجی تعیین می‌کند مگر اینکه قالب جدول روی json تنظیم شده باشد، که در این صورت قالب‌بندی json همیشه هنگام قالب‌بندی سلول‌ها استفاده می‌شود. انواع زیر برای format در دسترس هستند:
string (پیش‌فرض)
قالب ساده توصیف‌شده در بخش Database Values از ovs-vsctl(8).
قالب ساده بدون نشانه‌های نگارشی: [] و {} در اطراف مجموعه‌ها، نگاشت‌ها و ستون‌های خالی حذف می‌شوند، موارد درون مجموعه‌ها و نگاشت‌ها با فاصله جدا می‌شوند، و رشته‌ها هرگز در علامت نقل‌قول قرار نمی‌گیرند. این قالب ممکن است تجزیه را برای اسکریپت‌ها آسان‌تر کند.
قالب JSON مطابق RFC 4627 همان‌طور که در بالا توضیح داده شد.
این گزینه سطر سرستون را که در غیر این صورت در سطر اول خروجی جدول ظاهر می‌شود، پنهان می‌کند.
به‌طور پیش‌فرض، JSON در خروجی تا حد امکان فشرده چاپ می‌شود. این گزینه باعث می‌شود JSON در خروجی به شکل خواناتری چاپ شود. اعضای شیء‌ها و عناصر آرایه‌ها در هر خط با تورفتگی چاپ می‌شوند.
این گزینه بر JSON در جدول‌ها تأثیری ندارد، که همیشه فشرده چاپ می‌شود.
معادل --format=list --data=bare --no-headings.
فقط برای خروجی جدول، عرض هر ستون را در خروجی به n ستون کاراکتری محدود می‌کند. داده‌های سلول‌های طولانی‌تر در صورت لزوم برای جا شدن کوتاه می‌شوند. ستون‌ها در صورت چاپ سطر سرستون، همیشه به اندازه کافی عریض هستند که نام ستون‌ها را نمایش دهند.


یک فایل PEM حاوی کلید خصوصی استفاده‌شده به‌عنوان هویت vtep-ctl برای اتصالات خروجی SSL/TLS را مشخص می‌کند.

یک فایل PEM حاوی گواهی تعیین می‌کند که تأیید می‌نماید کلید خصوصی مشخص‌شده در -p یا --private-key قابل اعتماد است. این گواهی باید توسط مرجع صدور گواهی (CA) امضا شده باشد که طرف مقابل در اتصالات SSL/TLS از آن برای اعتبارسنجی استفاده خواهد کرد.

یک فایل PEM حاوی گواهی CA مشخص می‌کند که vtep-ctl باید برای اعتبارسنجی گواهی‌های ارائه‌شده توسط همتایان SSL/TLS استفاده کند. (این ممکن است همان گواهی باشد که همتایان SSL/TLS برای تأیید گواهی مشخص‌شده در -c یا --certificate استفاده می‌کنند، یا بسته به طرح PKI مورد استفاده ممکن است گواهی متفاوتی باشد.)

اعتبارسنجی گواهی‌های ارائه‌شده توسط همتایان SSL/TLS را غیرفعال می‌کند. این یک خطر امنیتی ایجاد می‌کند، زیرا به این معنی است که نمی‌توان تأیید کرد گواهی‌ها متعلق به میزبان‌های معتمد شناخته‌شده هستند.
نام سرور را برای استفاده در TLS Server Name Indication (SNI) مشخص می‌کند. به‌طور پیش‌فرض، نام میزبان برگرفته از رشته اتصال برای SNI استفاده می‌شود. این گزینه اجازه می‌دهد نام میزبان SNI بازنویسی شود، که هنگام اتصال از طریق پروکسی‌ها یا سرویس‌مش‌ها که نقطه پایانی اتصال با نام سرور مورد نظر متفاوت است، مفید خواهد بود.
هنگامی که cacert.pem وجود دارد، این گزینه تأثیری مشابه -C یا --ca-cert دارد. اگر وجود نداشته باشد، vtep-ctl تلاش می‌کند گواهی CA را از همتای SSL/TLS در اولین اتصال SSL/TLS خود دریافت کرده و آن را در فایل PEM نام‌برده ذخیره کند. اگر موفقیت‌آمیز باشد، بلافاصله اتصال را قطع کرده و مجدداً متصل می‌شود، و از آن به بعد تمام اتصالات SSL/TLS باید توسط گواهی امضاشده توسط گواهی CA به دست آمده احراز هویت شوند.
این گزینه اتصال SSL/TLS را در معرض حمله مرد میانی (man-in-the-middle) جهت به دست آوردن گواهی اولیه CA قرار می‌دهد، اما ممکن است برای راه‌اندازی اولیه (bootstrapping) مفید باشد.
این گزینه تنها زمانی مفید است که همتای SSL/TLS گواهی CA خود را به عنوان بخشی از زنجیره گواهی SSL/TLS ارسال کند. پروتکل‌های SSL/TLS سرور را ملزم به ارسال گواهی CA نمی‌کنند.
این گزینه با -C و --ca-cert مانعة‌الجمع است.
یک فایل PEM مشخص می‌کند که شامل یک یا چند گواهی اضافی برای ارسال به همتایان SSL/TLS است. peer-cacert.pem باید گواهی CA مورد استفاده برای امضای گواهی خود vtep-ctl باشد، یعنی گواهی مشخص‌شده در -c یا --certificate. اگر گواهی vtep-ctl خودامضا باشد، آنگاه --certificate و --peer-ca-cert باید همان فایل را مشخص کنند.
این گزینه در عملکرد عادی مفید نیست، زیرا همتای SSL/TLS از قبل باید گواهی CA را داشته باشد تا به هویت vtep-ctl اطمینان کند. با این حال، این روشی برای یک نصب جدید فراهم می‌کند تا گواهی CA را در اولین اتصال SSL/TLS خود راه‌اندازی اولیه کند.

سطوح لاگ‌گیری را تنظیم می‌کند. بدون هیچ spec، سطح لاگ را برای هر ماژول و مقصد روی dbg تنظیم می‌کند. در غیر این صورت، spec فهرستی از کلمات است که با فاصله، کاما یا دونقطه از هم جدا شده‌اند، حداکثر یکی از هر دسته زیر:
  • یک نام ماژول معتبر، همان‌طور که توسط دستور vlog/list در ovs-appctl(8) نمایش داده می‌شود، تغییر سطح لاگ را به ماژول مشخص‌شده محدود می‌کند.
  • syslog، console یا file، برای محدود کردن تغییر سطح لاگ فقط به ترتیب به لاگ سیستم، به کنسول، یا به یک فایل. (اگر --detach مشخص شده باشد، vtep-ctl توصیف‌کننده‌های استاندارد فایل خود را می‌بندد، بنابراین لاگ‌گیری به کنسول هیچ تأثیری نخواهد داشت.)
  • off، emer، err، warn، info یا dbg، برای کنترل سطح لاگ. پیام‌های با شدت داده شده یا بالاتر لاگ خواهند شد و پیام‌های با شدت پایین‌تر فیلتر می‌شوند. off تمام پیام‌ها را فیلتر می‌کند. برای تعریف هر سطح لاگ به ovs-appctl(8) مراجعه کنید.
بزرگی و کوچکی حروف در spec اهمیتی ندارد.
صرف‌نظر از سطوح لاگ تنظیم‌شده برای file، لاگ‌گیری در یک فایل انجام نمی‌شود مگر اینکه --log-file نیز مشخص شده باشد (به زیر مراجعه کنید).
برای سازگاری با نسخه‌های قدیمی‌تر OVS، مقدار any به عنوان یک کلمه پذیرفته می‌شود اما هیچ تأثیری ندارد.

حداکثر سطح جزئیات لاگ را تنظیم می‌کند که معادل --verbose=dbg است.

الگوی لاگ را برای destination روی pattern تنظیم می‌کند. برای توصیف نحو معتبر pattern به ovs-appctl(8) مراجعه کنید.

بخش تسهیلات (facility) پیام لاگ بر اساس RFC5424 را تنظیم می‌کند. facility می‌تواند یکی از موارد kern، user، mail، daemon، auth، syslog، lpr، news، uucp، clock، ftp، ntp، audit، alert، clock2، local0، local1، local2، local3، local4، local5، local6 یا local7 باشد. اگر این گزینه مشخص نشود، daemon به عنوان پیش‌فرض برای لاگ سیستم محلی و local0 هنگام ارسال پیام به مقصد ارائه‌شده از طریق گزینه --syslog-target استفاده می‌شود.
لاگ‌گیری در یک فایل را فعال می‌کند. اگر file مشخص شود، به عنوان نام دقیق فایل لاگ استفاده می‌شود. نام پیش‌فرض فایل لاگ در صورت حذف file برابر /var/log/openvswitch/vtep-ctl.log است.
علاوه بر لاگ سیستم، پیام‌های syslog را به پورت UDP port روی host ارسال می‌کند. host باید یک آدرس IP عددی باشد، نه یک نام میزبان.
روش method را برای نحوه ارسال پیام‌های syslog به دیمن syslog مشخص می‌کند. فرم‌های زیر پشتیبانی می‌شوند:
  • libc، از تابع syslog() مربوط به libc استفاده می‌کند. نقطه ضعف استفاده از این گزینه این است که libc قبل از ارسال واقعی به دیمن syslog از طریق سوکت دامنه یونیکس /dev/log، یک پیشوند ثابت به هر پیام اضافه می‌کند.
  • unix:file، مستقیماً از سوکت دامنه یونیکس استفاده می‌کند. با این گزینه می‌توان قالب پیام دلخواه را مشخص کرد. با این حال، rsyslogd 8.9 و نسخه‌های قدیمی‌تر به هر حال از یک تابع تجزیه‌کننده از پیش کدگذاری‌شده استفاده می‌کنند که استفاده از سوکت دامنه یونیکس را محدود می‌کند. اگر می‌خواهید از قالب پیام دلخواه با نسخه‌های قدیمی‌تر rsyslogd استفاده کنید، به جای آن از سوکت UDP به آدرس IP لوکال‌هاست استفاده کنید.
  • udp:ip:port، از سوکت UDP استفاده می‌کند. با این روش می‌توان از قالب پیام دلخواه با نسخه‌های قدیمی‌تر rsyslogd نیز استفاده کرد. هنگام ارسال پیام‌های syslog از طریق سوکت UDP باید احتیاط‌های اضافی در نظر گرفته شود، به عنوان مثال، دیمن syslog باید پیکربندی شود تا روی پورت UDP مشخص‌شده گوش دهد، قوانین تصادفی iptables می‌توانند در ترافیک syslog محلی اختلال ایجاد کنند و برخی ملاحظات امنیتی اعمال می‌شوند که برای سوکت‌های دامنه یونیکس صدق نمی‌کنند.
  • null، تمام پیام‌های لاگ‌شده به syslog را دور می‌ریزد.
مقدار پیش‌فرض از متغیر محیطی OVS_SYSLOG_METHOD گرفته می‌شود؛ اگر تنظیم نشده باشد، پیش‌فرض libc است.

پیام راهنمای مختصری را در کنسول چاپ می‌کند.

اطلاعات نسخه را در کنسول چاپ می‌کند.

دستورات پیاده‌سازی‌شده توسط vtep-ctl در بخش‌های زیر توضیح داده شده‌اند.

این دستورات سوئیچ‌های فیزیکی را بررسی و دستکاری می‌کنند.

[--may-exist] add-ps pswitch
یک سوئیچ فیزیکی جدید به نام pswitch ایجاد می‌کند. در ابتدا سوئیچ هیچ پورتی نخواهد داشت.
بدون --may-exist، تلاش برای ایجاد سوئیچی که وجود دارد یک خطا است. با --may-exist، اگر pswitch از قبل وجود داشته باشد، این دستور کاری انجام نمی‌دهد.
[--if-exists] del-ps pswitch
سوئیچ pswitch و تمام پورت‌های آن را حذف می‌کند.
بدون --if-exists، تلاش برای حذف سوئیچی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف سوئیچی که وجود ندارد هیچ اثری ندارد.
تمام سوئیچ‌های فیزیکی موجود را در خروجی استاندارد، یک مورد در هر خط، فهرست می‌کند.
بررسی می‌کند که آیا pswitch وجود دارد یا خیر. اگر وجود داشته باشد، vtep-ctl با موفقیت و با کد خروج 0 خارج می‌شود. اگر نه، vtep-ctl با عدم موفقیت و با کد خروج 2 خارج می‌شود.

این دستورات پورت‌های فیزیکی VTEP را بررسی و دستکاری می‌کنند.

تمام پورت‌های درون pswitch را در خروجی استاندارد، یک مورد در هر خط، فهرست می‌کند.
[--may-exist] add-port pswitch port
روی pswitch یک پورت جدید به نام port از روی دستگاه شبکه هم‌نام ایجاد می‌کند.
بدون --may-exist، تلاش برای ایجاد پورتی که وجود دارد یک خطا است. با --may-exist، اگر port از قبل روی pswitch وجود داشته باشد، این دستور کاری انجام نمی‌دهد.
[--if-exists] del-port [pswitch] port
پورت port را حذف می‌کند. اگر pswitch حذف شود، port از هر سوئیچی که شامل آن است حذف می‌شود؛ اگر pswitch مشخص شده باشد، باید سوئیچی باشد که شامل port است.
بدون --if-exists، تلاش برای حذف پورتی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف پورتی که وجود ندارد هیچ اثری ندارد.

این دستورات سوئیچ‌های منطقی را بررسی و دستکاری می‌کنند.

[--may-exist] add-ls lswitch
یک سوئیچ منطقی جدید به نام lswitch ایجاد می‌کند. در ابتدا سوئیچ هیچ اتصال مکانیابی (locator binding) نخواهد داشت.
بدون --may-exist، تلاش برای ایجاد سوئیچی که وجود دارد یک خطا است. با --may-exist، اگر lswitch از قبل وجود داشته باشد، این دستور کاری انجام نمی‌دهد.
[--if-exists] del-ls lswitch
سوئیچ lswitch را حذف می‌کند.
بدون --if-exists، تلاش برای حذف سوئیچی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف سوئیچی که وجود ندارد هیچ اثری ندارد.
تمام سوئیچ‌های منطقی موجود را در خروجی استاندارد، یک مورد در هر خط، فهرست می‌کند.
بررسی می‌کند که آیا lswitch وجود دارد یا خیر. اگر وجود داشته باشد، vtep-ctl با موفقیت و با کد خروج 0 خارج می‌شود. اگر نه، vtep-ctl با عدم موفقیت و با کد خروج 2 خارج می‌شود.
سوئیچ منطقی lswitch را به ترکیب port/vlan در سوئیچ فیزیکی pswitch متصل می‌کند.
اتصال سوئیچ منطقی را از ترکیب port/vlan در سوئیچ فیزیکی pswitch حذف می‌کند.
اتصالات سوئیچ منطقی را برای port روی سوئیچ فیزیکی pswitch فهرست می‌کند.
حالت تکثیر سوئیچ منطقی lswitch را روی replication-mode تنظیم می‌کند؛ تنها مقادیر معتبر برای حالت تکثیر "service_node" و "source_node" هستند. برای رسیدگی به ترافیک برودکست، مالتی‌کست و یونیکست ناشناخته لایه ۲ (L2)، بسته‌ها می‌توانند به تمام اعضای یک سوئیچ منطقی که توسط یک سوئیچ فیزیکی ارجاع داده شده ارسال شوند. حالت‌های مختلفی برای تکثیر بسته‌ها وجود دارد. حالت پیش‌فرض تکثیر، ارسال ترافیک به یک گره سرویس (service node) است که می‌تواند یک هایپروایزر، سرور یا اپلاینس باشد، و به گره سرویس اجازه دهد تکثیر را به سایر گره‌های انتقال (هایپروایزرها یا سایر سوئیچ‌های فیزیکی VTEP) انجام دهد. این حالت، تکثیر گره سرویس (service node replication) نامیده می‌شود. یک حالت جایگزین برای تکثیر، به نام تکثیر گره مبدأ (source node replication)، شامل ارسال بسته توسط گره مبدأ به تمام گره‌های انتقال دیگر است. هایپروایزرها در هر دو حالت همیشه مسئول انجام تکثیر خود برای ماشین‌های مجازی محلی متصل هستند. اگر حالت تکثیر به‌طور صریح تنظیم نشده باشد، حالت گره سرویس پیش‌فرض است. حالت تکثیر گره سرویس یک نیاز اساسی تلقی می‌شود زیرا فقط به ارسال بسته به یک گره انتقال واحد نیاز دارد.
حالت تکثیر سوئیچ منطقی lswitch را دریافت می‌کند. تنها مقادیر معتبر برای حالت تکثیر "service_node" و "source_node" هستند. یک پاسخ خالی برای حالت تکثیر به معنای پیش‌فرض بودن "service_node" است.

این دستورات روترهای منطقی را بررسی و دستکاری می‌کنند.

[--may-exist] add-lr lrouter
یک روتر منطقی جدید به نام lrouter ایجاد می‌کند.
بدون --may-exist، تلاش برای ایجاد روتری که وجود دارد یک خطا است. با --may-exist، اگر lrouter از قبل وجود داشته باشد، این دستور کاری انجام نمی‌دهد.
[--if-exists] del-lr lrouter
روتر lrouter را حذف می‌کند.
بدون --if-exists، تلاش برای حذف روتری که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف روتری که وجود ندارد هیچ اثری ندارد.
تمام روترهای منطقی موجود را در خروجی استاندارد، یک مورد در هر خط، فهرست می‌کند.
بررسی می‌کند که آیا lrouter وجود دارد یا خیر. اگر وجود داشته باشد، vtep-ctl با موفقیت و با کد خروج 0 خارج می‌شود. اگر نه، vtep-ctl با عدم موفقیت و با کد خروج 2 خارج می‌شود.

این دستورات اتصال‌های محلی MAC را برای سوئیچ منطقی بررسی و دستکاری می‌کنند. نگاشت‌های محلی توسط VTEP نوشته می‌شوند تا به آدرس‌های MAC که روی پورت‌های فیزیکی خود یاد گرفته ارجاع داده شود.

آدرس اترنت یونیکست mac را با استفاده از کپسوله‌سازی encap در lswitch به مکان فیزیکی ip نگاشت می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های محلی توسط VTEP برای ارجاع به آدرس‌های MAC یاد گرفته شده در پورت‌های فیزیکی آن استفاده می‌شوند.
نگاشت محلی آدرس اترنت یونیکست mac را از lswitch حذف می‌کند. نگاشت‌های محلی توسط VTEP برای ارجاع به آدرس‌های MAC یاد گرفته شده در پورت‌های فیزیکی آن استفاده می‌شوند.
مکان فیزیکی ip را با استفاده از کپسوله‌سازی encap به جدول اتصال MAC محلی برای آدرس اترنت مالتی‌کست mac در lswitch اضافه می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های محلی توسط VTEP برای ارجاع به آدرس‌های MAC یاد گرفته شده در پورت‌های فیزیکی آن استفاده می‌شوند.
مکان فیزیکی ip را با استفاده از کپسوله‌سازی encap از جدول اتصال MAC محلی برای آدرس اترنت مالتی‌کست mac در lswitch حذف می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های محلی توسط VTEP برای ارجاع به آدرس‌های MAC یاد گرفته شده در پورت‌های فیزیکی آن استفاده می‌شوند.
اتصال‌های MAC محلی را برای lswitch پاک می‌کند.
اتصال‌های MAC محلی را برای lswitch، یک مورد در هر خط، فهرست می‌کند.

این دستورات اتصال‌های محلی و راه دور MAC را برای سوئیچ منطقی بررسی و دستکاری می‌کنند. نگاشت‌های راه دور توسط کنترلر مجازی‌سازی شبکه نوشته می‌شوند تا به آدرس‌های MAC که یاد گرفته است ارجاع داده شود.

آدرس اترنت یونیکست mac را با استفاده از کپسوله‌سازی encap در lswitch به مکان فیزیکی ip نگاشت می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های راه دور توسط بستر مجازی‌سازی شبکه برای ارجاع به آدرس‌های MAC یاد گرفته شده استفاده می‌شوند.
نگاشت راه دور آدرس اترنت یونیکست mac را از lswitch حذف می‌کند. نگاشت‌های راه دور توسط بستر مجازی‌سازی شبکه برای ارجاع به آدرس‌های MAC یاد گرفته شده استفاده می‌شوند.
مکان فیزیکی ip را با استفاده از کپسوله‌سازی encap به جدول اتصال MAC راه دور برای آدرس اترنت مالتی‌کست mac در lswitch اضافه می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های راه دور توسط بستر مجازی‌سازی شبکه برای ارجاع به آدرس‌های MAC یاد گرفته شده استفاده می‌شوند.
مکان فیزیکی ip را با استفاده از کپسوله‌سازی encap از جدول اتصال MAC راه دور برای آدرس اترنت مالتی‌کست mac در lswitch حذف می‌کند. اگر encap مشخص نشده باشد، پیش‌فرض "vxlan_over_ipv4" است. نگاشت‌های راه دور توسط بستر مجازی‌سازی شبکه برای ارجاع به آدرس‌های MAC یاد گرفته شده استفاده می‌شوند.
اتصال‌های MAC راه دور را برای lswitch پاک می‌کند.
اتصال‌های MAC راه دور را برای lswitch، یک مورد در هر خط، فهرست می‌کند.

این دستورات ستون managers را در جدول Global و سطرها را در جدول Managers دستکاری می‌کنند. هنگامی که ovsdb-server برای استفاده از ستون managers برای اتصالات OVSDB پیکربندی شده باشد (همان‌طور که در اسکریپت‌های راه‌اندازی ارائه‌شده با Open vSwitch توضیح داده شده است)، این قابلیت به مدیر سیستم اجازه می‌دهد تا از vtep-ctl برای پیکربندی اتصالات پایگاه‌داده استفاده کند.

مدیر(ان) پیکربندی‌شده را چاپ می‌کند.
مدیر(ان) پیکربندی‌شده را حذف می‌کند.
مقصد یا مقاصد مدیر پیکربندی‌شده را تنظیم می‌کند. هر target می‌تواند یک روش اتصال فعال یا غیرفعال OVSDB باشد، مانند pssl:6640، همان‌طور که در ovsdb(7) توصیف شده است.

این دستورات محتویات جداول ovsdb را پرس‌وجو و اصلاح می‌کنند. آن‌ها انتزاع مختصری از رابط ovsdb هستند و به همین دلیل در سطحی پایین‌تر از سایر دستورات vtep-ctl عمل می‌کنند.

شناسایی جداول، رکوردها و ستون‌ها

هر یک از این دستورات دارای پارامتر table برای شناسایی یک جدول درون پایگاه‌داده است. بسیاری از آن‌ها پارامتر record را نیز می‌گیرند که یک رکورد خاص را درون یک جدول شناسایی می‌کند. پارامتر record می‌تواند UUID یک رکورد باشد، و بسیاری از جداول روش‌های اضافی را برای شناسایی رکوردها ارائه می‌دهند. برخی از دستورات همچنین پارامترهای column را می‌گیرند که یک فیلد خاص را درون رکوردهای یک جدول مشخص می‌کند.

جداول زیر در حال حاضر تعریف شده‌اند:

پیکربندی سطح بالا برای یک VTEP سخت‌افزاری. این جدول دقیقاً شامل یک رکورد است که با مشخص کردن . به عنوان نام رکورد شناسایی می‌شود.
پیکربندی برای یک اتصال OVSDB. رکوردها ممکن است بر اساس مقصد (مثلاً tcp:1.2.3.4) شناسایی شوند.
یک سوئیچ فیزیکی که یک VTEP را پیاده‌سازی می‌کند. رکوردها ممکن است بر اساس نام سوئیچ فیزیکی شناسایی شوند.
یک پورت درون یک سوئیچ فیزیکی.
آمار سوئیچ منطقی را که یک VLAN روی پورت فیزیکی با آن مرتبط است، گزارش می‌دهد.
یک سوئیچ اترنت منطقی. رکوردها ممکن است بر اساس نام سوئیچ منطقی شناسایی شوند.
نگاشت آدرس‌های MAC یونیکست محلی کشف‌شده به تونل‌ها.
نگاشت آدرس‌های MAC یونیکست برنامه‌ریزی‌شده از راه دور به تونل‌ها.
نگاشت آدرس‌های MAC مالتی‌کست محلی کشف‌شده به تونل‌ها.
نگاشت آدرس‌های MAC مالتی‌کست برنامه‌ریزی‌شده از راه دور به تونل‌ها.
مجموعه‌ای از یک یا چند مکان‌یاب فیزیکی.
نقطه پایانی را شناسایی می‌کند که ترافیک سوئیچ منطقی ممکن است به آن کپسوله و فوروارد شود. رکوردها ممکن است بر اساس نام مکان‌یاب فیزیکی شناسایی شوند.

نام‌های رکوردها باید به طور کامل و با رعایت بزرگی و کوچکی حروف مشخص شوند، به جز اینکه UUIDها را می‌توان به ۴ رقم هگزادسیمال اول (یا بیشتر) خلاصه کرد، تا زمانی که در جدول یکتا باشد. نام‌های جداول و ستون‌ها به بزرگی و کوچکی حروف حساس نیستند، و با - و _ به جای یکدیگر رفتار می‌شود. اختصارات یکتا از نام جداول و ستون‌ها قابل قبول است، به عنوان مثال man یا m برای شناسایی جدول Manager کافی است.

مقادیر پایگاه‌داده

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

یک عدد صحیح ده‌دهی در محدوده -2**63 تا 2**63-1، شامل هر دو.
یک عدد ممیز شناور.
درست یا نادرست، به ترتیب به صورت true یا false نوشته می‌شود.
یک رشته یونیکد دلخواه، با این استثنا که بایت‌های null مجاز نیستند. برای اکثر رشته‌هایی که با یک حرف انگلیسی یا زیرخط شروع می‌شوند و فقط شامل حروف، زیرخط، خط تیره و نقطه هستند، نقل‌قول اختیاری است. با این حال، true و false و رشته‌هایی که با ساختار UUIDها مطابقت دارند (به زیر مراجعه کنید) باید در گیومه دوتایی قرار گیرند تا از سایر انواع پایه متمایز شوند. هنگامی که گیومه دوتایی استفاده می‌شود، نحو شبیه به رشته‌ها در JSON است، مثلاً ممکن است از بک‌اسلش برای اسکیپ کردن کاراکترهای خاص استفاده شود. رشته خالی باید به صورت یک جفت گیومه دوتایی ("") نمایش داده شود.
یا یک شناسه جهانی یکتا به سبک RFC 4122، مثلاً f81d4fae-7dec-11d0-a765-00a0c91e6bf6، یا یک @name تعریف شده توسط یک دستور get یا create در همان فراخوانی vtep-ctl.

چندین مقدار در یک ستون واحد را می‌توان با فاصله یا یک کاما جدا کرد. هنگامی که چندین مقدار وجود دارد، مقادیر تکراری مجاز نیستند، و ترتیب اهمیتی ندارد. برعکس، برخی از ستون‌های پایگاه‌داده می‌توانند مجموعه خالی از مقادیر داشته باشند که به صورت [] نمایش داده می‌شود، و براکت‌های چهارگوش می‌توانند به صورت اختیاری سایر مجموعه‌های غیرخالی یا مقادیر تکی را نیز در بر گیرند. برای ستونی که مجموعه‌ای از اعداد صحیح را می‌پذیرد، دستورات پایگاه‌داده یک محدوده را می‌پذیرند. یک محدوده با دو عدد صحیح که با - از هم جدا شده‌اند نشان داده می‌شود. یک محدوده شامل نقاط ابتدا و انتها است. حداکثر اندازه یک محدوده 4096 عنصر است. اگر به عناصر بیشتری نیاز باشد، می‌توان آن‌ها را در محدوده‌های جداگانه مشخص کرد.

تعداد کمی از ستون‌های پایگاه‌داده «نگاشت‌ها»یی (maps) از جفت‌های کلید-مقدار هستند، که در آن کلید و مقدار هر کدام یک نوع داده ثابت در پایگاه‌داده هستند. این موارد به شکل key=value مشخص می‌شوند، جایی که key و value به ترتیب از نحو نوع کلید و نوع مقدار ستون پیروی می‌کنند. هنگامی که چندین جفت وجود دارد (که با فاصله یا کاما جدا شده‌اند)، کلیدهای تکراری مجاز نیستند، و باز هم ترتیب اهمیتی ندارد. مقادیر تکراری مجاز هستند. یک نگاشت خالی به صورت {} نمایش داده می‌شود. آکولادها می‌توانند به صورت اختیاری نگاشت‌های غیرخالی را نیز در بر گیرند (اما برای جلوگیری از گسترش other-config={0=x,1=y} به other-config=0=x other-config=1=y توسط پوسته، از نقل‌قول استفاده کنید، که ممکن است اثر مطلوبی نداشته باشد).

نحو دستورات پایگاه‌داده
[--if-exists] [--columns=column[,column]...] list table [record]...
داده‌ها را در هر record مشخص‌شده فهرست می‌کند. اگر رکوردی مشخص نشده باشد، تمام رکوردهای موجود در table را فهرست می‌کند.
اگر --columns مشخص شده باشد، فقط ستون‌های درخواستی، به ترتیب مشخص‌شده فهرست می‌شوند. در غیر این صورت، تمام ستون‌ها به ترتیب الفبایی بر اساس نام ستون فهرست می‌شوند.
بدون --if-exists، اگر هر یک از recordهای مشخص‌شده وجود نداشته باشد، یک خطا محسوب می‌شود. با --if-exists، دستور هر record را که وجود ندارد نادیده می‌گیرد، بدون اینکه خروجی تولید کند.
[--columns=column[,column]...] find table [column[:key]=value]...
داده‌ها را در هر رکوردی در table فهرست می‌کند که column آن برابر با value باشد، یا اگر key مشخص شده باشد، column آن شامل یک key با value مشخص‌شده باشد. عملگرهای زیر ممکن است در جایی که = در خلاصه نحو نوشته شده استفاده شوند:
= != < > <= >=
رکوردهایی را انتخاب می‌کند که در آن‌ها column[:key] به ترتیب برابر، نابرابر، کمتر از، بیشتر از، کمتر یا مساوی، یا بیشتر یا مساوی با value باشد.
مقادیر column[:key] و value را به عنوان مجموعه‌هایی از عناصر در نظر بگیرید. مجموعه‌های یکسان، برابر در نظر گرفته می‌شوند. در غیر این صورت، اگر مجموعه‌ها تعداد عناصر متفاوتی داشته باشند، مجموعه‌ای که عناصر بیشتری دارد بزرگتر در نظر گرفته می‌شود. در غیر این صورت، عنصری از هر مجموعه را به صورت جفت به جفت، به ترتیب صعودی درون هر مجموعه در نظر بگیرید. اولین جفتی که متفاوت باشد نتیجه را تعیین می‌کند. (برای ستونی که شامل جفت‌های کلید-مقدار است، ابتدا همه کلیدها مقایسه می‌شوند و مقادیر تنها در صورتی در نظر گرفته می‌شوند که دو مجموعه حاوی کلیدهای یکسان باشند.)
{=} {!=}
به ترتیب برای برابری یا نابرابری مجموعه‌ها آزمایش می‌کند.
{<=}
رکوردهایی را انتخاب می‌کند که در آن‌ها column[:key] زیرمجموعه‌ای از value باشد. به عنوان مثال، flood-vlans{<=}1,2 رکوردهایی را انتخاب می‌کند که در آن‌ها ستون flood-vlans مجموعه خالی باشد یا شامل 1 یا 2 یا هر دو باشد.
{<}
رکوردهایی را انتخاب می‌کند که در آن‌ها column[:key] یک زیرمجموعه سره از value باشد. به عنوان مثال، flood-vlans{<}1,2 رکوردهایی را انتخاب می‌کند که در آن‌ها ستون flood-vlans مجموعه خالی باشد یا شامل 1 یا 2 باشد اما نه هر دو.
{>=} {>}
مشابه {<=} و {<} است، به جز اینکه رابطه معکوس است. به عنوان مثال، flood-vlans{>=}1,2 رکوردهایی را انتخاب می‌کند که در آن‌ها ستون flood-vlans شامل هر دوی 1 و 2 باشد.

عملگرهای زیر فقط در Open vSwitch نسخه 2.16 و بالاتر در دسترس هستند:

{in}
رکوردهایی را انتخاب می‌کند که در آن‌ها هر عنصر در column[:key] در value نیز وجود داشته باشد. (این همانند {<=} است.)
{not-in}
رکوردهایی را انتخاب می‌کند که در آن‌ها هر عنصر در column[:key] در value نباشد.
برای عملگرهای حسابی (= != < > <= >=)، هنگامی که key مشخص شده باشد اما column یک رکورد خاص شامل key نباشد، آن رکورد همیشه از نتایج حذف می‌شود. بنابراین، شرط other-config:mtu!=1500 با رکوردهایی مطابقت دارد که کلید mtu با مقداری غیر از 1500 دارند، اما با رکوردهایی که فاقد کلید mtu هستند مطابقت ندارد.
برای عملگرهای مجموعه، هنگامی که key مشخص شده باشد اما column یک رکورد خاص حاوی key نباشد، مقایسه در برابر یک مجموعه خالی انجام می‌شود. بنابراین، شرط other-config:mtu{!=}1500 با رکوردهایی که دارای کلید mtu با مقداری غیر از 1500 هستند و همچنین رکوردهایی که فاقد کلید mtu هستند مطابقت دارد.
فراموش نکنید که < یا > را اسکیپ کنید تا توسط پوسته تفسیر نشوند.
اگر --columns مشخص شده باشد، فقط ستون‌های درخواستی، به ترتیب مشخص‌شده فهرست می‌شوند. در غیر این صورت تمام ستون‌ها به ترتیب الفبایی بر اساس نام ستون فهرست می‌شوند.
شناسه‌های UUID نمایش داده شده برای سطرهای ایجاد شده در همان فراخوانی vtep-ctl نادرست خواهند بود.
[--if-exists] [--id=@name] get table record [column[:key]]...
مقدار هر column مشخص‌شده در record داده شده در table را چاپ می‌کند. برای ستون‌های نگاشت (map)، ممکن است یک key به صورت اختیاری مشخص شود، که در این صورت مقدار مرتبط با key در ستون به جای کل نگاشت چاپ می‌شود.
بدون --if-exists، اگر record وجود نداشته باشد یا key مشخص شده باشد اما در record وجود نداشته باشد، یک خطا است. با --if-exists، یک record ناموجود هیچ خروجی تولید نمی‌کند و یک key ناموجود یک خط خالی چاپ می‌کند.
اگر @name مشخص شده باشد، می‌توان بعداً در همان فراخوانی vtep-ctl در زمینه‌هایی که UUID انتظار می‌رود، با آن نام به UUID مربوط به record ارجاع داد.
هر دو آرگومان --id و column اختیاری هستند، اما معمولاً باید حداقل یکی یا دیگری مشخص شود. اگر هر دو حذف شوند، get هیچ اثری به جز تأیید وجود record در table ندارد.
گزینه‌های --id و --if-exists نمی‌توانند با هم استفاده شوند.
[--if-exists] set table record column[:key]=value...
مقدار هر column مشخص‌شده در record داده شده در table را به value تنظیم می‌کند. برای ستون‌های نگاشت، ممکن است یک key به صورت اختیاری مشخص شود، که در این صورت مقدار مرتبط با key در آن ستون تغییر می‌کند (یا اگر وجود نداشته باشد، اضافه می‌شود)، به جای کل نگاشت.
بدون --if-exists، اگر record وجود نداشته باشد یک خطا است. با --if-exists، اگر record وجود نداشته باشد این دستور کاری انجام نمی‌دهد.
[--if-exists] add table record column [key=]value...
مقدار یا جفت کلید-مقدار مشخص‌شده را به column در record در table اضافه می‌کند. اگر column یک نگاشت باشد، key الزامی است، در غیر این صورت ممنوع است. اگر key از قبل در یک ستون نگاشت وجود داشته باشد، مقدار فعلی value جایگزین نمی‌شود (برای جایگزینی یک مقدار موجود از دستور set استفاده کنید).
بدون --if-exists، اگر record وجود نداشته باشد یک خطا است. با --if-exists، اگر record وجود نداشته باشد این دستور کاری انجام نمی‌دهد.
[--if-exists] remove table record column value...

[--if-exists] remove table record column key...

[--if-exists] remove table record column key=value...
مقادیر یا جفت‌های کلید-مقدار مشخص‌شده را از column در record در table حذف می‌کند. فرم اول برای ستون‌هایی اعمال می‌شود که نگاشت نیستند: هر value مشخص‌شده از ستون حذف می‌شود. فرم دوم و سوم برای ستون‌های نگاشت اعمال می‌شود: اگر فقط یک key مشخص شده باشد، هر جفت کلید-مقدار با key داده شده بدون در نظر گرفتن مقدار آن حذف می‌شود؛ اگر یک value داده شود، یک جفت تنها در صورتی حذف می‌شود که هم کلید و هم مقدار مطابقت داشته باشند.
اگر ستون شامل کلید یا مقدار یا جفت مشخص‌شده نباشد، خطا نیست.
بدون --if-exists، اگر record وجود نداشته باشد یک خطا است. با --if-exists، اگر record وجود نداشته باشد این دستور کاری انجام نمی‌دهد.
[--if-exists] clear table record column...
هر column را در record در table حسب مورد روی مجموعه خالی یا نگاشت خالی تنظیم می‌کند. این دستور فقط برای ستون‌هایی اعمال می‌شود که مجاز به خالی بودن هستند.
بدون --if-exists، اگر record وجود نداشته باشد یک خطا است. با --if-exists، اگر record وجود نداشته باشد این دستور کاری انجام نمی‌دهد.
[--id=(@name | uuid] create table column[:key]=value...
یک رکورد جدید در table ایجاد می‌کند و مقادیر اولیه هر column را تنظیم می‌کند. ستون‌هایی که به صراحت تنظیم نشده‌اند مقادیر پیش‌فرض خود را دریافت خواهند کرد. شناسه UUID سطر جدید را خروجی می‌دهد.
اگر @name مشخص شده باشد، می‌توان به شناسه UUID سطر جدید با آن نام در جای دیگری در همان فراخوانی vtep-ctl در زمینه‌هایی که انتظار یک UUID می‌رود، ارجاع داد. چنین مراجعی ممکن است قبل یا بعد از دستور create بیایند.
اگر یک uuid معتبر مشخص شده باشد، به عنوان UUID سطر جدید استفاده می‌شود.
هشدار (ovs-vsctl به عنوان مثال)
رکوردها در پایگاه‌داده Open vSwitch فقط زمانی مهم هستند که بتوان به‌طور مستقیم یا غیرمستقیم از جدول Open_vSwitch به آن‌ها دسترسی پیدا کرد. به جز رکوردهای موجود در جداول QoS یا Queue، رکوردهایی که از جدول Open_vSwitch قابل دسترسی نباشند، به‌طور خودکار از پایگاه‌داده حذف می‌شوند. این حذف بلافاصله و بدون انتظار برای دستورات اضافی ovs-vsctl یا سایر فعالیت‌های پایگاه‌داده اتفاق می‌افتد. بنابراین، یک دستور create معمولاً باید همراه با دستورات اضافی در همان فراخوانی ovs-vsctl باشد تا زنجیره‌ای از ارجاعات به رکورد تازه‌ایجادشده از رکورد سطح بالای Open_vSwitch اضافه شود. بخش مثال‌ها (EXAMPLES) چند مثال ارائه می‌دهد که نحوه انجام این کار را نشان می‌دهند.
[--if-exists] destroy table record...
هر record مشخص‌شده را از table حذف می‌کند. مگر اینکه --if-exists مشخص شده باشد، هر record باید وجود داشته باشد.
تمام رکوردها را از table حذف می‌کند.
هشدار (ovs-vsctl به عنوان مثال)
دستور destroy فقط برای رکوردهای موجود در جداول QoS یا Queue مفید است. رکوردهای موجود در سایر جداول هنگام عدم دسترسی از جدول Open_vSwitch به‌طور خودکار از پایگاه‌داده حذف می‌شوند. این بدان معناست که حذف آخرین ارجاع به یک رکورد برای حذف خود رکورد کافی است. برای رکوردهای موجود در این جداول، destroy بدون هشدار نادیده گرفته می‌شود. برای اطلاعات بیشتر به بخش مثال‌ها (EXAMPLES) در زیر مراجعه کنید.
صبر می‌کند تا table شامل رکوردی به نام record باشد که column آن برابر با value باشد یا اگر key مشخص شده باشد، column آن شامل یک key با value مشخص‌شده باشد. این دستور از همان عملگرها و معانی توصیف‌شده برای دستور find در بالا پشتیبانی می‌کند.
اگر هیچ آرگومان column[:key]=value داده نشود، این دستور فقط تا زمانی که record وجود داشته باشد صبر می‌کند. اگر بیش از یک آرگومان داده شود، دستور تا زمانی که همه آن‌ها برآورده شوند صبر می‌کند.
هشدار (ovs-vsctl به عنوان مثال)
معمولاً wait-until باید در ابتدای مجموعه‌ای از دستورات ovs-vsctl قرار گیرد. به عنوان مثال، wait-until bridge br0 -- get bridge br0 datapath_id صبر می‌کند تا پلی به نام br0 ایجاد شود، سپس ستون datapath_id آن را چاپ می‌کند، در حالی که get bridge br0 datapath_id -- wait-until bridge br0 اگر هنگام اتصال اولیه ovs-vsctl به پایگاه‌داده، پلی به نام br0 وجود نداشته باشد، لغو خواهد شد.
برای جلوگیری از پایان یافتن vtep-ctl پس از حداکثر ۵ ثانیه انتظار، استفاده از --timeout=0 را همراه با --wait-until در نظر بگیرید.
این دستور هیچ تأثیری بر رفتار برنامه ندارد، اما هر رکورد لاگ پایگاه‌داده که توسط دستور ایجاد شود شامل این دستور و آرگومان‌های آن خواهد بود.

0
اجرای موفقیت‌آمیز برنامه.
1
خطای کاربرد، نحو، یا فایل پیکربندی.
2
آرگومان switch برای ps-exists نام سوئیچ فیزیکی را مشخص کرده است که وجود ندارد.

ovsdb-server(1), vtep(5).

March 2013 Open vSwitch