Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.11-rc1 76 lines 1.9 kB view raw
1/* 2 * VMware vSockets Driver 3 * 4 * Copyright (C) 2007-2012 VMware, Inc. All rights reserved. 5 * 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. 9 * 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 13 * more details. 14 */ 15 16#include <linux/types.h> 17#include <linux/socket.h> 18#include <linux/stddef.h> 19#include <net/sock.h> 20 21#include "vsock_addr.h" 22 23void vsock_addr_init(struct sockaddr_vm *addr, u32 cid, u32 port) 24{ 25 memset(addr, 0, sizeof(*addr)); 26 addr->svm_family = AF_VSOCK; 27 addr->svm_cid = cid; 28 addr->svm_port = port; 29} 30EXPORT_SYMBOL_GPL(vsock_addr_init); 31 32int vsock_addr_validate(const struct sockaddr_vm *addr) 33{ 34 if (!addr) 35 return -EFAULT; 36 37 if (addr->svm_family != AF_VSOCK) 38 return -EAFNOSUPPORT; 39 40 if (addr->svm_zero[0] != 0) 41 return -EINVAL; 42 43 return 0; 44} 45EXPORT_SYMBOL_GPL(vsock_addr_validate); 46 47bool vsock_addr_bound(const struct sockaddr_vm *addr) 48{ 49 return addr->svm_port != VMADDR_PORT_ANY; 50} 51EXPORT_SYMBOL_GPL(vsock_addr_bound); 52 53void vsock_addr_unbind(struct sockaddr_vm *addr) 54{ 55 vsock_addr_init(addr, VMADDR_CID_ANY, VMADDR_PORT_ANY); 56} 57EXPORT_SYMBOL_GPL(vsock_addr_unbind); 58 59bool vsock_addr_equals_addr(const struct sockaddr_vm *addr, 60 const struct sockaddr_vm *other) 61{ 62 return addr->svm_cid == other->svm_cid && 63 addr->svm_port == other->svm_port; 64} 65EXPORT_SYMBOL_GPL(vsock_addr_equals_addr); 66 67int vsock_addr_cast(const struct sockaddr *addr, 68 size_t len, struct sockaddr_vm **out_addr) 69{ 70 if (len < sizeof(**out_addr)) 71 return -EFAULT; 72 73 *out_addr = (struct sockaddr_vm *)addr; 74 return vsock_addr_validate(*out_addr); 75} 76EXPORT_SYMBOL_GPL(vsock_addr_cast);