1
0
Fork 0
mirror of https://repo.or.cz/socat.git synced 2025-07-06 21:16:34 +00:00

Added VSOCK stream addresses

This commit is contained in:
Gerhard Rieger 2020-12-26 22:46:36 +01:00
parent 1c7ddfef73
commit 1502f0cdcb
18 changed files with 442 additions and 4 deletions

View file

@ -204,6 +204,10 @@ char *sockaddr_info(const struct sockaddr *sa, socklen_t salen, char *buff, size
#if WITH_IP6
case AF_INET6: sockaddr_inet6_info(&sau->ip6, cp, blen);
break;
#endif
#if WITH_VSOCK
case AF_VSOCK: sockaddr_vm_info(&sau->vm, cp, blen);
break;
#endif
default:
n = xio_snprintf(cp, blen, "AF=%d ", sa->sa_family);
@ -297,6 +301,43 @@ char *sockaddr_inet4_info(const struct sockaddr_in *sa, char *buff, size_t blen)
}
#endif /* WITH_IP4 */
#if WITH_VSOCK
char *sockaddr_vm_info(const struct sockaddr_vm *sa, char *buff, size_t blen) {
if (xio_snprintf(buff, blen, "cid:%u port:%u", sa->svm_cid, sa->svm_port) >= blen) {
Warn("sockaddr_vm_info(): buffer too short");
buff[blen-1] = '\0';
}
return buff;
}
int sockaddr_vm_parse(struct sockaddr_vm *sa, const char *cid_str,
const char *port_str)
{
char *garbage = NULL;
if (!cid_str) {
sa->svm_cid = VMADDR_CID_ANY;
} else {
sa->svm_cid = strtoul(cid_str, &garbage, 0);
if (*garbage != '\0') {
Error1("sockaddr_vm - garbage in cid: \"%s\"", garbage);
return -EINVAL;
}
}
if (!port_str) {
sa->svm_port = VMADDR_PORT_ANY;
} else {
sa->svm_port = strtoul(port_str, &garbage, 0);
if (*garbage != '\0') {
Error1("sockaddr_vm - garbage in port: \"%s\"", garbage);
return -EINVAL;
}
}
return 0;
}
#endif /* WITH_IP4 */
#if !HAVE_INET_NTOP
/* http://www.opengroup.org/onlinepubs/000095399/functions/inet_ntop.html */
const char *inet_ntop(int pf, const void *binaddr,