Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

Todo List

Global _tcp_Socket::missed_seq [2]
Make a prober re-assembly queue. missed_seq[0] is left edge of missing segment. missed_seq[1] is right edge (in peer's absolute SEQ space)

Global _tcp_Socket::tx_wscale
window scales shifts, Tx/Rx

Global ADAPTER::Name [ADAPTER_NAME_LENGTH]
: remove this

Class DNS_Hdr
parse the SRV resource record (RFC 2052)

Global res_mkquery (int, const char *, int, int, const u_char *, int, const u_char *, u_char *, int)
Handle STATUS case

Global _eth_arrived (WORD *type, BOOL *brdcast)
push back packet, else it's lost

Global init_misc (void)

Global tcp_tick (sock_type *s)
Limit the time spent here (clamp # of loops)

Global watt_sock_init (size_t, size_t, size_t)
Use auto-configuration and set 'my_ip_addr' to 169.254/16

Global wattcpVersion (void)
not tested

not tested

Global _sock_append (_tcp_Socket **tcp)
Implement SYN-cookies. http://cr.yp.to/syncookies.html

Global _sock_append (_tcp_Socket **tcp)
Implement SYN-cookies and drop the segment if no match

drop the oldest (or a random) slot in the listen-queue.

Global accept (int s, struct sockaddr *addr, int *addrlen)
Should maybe loop over all maxconn TCBs and accept the one with oldest 'syn_timestamp'.

Global bind (int s, const struct sockaddr *myaddr, int namelen)
check for "sleeping" ports (lport_inuse in pctcp.c) also. And return EADDRINUSE if local port not free.

Global echo_discard_daemon (void)
handle jumbo packets (IP-fragments)

Global main (int argc, char **argv)
Make a echo client/server test program

Global fcntlsocket (int s, int cmd,...)
handle O_TEXT and O_BINARY

Global gethostbyaddr_internal (const char *addr_name, int len, int type, struct _hostent *ret)
Should return all our addresses if we're multihomed.

should be the new aliases

Global gethostbyname_internal (const char *name, const char **alias, struct _hostent *ret)
should be canonical name

Global gethostbyaddr6_internal (const char *addr, struct _hostent6 *ret)
should check all addresses

should be the new aliases

Global is_watt32_func (const char *func)
Fill in the rest (use a generated table?)

Global IDNA_convert_from_ACE (char *name, size_t *size)
Check for over-run on output.

Global eth_ifnet (void)
fill info

Global iface_ioctrl (Socket *socket, long cmd, char *argp)
Get point-to-point address

Set point-to-point address

Set interface metric

Handle deleting interface address

Handle add/change interface alias

Global tok_ifnet (void)
fill info

Global waterm_ioctrl (Socket *socket, long cmd, char *argp)
set high watermark

get high watermark

set low watermark

get low watermark

OOB data available?

Global init_frag (int argc, char **argv)
Simulate fragment timeout

Global _ip4_handler (const in_Header *ip, BOOL broadcast)
check for LSRR option and replace ip->source with actual source-address burried in option (ref. RFC-1122)

handle compressed IP (use zlib)

Global _ip4_output (in_Header *ip, DWORD src_ip, DWORD dst_ip, BYTE protocol, BYTE ttl, BYTE tos, WORD ip_id, int data_len, const void *sock, const char *file, unsigned line)
Handle IP-fragments here (call ip4_send_fragments() when needed)

Global _ip4_send_fragments (sock_type *s, BYTE proto, DWORD dest, const void *buf, unsigned len, const char *file, unsigned line)
Maybe send highest offset fragment first?

support sending raw IPv4 fragments

Global _ip6_output (in6_Header *ip, ip6_address *src_ip, ip6_address *dst_ip, BYTE protocol, unsigned data_len, int hop_lim, const void *sock, const char *file, unsigned line)
: Support fragments

Global icmp_loopback (ICMP_PKT *icmp, unsigned icmp_len)
fall-through to another ICMP loopback handler

Global udp_loopback (udp_Header *udp, unsigned udp_len)
UDP loopback handler should handle ECHO protocol

UDP loopback handler should handle DISCARD protocol

Global crtdbg_report (int type, char *message, int *ret_val)
make a stack dumper

Global _watt_dosFp
detect program restarts

Global ExpandVarStr (const char *str)
support several in one line and malloc the result.

Global get_model (const char *vendor, int type, int model)

Global icmp4_dump (const in_Header *ip)
Handle debugging of these

Global MatchIp6Dest (const in6_Header *ip)
needs work

Global dbg_mode_all
make them static.

Global DHCP_offer (const struct dhcp *in)
make a hook for SMB-lib

Global set_vend_class (const char *value)
Support setting vendor class

Global icmp_handler (const in_Header *ip, BOOL broadcast)
Handle cancelling raw sockets

!!

!!

send reply?

should store

send reply

send reply upwards

File pcmulti.c
Support IGMP v3 (draft-ietf-idmr-igmp-v3-??.txt)

Global pkt_api_entry (IREGS *reg, unsigned called_from_line)
Use 32-bit API; accessing card via pmode driver

Global pkt_release (void)
We might be called between 1st and 2nd packet-driver upcall. Need to wait for 2nd upcall to finish or else freeing the RMCB too early could cause a crash or a stuck PKTDRVR.

Global pkt_send (const void *tx, int length)
Change this so that we doesn't retry if the driver was stuck for "too long". I've seen drivers using approx. 100 msec on each iteration below. Retrying if the driver is stuck is not worth the time.

Global setup_pkt_inf (void)
Make dynamic allocation based on 'pkt_num_rx_bufs'. Allocate multiple 64kB blocks if needed (would involve messy 16-bit coding in asmpkt.nas).

Global pkt_eth_init (mac_address *eth)
Support Win-9x/ME/CE too

Global sarp_receive (const struct sarp_Packet *sarp)

Global fix_llc_head (void **mac)
handle IEEE 802.3 encapsulation also.

Global modem_command (const char *cmd, const char *resp, int timeout)
Bypass PKTDRVR ?

Global update_in_stat (void)
Count PPP protocols LCP and IPCP

Count these IPv6 protocols

Global update_out_stat (void)
Count the PPP protocols LCP and IPCP

Count these IPv6 protocols

Global tcp_listen (_tcp_Socket *s, WORD lport, DWORD ip, WORD port, ProtoHandler handler, WORD timeout)
use mss from setsockopt()

Global tcp_open (_tcp_Socket *s, WORD lport, DWORD ip, WORD rport, ProtoHandler handler)
use mss from setsockopt()

use TCP_NODELAY set in setsockopt()

Global tcp_Retransmitter (BOOL force)
set "Slow-start" threshold

Allow for 3 SYN before giving up

Global tcp_rtt_win (_tcp_Socket *s)
Use TimeStamp option values

Use the threshold to signify "end-of-Slow-Start" (equilibrium)

Global udp_demux (const in_Header *ip, BOOL ip_bcast, DWORD destin, WORD srcPort, WORD dstPort, BOOL *udp_err)
use some kind of hashing to speed up the search.

Global mtu_blackhole
Add PMTU blackhole detection

Global mtu_discover
Add PMTU discovery method

Global init_localport (void)
Make empherical port range configurable.

Use some hashing technique to speed up find_free_port().

Global sock_puts (sock_type *s, const BYTE *dp)
suppport UDP frags

Global std_negotiation (struct ppp_state *state, struct ppp_xcp *xcp)
extract LCP_MRU option

Global pppoe_start (void)
Fix-me: The new MTU/MSS affects all connections (also those which doesn't use PPPoE framing).

Global user_name [MAX_VALUELEN+1]
PPP user/passwd not handled

Global tcp_receive (Socket *sock, void *buf, int len, int flags, struct sockaddr *from, int *fromlen)
Handle receiving Out-of-Band data

Global udp_receive (Socket *sock, void *buf, int len, int flags, struct sockaddr *from, int *fromlen)
This needs a redesign

Global exc_select (int s, Socket *socket)
Only arrival of OOB-data should count here

Global sel_min_block
Should be configurable.

Global shutdown (int s, int how)
For tcp, should send RST if we get incoming data. Don't send ICMP error.

For tcp, should send FIN when all Tx data has been ack'ed. close_s(s) should be same as shutdown(s,SHUT_WR)

Global except_handler (int sig)
Disassemble crash address

Global sock_getcw (sock_type *s)
Wide character version of sock_getc()

Global sock_getsw (sock_type *s, wchar_t *data, int n)
Wide character version of sock_gets()

Global sock_putcw (sock_type *s, wchar_t ch)
Wide character versions of above functions.

Global sock_putsw (sock_type *s, const wchar_t *data)
Wide character version of sock_puts()

Global _sock_crit_stop (void)
handle SIGALRM raised in a critical-section

Global _sock_set_rcv_buf (sock_type *s, size_t len)
allow user to define size using SO_RCVBUF/SO_SNDBUF before calling connect().

Global _TCP6_listen (Socket *socket, const void *host, WORD loc_port)
Support TCP listen() for AF_INET6

Global _TCP6_open (Socket *socket, const void *dst, WORD loc_port, WORD rem_port)
use mss from setsockopt()

Yield for IPv6 sockets

use TCP_NODELAY set in setsockopt()

Global _UDP6_listen (Socket *socket, const void *host, WORD port)
Support UDP listen() for AF_INET6

Global _UDP6_open (Socket *socket, const void *host, WORD loc_port, WORD rem_port)
Support UDP connect() for AF_INET6

Global set_proto (int type, BOOL is_ip6, int *proto)
IPPROTO_XTP

Global sock_packet_receive (Socket *sock, void *buf, unsigned len, struct sockaddr *from, int *fromlen)
This should loop until some packet is received.

Global sock_packet_receive (Socket *sock, void *buf, unsigned len, struct sockaddr *from, int *fromlen)
should check fromlen is large enough

Global sock_raw4_recv (const in_Header *ip)
Handle receiving bad IP-packets for SOCK_RAW sockets.

Global get_sol_opt (Socket *s, int opt, void *val, int *len)
Handle urgent (OOB) data

Handle these SOL_OPTIONS:

Global raw6_rx_buf (_raw6_Socket *raw, DWORD size)
Support setting Rx-buffer size of raw IPv6 sockets

Global raw6_tx_buf (_raw6_Socket *raw, DWORD size)
Support setting Tx-buffer size of raw IPv6 sockets

Global raw_rx_buf (_raw_Socket *raw, DWORD size)
Support setting Rx-buffer size of raw IPv4 sockets

Global raw_tx_buf (_raw_Socket *raw, DWORD size)
Support setting Tx-buffer size of raw IPv4 sockets

Global split_ip6 (struct pkt_split *, const in6_Header *)
Handle Fragment, ESP, AUTH, IPv6 encap

File syslog.c
configure variables in syslog2.c when calling openlog() thus making syslog() independent of watt_sock_init().

Global tcp_process_data (_tcp_Socket *s, const tcp_Header *tcp, int len, int *flags)
Handle Out-of-Order urgent data. Raise SIGURG.

Global tcp_reassemble (_tcp_Socket *s, const tcp_Header *tcp, const BYTE *data, UINT len, int *flags)
Create a better TCP reassembler some day. Current logic only handles 1 missed segment. We should handle at least 2.

Global tcp_set_window (_tcp_Socket *s, const tcp_Header *tcp)
Set slow-start threshold

Global tcp_synsent_state (_tcp_Socket **, const in_Header *, tcp_Header *, int)
recalculate RTT-timer

File tftp.c
Support option negotiation and ETFTP (RFC-1986)

File timer.c
To get rid of the timer problem once and for all we need a timer ISR that increments a 32-bit value no regard to day roll-over etc. Maybe hook up IRQ 8 to call a real-mode stub that we opy to DOS-memory (similar to the pkt_receiver stub code. Then far-peek at that timer variable.

Global init_timers (void)
check if 8254 PIT is really working

Global ip4_transmit (Socket *socket, const void *tx, unsigned len)
Handle sending fragments with IP optons

Global ip6_transmit (Socket *socket, const void *tx, unsigned len)
support fragmentation

Global tcp_transmit (Socket *socket, const void *buf, unsigned len, int flags)
Allow non-blocking sockets to send in SYNSENT state

Global query_init_ip6 (struct DNS_query *q, const void *addr)
Use "ip6.arpa" bitstring format ?

Global exc_app_start
find the real application start

Global get_interface_type (WORD *link)
Fix me

Global open_airpcap_adapter (const char *name)

Global _dx_real_alloc (int para_count, WORD *para, WORD *largest)

Global PmGlueEnd (void)
Support 32-bit Watcom with X32VM

Global rmcb [MAX_WRAPPERS]
find the real application start

Generated on Wed Aug 4 08:56:00 2010 for Watt-32 tcp/ip by doxygen 1.3.8