Connected: An Internet Encyclopedia
A.5 Berkeley Unix dependencies

Up: Connected: An Internet Encyclopedia
Up: Requests For Comments
Up: RFC 1144
Up: A Sample Implementation
Prev: A.4 Initialization
Next: B Compatibility with past mistakes

A.5 Berkeley Unix dependencies

A.5 Berkeley Unix dependencies

Note: The following is of interest only if you are trying to bring the sample code up on a system that is not derived from 4BSD (Berkeley Unix).

The code uses the normal Berkeley Unix header files (from /usr/include/netinet) for definitions of the structure of IP and TCP headers. The structure tags tend to follow the protocol RFCs closely and should be obvious even if you do not have access to a 4BSD system./48/

The macro BCOPY(src, dst, amt) is invoked to copy amt bytes from src to dst. In BSD, it translates into a call to bcopy. If you have the misfortune to be running System-V Unix, it can be translated into a call to memcpy. The macro OVBCOPY(src, dst, amt) is used to copy when src and dst overlap (i.e., when doing the 4-byte alignment copy). In the BSD kernel, it translates into a call to ovbcopy. Since AT&T botched the definition of memcpy, this should probably translate into a copy loop under System-V.

The macro BCMP(src, dst, amt) is invoked to compare amt bytes of src and dst for equality. In BSD, it translates into a call to bcmp. In System-V, it can be translated into a call to memcmp or you can write a routine to do the compare. The routine should return zero if all bytes of src and dst are equal and non-zero otherwise.

The routine ntohl(dat) converts (4 byte) long dat from network byte order to host byte order. On a reasonable cpu this can be the no-op macro:

                           #define ntohl(dat) (dat)

On a Vax or IBM PC (or anything with Intel byte order), you will have to define a macro or routine to rearrange bytes.

The routine ntohs(dat) is like ntohl but converts (2 byte) shorts instead of longs. The routines htonl(dat) and htons(dat) do the inverse transform (host to network byte order) for longs and shorts.

A struct mbuf is used in the call to sl_compress_tcp because that routine needs to modify both the start address and length if the incoming packet is compressed. In BSD, an mbuf is the kernel's buffer management structure. If other systems, the following definition should be sufficient:

            struct mbuf {
                    u_char  *m_off; /* pointer to start of data */
                    int     m_len;  /* length of data */
            };

            #define mtod(m, t) ((t)(m->m_off))


Next: B Compatibility with past mistakes

Connected: An Internet Encyclopedia
A.5 Berkeley Unix dependencies