17dc9a163SRobert Mustacchi /* 27dc9a163SRobert Mustacchi * This file and its contents are supplied under the terms of the 37dc9a163SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 47dc9a163SRobert Mustacchi * You may only use this file in accordance with the terms of version 57dc9a163SRobert Mustacchi * 1.0 of the CDDL. 67dc9a163SRobert Mustacchi * 77dc9a163SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 87dc9a163SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 97dc9a163SRobert Mustacchi * http://www.illumos.org/license/CDDL. 107dc9a163SRobert Mustacchi */ 117dc9a163SRobert Mustacchi 127dc9a163SRobert Mustacchi /* 137dc9a163SRobert Mustacchi * Copyright (c) 2015, Joyent, Inc. 147dc9a163SRobert Mustacchi */ 157dc9a163SRobert Mustacchi 16*cc366bfcSRobert Mustacchi #include <endian.h> 17*cc366bfcSRobert Mustacchi 187dc9a163SRobert Mustacchi /* 197dc9a163SRobert Mustacchi * endian(3C) routines 207dc9a163SRobert Mustacchi */ 217dc9a163SRobert Mustacchi 227dc9a163SRobert Mustacchi uint16_t htole16(uint16_t in)237dc9a163SRobert Mustacchihtole16(uint16_t in) 247dc9a163SRobert Mustacchi { 257dc9a163SRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 267dc9a163SRobert Mustacchi } 277dc9a163SRobert Mustacchi 287dc9a163SRobert Mustacchi uint32_t htole32(uint32_t in)297dc9a163SRobert Mustacchihtole32(uint32_t in) 307dc9a163SRobert Mustacchi { 317dc9a163SRobert Mustacchi return (((in & 0xffUL) << 24) | 327dc9a163SRobert Mustacchi (in & 0xff00UL) << 8 | 337dc9a163SRobert Mustacchi (in & 0xff0000UL) >> 8 | 347dc9a163SRobert Mustacchi ((in & 0xff000000UL) >> 24)); 357dc9a163SRobert Mustacchi } 367dc9a163SRobert Mustacchi 377dc9a163SRobert Mustacchi uint64_t htole64(uint64_t in)387dc9a163SRobert Mustacchihtole64(uint64_t in) 397dc9a163SRobert Mustacchi { 407dc9a163SRobert Mustacchi return (((in & 0xffULL) << 56) | 417dc9a163SRobert Mustacchi ((in & 0xff00ULL) << 40) | 427dc9a163SRobert Mustacchi ((in & 0xff0000ULL) << 24) | 437dc9a163SRobert Mustacchi ((in & 0xff000000ULL) << 8) | 447dc9a163SRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 457dc9a163SRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 467dc9a163SRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 477dc9a163SRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 487dc9a163SRobert Mustacchi } 497dc9a163SRobert Mustacchi 507dc9a163SRobert Mustacchi uint16_t letoh16(uint16_t in)517dc9a163SRobert Mustacchiletoh16(uint16_t in) 527dc9a163SRobert Mustacchi { 537dc9a163SRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 547dc9a163SRobert Mustacchi } 557dc9a163SRobert Mustacchi 567dc9a163SRobert Mustacchi uint16_t le16toh(uint16_t in)577dc9a163SRobert Mustacchile16toh(uint16_t in) 587dc9a163SRobert Mustacchi { 597dc9a163SRobert Mustacchi return (((in & 0xff) << 8) | ((in & 0xff00) >> 8)); 607dc9a163SRobert Mustacchi } 617dc9a163SRobert Mustacchi 627dc9a163SRobert Mustacchi uint32_t letoh32(uint32_t in)637dc9a163SRobert Mustacchiletoh32(uint32_t in) 647dc9a163SRobert Mustacchi { 657dc9a163SRobert Mustacchi return (((in & 0xffUL) << 24) | 667dc9a163SRobert Mustacchi (in & 0xff00UL) << 8 | 677dc9a163SRobert Mustacchi (in & 0xff0000UL) >> 8 | 687dc9a163SRobert Mustacchi ((in & 0xff000000UL) >> 24)); 697dc9a163SRobert Mustacchi } 707dc9a163SRobert Mustacchi 717dc9a163SRobert Mustacchi uint32_t le32toh(uint32_t in)727dc9a163SRobert Mustacchile32toh(uint32_t in) 737dc9a163SRobert Mustacchi { 747dc9a163SRobert Mustacchi return (((in & 0xffUL) << 24) | 757dc9a163SRobert Mustacchi (in & 0xff00UL) << 8 | 767dc9a163SRobert Mustacchi (in & 0xff0000UL) >> 8 | 777dc9a163SRobert Mustacchi ((in & 0xff000000UL) >> 24)); 787dc9a163SRobert Mustacchi } 797dc9a163SRobert Mustacchi 807dc9a163SRobert Mustacchi uint64_t letoh64(uint64_t in)817dc9a163SRobert Mustacchiletoh64(uint64_t in) 827dc9a163SRobert Mustacchi { 837dc9a163SRobert Mustacchi return (((in & 0xffULL) << 56) | 847dc9a163SRobert Mustacchi ((in & 0xff00ULL) << 40) | 857dc9a163SRobert Mustacchi ((in & 0xff0000ULL) << 24) | 867dc9a163SRobert Mustacchi ((in & 0xff000000ULL) << 8) | 877dc9a163SRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 887dc9a163SRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 897dc9a163SRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 907dc9a163SRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 917dc9a163SRobert Mustacchi } 927dc9a163SRobert Mustacchi 937dc9a163SRobert Mustacchi uint64_t le64toh(uint64_t in)947dc9a163SRobert Mustacchile64toh(uint64_t in) 957dc9a163SRobert Mustacchi { 967dc9a163SRobert Mustacchi return (((in & 0xffULL) << 56) | 977dc9a163SRobert Mustacchi ((in & 0xff00ULL) << 40) | 987dc9a163SRobert Mustacchi ((in & 0xff0000ULL) << 24) | 997dc9a163SRobert Mustacchi ((in & 0xff000000ULL) << 8) | 1007dc9a163SRobert Mustacchi ((in & 0xff00000000ULL) >> 8) | 1017dc9a163SRobert Mustacchi ((in & 0xff0000000000ULL) >> 24) | 1027dc9a163SRobert Mustacchi ((in & 0xff000000000000ULL) >> 40) | 1037dc9a163SRobert Mustacchi ((in & 0xff00000000000000ULL) >> 56)); 1047dc9a163SRobert Mustacchi } 1057dc9a163SRobert Mustacchi 1067dc9a163SRobert Mustacchi /* Anything to or from big-endian is a no-op */ 1077dc9a163SRobert Mustacchi 1087dc9a163SRobert Mustacchi uint16_t htobe16(uint16_t in)1097dc9a163SRobert Mustacchihtobe16(uint16_t in) 1107dc9a163SRobert Mustacchi { 1117dc9a163SRobert Mustacchi return (in); 1127dc9a163SRobert Mustacchi } 1137dc9a163SRobert Mustacchi 1147dc9a163SRobert Mustacchi uint32_t htobe32(uint32_t in)1157dc9a163SRobert Mustacchihtobe32(uint32_t in) 1167dc9a163SRobert Mustacchi { 1177dc9a163SRobert Mustacchi return (in); 1187dc9a163SRobert Mustacchi } 1197dc9a163SRobert Mustacchi 1207dc9a163SRobert Mustacchi uint64_t htobe64(uint64_t in)1217dc9a163SRobert Mustacchihtobe64(uint64_t in) 1227dc9a163SRobert Mustacchi { 1237dc9a163SRobert Mustacchi return (in); 1247dc9a163SRobert Mustacchi } 1257dc9a163SRobert Mustacchi 1267dc9a163SRobert Mustacchi uint16_t betoh16(uint16_t in)1277dc9a163SRobert Mustacchibetoh16(uint16_t in) 1287dc9a163SRobert Mustacchi { 1297dc9a163SRobert Mustacchi return (in); 1307dc9a163SRobert Mustacchi } 1317dc9a163SRobert Mustacchi 1327dc9a163SRobert Mustacchi uint16_t be16toh(uint16_t in)1337dc9a163SRobert Mustacchibe16toh(uint16_t in) 1347dc9a163SRobert Mustacchi { 1357dc9a163SRobert Mustacchi return (in); 1367dc9a163SRobert Mustacchi } 1377dc9a163SRobert Mustacchi 1387dc9a163SRobert Mustacchi uint32_t betoh32(uint32_t in)1397dc9a163SRobert Mustacchibetoh32(uint32_t in) 1407dc9a163SRobert Mustacchi { 1417dc9a163SRobert Mustacchi return (in); 1427dc9a163SRobert Mustacchi } 1437dc9a163SRobert Mustacchi 1447dc9a163SRobert Mustacchi uint32_t be32toh(uint32_t in)1457dc9a163SRobert Mustacchibe32toh(uint32_t in) 1467dc9a163SRobert Mustacchi { 1477dc9a163SRobert Mustacchi return (in); 1487dc9a163SRobert Mustacchi } 1497dc9a163SRobert Mustacchi 1507dc9a163SRobert Mustacchi uint64_t betoh64(uint64_t in)1517dc9a163SRobert Mustacchibetoh64(uint64_t in) 1527dc9a163SRobert Mustacchi { 1537dc9a163SRobert Mustacchi return (in); 1547dc9a163SRobert Mustacchi } 1557dc9a163SRobert Mustacchi 1567dc9a163SRobert Mustacchi uint64_t be64toh(uint64_t in)1577dc9a163SRobert Mustacchibe64toh(uint64_t in) 1587dc9a163SRobert Mustacchi { 1597dc9a163SRobert Mustacchi return (in); 1607dc9a163SRobert Mustacchi } 161