lwres revision 2358fd9353e91bc2291c165a679af9b3a1b7fb3a
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync$Id: lwres,v 1.1 2000/02/29 20:10:49 explorer Exp $
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncGeneral design:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncThe lwres library converts structures into wire-format packets for
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctransmission, and unmarshalls them on receive.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncMarshalling and unmarshalling:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncEach structure will have two functions defined, one to take a
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncwire-format packet and convert it into a structure, and another to
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctake a structure and convert it into a wire-format packet. There
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncis a structure cleanup function that will take the unmarshalled
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstructure and free any dynamically allocated elements.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncWire formats:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncAll integer values are in network byte order.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncAll addresses are in network byte order. That is, they are directly
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncusable and do not need to be byte swapped, at least for ipv4 and ipv6.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncAll character strings are prefixed with a length, and are NUL
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncterminated C strings. This is a concession for structure handling on
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncthe receive side, and allows a mapping structure to point to data
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccontained in the actual receive buffer, eliminating copying.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncNOOP (aka ping) packet format:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync lwres_lwpacket_t header;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t datalength;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < datalength bytes >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncThe server simply returns the entire data region in the reply. This
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncallows the client to determine if the server is operational.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncGETADDRSBYNAME:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync lwres_lwpacket_t header;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t naliases;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t naddrs;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t real_name_len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < real_name_len bytes of name >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint8_t \0
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < naliases of
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < len bytes of name >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint8_t \0
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < naddrs of
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint32_t family;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < len bytes of address >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncGETNAMEBYADDR:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync lwres_lwpacket_t header;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t naliases;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t real_name_len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < real_name_len bytes of name >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint8_t \0
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < naliases of
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint16_t len;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync < len bytes of name >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync isc_uint8_t \0
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync >
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync