$Id: TODO,v 1.46 2025/11/12 18:01:52 mjl Exp $

* compile without warnings when the following is passed in CFLAGS
  -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable
  -Wno-deprecated-declarations -Wno-unused-parameter -Wshadow -Wextra

* the warts code sets flags/params_len to zero in a bunch of places, but
  they may have been malloc_zero'd.  go through and figure out.

* document JSON format for all measurements in sc_warts2json

* monitor /etc/resolv.conf for changes.

* try alternate nameserver entries if the first is unresponsive.

* convert sc_bdrmap, sc_erosprober, sc_radargun, sc_tbitblind,
  sc_tbitpmtud, and sc_uptime to libscamperctrl

* in data collection drivers, ask for cycle start and stop records,
  write them out.  done: sc_ally, sc_filterpolicy, sc_pinger,
  sc_prefixprober, sc_prefixscan, sc_speedtrap

* libscamperctrl:
   unit tests

* libscamperfile:
   - udpprobe.probe_count should be .attempts.
   - stop should be stop_reason consistently across measurements, or
     perhaps result. current status of measurements:
     - trace: stop_reason
     - ping: stop_reason
     - sniff: stop_reason
     - host: stop     
     - udpprobe: stop
     - http: stop
     - dealias: result
     - sting: result
     - tbit: result
     - neighbourdisc: none
     - tracelb: none
   - warts code should not allow result structures with null dst, etc.
   - some scamper_addr_is functions return -1, as well as 0 or 1, but
     they should either return 0 or 1.

* investigate if gettimeofday has to be called so much.

* check that the TOS bits are being set properly on tx.

* deorbit scamper_outfiles.[ch]

* in the scamper.1 man page:
   document control socket quoting rules.
   how to feed commands to sources.
   how does priority value translate into the way lists are mixed.
   what is the syntax of responses on control socket
   how does the cycles value of a source change as cycles are finished

* reduce memory consumption
  - reorg scamper_task_sig_t to pack into smaller structure
  - expire queue should just use time_t, and be organized by time_t
    rather than have a timeval in each expire node

* doubletree will probe backwards when -O dtree-noback is passed if the
  first hop times out.  this is probably incorrect behavior.
