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
)
28 if (addr
->svm_family
!= AF_VSOCK
)
31 if (addr
->svm_zero
[0] != 0)
36 EXPORT_SYMBOL_GPL(vsock_addr_validate
);
38 bool vsock_addr_bound(const struct sockaddr_vm
*addr
)
40 return addr
->svm_port
!= VMADDR_PORT_ANY
;
42 EXPORT_SYMBOL_GPL(vsock_addr_bound
);
44 void vsock_addr_unbind(struct sockaddr_vm
*addr
)
46 vsock_addr_init(addr
, VMADDR_CID_ANY
, VMADDR_PORT_ANY
);
48 EXPORT_SYMBOL_GPL(vsock_addr_unbind
);
50 bool vsock_addr_equals_addr(const struct sockaddr_vm
*addr
,
51 const struct sockaddr_vm
*other
)
53 return addr
->svm_cid
== other
->svm_cid
&&
54 addr
->svm_port
== other
->svm_port
;
56 EXPORT_SYMBOL_GPL(vsock_addr_equals_addr
);
58 int vsock_addr_cast(const struct sockaddr
*addr
,
59 size_t len
, struct sockaddr_vm
**out_addr
)
61 if (len
< sizeof(**out_addr
))
64 *out_addr
= (struct sockaddr_vm
*)addr
;
65 return vsock_addr_validate(*out_addr
);
67 EXPORT_SYMBOL_GPL(vsock_addr_cast
);