Zeal Networking Stack Notes

Departures from Shrine:

        ARP Cache is Hashtable. Keys are U32 ip addresses converted to "%X" string.

        DNS Cache is Hashtable. Keys are U8 *hostname.

        NetFIFO is NetQueue. If problems arise, maybe set a #define max
        for the length of the Queue.

        Not defining ntohl and friends. Using Endian functions.

        Many file global vars have been condensed into global classes.

        Sockets are a non-standard finite state machine.
        Protocols extend these to create protocol-specific sockets.

Stack progress: (# done, ~ WIP, . N/A)

        # PCNet-II Driver
        . Other Network Card Drivers? See Roadmap.

        # NetQueue

        # Ethernet
                - double check.

        # ARP (Address Resolution Protocol)
                - double check.

        # Sockets
                - Implemented a Finite State Machine
                        through Socket function calls.
                        Sockets themselves do nothing,
                        all calls simply do/don't alter
                        socket state. Protocols will
                        need to detect socket states
                        and respond appropriately.
                - keep eyes on verifying socket logic sanity.

        # IPV4 (Internet Protocol Version 4)
                - double check, some TODOs.

        ~ ICMP (Internet Control Message Protocol)
                - needs ICMPSendRequest implemented.

        ~ TCP (Transmission Control Protocol)
                - needs much testing, still many bugs/oddities.
                - needs reviewing RFC for better compliance.

        # UDP (User Datagram Protocol)
                - double check, some TODOs.

        ~ DNS (Domain Name System)
                - needs clarifying/rewriting in certain methods.

        ~ DHCP (Dynamic Host Configuration Protocol)
                - needs clarifying/rewriting in certain methods.

        # NetHandler
                - Uses a switch case with packet ethertype,
                        then directly calls the appropriate handler.

                - IPV4Handler was moved to NetHandler file.