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/compat/linuxkpi/common/include/linux/etherdevice.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  * Copyright (c) 2015-2016 Mellanox Technologies, Ltd. All rights reserved.
    3  *
    4  * Redistribution and use in source and binary forms, with or without
    5  * modification, are permitted provided that the following conditions
    6  * are met:
    7  * 1. Redistributions of source code must retain the above copyright
    8  *    notice unmodified, this list of conditions, and the following
    9  *    disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   17  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   19  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   24  *
   25  * $FreeBSD$
   26  */
   27 #ifndef _LINUXKPI_LINUX_ETHERDEVICE_H_
   28 #define _LINUXKPI_LINUX_ETHERDEVICE_H_
   29 
   30 #include <linux/types.h>
   31 #include <linux/device.h>
   32 
   33 #include <sys/random.h>
   34 #include <sys/libkern.h>
   35 
   36 #define ETH_MODULE_SFF_8079             1
   37 #define ETH_MODULE_SFF_8079_LEN         256
   38 #define ETH_MODULE_SFF_8472             2
   39 #define ETH_MODULE_SFF_8472_LEN         512
   40 #define ETH_MODULE_SFF_8636             3
   41 #define ETH_MODULE_SFF_8636_LEN         256
   42 #define ETH_MODULE_SFF_8436             4
   43 #define ETH_MODULE_SFF_8436_LEN         256
   44 
   45 struct ethtool_eeprom {
   46         u32     offset;
   47         u32     len;
   48 };
   49 
   50 struct ethtool_modinfo {
   51         u32     type;
   52         u32     eeprom_len;
   53 };
   54 
   55 static inline bool
   56 is_zero_ether_addr(const u8 * addr)
   57 {
   58         return ((addr[0] + addr[1] + addr[2] + addr[3] + addr[4] + addr[5]) == 0x00);
   59 }
   60 
   61 static inline bool
   62 is_multicast_ether_addr(const u8 * addr)
   63 {
   64         return (0x01 & addr[0]);
   65 }
   66 
   67 static inline bool
   68 is_broadcast_ether_addr(const u8 * addr)
   69 {
   70         return ((addr[0] + addr[1] + addr[2] + addr[3] + addr[4] + addr[5]) == (6 * 0xff));
   71 }
   72 
   73 static inline bool
   74 is_valid_ether_addr(const u8 * addr)
   75 {
   76         return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
   77 }
   78 
   79 static inline void
   80 ether_addr_copy(u8 * dst, const u8 * src)
   81 {
   82         memcpy(dst, src, 6);
   83 }
   84 
   85 static inline bool
   86 ether_addr_equal_unaligned(const u8 *pa, const u8 *pb)
   87 {
   88         return (memcmp(pa, pb, 6) == 0);
   89 }
   90 #define ether_addr_equal(_pa, _pb)      ether_addr_equal_unaligned(_pa, _pb)
   91 
   92 static inline bool
   93 ether_addr_equal_64bits(const u8 *pa, const u8 *pb)
   94 {
   95         return (memcmp(pa, pb, 6) == 0);
   96 }
   97 
   98 static inline void
   99 eth_broadcast_addr(u8 *pa)
  100 {
  101         memset(pa, 0xff, 6);
  102 }
  103 
  104 static inline void
  105 eth_zero_addr(u8 *pa)
  106 {
  107         memset(pa, 0, 6);
  108 }
  109 
  110 static inline void
  111 random_ether_addr(u8 *dst)
  112 {
  113         arc4random_buf(dst, 6);
  114 
  115         dst[0] &= 0xfe;
  116         dst[0] |= 0x02;
  117 }
  118 
  119 static inline void
  120 eth_random_addr(u8 *dst)
  121 {
  122 
  123         random_ether_addr(dst);
  124 }
  125 
  126 static inline int
  127 device_get_mac_address(struct device *dev, char *dst)
  128 {
  129 
  130         /* XXX get mac address from FDT? */
  131         return (-ENOENT);
  132 }
  133 
  134 #endif                                  /* _LINUXKPI_LINUX_ETHERDEVICE_H_ */

Cache object: 56d54afbaada8fb5f43686c7fe7d915f


[ 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.