Blame view
net/vmw_vsock/vsock_addr.c
1.48 KB
685a6bf84 treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
d021c3440 VSOCK: Introduce ... |
2 3 4 5 |
/* * VMware vSockets Driver * * Copyright (C) 2007-2012 VMware, Inc. All rights reserved. |
d021c3440 VSOCK: Introduce ... |
6 7 8 9 10 11 |
*/ #include <linux/types.h> #include <linux/socket.h> #include <linux/stddef.h> #include <net/sock.h> |
82a54d0eb VSOCK: Move af_vs... |
12 |
#include <net/vsock_addr.h> |
d021c3440 VSOCK: Introduce ... |
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
void vsock_addr_init(struct sockaddr_vm *addr, u32 cid, u32 port) { memset(addr, 0, sizeof(*addr)); addr->svm_family = AF_VSOCK; addr->svm_cid = cid; addr->svm_port = port; } EXPORT_SYMBOL_GPL(vsock_addr_init); int vsock_addr_validate(const struct sockaddr_vm *addr) { if (!addr) return -EFAULT; if (addr->svm_family != AF_VSOCK) return -EAFNOSUPPORT; if (addr->svm_zero[0] != 0) return -EINVAL; return 0; } EXPORT_SYMBOL_GPL(vsock_addr_validate); bool vsock_addr_bound(const struct sockaddr_vm *addr) { return addr->svm_port != VMADDR_PORT_ANY; } EXPORT_SYMBOL_GPL(vsock_addr_bound); void vsock_addr_unbind(struct sockaddr_vm *addr) { vsock_addr_init(addr, VMADDR_CID_ANY, VMADDR_PORT_ANY); } EXPORT_SYMBOL_GPL(vsock_addr_unbind); bool vsock_addr_equals_addr(const struct sockaddr_vm *addr, const struct sockaddr_vm *other) { return addr->svm_cid == other->svm_cid && addr->svm_port == other->svm_port; } EXPORT_SYMBOL_GPL(vsock_addr_equals_addr); |
d021c3440 VSOCK: Introduce ... |
57 58 59 60 61 62 63 64 65 66 |
int vsock_addr_cast(const struct sockaddr *addr, size_t len, struct sockaddr_vm **out_addr) { if (len < sizeof(**out_addr)) return -EFAULT; *out_addr = (struct sockaddr_vm *)addr; return vsock_addr_validate(*out_addr); } EXPORT_SYMBOL_GPL(vsock_addr_cast); |