Each link layer process will have two connections: one "up" to the appropriate IP layer process, and one "sideways" to the link layer process on the simulated machine at the other end of its link.
Each link layer uses variable-length frames with these ?elds in this order:
- Source (1 byte)
- Destination (1 byte)
- Protocol (1 byte)
- Length, in bytes, of data ?eld (1 byte)
- Data (0-MTU bytes)
There is no CRC. You must ensure that every frame sent among link processes has correct values for all ?elds. The MTUs are as follows:
- A-R1 = 64 bytes
- B-R1 = 64
- C-R2 = 80
- D-R2 = 80
- R1-R2 = 56
Notice that all MTUs must be 255 or less because each link layer's frame length ?eld is a single byte.
The link addresses of A, B, C, D are 2, 3, 5, and 7, respectively. The link address of R1 to be used by A and B is 11. The link address of R2 to be used by C and D is 13. R1 and R2 are attached to a third link. The link address of R1 to be used by R2 is 17. The link address of R2 to be used by R1 is 19. The protocol number for IP is 42.
A link layer process is simple: it calls select(2), awaiting input on either connection. When input is available from the IP process, it is read, encapsulated in a single frame if possible, and then the frame is written into the connection to the other link process. (If the IP process attempts to send an IP datagram that is too big to ?t in a single frame, an error should be returned. On UNIX, this error is EMSGSIZE.)
When input is available from the other link process it is veri?ed to be a frame carrying IP data, and, if so, the frame's header is stripped and its data ?eld written into the IP connection. If the frame is erroneous, it is silently dropped.