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