Useful for your labwork
Material you might like to refer to when doing your labwork.
- Automatic Generation of Syntax Diagrams with a Given Grammar
This is a website that will take an EBNF (a bit different to ABNF) grammar and return a picture showing a diagram of it. I’ve seen similar diagrams used to great effect in Oracle’s documentation for their command-line programs. I do think though that the result is not particularly more readable compared to a well-written ABNF specification.
This tool generates inputs corresponding to a grammar given in Augmented Backus Naur Form (ABNF). This is used in the first lab.
- Beej's Guide to Network Programming
If you don't want to buy Unix Network Programming, then this will be a very good read. It's nowhere as informative as UNP, but it is a very good starting point for knowing the basic networking system calls.
This is the code generation tool that produces the documentation you will spend a lot of time looking at.
Message Sequence Chart Generator. This produces the sort of diagrams that are often used for documenting how multiple agents interact over time. The Doxygen documentation for our Outboard project has at least one of these.
Graphviz is a useful tool for generating directed graphs, such as you see in the call-graphs in the Doxygen documentation.
cscope is a source code browsing/searching (and more) tool, that we find particularly useful when trying to find something under /usr/include/
Operating System/Environment design
- The Unix Haters Handbook
Although Unix has a lot to offer, it also has a lot of mis-design and cruft embodied into it. It is very enlightening to see the sort of rather cool stuff that came before it, especially as some of it is re-introduced in more mainstream systems.
- The Art of Unix Programming
Serves as a good counterpoint to The Unix Haters Handbook. Gives a lot of philosophy useful for Unix programmers.
- UNIX Standards
- IEEE Std 1003 (“POSIX.1”)
- POSIX — Wikipedia, the free encyclopedia
- The Single UNIX® Specification, Version 2
- Single UNIX Specification — Wikipedia, the free encyclopedia
These standards aim to provide a mostly uniform API across the various Unix operating systems. It covers kernel APIs for dealing with issues such as networking, threading, scheduling, I/O, filesystems, security and IPC; user and administrator commands such as ls(1), ps(1), ifconfig(8) and the scripting environment that it is used in. Even MS Windows can support POSIX interfaces through various emulation layers. The Wikipedia page on the Single UNIX Specification gives a useful overview of the history.
- Requests For Comments (RFCs)
- Microsoft Solutions Developer Network (MSDN) Library
Useful historical documents
- On Holy Wars and a Plea for Peace
A very well known document explaining the whole byte-order (and bit-order) issue.
Interesting IPv6 articles
- A Tale of Two Protocols: IPv4, IPv6, MTUs and Fragmentation
This is a long, but useful, illustration of how bad filtering practices, which breakes Path MTU discovery, affects the ability to connect to numerous websites. The problem is more pronounced with IPv6 because tunnels are used extensively in the current IPv6 landscape, so the effective MTU decreases, and IPv6 doesn't allow fragmentation.
It has plenty of examples showing how the problem was diagnosed.
- RFC4890: Recommendations for Filtering ICMPv6 Messages in Firewalls
The Internet Control Message Protocol plays a very important role in IPv4 and IPv6, even more so in IPv6 because it doesn't allow fragmentation and folds in the functional equivalent of ARP and IGMP. It is common practice to filter ICMP because they do pose some security risks, but it is definately wrong to blanket filter them. So the question remains, what should be filtered and what should be allowed? This RFC answers that question for ICMPv6.
- ICMPv6 is Non-Optional
This example, from Google, serves to illustrate the problems that can be experienced by improper firewalling practice. It is a useful document to read to learn more about how to debug these sort of problems.