| vsock(7) | Miscellaneous Information Manual | vsock(7) |
الاسم¶
vsock - عائلة عناوين VSOCK في لينكس
موجز¶
#include <sys/socket.h> #include <linux/vm_sockets.h>
stream_socket = socket(AF_VSOCK, SOCK_STREAM, 0); datagram_socket = socket(AF_VSOCK, SOCK_DGRAM, 0);
الوصف¶
عائلة عناوين VSOCK تسهل الاتصال بين الآلات الافتراضية والمضيف الذي تعمل عليه. تُستخدم هذه العائلة من قبل وكلاء الضيف وخدمات المراقب المفرط التي تحتاج إلى قناة اتصال مستقلة عن تكوين شبكة الآلة الافتراضية.
أنواع المقابس الصالحة هي SOCK_STREAM و SOCK_DGRAM. يوفر SOCK_STREAM تيارات بايت موجهة للاتصال مع تسليم مضمون وبالترتيب. يوفر SOCK_DGRAM خدمة حزم بيانات غير متصلة مع تسليم بأفضل جهد وترتيب بأفضل جهد. توفر هذه الأنواع يعتمد على المراقب المفرط الأساسي.
يُنشأ مقبس جديد باستخدام
socket(AF_VSOCK, socket_type, 0);
عندما تريد عملية إنشاء اتصال، تستدعي connect(2) مع عنوان مقبس وجهة معين. يُربط المقبس آليًا بمنفذ حر إذا كان غير مربوط.
يمكن لعملية الاستماع للاتصالات الواردة عن طريق الربط أولاً بعنوان مقبس باستخدام bind(2) ثم استدعاء listen(2).
تُنقل البيانات باستخدام عائلات استدعاءات النظام send(2) أو write(2) وتُستقبل البيانات باستخدام عائلات استدعاءات النظام recv(2) أو read(2).
تنسيق العنوان¶
يُعرف عنوان المقبس كتركيبة من معرف سياق (CID) 32 بت ورقم منفذ 32 بت. يحدد CID المصدر أو الوجهة، وهي إما آلة افتراضية أو المضيف. يميز رقم المنفذ بين خدمات متعددة تعمل على جهاز واحد.
struct sockaddr_vm {
sa_family_t svm_family; /* Address family: AF_VSOCK */
unsigned short svm_reserved1;
unsigned int svm_port; /* Port # in host byte order */
unsigned int svm_cid; /* Address in host byte order */
unsigned char svm_zero[sizeof(struct sockaddr) -
sizeof(sa_family_t) -
sizeof(unsigned short) -
sizeof(unsigned int) -
sizeof(unsigned int)];
};
يُضبط svm_family دائمًا على AF_VSOCK. يُضبط svm_reserved1 دائمًا على 0. يحتوي svm_port على رقم المنفذ بترتيب بايت المضيف. تُسمى أرقام المنافذ الأقل من 1024 المنافذ المميزة. فقط عملية تمتلك قدرة CAP_NET_BIND_SERVICE يمكنها bind(2) لهذه الأرقام. يجب ملء svm_zero بالأصفار.
هناك عدة عناوين خاصة: VMADDR_CID_ANY (-1U) يعني أي عنوان للربط؛ VMADDR_CID_HYPERVISOR (0) محجوز للخدمات المضمنة في المراقب المفرط؛ VMADDR_CID_LOCAL (1) هو العنوان المعروف للاتصال المحلي (الاسترجاع)؛ VMADDR_CID_HOST (2) هو العنوان المعروف للمضيف.
الثابت الخاص VMADDR_PORT_ANY (-1U) يعني أي رقم منفذ للربط.
الترحيل المباشر¶
تتأثر المقابس بالترحيل المباشر للآلات الافتراضية. تصبح مقابس SOCK_STREAM المتصلة غير متصلة عندما ترحل الآلة الافتراضية إلى مضيف جديد. يجب على التطبيقات إعادة الاتصال عند حدوث ذلك.
قد يتغير CID المحلي عبر الترحيل المباشر إذا لم يكن CID القديم متاحًا على المضيف الجديد. تُحدث المقابس المربوطة آليًا إلى CID الجديد.
Ioctls¶
أوامر ioctl التالية متاحة على جهاز /dev/vsock.
- IOCTL_VM_SOCKETS_GET_LOCAL_CID
- الحصول على CID للجهاز المحلي. الوسيطة هي مؤشر إلى unsigned int.
-
ioctl(fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, &cid);
- اعتبر استخدام VMADDR_CID_ANY عند الربط بدلاً من الحصول على CID المحلي باستخدام IOCTL_VM_SOCKETS_GET_LOCAL_CID.
اتصال محلي¶
يوجه VMADDR_CID_LOCAL (1) الحزم إلى نفس المضيف الذي أنشأها. هذا مفيد لاختبار التطبيقات على مضيف واحد ولتصحيح الأخطاء.
يمكن استخدام CID المحلي الذي تم الحصول عليه باستخدام IOCTL_VM_SOCKETS_GET_LOCAL_CID لنفس الغرض، لكن من الأفضل استخدام VMADDR_CID_LOCAL.
الأخطاء¶
- EACCES
- غير قادر على الربط بمنفذ مميز بدون صلاحية CAP_NET_BIND_SERVICE.
- EADDRINUSE
- غير قادر على الربط بمنفذ قيد الاستخدام بالفعل.
- EADDRNOTAVAIL
- غير قادر على إيجاد منفذ شاغر للربط أو غير قادر على الربط بمعرف CID غير محلي.
- EINVAL
- معاملات غير صالحة. يشمل ذلك: محاولة ربط مقبس مرتبط بالفعل، تقديم بنية sockaddr_vm غير صالحة، وأخطاء أخرى في التحقق من المدخلات.
- ENOPROTOOPT
- خيار مقبس غير صالح في setsockopt(2) أو getsockopt(2).
- ENOTCONN
- غير قادر على تنفيذ العملية على مقبس غير متصل.
- EOPNOTSUPP
- العملية غير مدعومة. يشمل ذلك: العلم MSG_OOB غير المنفذ لعائلة استدعاءات النظام send(2) والعلم MSG_PEEK لعائلة استدعاءات النظام recv(2).
- EPROTONOSUPPORT
- رقم بروتوكول مقبس غير صالح. يجب أن يكون البروتوكول دائماً 0.
- ESOCKTNOSUPPORT
- نوع مقبس غير مدعوم في socket(2). فقط SOCK_STREAM و SOCK_DGRAM صالحان.
الإصدارات¶
دعم VMware (VMCI) متاح منذ لينكس 3.9. KVM (virtio) مدعوم منذ لينكس 4.8. Hyper-V مدعوم منذ لينكس 4.14.
VMADDR_CID_LOCAL مدعوم منذ لينكس 5.6. الاتصال المحلي في الضيف وعلى المضيف متاح منذ لينكس 5.6. الإصدارات السابقة دعمت فقط الاتصال المحلي داخل الضيف (ليس على المضيف)، ومع بعض الناقلات فقط (VMCI و virtio).
انظر أيضًا¶
bind(2), connect(2), listen(2), recv(2), send(2), socket(2), capabilities(7)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 17 مايو 2025 | صفحات دليل لينكس (لم تصدر بعد) |