🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.protocols.misc
Article #899

big endians are good for networking, huh?

#899
From: Paul A Vixie
Date: Wed, 25 Jan 1989 11:34
42 lines
2486 bytes
I've got a diagram from Comer's Internetworking book (page 140), that says
that the TCP header starts out looking like this:

	0       8       16             31
	+-------+-------+-------+-------+
	|  SOURCE PORT  |   DEST PORT   |
	+-------+-------+-------+-------+

Looks reasonable.  It's even useful, mostly, since if I print the bytes in a
TCP header in the easiest possible way (lowest addresses on the left), I can
look from the bytes to the table and it looks just like it ought to.

But, for something I'm doing with SLIP header compression, I needed to put the
ports into a longword.  For a while I was overlaying an array of u_long on the
TCP header and grabbing element 0, but the pointer assignment looked non-port-
able somehow, so I decided to shift and add.

	longports = (tcp->th_sport << 16) + (tcp->th_dport);

Fine.  But oops: the "<<" operator, which _looks_ like it's going to move
things to the "left", is really going to move things to more-significant
bit positions.  On the VAX, that's "left", since the VAX Arch Ref Manual
shows endless diagrams with bit 31 on the left and bit 0 on the right.

On a 68000 or MIPSM, "up" is "right" and since the "<<" is "up" it's actually
"right" on those machines.  In my case, if I compared "longports" to something
extracted via the "overlay the u_long array" method, it would be different.
It doesn't really matter since I'm extracting it the same way everywhere, but
I believe I can justly complain that the law of least astonishment has been
violated, just the same.

Perhaps "C" shows a strong little-endian bias in the visual representation of
"shift to more/less significant bit positions" operators ("<<" and ">>")?  I
toyed with the possibility that "<<" would really mean "left" (or "down") on
a big-endian, and I'm reasonably sure it doesn't work that way -- anybody know
otherwise?

Little endian, big endian -- they all suck.  Give me an alternative!  :-)
--
Paul Vixie
Work:    vixie@decwrl.dec.com    decwrl!vixie    +1 415 853 6600
Play:    paul@vixie.sf.ca.us     vixie!paul      +1 415 864 7013
Technical Details
Message-ID: <VIXIE.89Jan25033452@bacchus.pa.dec.com>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!attcan!uunet!lll-winken!ames!husc6!purdue!decwrl!vixie

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!attcan!uunet!lll-winken!ames!husc6!purdue!decwrl!vixie
From: vixie@decwrl.dec.com (Paul A Vixie)
Newsgroups: comp.protocols.misc
Subject: big endians are good for networking, huh?
Message-ID: <VIXIE.89Jan25033452@bacchus.pa.dec.com>
Date: 25 Jan 89 11:34:52 GMT
Sender: vixie@decwrl.dec.com
Organization: DEC Western Research Lab
Lines: 42