1 // SPDX-License-Identifier: GPL-2.0-only
3 * VMware vSockets Driver
5 * Copyright (C) 2007-2012 VMware, Inc. All rights reserved.
8 #include <linux/types.h>
9 #include <linux/socket.h>
10 #include <linux/stddef.h>
12 #include <net/vsock_addr.h>
14 void vsock_addr_init(struct sockaddr_vm
*addr
, u32 cid
, u32 port
)
16 memset(addr
, 0, sizeof(*addr
));
17 addr
->svm_family
= AF_VSOCK
;
19 addr
->svm_port
= port
;
21 EXPORT_SYMBOL_GPL(vsock_addr_init
);
23 int vsock_addr_validate(const struct sockaddr_vm
*addr
)
25 __u8 svm_valid_flags
= VMADDR_FLAG_TO_HOST
;
30 if (addr
->svm_family
!= AF_VSOCK
)
33 if (addr
->svm_flags
& ~svm_valid_flags
)
38 EXPORT_SYMBOL_GPL(vsock_addr_validate
);
40 bool vsock_addr_bound(const struct sockaddr_vm
*addr
)
42 return addr
->svm_port
!= VMADDR_PORT_ANY
;
44 EXPORT_SYMBOL_GPL(vsock_addr_bound
);
46 void vsock_addr_unbind(struct sockaddr_vm
*addr
)
48 vsock_addr_init(addr
, VMADDR_CID_ANY
, VMADDR_PORT_ANY
);
50 EXPORT_SYMBOL_GPL(vsock_addr_unbind
);
52 bool vsock_addr_equals_addr(const struct sockaddr_vm
*addr
,
53 const struct sockaddr_vm
*other
)
55 return addr
->svm_cid
== other
->svm_cid
&&
56 addr
->svm_port
== other
->svm_port
;
58 EXPORT_SYMBOL_GPL(vsock_addr_equals_addr
);
60 int vsock_addr_cast(const struct sockaddr
*addr
,
61 size_t len
, struct sockaddr_vm
**out_addr
)
63 if (len
< sizeof(**out_addr
))
66 *out_addr
= (struct sockaddr_vm
*)addr
;
67 return vsock_addr_validate(*out_addr
);
69 EXPORT_SYMBOL_GPL(vsock_addr_cast
);