root/net/vmw_vsock/vsock_addr.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. vsock_addr_init
  2. vsock_addr_validate
  3. vsock_addr_bound
  4. vsock_addr_unbind
  5. vsock_addr_equals_addr
  6. vsock_addr_cast

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

/* [<][>][^][v][top][bottom][index][help] */