2 * VMware vSockets Driver
4 * Copyright (C) 2007-2012 VMware, Inc. All rights reserved.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation version 2 and no later version.
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 #include <linux/types.h>
17 #include <linux/socket.h>
18 #include <linux/stddef.h>
20 #include <net/vsock_addr.h>
22 void vsock_addr_init(struct sockaddr_vm
*addr
, u32 cid
, u32 port
)
24 memset(addr
, 0, sizeof(*addr
));
25 addr
->svm_family
= AF_VSOCK
;
27 addr
->svm_port
= port
;
29 EXPORT_SYMBOL_GPL(vsock_addr_init
);
31 int vsock_addr_validate(const struct sockaddr_vm
*addr
)
36 if (addr
->svm_family
!= AF_VSOCK
)
39 if (addr
->svm_zero
[0] != 0)
44 EXPORT_SYMBOL_GPL(vsock_addr_validate
);
46 bool vsock_addr_bound(const struct sockaddr_vm
*addr
)
48 return addr
->svm_port
!= VMADDR_PORT_ANY
;
50 EXPORT_SYMBOL_GPL(vsock_addr_bound
);
52 void vsock_addr_unbind(struct sockaddr_vm
*addr
)
54 vsock_addr_init(addr
, VMADDR_CID_ANY
, VMADDR_PORT_ANY
);
56 EXPORT_SYMBOL_GPL(vsock_addr_unbind
);
58 bool vsock_addr_equals_addr(const struct sockaddr_vm
*addr
,
59 const struct sockaddr_vm
*other
)
61 return addr
->svm_cid
== other
->svm_cid
&&
62 addr
->svm_port
== other
->svm_port
;
64 EXPORT_SYMBOL_GPL(vsock_addr_equals_addr
);
66 int vsock_addr_cast(const struct sockaddr
*addr
,
67 size_t len
, struct sockaddr_vm
**out_addr
)
69 if (len
< sizeof(**out_addr
))
72 *out_addr
= (struct sockaddr_vm
*)addr
;
73 return vsock_addr_validate(*out_addr
);
75 EXPORT_SYMBOL_GPL(vsock_addr_cast
);