Unreliable Networking Tom Roeder CS415 2005sp Part II notes Tablet distribution today! 2:15-3:15 Upson 4135 If you can’t make it, send mail, and we’ll set up some other way As usual, you will sign them out Will use them for Part III and on Tom has an office hour this weekend 3-4pm Saturday, Upson 5138 Part II questions? Goal Add an unreliable networking layer We will build on this in future projects We give you a wrapper around NT sockets TCP – add reliability Ad hoc networking – take away reliance on infrastructure This is your IP layer Your layer will be like a simplified UDP Two components minimsg miniports minimsg – minithread networking #define MINIMSG_MAX_MSG_SIZE (4096) typedef struct miniport* miniport_t; typedef char* minimsg_t; extern void minimsg_initialize(); extern miniport_t miniport_local_create(); extern miniport_t miniport_remote_create(network_address_t addr, int id); extern void miniport_destroy(miniport_t miniport); extern int minimsg_send(miniport_t local, miniport_t remote, minimsg_t msg, int len); extern int minimsg_receive(miniport_t local, miniport_t* remote, minimsg_t msg, int *len); minimsg – Best Effort Delivery Sender side Given data, formulate a packet Hand it off to the network layer to be sent Forget about it Receiver side Receive a packet from the network layer Figure out who has registered to receive it Hand it off Note: don’t drop packets or reorder them here miniports – minthreads mailboxes Recall from lecture that ports allow reception Local port If A wants to send to B, A must send to some port B needs to know the port to which to respond We represent this as local and remote ports Used for receiving Remote port Representation on A of a local port on B Used for sending miniports – Low-level code network.[ch] is the socket code It really listens on a UDP port When a packet comes in on this port, interrupts You will write a new interrupt handler for miniports It will pass it to the right port Poor application mechanism need to know magic numbered ports The world still mostly works like this Ranveer will talk later about nameservers Example msg 1 2 block 20 A B Pseudo-Networking details Must call network_initialize() Clock interrupts must be disabled This is the case after calling minithread_clock_init() Do this before calling any networking functions You can run two copies on the same machine We have provided a function: network_udp_ports network.[ch] also contains code for testing ad hoc networks on wired machines Notes On minimsg_receive As usual, the network handler must be fast Some functions contain network_address_t: Treat as opaque You get back a remote miniport The caller must free it We have given you functions to handle them Local ports created in a sequence should always get the same numbers, regardless of remote ports created between them Notes There is no fragmentation We have a max packet size: too high is dropped You are not required to implement fragmentation Two types of miniports, but one struct Use unions: eg. typedef struct miniport_t { int type; /* LOCAL or REMOTE */ unsigned int portnum; union { struct { /* … */ } local; struct { /* … */ } remote; } } Questions about Part III?