The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/ofed/include/rdma/ib.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
    3  *
    4  * Copyright (c) 2010 Intel Corporation.  All rights reserved.
    5  *
    6  * This software is available to you under a choice of one of two
    7  * licenses.  You may choose to be licensed under the terms of the GNU
    8  * General Public License (GPL) Version 2, available from the file
    9  * COPYING in the main directory of this source tree, or the
   10  * OpenIB.org BSD license below:
   11  *
   12  *     Redistribution and use in source and binary forms, with or
   13  *     without modification, are permitted provided that the following
   14  *     conditions are met:
   15  *
   16  *      - Redistributions of source code must retain the above
   17  *        copyright notice, this list of conditions and the following
   18  *        disclaimer.
   19  *
   20  *      - Redistributions in binary form must reproduce the above
   21  *        copyright notice, this list of conditions and the following
   22  *        disclaimer in the documentation and/or other materials
   23  *        provided with the distribution.
   24  *
   25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
   29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   32  * SOFTWARE.
   33  *
   34  * $FreeBSD$
   35  */
   36 
   37 #if !defined(_RDMA_IB_H)
   38 #define _RDMA_IB_H
   39 
   40 #include <linux/types.h>
   41 #include <linux/sched.h>
   42 #include <linux/file.h>
   43 
   44 /*
   45  * Define a native infiniband address as in Linux upstream
   46  * 8d36eb01da5d371feffa280e501377b5c450f5a5
   47  */
   48 #define AF_IB   41
   49 
   50 struct ib_addr {
   51         union {
   52                 __u8            uib_addr8[16];
   53                 __be16          uib_addr16[8];
   54                 __be32          uib_addr32[4];
   55                 __be64          uib_addr64[2];
   56         } ib_u;
   57 #define sib_addr8               ib_u.uib_addr8
   58 #define sib_addr16              ib_u.uib_addr16
   59 #define sib_addr32              ib_u.uib_addr32
   60 #define sib_addr64              ib_u.uib_addr64
   61 #define sib_raw                 ib_u.uib_addr8
   62 #define sib_subnet_prefix       ib_u.uib_addr64[0]
   63 #define sib_interface_id        ib_u.uib_addr64[1]
   64 };
   65 
   66 static inline int ib_addr_any(const struct ib_addr *a)
   67 {
   68         return ((a->sib_addr64[0] | a->sib_addr64[1]) == 0);
   69 }
   70 
   71 static inline int ib_addr_loopback(const struct ib_addr *a)
   72 {
   73         return ((a->sib_addr32[0] | a->sib_addr32[1] |
   74                  a->sib_addr32[2] | (a->sib_addr32[3] ^ htonl(1))) == 0);
   75 }
   76 
   77 static inline void ib_addr_set(struct ib_addr *addr,
   78                                __be32 w1, __be32 w2, __be32 w3, __be32 w4)
   79 {
   80         addr->sib_addr32[0] = w1;
   81         addr->sib_addr32[1] = w2;
   82         addr->sib_addr32[2] = w3;
   83         addr->sib_addr32[3] = w4;
   84 }
   85 
   86 static inline int ib_addr_cmp(const struct ib_addr *a1, const struct ib_addr *a2)
   87 {
   88         return memcmp(a1, a2, sizeof(struct ib_addr));
   89 }
   90 
   91 struct sockaddr_ib {
   92         unsigned short int      sib_family;     /* AF_IB */
   93         __be16                  sib_pkey;
   94         __be32                  sib_flowinfo;
   95         struct ib_addr          sib_addr;
   96         __be64                  sib_sid;
   97         __be64                  sib_sid_mask;
   98         __u64                   sib_scope_id;
   99 };
  100 
  101 /*
  102  * The IB interfaces that use write() as bi-directional ioctl() are
  103  * fundamentally unsafe, since there are lots of ways to trigger "write()"
  104  * calls from various contexts with elevated privileges. That includes the
  105  * traditional suid executable error message writes, but also various kernel
  106  * interfaces that can write to file descriptors.
  107  *
  108  * This function provides protection for the legacy API by restricting the
  109  * calling context.
  110  */
  111 static inline bool ib_safe_file_access(struct file *filp)
  112 {
  113         struct thread *td = curthread;
  114 
  115         /*
  116          * Check if called from userspace through a devfs related
  117          * system call belonging to the given file:
  118          */
  119         return (filp->_file != NULL &&
  120                 filp->_file == td->td_fpop &&
  121                 filp->_file->f_cred == td->td_ucred);
  122 }
  123 
  124 #endif /* _RDMA_IB_H */

Cache object: 46fa66d63cadee1c023836997188954c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.