vsock(7) - wariua/manpages-ko GitHub Wiki

NAME

vsock - ๋ฆฌ๋ˆ…์Šค VSOCK ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

SYNOPSIS

#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);

DESCRIPTION

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) ๊ณ„์—ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค.

์ฃผ์†Œ ํ˜•์‹

32๋น„ํŠธ ๋ฌธ๋งฅ ์‹๋ณ„์ž(Context Identifier, CID)์™€ 32๋น„ํŠธ ํฌํŠธ ๋ฒˆํ˜ธ์˜ ์กฐํ•ฉ์œผ๋กœ ์†Œ์ผ“ ์ฃผ์†Œ๋ฅผ ์ •์˜ํ•œ๋‹ค. CID๋Š” ์ถœ๋ฐœ์ง€๋‚˜ ๋ชฉ์ ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, ๊ฐ€์ƒ ๋จธ์‹ ์ด๋‚˜ ํ˜ธ์ŠคํŠธ ์ค‘ ํ•œ์ชฝ์ด๋‹ค. ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ๋™์ผ ๋จธ์‹  ์ƒ์—์„œ ๋Œ๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์„ ๊ตฌ๋ณ„ํ•ด ์ค€๋‹ค.

struct sockaddr_vm {
	sa_family_t    svm_family      /* ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ: AF_VSOCK */
	unsigned short svm_reserved1;
	unsigned int   svm_port;       /* ํฌํŠธ ๋ฒˆํ˜ธ, ํ˜ธ์ŠคํŠธ ๋ฐ”์ดํŠธ ์ˆœ์„œ */
	unsigned int   svm_cid;        /* ์ฃผ์†Œ, ํ˜ธ์ŠคํŠธ ๋ฐ”์ดํŠธ ์ˆœ์„œ */
};

svm_family๋Š” ํ•ญ์ƒ AF_VSOCK์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. svm_reserved1์€ ํ•ญ์ƒ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. svn_port๋Š” ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํ˜ธ์ŠคํŠธ ๋ฐ”์ดํŠธ ์ˆœ์„œ๋กœ ๋‹ด๋Š”๋‹ค. 1024 ์•„๋ž˜์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ํŠน๊ถŒ ํฌํŠธ๋ผ๊ณ  ํ•œ๋‹ค. CAP_NET_BIND_SERVICE ์—ญ๋Šฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ทธ ํฌํŠธ ๋ฒˆํ˜ธ์— bind(2) ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ˆ˜ ์ฃผ์†Œ๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ๋‹ค. VMADDR_CID_ANY(-1U)๋Š” ์•„๋ฌด ์ฃผ์†Œ์— ๊ฒฐ์†ํ•˜๋ผ๋Š” ๋œป์ด๋‹ค. VMADDR_CID_HYPERVISOR(0)๋Š” ํ•˜์ดํผ๋ฐ”์ด์ €์— ๋‚ด์žฅ๋œ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ ๊ฒƒ์ด๋‹ค. VMADDR_CID_RESERVED(1)๋Š” ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. VMADDR_CID_HOST(2)๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ž˜ ์•Œ๋ ค์ง„ ์ฃผ์†Œ์ด๋‹ค.

ํŠน์ˆ˜ ์ƒ์ˆ˜ VMADDR_PORT_ANY(-1U)๋Š” ์•„๋ฌด ํฌํŠธ ๋ฒˆํ˜ธ์— ๊ฒฐ์†ํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.

๋ผ์ด๋ธŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

์†Œ์ผ“์ด ๊ฐ€์ƒ ๋จธ์‹  ๋ผ์ด๋ธŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ƒˆ ํ˜ธ์ŠคํŠธ๋กœ ์ด๋™ํ•  ๋•Œ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋˜ SOCK_STREAM ์†Œ์ผ“๋“ค์ด ๋Š์–ด์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‘์šฉ์—์„œ ์žฌ์—ฐ๊ฒฐ์„ ํ•ด์•ผ ํ•œ๋‹ค.

์ด์ „ CID๋ฅผ ์ƒˆ ํ˜ธ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ผ์ด๋ธŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ฑฐ์น˜๋ฉด์„œ ๋กœ์ปฌ CID๊ฐ€ ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฒฐ์†๋œ ์†Œ์ผ“๋“ค์ด ์ž๋™์œผ๋กœ ์ƒˆ CID๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.

ioctl

IOCTL_VM_SOCKETS_GET_LOCAL_CID

๋กœ์ปฌ ๋จธ์‹ ์˜ CID๋ฅผ ์–ป๋Š”๋‹ค. ์ธ์ž๋Š” unsigned int ํฌ์ธํ„ฐ์ด๋‹ค.

ioctl(socket, IOCTL_VM_SOCKETS_GET_LOCAL_CID, &cid);

๊ฒฐ์† ์‹œ IOCTL_VM_SOCKETS_GET_LOCAL_CID๋กœ ๋กœ์ปฌ CID๋ฅผ ์–ป์„ ํ•„์š” ์—†์ด VMADDR_CID_ANY๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ERRORS

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๋งŒ ์œ ํšจํ•˜๋‹ค.

VERSIONS

๋ฆฌ๋ˆ…์Šค 3.9๋ถ€ํ„ฐ VMware(VMCI) ์ง€์›์„ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฆฌ๋ˆ…์Šค 4.8๋ถ€ํ„ฐ KVM(virtio)์„ ์ง€์›ํ•œ๋‹ค. ๋ฆฌ๋ˆ…์Šค 4.14๋ถ€ํ„ฐ Hyper-V๋ฅผ ์ง€์›ํ•œ๋‹ค.

SEE ALSO

bind(2), connect(2), listen(2), recv(2), send(2), socket(2), capabilities(7)


2017-11-30

โš ๏ธ **GitHub.com Fallback** โš ๏ธ