1*3b4b8bdaSRobert Mustacchi /* 2*3b4b8bdaSRobert Mustacchi * This file and its contents are supplied under the terms of the 3*3b4b8bdaSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4*3b4b8bdaSRobert Mustacchi * You may only use this file in accordance with the terms of version 5*3b4b8bdaSRobert Mustacchi * 1.0 of the CDDL. 6*3b4b8bdaSRobert Mustacchi * 7*3b4b8bdaSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8*3b4b8bdaSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9*3b4b8bdaSRobert Mustacchi * http://www.illumos.org/license/CDDL. 10*3b4b8bdaSRobert Mustacchi */ 11*3b4b8bdaSRobert Mustacchi 12*3b4b8bdaSRobert Mustacchi /* 13*3b4b8bdaSRobert Mustacchi * Copyright (c) 2015, Joyent, Inc. 14*3b4b8bdaSRobert Mustacchi */ 15*3b4b8bdaSRobert Mustacchi 16*3b4b8bdaSRobert Mustacchi /* 17*3b4b8bdaSRobert Mustacchi * endian(3C) routines 18*3b4b8bdaSRobert Mustacchi */ 19*3b4b8bdaSRobert Mustacchi 20*3b4b8bdaSRobert Mustacchi uint16_t 21*3b4b8bdaSRobert Mustacchi htole16(uint16_t in) 22*3b4b8bdaSRobert Mustacchi { 23*3b4b8bdaSRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 24*3b4b8bdaSRobert Mustacchi } 25*3b4b8bdaSRobert Mustacchi 26*3b4b8bdaSRobert Mustacchi uint32_t 27*3b4b8bdaSRobert Mustacchi htole32(uint32_t in) 28*3b4b8bdaSRobert Mustacchi { 29*3b4b8bdaSRobert Mustacchi return (((in & 0xffUL) << 24) | 30*3b4b8bdaSRobert Mustacchi (in & 0xff00UL) << 8 | 31*3b4b8bdaSRobert Mustacchi (in & 0xff0000UL) >> 8 | 32*3b4b8bdaSRobert Mustacchi ((in & 0xff000000UL) >> 24)); 33*3b4b8bdaSRobert Mustacchi } 34*3b4b8bdaSRobert Mustacchi 35*3b4b8bdaSRobert Mustacchi uint64_t 36*3b4b8bdaSRobert Mustacchi htole64(uint64_t in) 37*3b4b8bdaSRobert Mustacchi { 38*3b4b8bdaSRobert Mustacchi return (((in & 0xffULL) << 56) | 39*3b4b8bdaSRobert Mustacchi ((in & 0xff00ULL) << 40) | 40*3b4b8bdaSRobert Mustacchi ((in & 0xff0000ULL) << 24) | 41*3b4b8bdaSRobert Mustacchi ((in & 0xff000000ULL) << 8) | 42*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 43*3b4b8bdaSRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 44*3b4b8bdaSRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 45*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 46*3b4b8bdaSRobert Mustacchi } 47*3b4b8bdaSRobert Mustacchi 48*3b4b8bdaSRobert Mustacchi uint16_t 49*3b4b8bdaSRobert Mustacchi letoh16(uint16_t in) 50*3b4b8bdaSRobert Mustacchi { 51*3b4b8bdaSRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 52*3b4b8bdaSRobert Mustacchi } 53*3b4b8bdaSRobert Mustacchi 54*3b4b8bdaSRobert Mustacchi uint16_t 55*3b4b8bdaSRobert Mustacchi le16toh(uint16_t in) 56*3b4b8bdaSRobert Mustacchi { 57*3b4b8bdaSRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 58*3b4b8bdaSRobert Mustacchi } 59*3b4b8bdaSRobert Mustacchi 60*3b4b8bdaSRobert Mustacchi uint32_t 61*3b4b8bdaSRobert Mustacchi letoh32(uint32_t in) 62*3b4b8bdaSRobert Mustacchi { 63*3b4b8bdaSRobert Mustacchi return (((in & 0xffUL) << 24) | 64*3b4b8bdaSRobert Mustacchi (in & 0xff00UL) << 8 | 65*3b4b8bdaSRobert Mustacchi (in & 0xff0000UL) >> 8 | 66*3b4b8bdaSRobert Mustacchi ((in & 0xff000000UL) >> 24)); 67*3b4b8bdaSRobert Mustacchi } 68*3b4b8bdaSRobert Mustacchi 69*3b4b8bdaSRobert Mustacchi uint32_t 70*3b4b8bdaSRobert Mustacchi le32toh(uint32_t in) 71*3b4b8bdaSRobert Mustacchi { 72*3b4b8bdaSRobert Mustacchi return (((in & 0xffUL) << 24) | 73*3b4b8bdaSRobert Mustacchi (in & 0xff00UL) << 8 | 74*3b4b8bdaSRobert Mustacchi (in & 0xff0000UL) >> 8 | 75*3b4b8bdaSRobert Mustacchi ((in & 0xff000000UL) >> 24)); 76*3b4b8bdaSRobert Mustacchi } 77*3b4b8bdaSRobert Mustacchi 78*3b4b8bdaSRobert Mustacchi uint64_t 79*3b4b8bdaSRobert Mustacchi letoh64(uint64_t in) 80*3b4b8bdaSRobert Mustacchi { 81*3b4b8bdaSRobert Mustacchi return (((in & 0xffULL) << 56) | 82*3b4b8bdaSRobert Mustacchi ((in & 0xff00ULL) << 40) | 83*3b4b8bdaSRobert Mustacchi ((in & 0xff0000ULL) << 24) | 84*3b4b8bdaSRobert Mustacchi ((in & 0xff000000ULL) << 8) | 85*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 86*3b4b8bdaSRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 87*3b4b8bdaSRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 88*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 89*3b4b8bdaSRobert Mustacchi } 90*3b4b8bdaSRobert Mustacchi 91*3b4b8bdaSRobert Mustacchi uint64_t 92*3b4b8bdaSRobert Mustacchi le64toh(uint64_t in) 93*3b4b8bdaSRobert Mustacchi { 94*3b4b8bdaSRobert Mustacchi return (((in & 0xffULL) << 56) | 95*3b4b8bdaSRobert Mustacchi ((in & 0xff00ULL) << 40) | 96*3b4b8bdaSRobert Mustacchi ((in & 0xff0000ULL) << 24) | 97*3b4b8bdaSRobert Mustacchi ((in & 0xff000000ULL) << 8) | 98*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 99*3b4b8bdaSRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 100*3b4b8bdaSRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 101*3b4b8bdaSRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 102*3b4b8bdaSRobert Mustacchi } 103*3b4b8bdaSRobert Mustacchi 104*3b4b8bdaSRobert Mustacchi /* Anything to or from big-endian is a no-op */ 105*3b4b8bdaSRobert Mustacchi 106*3b4b8bdaSRobert Mustacchi uint16_t 107*3b4b8bdaSRobert Mustacchi htobe16(uint16_t in) 108*3b4b8bdaSRobert Mustacchi { 109*3b4b8bdaSRobert Mustacchi return (in); 110*3b4b8bdaSRobert Mustacchi } 111*3b4b8bdaSRobert Mustacchi 112*3b4b8bdaSRobert Mustacchi uint32_t 113*3b4b8bdaSRobert Mustacchi htobe32(uint32_t in) 114*3b4b8bdaSRobert Mustacchi { 115*3b4b8bdaSRobert Mustacchi return (in); 116*3b4b8bdaSRobert Mustacchi } 117*3b4b8bdaSRobert Mustacchi 118*3b4b8bdaSRobert Mustacchi uint64_t 119*3b4b8bdaSRobert Mustacchi htobe64(uint64_t in) 120*3b4b8bdaSRobert Mustacchi { 121*3b4b8bdaSRobert Mustacchi return (in); 122*3b4b8bdaSRobert Mustacchi } 123*3b4b8bdaSRobert Mustacchi 124*3b4b8bdaSRobert Mustacchi uint16_t 125*3b4b8bdaSRobert Mustacchi betoh16(uint16_t in) 126*3b4b8bdaSRobert Mustacchi { 127*3b4b8bdaSRobert Mustacchi return (in); 128*3b4b8bdaSRobert Mustacchi } 129*3b4b8bdaSRobert Mustacchi 130*3b4b8bdaSRobert Mustacchi uint16_t 131*3b4b8bdaSRobert Mustacchi be16toh(uint16_t in) 132*3b4b8bdaSRobert Mustacchi { 133*3b4b8bdaSRobert Mustacchi return (in); 134*3b4b8bdaSRobert Mustacchi } 135*3b4b8bdaSRobert Mustacchi 136*3b4b8bdaSRobert Mustacchi uint32_t 137*3b4b8bdaSRobert Mustacchi betoh32(uint32_t in) 138*3b4b8bdaSRobert Mustacchi { 139*3b4b8bdaSRobert Mustacchi return (in); 140*3b4b8bdaSRobert Mustacchi } 141*3b4b8bdaSRobert Mustacchi 142*3b4b8bdaSRobert Mustacchi uint32_t 143*3b4b8bdaSRobert Mustacchi be32toh(uint32_t in) 144*3b4b8bdaSRobert Mustacchi { 145*3b4b8bdaSRobert Mustacchi return (in); 146*3b4b8bdaSRobert Mustacchi } 147*3b4b8bdaSRobert Mustacchi 148*3b4b8bdaSRobert Mustacchi uint64_t 149*3b4b8bdaSRobert Mustacchi betoh64(uint64_t in) 150*3b4b8bdaSRobert Mustacchi { 151*3b4b8bdaSRobert Mustacchi return (in); 152*3b4b8bdaSRobert Mustacchi } 153*3b4b8bdaSRobert Mustacchi 154*3b4b8bdaSRobert Mustacchi uint64_t 155*3b4b8bdaSRobert Mustacchi be64toh(uint64_t in) 156*3b4b8bdaSRobert Mustacchi { 157*3b4b8bdaSRobert Mustacchi return (in); 158*3b4b8bdaSRobert Mustacchi } 159