Slide 32
Slide 32 text
Example: Connecting to External Endpoints
bypass4netns performs switching when the destination is external endpoints.
External Endpoints: Not other containers and loopback address
11
memset((char *)&end_addr, 0, sizeof(end_addr));
end_addr.sin_family = AF_INET;
end_addr.sin_port = htons(80);
end_addr.sin_addr.s_addr = inet_addr("133.3.254.6");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
int buf_size = 4096;
setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (void *)&buf_size, sizeof(int));
connect(sockfd, (struct sockaddr *)&end_addr, sizeof(end_addr));
// “sockfd” is already switched!
getpeername(sockfd, (struct sockaddr*)&peer_addr, &len);
printf("peer: %s¥n", inet_ntoa(peer_addr.sin_addr));
sprintf(buffer, "GET / HTTP/1.1¥r¥n¥r¥n");
send(sockfd, buffer, strlen(buffer), 0);
The endpoint is external
Flow of switching in bypass4netns
(1) Creation
(2) Configuration
(3) Connection
(4) Status
Other syscalls