| ovs-vsctl(8) | Open vSwitch Manual | ovs-vsctl(8) |
نام (NAME)
ovs-vsctl - ابزاری برای پرسوجو و پیکربندی ovs-vswitchd
خلاصه دستور (SYNOPSIS)
ovs-vsctl [گزینهها] -- [گزینهها] دستور [آرگومانها] [-- [گزینهها] دستور [آرگومانها]]...
توضیحات (DESCRIPTION)
برنامه ovs-vsctl با ارائه یک رابط سطحبالا به پایگاه داده پیکربندی، ovs-vswitchd(8) را پیکربندی میکند. برای مستندات جامع طرحواره پایگاه داده، به ovs-vswitchd.conf.db(5) مراجعه کنید.
دستور ovs-vsctl به یک فرآیند ovsdb-server که پایگاه داده پیکربندی Open vSwitch را نگهداری میکند متصل میشود. با استفاده از این اتصال، بسته به دستورات ارائهشده، پایگاه داده را پرسوجو کرده و در صورت نیاز تغییراتی را در آن اعمال میکند. سپس، در صورت اعمال هرگونه تغییر، به طور پیشفرض تا زمانی که ovs-vswitchd بازپیکربندی خود را به پایان نرسانده باشد منتظر مانده و پس از آن خارج میشود. (اگر از ovs-vsctl در شرایطی که ovs-vswitchd در حال اجرا نیست استفاده میکنید، از --no-wait استفاده کنید.)
دستور ovs-vsctl میتواند هر تعداد دستور را در یک بار اجرای واحد به انجام برساند که به صورت یک تراکنش اتمیک منفرد روی پایگاه داده پیادهسازی میشود.
خط فرمان ovs-vsctl با گزینههای سراسری آغاز میشود (برای جزئیات به بخش گزینهها (OPTIONS) در زیر مراجعه کنید). گزینههای سراسری با یک یا چند دستور دنبال میشوند. هر دستور باید به تنهایی با -- به عنوان یک آرگومان خط فرمان آغاز شود تا از دستورات بعدی جدا گردد. (-- قبل از دستور اول اختیاری است.) خود دستور با گزینههای مختص به آن (در صورت وجود) شروع میشود و به دنبال آن نام دستور و هرگونه آرگومان قرار میگیرد. برای نمونههای نحوه نگارش، به بخش مثالها (EXAMPLES) در زیر مراجعه کنید.
سازگاری با پلزنی VLAN در لینوکس (Linux VLAN Bridging Compatibility)
برنامه ovs-vsctl از مدل پل پیادهسازیشده توسط Open vSwitch پشتیبانی میکند که در آن یک پل واحد از پورتها در چندین VLAN پشتیبانی به عمل میآورد. در این مدل، هر پورت روی یک پل یا یک پورت ترانک (trunk) است که احتمالاً بستههای برچسبخورده با هدرهای 802.1Q (مشخصکننده VLANها) را عبور میدهد، یا به یک VLAN ضمنی (implicit) واحد اختصاص داده شده است که هرگز با هدر 802.1Q برچسبگذاری نمیشود.
برای سازگاری با نرمافزارهای طراحیشده برای پل لینوکس (Linux bridge)، برنامه ovs-vsctl همچنین از مدلی پشتیبانی میکند که در آن ترافیک مرتبط با یک VLAN 802.1Q مشخص در یک پل جداگانه تفکیک میشود. شکل خاصی از دستور add-br (در زیر ببینید) یک «پل ساختگی» (fake bridge) را درون یک پل Open vSwitch ایجاد میکند تا این رفتار را شبیهسازی کند. هنگامی که چنین «پل ساختگی» فعال باشد، ovs-vsctl با آن بسیار شبیه به پلی مجزا از «پل والد» آن رفتار خواهد کرد، اما پیادهسازی واقعی در Open vSwitch تنها از یک پل استفاده میکند و پورتهای روی پل ساختگی به VLAN ضمنی همان پل ساختگی که عضو آن هستند اختصاص مییابند. (یک پل ساختگی برای VLAN 0 بستههایی را دریافت میکند که فاقد برچسب 802.1Q هستند یا برچسبی با VLAN 0 دارند.)
گزینهها (OPTIONS)
گزینههای زیر بر رفتار کلی ovs-vsctl تأثیر میگذارند. برخی از دستورات منفرد نیز گزینههای خاص خود را میپذیرند که درست قبل از نام دستور مشخص میشوند. اگر اولین دستور در خط فرمان دارای گزینه باشد، آن گزینهها باید با -- از گزینههای سراسری جدا شوند.
- --db=server
- سرور server را بهعنوان سرور پایگاه دادهای تعیین میکند که ovs-vsctl برای پرسوجو یا تغییر پیکربندی با آن ارتباط برقرار میکند. server میتواند یکی از روشهای اتصال فعال یا غیرفعال OVSDB باشد، همانطور که در ovsdb(7) شرح داده شده است. پیشفرض unix:/run/openvswitch/db.sock است.
- --no-wait
- از منتظر ماندن ovs-vsctl برای بازپیکربندی خودکار ovs-vswitchd مطابق با پایگاه داده تغییریافته جلوگیری میکند. این گزینه باید در صورتی استفاده شود که ovs-vswitchd در حال اجرا نباشد؛ در غیر این صورت، ovs-vsctl تا زمان شروع به کار ovs-vswitchd خارج نخواهد شد.
- اگر دستورات مشخصشده پایگاه داده را تغییر ندهند، این گزینه هیچ تأثیری ندارد.
- --no-syslog
- بهطور پیشفرض، ovs-vsctl آرگومانهای خود و جزئیات هرگونه تغییری را که ایجاد میکند در لاگ سیستم ثبت میکند. این گزینه ثبت این لاگها را غیرفعال میکند.
- این گزینه معادل --verbose=vsctl:syslog:warn است.
- --oneline
- قالب خروجی را بهگونهای تغییر میدهد که خروجی هر دستور در یک خط چاپ شود. نویسههای خط جدید که در حالت عادی خطوط را جدا میکنند بهصورت \n چاپ میشوند و هر نمونه از \ که در خروجی ظاهر شود دو برابر میشود. برای هر دستوری که خروجی ندارد یک خط خالی چاپ میکند. این گزینه بر قالببندی خروجی دستورات list یا find تأثیری ندارد؛ بخش گزینههای قالببندی جدول (Table Formatting Options) در زیر را ببینید.
- --dry-run
- از اعمال تغییرات واقعی در پایگاه داده توسط ovs-vsctl جلوگیری میکند.
- -t secs
-
- --timeout=secs
- بهطور پیشفرض، یا با مقدار secs برابر با 0، ovs-vsctl برای همیشه منتظر پاسخ از پایگاه داده میماند. این گزینه زمان اجرا را تقریباً به secs ثانیه محدود میکند. اگر مهلت زمانی به پایان برسد، ovs-vsctl با سیگنال SIGALRM خارج میشود. (اتمام مهلت زمانی معمولاً فقط در صورتی رخ میدهد که برقراری ارتباط با پایگاه داده امکانپذیر نباشد یا بار سیستم بیش از حد باشد.)
- --retry
- بدون این گزینه، اگر ovs-vsctl اتصال بیرونی به سرور پایگاه داده برقرار کند (حالت پیشفرض)، ovs-vsctl یک بار برای اتصال تلاش میکند و در صورت ناموفق بودن اتصال با یک خطا خارج میشود (که معمولاً به این معنی است که ovsdb-server در حال اجرا نیست).
- با این گزینه، یا اگر --db مشخص کند که ovs-vsctl باید منتظر اتصال ورودی از سرور پایگاه داده بماند، در این صورت ovs-vsctl برای همیشه منتظر اتصال به پایگاه داده خواهد ماند.
- صرفنظر از این تنظیم، --timeout همیشه مدتزمان انتظار ovs-vsctl را محدود میکند.
گزینههای قالببندی جدول (Table Formatting Options)
این گزینهها قالب خروجی دستورات list و find را کنترل میکنند.
- -f format
-
- --format=format
- نوع قالببندی جدول را تعیین میکند. انواع format زیر در دسترس هستند:
- table
- جدولهای متنی دوبعدی با ستونهای تراز شده.
- list (پیشفرض)
- فهرستی با یک ستون در هر خط و سطرهایی که با یک خط خالی جدا شدهاند.
- html
- جدولهای HTML.
- csv
- مقادیر جداشده با کاما طبق تعریف RFC 4180.
- json
- قالب JSON طبق تعریف RFC 4627. خروجی دنبالهای از اشیاء JSON است که هر یک مربوط به یک جدول است. هر شیء JSON دارای اعضای زیر با مقادیر ذکر شده است:
- caption
- عنوان جدول. اگر جدول عنوان نداشته باشد، این عضو حذف میشود.
- headings
- آرایهای با یک عنصر به ازای هر ستون جدول. هر عنصر آرایه یک رشته است که سرستون مربوطه را مشخص میکند.
- data
- آرایهای با یک عنصر به ازای هر سطر جدول. هر عنصر نیز یک آرایه با یک عنصر به ازای هر ستون جدول است. عناصر این آرایه سطح دوم، سلولهایی هستند که جدول را تشکیل میدهند. سلولهایی که نمایانگر دادهها یا انواع دادههای OVSDB هستند در قالبی که در مشخصات OVSDB شرح داده شده بیان میشوند؛ سایر سلولها بهسادگی بهصورت رشتههای متنی نمایش داده میشوند.
- -d format
-
- --data=format
- قالببندی سلولهای درون جدولهای خروجی را تعیین میکند، مگر اینکه قالب جدول روی json تنظیم شده باشد، که در این صورت هنگام قالببندی سلولها همیشه از قالببندی json استفاده میشود. انواع format زیر در دسترس هستند:
- string (پیشفرض)
- قالب ساده شرحدادهشده در بخش مقادیر پایگاه داده (Database Values) در زیر.
- bare
- قالب ساده با حذف علائم نگارشی: [] و {} در اطراف مجموعهها، نگاشتها و ستونهای خالی حذف میشوند، موارد درون مجموعهها و نگاشتها با فاصله جدا میشوند و رشتهها هرگز در علامت نقلقول قرار نمیگیرند. تجزیه این قالب برای اسکریپتها ممکن است آسانتر باشد.
- json
- قالب RFC 4627 JSON همانطور که در بالا شرح داده شد.
- --no-headings
- این گزینه سطر سرستون را که در حالت عادی در سطر اول خروجی جدول ظاهر میشود، حذف میکند.
- --pretty
- بهطور پیشفرض، JSON در خروجی تا حد ممکن فشرده چاپ میشود. این گزینه باعث میشود JSON در خروجی به شیوهای خواناتر چاپ شود. اعضای اشیاء و عناصر آرایهها هر کدام در یک خط همراه با تورفتگی چاپ میشوند.
- این گزینه روی JSON در جدولها تأثیری ندارد؛ آنها همیشه بهصورت فشرده چاپ میشوند.
- --bare
- معادل با --format=list --data=bare --no-headings.
- --max-column-width=n
- فقط برای خروجی جدول، عرض هر ستون را در خروجی به n ستون محدود میکند. در صورت لزوم، دادههای طولانیتر سلولها برای جا شدن کوتاه میشوند. در صورت چاپ سطر سرستون، ستونها همیشه بهاندازه کافی پهن هستند تا نام ستونها را نمایش دهند.
گزینههای زیرساخت کلید عمومی (Public Key Infrastructure Options)
- -p privkey.pem
-
- --private-key=privkey.pem
- یک فایل PEM حاوی کلید خصوصی را مشخص میکند که بهعنوان هویت ovs-vsctl برای اتصالات خروجی SSL/TLS استفاده میشود.
- -c cert.pem
-
- --certificate=cert.pem
- یک فایل PEM حاوی گواهی را مشخص میکند که قابل اعتماد بودن کلید خصوصی مشخصشده در -p یا --private-key را تأیید میکند. گواهی باید توسط مرجع صدور گواهی (CA) امضا شده باشد که طرف مقابل در اتصالات SSL/TLS از آن برای تأیید اعتبار استفاده خواهد کرد.
- -C cacert.pem
-
- --ca-cert=cacert.pem
- یک فایل PEM حاوی گواهی CA را مشخص میکند که ovs-vsctl باید از آن برای تأیید گواهیهای ارائهشده توسط همتایان SSL/TLS استفاده کند. (این گواهی ممکن است همان گواهی باشد که همتایان SSL/TLS برای تأیید گواهی مشخصشده در -c یا --certificate استفاده میکنند، یا بسته به طراحی PKI مورداستفاده، ممکن است گواهی متفاوتی باشد.)
- -C none
-
- --ca-cert=none
- تأیید اعتبار گواهیهای ارائهشده توسط همتایان SSL/TLS را غیرفعال میکند. این کار یک ریسک امنیتی ایجاد میکند، زیرا به این معنی است که گواهیها را نمیتوان بهعنوان میزبانهای قابل اعتماد و شناختهشده تأیید کرد.
- --ssl-server-name=servername
- نام سرور را برای استفاده در نشانگر نام سرور در TLS (یا همان SNI) مشخص میکند. بهطور پیشفرض، نام میزبان حاصل از رشته اتصال برای SNI استفاده میشود. این گزینه امکان بازنویسی نام میزبان SNI را فراهم میکند، که هنگام اتصال از طریق پروکسیها یا مشهای خدمات (service meshes) که در آنها نقطه پایانی اتصال با نام سرور موردنظر متفاوت است، مفید خواهد بود.
- --bootstrap-ca-cert=cacert.pem
- هنگامی که cacert.pem وجود دارد، این گزینه تأثیری مشابه -C یا --ca-cert دارد. اگر وجود نداشته باشد، ovs-vsctl در اولین اتصال SSL/TLS خود تلاش میکند گواهی CA را از همتای 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 ناسازگار (مانعةالجمع) است.
- --peer-ca-cert=peer-cacert.pem
- یک فایل PEM را مشخص میکند که حاوی یک یا چند گواهی اضافی برای ارسال به همتایان SSL/TLS است. peer-cacert.pem باید گواهی CA مورد استفاده برای امضای گواهی خود ovs-vsctl باشد، یعنی گواهی مشخصشده در -c یا --certificate. اگر گواهی ovs-vsctl خودامضا (self-signed) باشد، در این صورت --certificate و --peer-ca-cert باید یک فایل یکسان را مشخص کنند.
- این گزینه در عملکرد عادی مفید نیست، زیرا همتای SSL/TLS باید از قبل گواهی CA را داشته باشد تا بتواند به هویت ovs-vsctl اعتماد کند. با این حال، این گزینه روشی را برای یک نصب جدید فراهم میکند تا گواهی CA را در اولین اتصال SSL/TLS خود راهاندازی اولیه (bootstrap) کند.
- -v[spec]
-
- --verbose=[spec]
- سطوح گزارشگیری را تعیین میکند. بدون هرگونه spec، سطح لاگ را برای همه ماژولها و مقصدها روی dbg تنظیم میکند. در غیر این صورت، spec فهرستی از کلمات جداشده با فاصله، کاما یا دونقطه است، حداکثر یکی از هر یک از دستههای زیر:
- یک نام ماژول معتبر، همانطور که توسط دستور vlog/list در ovs-appctl(8) نمایش داده میشود، تغییر سطح لاگ را به ماژول مشخصشده محدود میکند.
- syslog، console یا file، برای محدود کردن تغییر سطح لاگ به ترتیب فقط به لاگ سیستم، کنسول یا یک فایل. (اگر --detach مشخص شده باشد، ovs-vsctl توصیفکنندههای فایل استاندارد خود را میبندد، بنابراین ثبت لاگ در کنسول هیچ اثری نخواهد داشت.)
- off، emer، err، warn، info یا dbg، برای کنترل سطح لاگ. پیامهای با شدت دادهشده یا بالاتر ثبت میشوند و پیامهای با شدت پایینتر فیلتر خواهند شد. off تمام پیامها را فیلتر میکند. برای تعریف هر سطح لاگ به ovs-appctl(8) مراجعه کنید.
- بزرگی یا کوچکی حروف در spec اهمیتی ندارد.
- صرفنظر از سطوح لاگ تنظیمشده برای file، ثبت لاگ در یک فایل انجام نخواهد شد مگر اینکه --log-file نیز مشخص شده باشد (به زیر مراجعه کنید).
- برای سازگاری با نسخههای قدیمیتر OVS، عبارت any بهعنوان یک کلمه پذیرفته میشود اما هیچ اثری ندارد.
- -v
-
- --verbose
- حداکثر سطح جزئیات لاگ را تنظیم میکند که معادل --verbose=dbg است.
- -vPATTERN:destination:pattern
-
- --verbose=PATTERN:destination:pattern
- الگوی لاگ را برای destination روی pattern تنظیم میکند. برای شرح نحو معتبر pattern به ovs-appctl(8) مراجعه کنید.
- -vFACILITY:facility
-
- --verbose=FACILITY:facility
- محیط سرویس (facility) طبق RFC 5424 را برای پیام لاگ تنظیم میکند. 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 ارائه شده است، به کار میرود.
- --log-file[=file]
- ثبت لاگ در فایل را فعال میکند. اگر file مشخص شده باشد، بهعنوان نام دقیق فایل لاگ استفاده میشود. نام پیشفرض فایل لاگ در صورت حذف file، برابر با /var/log/openvswitch/ovs-vsctl.log است.
- --syslog-target=host:port
- علاوه بر سیسلاگ سیستم، پیامهای سیسلاگ را به پورت UDP به شماره port روی host ارسال میکند. میزبان host باید یک آدرس IP عددی باشد، نه یک نام میزبان.
- --syslog-method=method
- روش method را برای نحوه ارسال پیامهای سیسلاگ به دیمن سیسلاگ مشخص میکند. فرمهای زیر پشتیبانی میشوند:
- libc، از تابع syslog() در libc استفاده میکند. نقطه ضعف استفاده از این گزینه این است که libc قبل از ارسال واقعی پیام به دیمن سیسلاگ از طریق سوکت دامنه یونیکس /dev/log، یک پیشوند ثابت به هر پیام اضافه میکند.
- unix:file، از سوکت دامنه یونیکس بهطور مستقیم استفاده میکند. با این گزینه میتوان قالب پیام دلخواهی را مشخص کرد. با این حال، rsyslogd 8.9 و نسخههای قدیمیتر در هر صورت از یک تابع تجزیهکننده کدگذاریشده ثابت استفاده میکنند که استفاده از سوکت دامنه یونیکس را محدود میکند. اگر میخواهید از قالب پیام دلخواه با نسخههای قدیمیتر rsyslogd استفاده کنید، در عوض از سوکت UDP به آدرس IP میزبان محلی استفاده کنید.
- udp:ip:port، از سوکت UDP استفاده میکند. با این روش میتوان از قالب پیام دلخواه در نسخههای قدیمیتر rsyslogd نیز استفاده کرد. هنگام ارسال پیامهای سیسلاگ از طریق سوکت UDP احتیاطهای بیشتری باید در نظر گرفته شود؛ بهعنوان مثال، دیمن سیسلاگ باید برای گوش دادن به پورت UDP مشخصشده پیکربندی شود، قوانین ناخواسته iptables ممکن است در ترافیک سیسلاگ محلی تداخل ایجاد کنند و برخی ملاحظات امنیتی وجود دارد که برای سوکتهای UDP اعمال میشود اما برای سوکتهای دامنه یونیکس صدق نمیکند.
- null، تمام پیامهای ارسالی به سیسلاگ را دور میاندازد.
دستورات (COMMANDS)
دستورات پیادهسازیشده توسط ovs-vsctl در بخشهای زیر شرح داده شدهاند.
دستورات Open vSwitch (Open vSwitch Commands)
این دستورات با کل یک Open vSwitch به صورت یکپارچه کار میکنند.
- init
- در صورت خالی بودن پایگاه داده Open vSwitch، آن را مقداردهی اولیه میکند. اگر پایگاه داده قبلاً مقداردهی اولیه شده باشد، این دستور هیچ اثری ندارد.
- هر دستور موفق ovs-vsctl در صورت خالی بودن پایگاه داده Open vSwitch، به طور خودکار آن را مقداردهی اولیه میکند. این دستور برای مقداردهی اولیه پایگاه داده بدون اجرای هیچ دستور دیگری ارائه شده است.
- [--filter=filter-rule[,filter-rule]...] show
- نمای کلی کوتاهی از محتویات پایگاه داده را چاپ میکند. اگر --filter مشخص شده باشد، خروجی طبق قوانین فیلتر میشود. هر filter-rule دارای قالب table-name(filter[|filter]...) است. سطر موجود در این جدول تنها در صورتی نمایش داده میشود که نسخه چاپشده آن، شامل تمام سطرهایی که از این سطر به آنها ارجاع داده شده است، شامل یکی از filterها به عنوان زیررشته باشد.
- emer-reset
- پیکربندی را به یک وضعیت پاک بازنشانی میکند. این دستور کنترلکنندههای OpenFlow، سرورهای OVSDB و SSL/TLS را لغو پیکربندی کرده و پیکربندی آینهسازی پورت، fail_mode، NetFlow، sFlow و IPFIX را حذف میکند. این دستور همچنین تمام کلیدهای other-config را از تمام رکوردهای پایگاه داده حذف میکند، به جز اینکه در صورت وجود other-config:hwaddr در یک رکورد Bridge، حفظ میشود. سایر پیکربندیهای شبکه دستنخورده باقی میمانند.
دستورات پل (Bridge Commands)
این دستورات پلهای Open vSwitch را بررسی و دستکاری میکنند.
- [--may-exist] add-br bridge
- یک پل جدید به نام bridge ایجاد میکند. در ابتدا پل هیچ پورتی نخواهد داشت (به جز خود bridge).
- بدون --may-exist، تلاش برای ایجاد پلی که از قبل وجود دارد یک خطا است. با --may-exist، اگر bridge از قبل به عنوان یک پل واقعی وجود داشته باشد، این دستور هیچ کاری انجام نمیدهد.
- [--may-exist] add-br bridge parent vlan
- یک «پل جعلی» (fake bridge) به نام bridge در داخل پل موجود Open vSwitch به نام parent ایجاد میکند؛ parent باید از قبل وجود داشته باشد و خودش نباید یک پل جعلی باشد. پل جعلی جدید روی 802.1Q VLAN مشخصشده با vlan قرار میگیرد که باید یک عدد صحیح بین 0 تا 4095 باشد. پل والد نباید از قبل دارای یک پل جعلی برای vlan باشد. در ابتدا bridge هیچ پورتی نخواهد داشت (به جز خود bridge).
- بدون --may-exist، تلاش برای ایجاد پلی که از قبل وجود دارد یک خطا است. با --may-exist، اگر bridge از قبل به عنوان یک پل VLAN زیر نظر parent برای vlan وجود داشته باشد، این دستور هیچ کاری انجام نمیدهد.
- [--if-exists] del-br bridge
- پل bridge و تمام پورتهای آن را حذف میکند. اگر bridge یک پل واقعی باشد، این دستور همچنین هرگونه پل جعلی ایجادشده با والد bridge را به همراه تمام پورتهایشان حذف میکند.
- بدون --if-exists، تلاش برای حذف پلی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف پلی که وجود ندارد هیچ اثری ندارد.
- [--real|--fake] list-br
- تمام پلهای واقعی و جعلی موجود را در خروجی استاندارد، هر کدام در یک خط، فهرست میکند. با --real یا --fake، فقط پلهای آن نوع برگردانده میشوند.
- br-exists bridge
- بررسی میکند که آیا bridge به عنوان یک پل واقعی یا جعلی وجود دارد یا خیر. در این صورت، ovs-vsctl با کد خروج 0 با موفقیت خارج میشود. در غیر این صورت، ovs-vsctl با کد خروج 2 بدون موفقیت خارج میشود.
- br-to-vlan bridge
- اگر bridge یک پل جعلی باشد، 802.1Q VLAN پل را به عنوان یک عدد صحیح دهدهی چاپ میکند. اگر bridge یک پل واقعی باشد، 0 را چاپ میکند.
- br-to-parent bridge
- اگر bridge یک پل جعلی باشد، نام پل والد آن را چاپ میکند. اگر bridge یک پل واقعی باشد، bridge را چاپ میکند.
- br-set-external-id bridge key [value]
- یک مقدار «شناسه خارجی» (external ID) را روی bridge تنظیم یا پاک میکند. این مقادیر برای شناسایی موجودیتهای خارج از Open vSwitch که bridge با آنها در ارتباط است در نظر گرفته شدهاند، مانند شناسه پل در یک پلتفرم مدیریت مجازیسازی. طرح پایگاه داده Open vSwitch مقادیر key شناختهشده را مشخص میکند، اما key و value در غیر این صورت رشتههای دلخواه هستند.
- اگر value مشخص شود، آنگاه key برای bridge روی value تنظیم میشود و هر مقدار قبلی را بازنویسی میکند. اگر value حذف شود، آنگاه key از مجموعه شناسههای خارجی bridge حذف میشود (در صورت وجود).
- برای پلهای واقعی، اثر این دستور مشابه دستور set یا remove در ستون external-ids از جدول Bridge است. برای پلهای جعلی، در واقع کلیدهایی با پیشوند نام fake-bridge- را در جدول Port تغییر میدهد.
- br-get-external-id bridge [key]
- شناسههای خارجی روی bridge را پرسوجو میکند. اگر key مشخص شود، خروجی مقدار آن key یا در صورت تنظیم نبودن key یک رشته خالی است. اگر key حذف شود، خروجی به صورت key=value، یک مورد در هر خط برای هر جفت کلید-مقدار خواهد بود.
- برای پلهای واقعی، اثر این دستور مشابه دستور get در ستون external-ids از جدول Bridge است. برای پلهای جعلی، کلیدهایی با پیشوند نام fake-bridge- را در جدول Port پرسوجو میکند.
دستورات پورت (Port Commands)
این دستورات پورتهای Open vSwitch را بررسی و دستکاری میکنند. این دستورات با یک پورت باندشده (bonded) به عنوان یک موجودیت واحد رفتار میکنند.
- list-ports bridge
- تمام پورتهای درون bridge را در خروجی استاندارد، هر کدام در یک خط، فهرست میکند. پورت محلی bridge در این فهرست گنجانده نمیشود.
- [--may-exist] add-port bridge port [column[:key]=value]...
- روی bridge یک پورت جدید به نام port از دستگاه شبکه همنام ایجاد میکند.
- آرگومانهای اختیاری، مقادیر ستون را در رکورد Port ایجادشده توسط دستور تنظیم میکنند. برای مثال، tag=9 پورت را به یک پورت دسترسی (access port) برای VLAN 9 تبدیل میکند. نحو آن مشابه دستور set است (بخش دستورات پایگاه داده (Database Commands) در زیر را ببینید).
- بدون --may-exist، تلاش برای ایجاد پورتی که از قبل وجود دارد یک خطا است. با --may-exist، اگر port از قبل روی bridge وجود داشته باشد و یک پورت باندشده نباشد، این دستور هیچ کاری انجام نمیدهد.
- [--if-exists] del-port [bridge] port
- پورت port را حذف میکند. اگر bridge حذف شود، port از هر پلی که حاوی آن است حذف میشود؛ اگر bridge مشخص شود، باید پل واقعی یا جعلی باشد که حاوی port است.
- بدون --if-exists، تلاش برای حذف پورتی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف پورتی که وجود ندارد هیچ اثری ندارد.
- [--if-exists] --with-iface del-port [bridge] iface
- پورتی به نام iface یا پورتی که رابطی به نام iface دارد را حذف میکند. اگر bridge حذف شود، پورت از هر پلی که حاوی آن است حذف میشود؛ اگر bridge مشخص شود، باید پل واقعی یا جعلی باشد که حاوی پورت است.
- بدون --if-exists، تلاش برای حذف پورت برای رابطی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف پورت برای رابطی که وجود ندارد هیچ اثری ندارد.
- port-to-br port
- نام پلی که حاوی port است را در خروجی استاندارد چاپ میکند.
دستورات باند (Bond Commands)
این دستورات با پورتهایی کار میکنند که بیش از یک رابط دارند، که Open vSwitch آنها را «باند» (bonds) مینامد.
- [--fake-iface] add-bond bridge port iface... [column[:key]=value]...
- روی bridge یک پورت جدید به نام port ایجاد میکند که دستگاههای شبکه ارائهشده در هر iface را با یکدیگر پیوند (باند) میدهد. حداقل دو رابط باید نام برده شوند. اگر رابطها با DPDK فعال شده باشند، تراکنش باید شامل عملیاتی برای تنظیم صریح نوع رابط روی 'dpdk' باشد.
- آرگومانهای اختیاری، مقادیر ستون را در رکورد Port ایجادشده توسط دستور تنظیم میکنند. نحو آن مشابه دستور set است (بخش دستورات پایگاه داده (Database Commands) در زیر را ببینید).
- با --fake-iface، یک رابط جعلی با نام port ایجاد میشود. این گزینه فقط باید برای سازگاری با نرمافزارهای قدیمی که به آن نیاز دارند استفاده شود.
- بدون --may-exist، تلاش برای ایجاد پورتی که از قبل وجود دارد یک خطا است. با --may-exist، اگر port از قبل روی bridge وجود داشته باشد و دقیقاً رابطهای مشخصشده را به هم باند کند، این دستور هیچ کاری انجام نمیدهد.
- [--may-exist] add-bond-iface bond iface
- رابط iface را به عنوان یک رابط باند جدید به پورت موجود bond اضافه میکند. اگر bond قبلاً تنها یک پورت داشت، این دستور آن را به یک باند تبدیل میکند.
- بدون --may-exist، تلاش برای افزودن یک iface که از قبل بخشی از bond است یک خطا است. با --may-exist، اگر iface از قبل بخشی از bond باشد، این دستور هیچ کاری انجام نمیدهد. (اگر iface رابط پورت یا باند دیگری باشد، همچنان یک خطا محسوب میشود.)
- [--if-exists] del-bond-iface [bond] iface
- رابط iface را از پورت خود حذف میکند. اگر bond حذف شود، iface از هر پورتی که حاوی آن است حذف میشود؛ اگر bond مشخص شود، باید پورتی باشد که حاوی bond است.
- اگر حذف iface باعث شود پورت آن تنها دارای یک رابط شود، آنگاه آن پورت از یک باند به یک پورت معمولی تبدیل میشود. اگر iface تنها رابط موجود در پورت خود باشد، یک خطا است.
- بدون --if-exists، تلاش برای حذف رابطی که وجود ندارد یک خطا است. با --if-exists، تلاش برای حذف رابطی که وجود ندارد هیچ اثری ندارد.
دستورات رابط (Interface Commands)
این دستورات رابطهای متصل به یک پل Open vSwitch را بررسی میکنند. این دستورات با یک پورت باندشده به عنوان مجموعهای از دو یا چند رابط رفتار میکنند، نه به عنوان یک پورت منفرد.
- list-ifaces bridge
- تمام رابطهای درون bridge را در خروجی استاندارد، هر کدام در یک خط، فهرست میکند. پورت محلی bridge در این فهرست گنجانده نمیشود.
- iface-to-br iface
- نام پلی که حاوی iface است را در خروجی استاندارد چاپ میکند.
دستورات ناحیه ردیابی اتصال (Conntrack Zone Commands)
این دستورات نواحی CT مسیر داده (datapath)، سیاستهای مهلت زمانی و محدودیتها را پرسوجو کرده و تغییر میدهند.
- [--may-exist] add-zone-tp datapath zone=zone_id policies
- یک سیاست مهلت زمانی برای ناحیه conntrack با zone_id در datapath ایجاد میکند. مقادیر policies شامل جفتهای key=value است که با فاصله از هم جدا شدهاند. برای مثال، icmp_first=30 icmp_reply=60 یک سیاست مهلت زمانی ۳۰ ثانیهای را برای اولین بسته ICMP و یک سیاست ۶۰ ثانیهای را برای بستههای پاسخ ICMP مشخص میکند. جدول CT_Timeout_Policy در ovs-vswitchd.conf.db(5) را برای کلیدهای پشتیبانیشده ببینید.
- بدون --may-exist، تلاش برای افزودن یک policy برای zone_id که از قبل دارای یک سیاست است، خطا محسوب میشود. با --may-exist، اگر سیاستی برای zone_id از قبل وجود داشته باشد، این دستور هیچ کاری انجام نمیدهد.
- [--if-exists] del-zone-tp datapath zone=zone_id
- سیاست مهلت زمانی مرتبط با zone_id را از datapath حذف میکند.
- بدون --if-exists، تلاش برای حذف سیاست برای ناحیهای که وجود ندارد یا سیاستی ندارد یک خطا است. با --if-exists، تلاش برای حذف سیاستی که وجود ندارد هیچ اثری ندارد.
- list-zone-tp datapath
- سیاستهای مهلت زمانی تمام نواحی در datapath را چاپ میکند.
- set-zone-limit datapath zone_id|default zone_limit
- یک محدودیت ناحیه conntrack با zone_id|default را در datapath تنظیم میکند. مقدار 0 برای limit به معنای نامحدود است.
- [--if-exists] del-zone-limit datapath zone_id|default
- محدودیت مرتبط با zone_id را از datapath حذف میکند.
- بدون --if-exists، تلاش برای حذف محدودیت برای ناحیهای که وجود ندارد یا محدودیتی ندارد یک خطا است. با --if-exists، تلاش برای حذف محدودیتی که وجود ندارد هیچ اثری ندارد.
- list-zone-limits datapath
- محدودیتهای تمام نواحی در datapath را چاپ میکند.
دستور قابلیتهای مسیر داده (Datapath Capabilities Command)
این دستور قابلیتهای مسیر داده (datapath) را پرسوجو میکند.
- list-dp-cap datapath
- قابلیتهای مسیر داده را چاپ میکند.
اتصال کنترلر اوپنفلو (OpenFlow Controller Connectivity)
ovs-vswitchd میتواند تمام عملیات پلزنی و سوئیچینگ پیکربندیشده را به صورت محلی انجام دهد، یا میتواند برای برقراری ارتباط با یک یا چند کنترلر خارجی OpenFlow پیکربندی شود. سوئیچ معمولاً به گونهای پیکربندی میشود که به یک کنترلر اصلی متصل شود که مسئولیت جدول جریان پل را به منظور پیادهسازی یک سیاست شبکه به عهده میگیرد. علاوه بر این، سوئیچ میتواند برای گوش دادن به اتصالات دریافتی از کنترلرهای سرویس پیکربندی شود. کنترلرهای سرویس معمولاً برای پشتیبانی و نگهداری دورهای، به عنوان مثال با ovs-ofctl استفاده میشوند.
- get-controller bridge
- مقصد کنترلر پیکربندیشده را چاپ میکند.
- del-controller bridge
- مقصد کنترلر پیکربندیشده را حذف میکند.
- set-controller bridge target...
- مقصد یا مقاصد کنترلر پیکربندیشده را تنظیم میکند. هر target میتواند از هر یک از قالبهای زیر استفاده کند:
- ssl:host[:port]
-
- tcp:host[:port]
- شماره port مشخصشده روی host دادهشده، که میتواند به عنوان یک نام DNS (اگر با کتابخانه unbound ساخته شده باشد) یا یک آدرس IP در قالب آدرسهای IPv4 یا IPv6 بیان شود. آدرسهای IPv6 را در براکتهای مربع قرار دهید، مانند tcp:[::1]:6653. در لینوکس، از %device برای تعیین محدوده (scope) آدرسهای پیوند-محلی IPv6 استفاده کنید، مانند tcp:[fe80::1234%eth0]:6653. برای ssl، گزینههای --private-key، --certificate و --ca-cert الزامی هستند.
- اگر port مشخص نشود، مقدار پیشفرض آن ۶۶۵۳ است.
- unix:file
- روی سیستمهای سازگار با POSIX، یک سوکت سرور دامنه یونیکس به نام file.
- pssl:[port][:host]
-
- ptcp:[port][:host]
- روی port منتظر اتصالات OpenFlow میماند. مقدار پیشفرض port برابر ۶۶۵۳ است. به طور پیشفرض، اتصالات از هر آدرس IPv4 مجاز است. host را به عنوان یک آدرس IPv4 یا یک آدرس IPv6 درون براکت مشخص کنید (مانند ptcp:6653:[::1]). در لینوکس، از %device برای تعیین محدوده آدرسهای پیوند-محلی IPv6 استفاده کنید، مانند ptcp:6653:[fe80::1234%eth0]. اگر برنامه با کتابخانه unbound ساخته شده باشد، میتوان از نامهای DNS استفاده کرد. برای pssl، گزینههای --private-key، --certificate و --ca-cert الزامی هستند.
- punix:file
- روی سوکت سرور دامنه یونیکس به نام file به اتصالات OpenFlow گوش میدهد.
هنگامی که یک کنترلر پیکربندی میشود، معمولاً مسئول برپاسازی تمام جریانها روی سوئیچ است. بنابراین، اگر اتصال به کنترلر قطع شود، هیچ اتصال شبکه جدیدی برقرار نخواهد شد. اگر اتصال به کنترلر برای مدت طولانی قطع بماند، هیچ بستهای اصلاً نمیتواند از سوئیچ عبور کند.
اگر مقدار برابر با standalone باشد، یا اگر هیچیک از این تنظیمات تعیین نشده باشند، در صورتی که برای مدتی معادل سه برابر بازه پروب عدمفعالیت پیامی از کنترلر دریافت نشود، ovs-vswitchd مسئولیت راهاندازی جریانها را به عهده خواهد گرفت. در این حالت، ovs-vswitchd باعث میشود مسیر داده (datapath) مانند یک سوئیچ یادگیرنده MAC معمولی عمل کند. ovs-vswitchd در پسزمینه به تلاش برای اتصال مجدد به کنترلر ادامه خواهد داد و هنگامی که اتصال برقرار شد، رفتار مستقل (standalone) خود را متوقف میکند.
اگر این گزینه روی secure تنظیم شود، با قطع اتصال کنترلر، ovs-vswitchd جریانها را خودش به تنهایی راهاندازی نخواهد کرد.
- get-fail-mode bridge
- حالت شکست پیکربندیشده را چاپ میکند.
- del-fail-mode bridge
- حالت شکست پیکربندیشده را حذف میکند.
- set-fail-mode bridge standalone|secure
- حالت شکست پیکربندیشده را تنظیم میکند.
اتصال مدیر (Manager Connectivity)
این دستورات ستون manager_options در جدول Open_vSwitch و ردیفهای جدول Managers را تغییر میدهند. هنگامی که ovsdb-server برای استفاده از ستون manager_options جهت اتصالات OVSDB پیکربندی شده باشد (همانطور که در اسکریپتهای راهاندازی ارائهشده همراه با Open vSwitch توضیح داده شده است؛ گزینه دستوری معادل در ovsdb-server برابر --remote=db:Open_vSwitch,Open_vSwitch,manager_options است)، این امکان به مدیر سیستم داده میشود تا از ovs-vsctl برای پیکربندی اتصالات پایگاه داده استفاده کند.
- get-manager
- مدیر(های) پیکربندیشده را چاپ میکند.
- del-manager
- مدیر(های) پیکربندیشده را حذف میکند.
- set-manager target...
- مقصد یا مقاصد مدیر پیکربندیشده را تنظیم میکند. هر target ممکن است یک روش اتصال فعال یا غیرفعال OVSDB باشد، مانند pssl:6640، همانطور که در ovsdb(7) توصیف شده است.
پیکربندی SSL/TLS (SSL/TLS Configuration)
هنگامی که ovs-vswitchd برای اتصال از طریق SSL/TLS به منظور مدیریت یا اتصال کنترلر پیکربندی میشود، پارامترهای زیر الزامی هستند:
- private-key
- یک فایل PEM حاوی کلید خصوصی را مشخص میکند که به عنوان هویت سوئیچ مجازی برای اتصالات SSL/TLS به کنترلر استفاده میشود.
- certificate
- یک فایل PEM حاوی گواهی امضاشده توسط مرجع صدور گواهی (CA) مورداستفاده کنترلر و مدیر را مشخص میکند که کلید خصوصی سوئیچ مجازی را تایید کرده و یک سوئیچ قابل اعتماد را شناسایی میکند.
- ca-cert
- یک فایل PEM حاوی گواهی CA را مشخص میکند که برای اعتبارسنجی اتصال سوئیچ مجازی به یک کنترلر قابل اعتماد به کار میرود.
این فایلها تنها یک بار در زمان راهاندازی ovs-vswitchd خوانده میشوند. اگر محتوای آنها تغییر کند، ovs-vswitchd باید متوقف و مجدداً راهاندازی شود.
این تنظیمات SSL/TLS بر روی تمام اتصالات SSL/TLS برقرارشده توسط سوئیچ مجازی اعمال میشوند.
- get-ssl
- پیکربندی SSL/TLS را چاپ میکند.
- del-ssl
- پیکربندی فعلی SSL/TLS را حذف میکند.
- [--bootstrap] set-ssl private-key certificate ca-cert
- پیکربندی SSL/TLS را تنظیم میکند. گزینه --bootstrap در زیر توضیح داده شده است.
معمولاً، تمام فایلهای نامبرده در پیکربندی SSL/TLS باید هنگام شروع به کار ovs-vswitchd وجود داشته باشند. با این حال، اگر فایل ca-cert وجود نداشته باشد و گزینه --bootstrap داده شده باشد، ovs-vswitchd در اولین اتصال SSL/TLS خود تلاش خواهد کرد گواهی CA را از کنترلر دریافت کرده و آن را در فایل PEM مشخصشده ذخیره کند. در صورت موفقیت، بلافاصله اتصال را قطع کرده و مجدداً متصل میشود و از آن به بعد تمام اتصالات SSL/TLS باید توسط گواهی امضاشده با گواهی CA بهدستآمده اعتبارسنجی شوند.
این گزینه اتصال SSL/TLS را در معرض حمله مرد میانی (man-in-the-middle) برای دریافت گواهی اولیه CA قرار میدهد، اما ممکن است برای راهاندازی اولیه (bootstrapping) مفید باشد.
این گزینه تنها زمانی مفید است که کنترلر گواهی CA خود را به عنوان بخشی از زنجیره گواهی SSL/TLS ارسال کند. پروتکلهای SSL/TLS نیازی ندارند که کنترلر گواهی CA را ارسال کند.
دستورات اتصال خودکار (Auto-Attach Commands)
پیشنویس استاندارد Auto-Attach SPBM از IETF روشی فشرده برای استفاده از پروتکل کشف لایه پیوند (LLDP) تحت استاندارد IEEE 802.1AB همراه با شبکه پلزنی کوتاهترین مسیر (SPB) تحت استاندارد IEEE 802.1aq را به منظور اتصال خودکار دستگاههای شبکه به سرویسهای جداگانه در یک شبکه SPB توصیف میکند. هدف در اینجا این است که به برنامهها و دستگاههای شبکهای که از OVS استفاده میکنند اجازه داده شود به سادگی از قابلیتهای ارائهشده توسط شبکههای SPB استاندارد صنعت بهرهمند شوند. یک عنصر بنیادین در ویژگی اتصال خودکار، نگاشت VLANهای سنتی به I_SIDهای شبکه SPB است. این دستورات نگاشتهای I-SID/VLAN اتصال خودکار را مدیریت میکنند.
- add-aa-mapping bridge i-sid vlan
- یک نگاشت جدید اتصال خودکار روی bridge برای i-sid و vlan ایجاد میکند.
- del-aa-mapping bridge i-sid vlan
- یک نگاشت اتصال خودکار روی bridge برای i-sid و vlan را حذف میکند.
- get-aa-mapping bridge
- تمام نگاشتهای اتصال خودکار درون bridge را در خروجی استاندارد فهرست میکند.
دستورات پایگاه داده (Database Commands)
این دستورات محتوای جدولهای ovsdb را پرسوجو و اصلاح میکنند. آنها یک انتزاع جزئی از رابط ovsdb هستند و به همین دلیل در سطحی پایینتر از سایر دستورات ovs-vsctl عمل میکنند.
هر یک از این دستورات دارای پارامتر table برای شناسایی یک جدول درون پایگاه داده هستند. بسیاری از آنها پارامتر record را نیز دریافت میکنند که یک رکورد خاص را درون یک جدول مشخص مینماید. پارامتر record ممکن است شناسه UUID یک رکورد باشد و بسیاری از جدولها روشهای دیگری را نیز برای شناسایی رکوردها ارائه میدهند. برخی از دستورات پارامترهای column را نیز دریافت میکنند که یک فیلد خاص را درون رکوردهای یک جدول مشخص میسازد.
برای مشاهده فهرستی از جدولها و ستونهای آنها، به ovs-vswitchd.conf.db(5) مراجعه کنید یا فهرست جدولها را از طریق گزینه --help مشاهده نمایید.
نامهای رکوردها باید به طور کامل و با رعایت حروف بزرگ و کوچک مشخص شوند، با این استثنا که شناسههای UUID را میتوان به ۴ رقم هگزادسیمال اول (یا بیشتر) آنها خلاصه کرد، مشروط بر اینکه درون آن جدول یکتا باشند. نامهای جدولها و ستونها به بزرگی و کوچکی حروف حساس نیستند، و خط تیره (-) و زیرخط (_) به جای یکدیگر قابل استفاده هستند. اختصارهای یکتا از نامهای جدولها و ستونها پذیرفتنی است؛ برای مثال، net یا n برای شناسایی جدول NetFlow کفایت میکند.
هر ستون در پایگاه داده نوع مشخصی از داده را میپذیرد. انواع پایه تعریفشده کنونی و نمایش آنها عبارتند از:
- عدد صحیح (integer)
- یک عدد صحیح دهدهی در محدوده -2**63 تا 2**63-1 (شامل هر دو مقدار).
- عدد حقیقی (real)
- یک عدد ممیز شناور.
- بولی (Boolean)
- درست یا نادرست، که به ترتیب به صورت true یا false نوشته میشوند.
- رشته (string)
- یک رشته دلخواه یونیکد، به جز این که بایتهای تهی (null) مجاز نیستند. نقلقول برای اکثر رشتههایی که با یک حرف انگلیسی یا زیرخط شروع میشوند و تنها شامل حروف، زیرخط، خط تیره و نقطه هستند اختیاری است. با این حال، true و false و رشتههایی که با نحو شناسههای UUID مطابقت دارند (زیر را ببینید) باید درون جفتگیومه قرار گیرند تا از سایر انواع پایه متمایز شوند. هنگامی که از جفتگیومه استفاده میشود، نحو شبیه رشتهها در JSON است؛ به عنوان مثال، میتوان از بکاسلش برای اسکیپ کردن کاراکترهای خاص استفاده کرد. رشته خالی باید به صورت یک جفت گیومه دوگانه ("") نمایش داده شود.
- شناسه یکتا (UUID)
- یک شناسه یکتای جهانی به سبک RFC 4122 (مانند f81d4fae-7dec-11d0-a765-00a0c91e6bf6)، یا یک @name تعریفشده توسط یک دستور get یا create درون همان فراخوانی ovs-vsctl.
چندین مقدار در یک ستون منفرد ممکن است با فاصله یا یک کامای منفرد از یکدیگر جدا شوند. هنگام حضور چندین مقدار، مقادیر تکراری مجاز نیستند و ترتیب آنها اهمیتی ندارد. در مقابل، برخی ستونهای پایگاه داده میتوانند دارای یک مجموعه خالی از مقادیر باشند که به صورت [] نشان داده میشود، و براکتها میتوانند به صورت اختیاری سایر مجموعههای غیرخالی یا مقادیر منفرد را نیز احاطه کنند. برای ستونی که مجموعهای از اعداد صحیح را میپذیرد، دستورات پایگاه داده یک محدوده (range) را میپذیرند. یک محدوده با دو عدد صحیح که توسط - از هم جدا شدهاند نمایش داده میشود. محدوده شامل هر دو نقطه ابتدا و انتها است. یک محدوده دارای بیشینه اندازه ۴۰۹۶ عنصر است. اگر به عناصر بیشتری نیاز باشد، میتوان آنها را در محدودههای جداگانه مشخص کرد.
تعداد کمی از ستونهای پایگاه داده «نگاشتها» (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 آنها مجموعه تهی باشد یا شامل ۱ یا ۲ یا هر دو باشد.
- {<}
- رکوردهایی را انتخاب میکند که در آنها column[:key] زیرمجموعه سرهای (proper subset) از value باشد. برای مثال، flood-vlans{<}1,2 رکوردهایی را انتخاب میکند که ستون flood-vlans آنها مجموعه تهی باشد یا شامل ۱ یا ۲ باشد اما نه هر دوی آنها.
- {>=} {>}
- به ترتیب همانند {<=} و {<} است، با این تفاوت که رابطه معکوس میشود. برای مثال، flood-vlans{>=}1,2 رکوردهایی را انتخاب میکند که ستون flood-vlans آنها شامل هر دو مقدار ۱ و ۲ باشد.
عملگرهای زیر تنها در Open vSwitch نسخه ۲٫۱۶ و بالاتر در دسترس هستند:
- {in}
- رکوردهایی را انتخاب میکند که در آنها هر عنصر موجود در column[:key] درون value نیز موجود باشد. (این معادل همان {<=} است.)
- {not-in}
- رکوردهایی را انتخاب میکند که در آنها هر عنصر موجود در column[:key] درون value وجود نداشته باشد.
- برای عملگرهای محاسباتی (= != < > <= >=)، هنگامی که key مشخص شده باشد اما column یک رکورد خاص شامل آن key نباشد، آن رکورد همواره از نتایج حذف میشود. بنابراین، شرط other-config:mtu!=1500 با رکوردهایی مطابقت دارد که کلید mtu داشته باشند و مقدار آن ۱۵۰۰ نباشد، اما با رکوردهایی که فاقد کلید mtu هستند مطابقت ندارد.
- برای عملگرهای مجموعهای، هنگامی که key مشخص شده باشد اما column یک رکورد خاص شامل آن key نباشد، مقایسه با یک مجموعه خالی انجام میشود. بنابراین، شرط other-config:mtu{!=}1500 هم با رکوردهایی که کلید mtu با مقداری غیر از ۱۵۰۰ دارند و هم با رکوردهایی که فاقد کلید mtu هستند مطابقت دارد.
- فراموش نکنید که کاراکترهای < یا > را اسکیپ کنید تا توسط پوسته تفسیر نشوند.
- اگر --columns مشخص شده باشد، تنها ستونهای درخواستی به ترتیب مشخصشده فهرست میشوند. در غیر این صورت، تمام ستونها به ترتیب الفبایی نام ستون فهرست میگردند.
- شناسههای UUID نمایش داده شده برای ردیفهای ایجادشده درون همان فراخوانی ovs-vsctl نادرست خواهند بود.
- [--if-exists] [--id=@name] get table record [column[:key]]...
- مقدار هر column مشخصشده در record دادهشده در table را چاپ میکند. برای ستونهای نگاشت، میتوان به صورت اختیاری یک key را مشخص کرد، که در این صورت به جای کل نگاشت، تنها مقدار مرتبط با key در آن ستون چاپ میشود.
- بدون --if-exists، اگر record وجود نداشته باشد یا اگر key مشخص شده باشد و آن key در record وجود نداشته باشد، خطا رخ میدهد. با --if-exists، رکورد ناموجود هیچ خروجی تولید نمیکند و کلید ناموجود یک خط خالی چاپ میکند.
- اگر @name مشخص شده باشد، شناسه UUID رکورد record میتواند بعداً در همان فراخوانی ovs-vsctl در جاهایی که یک UUID انتظار میرود با این نام ارجاع داده شود.
- هر دو گزینه --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 برای سطر جدید میتواند بعداً در بخشهای دیگر همان فراخوانی ovs-vsctl در زمینههایی که یک 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ها باید وجود داشته باشند.
- --all destroy table
- تمام رکوردهای موجود در table را حذف میکند.
- هشدار (ovs-vsctl به عنوان مثال)
- دستور destroy تنها برای رکوردهای موجود در جدولهای QoS یا Queue مفید است. رکوردها در جدولهای دیگر زمانی که از جدول Open_vSwitch غیرقابل دسترسی شوند، به صورت خودکار از پایگاه داده حذف میشوند. این بدان معناست که حذف آخرین ارجاع به یک رکورد برای حذف خود آن رکورد کافی است. برای رکوردها در این جدولها، دستور destroy بدون هشدار نادیده گرفته میشود. برای اطلاعات بیشتر بخش مثالها (EXAMPLES) در زیر را ببینید.
- wait-until table record [column[:key]=value]...
- صبر میکند تا جدول 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 وجود نداشته باشد متوقف خواهد شد.
- بهتر است گزینه --timeout=0 را همراه با --wait-until مشخص کنید تا از خاتمه یافتن ovs-vsctl پس از حداکثر ۵ ثانیه انتظار جلوگیری شود.
- comment [arg]...
- این دستور هیچ تاثیری بر رفتار سیستم ندارد، اما هر رکورد گزارش پایگاه داده که توسط این دستور ایجاد شود، شامل این دستور و آرگومانهای آن خواهد بود.
مثالها (EXAMPLES)
ایجاد یک پل جدید به نام br0 و افزودن پورت eth0 به آن:
- ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
روش دیگر، انجام هر دو عملیات در یک تراکنش اتمیک واحد:
- ovs-vsctl add-br br0 -- add-port br0 eth0
حذف پل br0، و گزارش خطا در صورتی که پل وجود نداشته باشد:
- ovs-vsctl del-br br0
حذف پل br0 در صورت وجود:
- ovs-vsctl --if-exists del-br br0
تنظیم ستون qos در رکورد Port برای eth0 به گونهای که به یک رکورد جدید QoS اشاره کند، که آن رکورد نیز به نوبه خود با صف شماره ۰ به یک رکورد جدید Queue اشاره میکند:
- ovs-vsctl -- set port eth0 qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:max-rate=1000000 queues:0=@newqueue -- --id=@newqueue create queue other-config:min-rate=1000000 other-config:max-rate=1000000
دستورالعملهای پیکربندی (CONFIGURATION COOKBOOK)
پیکربندی پورت (Port Configuration)
افزودن یک «پورت داخلی» به نام vlan10 به پل br0 به عنوان یک پورت دسترسی VLAN برای VLAN شماره ۱۰، و پیکربندی آن با یک آدرس IP:
- ovs-vsctl add-port br0 vlan10 tag=10 -- set Interface vlan10 type=internal
- ip addr add 192.168.0.123/24 dev vlan10
افزودن یک پورت تونل GRE به نام gre0 به آدرس IP راه دور 1.2.3.4 به پل br0:
- ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=1.2.3.4
آینهسازی پورت (Port Mirroring)
آینهسازی تمام بستههای دریافتی یا ارسالی روی eth0 یا eth1 بر روی eth2، با این فرض که تمام این پورتها روی پل br0 وجود دارند (به عنوان یک اثر جانبی، این کار باعث نادیده گرفته شدن بستههای دریافتی روی eth2 میشود):
- ovs-vsctl -- set Bridge br0 mirrors=@m \
- -- --id=@eth0 get Port eth0 \
- -- --id=@eth1 get Port eth1 \
- -- --id=@eth2 get Port eth2 \
- -- --id=@m create Mirror name=mymirror select-dst-port=@eth0,@eth1 select-src-port=@eth0,@eth1 output-port=@eth2
حذف آینه ایجادشده در بالا از br0، که باعث نابودی رکورد Mirror نیز میشود (زیرا دیگر ارجاعی به آن وجود ندارد):
- ovs-vsctl -- --id=@rec get Mirror mymirror \
- -- remove Bridge br0 mirrors @rec
دستور سادهتر زیر نیز همین کار را انجام میدهد:
- ovs-vsctl clear Bridge br0 mirrors
کیفیت خدمات (Quality of Service - QoS)
ایجاد یک رکورد QoS از نوع linux-htb که به چند صف اشاره میکند و استفاده از آن روی eth0 و eth1:
- ovs-vsctl -- set Port eth0 qos=@newqos \
- -- set Port eth1 qos=@newqos \
- -- --id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1 \
- -- --id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000 \
- -- --id=@q1 create Queue other-config:min-rate=500000000
حذف پیکربندی رکورد QoS فوق فقط از روی eth1:
- ovs-vsctl clear Port eth1 qos
برای حذف پیکربندی رکورد QoS از هر دو پورت eth0 و eth1 و سپس حذف خود رکورد QoS (که باید صراحتاً انجام شود زیرا رکوردهای QoS بدون ارجاع به صورت خودکار نابود نمیشوند):
- ovs-vsctl -- destroy QoS eth0 -- clear Port eth0 qos -- clear Port eth1 qos
(این دستور دو رکورد Queue بدون ارجاع را در پایگاه داده باقی میگذارد. برای حذف آنها، از "ovs-vsctl list Queue" برای یافتن UUIDهای آنها استفاده کنید، سپس از "ovs-vsctl destroy Queue uuid1 uuid2" برای نابودی هر یک از آنها استفاده نمایید یا برای حذف تمام رکوردها دستور "ovs-vsctl -- --all destroy Queue" را به کار ببرید.)
پایش اتصال (Connectivity Monitoring)
پایش اتصال به یک نقطه نگهداری راه دور روی eth0.
- ovs-vsctl set Interface eth0 cfm_mpid=1
حذف پیکربندی پایش اتصال از موارد فوق:
- ovs-vsctl clear Interface eth0 cfm_mpid
نتفلو (NetFlow)
پیکربندی پل br0 برای ارسال رکوردهای NetFlow به پورت UDP شماره ۵۵۶۶ روی میزبان 192.168.0.34، با مهلت زمانی فعال ۳۰ ثانیه:
- ovs-vsctl -- set Bridge br0 netflow=@nf \
- -- --id=@nf create NetFlow targets=\"192.168.0.34:5566\" active-timeout=30
بهروزرسانی پیکربندی NetFlow ایجادشده با دستور قبلی برای استفاده از مهلت زمانی فعال ۶۰ ثانیه:
- ovs-vsctl set NetFlow br0 active_timeout=60
حذف تنظیمات NetFlow از پل br0، که باعث نابودی رکورد NetFlow نیز میشود (چرا که دیگر ارجاعی به آن وجود ندارد):
- ovs-vsctl clear Bridge br0 netflow
اسفلو (sFlow)
پیکربندی پل br0 برای ارسال رکوردهای sFlow به یک گردآورنده روی 10.0.0.1 در پورت ۶۳۴۳، با استفاده از آدرس IP پورت eth1 به عنوان مبدا و با پارامترهای نمونهبرداری مشخص:
- ovs-vsctl -- --id=@s create sFlow agent=eth1 target=\"10.0.0.1:6343\" header=128 sampling=64 polling=10 \
- -- set Bridge br0 sflow=@s
حذف sFlow از پل br0، که رکورد sFlow را نیز نابود میکند (چرا که دیگر ارجاعی به آن وجود ندارد):
- ovs-vsctl -- clear Bridge br0 sflow
آیپیفیکس (IPFIX)
پیکربندی پل br0 برای ارسال یک رکورد جریان IPFIX به ازای هر نمونه بسته به پورت UDP شماره ۴۷۳۹ روی میزبان 192.168.0.34، با شناسه دامنه مشاهده ۱۲۳ و شناسه نقطه مشاهده ۴۵۶، مهلت زمانی فعال حافظه نهان جریان ۱ دقیقه (۶۰ ثانیه)، بیشینه اندازه حافظه نهان جریان ۱۳ جریان، و نمونهبرداری از جریانها روی پورت خروجی همراه با اطلاعات تونل (نمونهبرداری روی پورتهای ورودی و خروجی در صورت غیرفعال نشدن، به صورت پیشفرض فعال است):
- ovs-vsctl -- set Bridge br0 ipfix=@i \
- -- --id=@i create IPFIX targets=\"192.168.0.34:4739\" obs_domain_id=123 obs_point_id=456 cache_active_timeout=60 cache_max_flows=13 \
- other_config:enable-input-sampling=false other_config:enable-tunnel-sampling=true
حذف تنظیمات IPFIX از پل br0، که رکورد IPFIX را نیز نابود میکند (چرا که دیگر ارجاعی به آن وجود ندارد):
- ovs-vsctl clear Bridge br0 ipfix
پروتکل درخت پوشا (802.1D Spanning Tree Protocol - STP)
پیکربندی پل br0 برای مشارکت در یک درخت پوشای 802.1D:
- ovs-vsctl set Bridge br0 stp_enable=true
تنظیم اولویت پل br0 به 0x7800:
- ovs-vsctl set Bridge br0 other_config:stp-priority=0x7800
تنظیم هزینه مسیرِ پورت eth0 به ۱۰:
- ovs-vsctl set Port eth0 other_config:stp-path-cost=10
حذف پیکربندی STP از موارد فوق:
- ovs-vsctl set Bridge br0 stp_enable=false
اسنوپینگ چندپخشی (Multicast Snooping)
پیکربندی پل br0 برای فعالسازی اسنوپینگ چندپخشی (multicast snooping):
- ovs-vsctl set Bridge br0 mcast_snooping_enable=true
تنظیم زمان کهنگی اسنوپینگ چندپخشی روی br0 به ۳۰۰ ثانیه:
- ovs-vsctl set Bridge br0 other_config:mcast-snooping-aging-time=300
تنظیم اندازه جدول اسنوپینگ چندپخشی روی br0 به ۲۰۴۸ مدخل:
- ovs-vsctl set Bridge br0 other_config:mcast-snooping-table-size=2048
غیرفعالسازی سیلابسازی (flooding) بستههای چندپخشی ثبتنشده به تمام پورتها. هنگامی که روی true تنظیم شود، سوئیچ بستههای چندپخشی ثبتنشده را تنها به پورتهای متصل به مسیریابهای چندپخشی ارسال میکند. هنگامی که روی false تنظیم شود، سوئیچ آنها را به تمام پورتها ارسال میکند. این دستور ارسال سیلآسای بستههای ثبتنشده روی پل br0 را غیرفعال میکند.
- ovs-vsctl set Bridge br0 other_config:mcast-snooping-disable-flood-unregistered=true
فعالسازی ارسال سیلآسای بستههای چندپخشی (به جز Reports) روی یک پورت خاص.
- ovs-vsctl set Port eth1 other_config:mcast-snooping-flood=true
فعالسازی ارسال سیلآسای Reports روی یک پورت خاص.
- ovs-vsctl set Port eth1 other_config:mcast-snooping-flood-reports=true
حذف پیکربندی اسنوپینگ چندپخشی از موارد فوق:
- ovs-vsctl set Bridge br0 mcast_snooping_enable=false
پروتکل درخت پوشای سریع (802.1D-2004 Rapid Spanning Tree Protocol - RSTP)
پیکربندی پل br0 برای مشارکت در یک پروتکل درخت پوشای سریع 802.1D-2004:
- ovs-vsctl set Bridge br0 rstp_enable=true
تنظیم آدرس پل br0 به 00:aa:aa:aa:aa:aa :
- ovs-vsctl set Bridge br0 other_config:rstp-address=00:aa:aa:aa:aa:aa
تنظیم اولویت پل br0 به 0x7000. مقدار باید در قالب دهدهی مشخص شود و باید مضربی از ۴۰۹۶ باشد (در غیر این صورت، به نزدیکترین مضرب ۴۰۹۶ به سمت پایین گرد میشود). مقدار اولویت پیشفرض 0x800 (۳۲۷۶۸) است.
- ovs-vsctl set Bridge br0 other_config:rstp-priority=28672
تنظیم زمان کهنگی پل br0 به ۱۰۰۰ ثانیه. مقدار زمان کهنگی باید بین ۱۰ ثانیه و ۱۰۰۰۰۰۰ ثانیه باشد. مقدار پیشفرض ۳۰۰ ثانیه است.
- ovs-vsctl set Bridge br0 other_config:rstp-ageing-time=1000
تنظیم نسخه اجباری پروتکل پل br0 به ۰. نسخه اجباری پروتکل دو مقدار پذیرفتنی دارد: ۰ (حالت سازگاری با STP) و ۲ (عملکرد عادی).
- ovs-vsctl set Bridge br0 other_config:rstp-force-protocol-version=0
تنظیم بیشینه طول عمر پل br0 به ۱۰ ثانیه. مقدار بیشینه طول عمر باید بین ۶ ثانیه و ۴۰ ثانیه باشد. مقدار پیشفرض ۲۰ ثانیه است.
- ovs-vsctl set Bridge br0 other_config:rstp-max-age=10
تنظیم تاخیر ارسال پل br0 به ۱۵ ثانیه. این مقدار باید بین ۴ ثانیه و ۳۰ ثانیه باشد. مقدار پیشفرض ۱۵ ثانیه است.
- ovs-vsctl set Bridge br0 other_config:rstp-forward-delay=15
تنظیم تعداد نگهداشت ارسال پل br0 به ۷ ثانیه. این مقدار باید بین ۱ ثانیه و ۱۰ ثانیه باشد. مقدار پیشفرض ۶ ثانیه است.
- ovs-vsctl set Bridge br0 other_config:rstp-transmit-hold-count=7
فعالسازی RSTP روی پورت eth0:
- ovs-vsctl set Port eth0 other_config:rstp-enable=true
غیرفعالسازی RSTP روی پورت eth0:
- ovs-vsctl set Port eth0 other_config:rstp-enable=false
تنظیم اولویت پورت eth0 به ۳۲. مقدار باید در قالب دهدهی مشخص شود و باید مضربی از ۱۶ باشد (در غیر این صورت، به نزدیکترین مضرب ۱۶ به سمت پایین گرد میشود). مقدار اولویت پیشفرض 0x80 (۱۲۸) است.
- ovs-vsctl set Port eth0 other_config:rstp-port-priority=32
تنظیم شماره پورتِ پورت eth0 به ۳:
- ovs-vsctl set Port eth0 other_config:rstp-port-num=3
تنظیم هزینه مسیرِ پورت eth0 به ۱۵۰:
- ovs-vsctl set Port eth0 other_config:rstp-path-cost=150
تنظیم مقدار لبه مدیریتی (admin edge) برای پورت eth0:
- ovs-vsctl set Port eth0 other_config:rstp-port-admin-edge=true
تنظیم مقدار لبه خودکار (auto edge) برای پورت eth0:
- ovs-vsctl set Port eth0 other_config:rstp-port-auto-edge=true
تنظیم مقدار MAC نقطه به نقطه مدیریتی برای پورت eth0. مقادیر پذیرفتنی شامل 0 (غیر نقطه به نقطه)، 1 (نقطه به نقطه، مقدار پیشفرض) یا 2 (تشخیص خودکار) است. حالت تشخیص خودکار در حال حاضر پیادهسازی نشده است و مقدار 2 همان اثر 0 (غیر نقطه به نقطه) را دارد.
- ovs-vsctl set Port eth0 other_config:rstp-admin-p2p-mac=1
تنظیم مقدار وضعیت پورت مدیریتی برای پورت eth0. مقدار true مقدار پیشفرض است.
- ovs-vsctl set Port eth0 other_config:rstp-admin-port-state=false
تنظیم مقدار mcheck برای پورت eth0:
- ovs-vsctl set Port eth0 other_config:rstp-port-mcheck=true
حذف پیکربندی RSTP از موارد فوق:
- ovs-vsctl set Bridge br0 rstp_enable=false
نسخه اوپنفلو (OpenFlow Version)
پیکربندی پل br0 برای پشتیبانی از نسخههای ۱٫۰، ۱٫۲ و ۱٫۳ پروتکل OpenFlow:
- ovs-vsctl set bridge br0 protocols=OpenFlow10,OpenFlow12,OpenFlow13
پیکربندی جدول جریان (Flow Table Configuration)
تنظیم جدول جریان شماره ۰ روی پل br0 به گونهای که از پذیرش بیش از ۱۰۰ جریان خودداری کند:
- ovs-vsctl -- --id=@ft create Flow_Table flow_limit=100 overflow_policy=refuse -- set Bridge br0 flow_tables=0=@ft
تنظیم جدول جریان شماره ۰ روی پل br0 برای بیرون انداختن جریانها در صورت فراتر رفتن از ۱۰۰ جریان، با رعایت عدالت بر مبنای پورت ورودی منطبقشده:
- ovs-vsctl -- --id=@ft create Flow_Table flow_limit=100 overflow_policy=evict groups='"NXM_OF_IN_PORT[]"' -- set Bridge br0 flow_tables:0=@ft
وضعیت خروج (EXIT STATUS)
- 0
- اجرای موفقیتآمیز برنامه.
- 1
- خطای کاربرد، نحو یا فایل پیکربندی.
- 2
- آرگومان bridge برای br-exists نام پلی را مشخص کرده است که وجود ندارد.
- 65
- تراکنش
پایگاه
داده با
موفقیت
اعمال (commit) شد،
اما ovs-vsctl
هنگام
انتظار
برای تکمیل
بازپیکربندی
خود ovs-vswitchd به
منظور
اعمال
تغییرات
شکست خورد.
این وضعیت
معمولاً
زمانی رخ
میدهد که
--no-wait مشخص
نشده باشد و
دیمون
نتواند در
زمان مقرر
بهروزرسانی
را تایید
کند یا
هنگام
اعمال آن با
خطا مواجه
شود.
توجه داشته باشید که تغییرات در پایگاه داده ثبت باقی میمانند و بازگردانی (roll back) نمیشوند. این کد خروج برای این طراحی شده است که اعلام کند با وجود بهروزرسانی پایگاه داده، پیکربندی سیستم ممکن است هنوز تغییرات مورد نظر را اعمال نکرده باشد.
همچنین ببینید (SEE ALSO)
| 4.0.0 | Open vSwitch |