1 /* 2 * Copyright (c) 2017 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 /* 29 * Copyright (c) 2007, Swedish Institute of Computer Science. 30 * All rights reserved. 31 * 32 * Redistribution and use in source and binary forms, with or without 33 * modification, are permitted provided that the following conditions 34 * are met: 35 * 1. Redistributions of source code must retain the above copyright 36 * notice, this list of conditions and the following disclaimer. 37 * 2. Redistributions in binary form must reproduce the above copyright 38 * notice, this list of conditions and the following disclaimer in the 39 * documentation and/or other materials provided with the distribution. 40 * 3. Neither the name of the Institute nor the names of its contributors 41 * may be used to endorse or promote products derived from this software 42 * without specific prior written permission. 43 * 44 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 45 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 46 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 47 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 48 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 49 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 50 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 51 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 52 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 53 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 54 * SUCH DAMAGE. 55 * 56 * This file is part of the Contiki operating system. 57 * 58 */ 59 60 /** 61 * \file 62 * Header file for the Rime address representation 63 * \author 64 * Adam Dunkels <[email protected]> 65 */ 66 67 /** 68 * \addtogroup rime 69 * @{ 70 */ 71 72 /** 73 * \defgroup linkaddr Rime addresses 74 * @{ 75 * 76 * The linkaddr module is an abstract representation of addresses in 77 * Rime. 78 * 79 */ 80 81 #ifndef LINKADDR_H_ 82 #define LINKADDR_H_ 83 84 #include "contiki-conf.h" 85 86 #include <stdint.h> 87 88 #ifdef LINKADDR_CONF_SIZE 89 #define LINKADDR_SIZE LINKADDR_CONF_SIZE 90 #else /* LINKADDR_SIZE */ 91 #define LINKADDR_SIZE 2 92 #endif /* LINKADDR_SIZE */ 93 94 typedef union { 95 unsigned char u8[LINKADDR_SIZE]; 96 #if LINKADDR_SIZE == 2 97 uint16_t u16; 98 #endif /* LINKADDR_SIZE == 2 */ 99 } linkaddr_t; 100 101 typedef union { 102 uint8_t u8[8]; 103 uint16_t u16[4]; 104 } linkaddr_extended_t; 105 106 /** 107 * \brief Copy a Rime address 108 * \param dest The destination 109 * \param from The source 110 * 111 * This function copies a Rime address from one location 112 * to another. 113 * 114 */ 115 void linkaddr_copy(linkaddr_t *dest, const linkaddr_t *from); 116 117 /** 118 * \brief Compare two Rime addresses 119 * \param addr1 The first address 120 * \param addr2 The second address 121 * \return Non-zero if the addresses are the same, zero if they are different 122 * 123 * This function compares two Rime addresses and returns 124 * the result of the comparison. The function acts like 125 * the '==' operator and returns non-zero if the addresses 126 * are the same, and zero if the addresses are different. 127 * 128 */ 129 int linkaddr_cmp(const linkaddr_t *addr1, const linkaddr_t *addr2); 130 131 132 /** 133 * \brief Set the address of the current node 134 * \param addr The address 135 * 136 * This function sets the Rime address of the node. 137 * 138 */ 139 void linkaddr_set_node_addr(linkaddr_t *addr); 140 141 /** 142 * \brief The Rime address of the node 143 * 144 * This variable contains the Rime address of the 145 * node. This variable should not be changed directly; 146 * rather, the linkaddr_set_node_addr() function should be 147 * used. 148 * 149 */ 150 extern linkaddr_t linkaddr_node_addr; 151 152 /** 153 * \brief The null Rime address 154 * 155 * This variable contains the null Rime address. The null 156 * address is used in route tables to indicate that the 157 * table entry is unused. Nodes with no configured address 158 * has the null address. Nodes with their node address set 159 * to the null address will have problems communicating 160 * with other nodes. 161 * 162 */ 163 extern const linkaddr_t linkaddr_null; 164 165 #endif /* LINKADDR_H_ */ 166 /** @} */ 167 /** @} */ 168