Endianness

Toate datele pe care le vom primi de pe un link sunt în Network Order, pe când procesorul de pe calculatorul nostru lucrează în Host Order. Astfel, când o să afișăm tipuri de date mai mari de un byte, va trebui să le trecem în host order cu funcții precum ntohl.

În același fel, atunci când completăm diferitele headere, va trebui să o facem în Network Order, altfel celelalte dispozitive din internet care folosesc această reprezentare le vor interpreta greșit. De exemplu, atunci când completăm câmpul ethertype din header-ul Ethernet, vom folosi eth_hdr->ether_type = htons(ETHERTYPE_ARP); unde ETHERTYPE_ARP este 0x0806.

#include <arpa/inet.h>

// host to network long
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
// network to host long
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort)