* ** *** HIGH PRIORITY ** * - restore the network when Netsukuku is closed (call /etc/rc.d/rc.inet1 ?) - Netsukuku WRT firmware: - a configured openwrt release with all the necessary kernel modules and packages installed - A GUI interface to configure the /etc/netsukuku/netsukuku.conf file and to use the rc.ntk script. - bugs - comments in resolv.conf are not considered: NOTE: Do not resolv this BUG: Now It's useful - resolv.conf is not reverted when netsukuku is closed, If it was ran in restricted mode/IGS. <--- I fixed this, But it's basically a hack. - Netsukuku adds bizzare characters when using restricted/IGS, I.E this. (#Qq`9TA^B) - IGS is not functional due to tunl0 failing to be configured. - Netsukuku cannot discover other nodes when running on wlan, Even when wlan is configured by ntk-wifi. - Netsukuku cannot discover other nodes on ethernet either, This may be a bug preventing any discovery/pairing of any nodes. * ** *** MEDIUM PRIORITY ** * - Equalize multipath routes. The `equalize' module is still experimental in the kernel. - bandwidth measurement - do not delete an inet-gw if there's still bw passing on it. - Viphilama: http://lab.dyne.org/Ntk_viphilama - Bandwidth weight for each entry of the qspn (not just rtt and latency): - what to use to get the bandwidth of a network interface? Use `iperf' to measure once the max link bw, then monitor with iptables the link and calculate the used bw. - See http://lab.dyne.org/Ntk_bandwidth_measurement - Gnodes contiguity - gnode re-hook - When we have two different gnodes A and C, and then B hooks to A, nothing happens, since C, doesn't receive any qspn_pkt - test: two (g)nodes with the same IP - currently only in particular situations the rehook isn't possible: A - A, A - B - A. - Challenge - RSA between rnodes: the nodes which are already hooked ask for the public key to the node which is hooking. - Creation of the problem. - Resolution of the problem. - Diffusion of the reply. - Reject of challenge for X time after a first challenge has been completed. - Do just one challenge at the same time, reject/delay all the other which came later. - If the challenge was rejected/delayed wait the right amount of time and retry. - Ban of gnodes which lost the challenge ? - Challenge between two gnode not contiguous, which have the same gid. - turn andns_lib.c into a real shared library - SNSD - pubkey: automatic deletion request - A firewall script to turn a ntk node into a routing only node. other ntk nodes | | | _________ | N | Internet ---------- | WRT ntk | - - w i f i - - - Ntk node A |_________| \ | \ | \ Ntk node B L A N If N is set to a routing only node, then the nodes A and B will always be able to reach the Internet and the "other ntk nodes" through it, but they will not be able to reach the LAN connected to the node N. Optionally the node N can leave some "backdoor" ports opened, f.e. it might want to leave a ssh login which accepts keys authentication only. The port used by Netsukuku will be leaved open too, in this way the nodes can still communicate between them. - Can multiple qspn packets be processed concurrently? Or do we need mutexes for them? Only the tests will give answer. * ** *** LOW PRIORITY ** * - Interactive shell/console. Some commands that should be implemented: "stats" gives statistics, "rnodes" show the list of rnodes, "int_map" dumps the internal map in a ASCIIful way, "ext_map", "bnode_map", "andna_cache", ..., "flush rhcache" - ntk-finger: it would be handy to be able to know some info on a particular node. The user puts his node info in /etc/netsukuku/finger. $ ntk-finger remote_node_ip will print out its /etc/netsukuku/finger. - why don't we just use fingerd? - too bugged? - and what about a stupid shell script like this: while [ 0 ]; do cat /etc/netsukuku/finger | nc -l -p 79; done - renice the NetsukukuD process? - small memory: if the system has <= X Mb of free memory, switch on dumb mode. In this mode NetsukukuD keeps only the list of rnodes and forwards every request to one of them. The lcl_cache is kept too. - better memory utilisation: see MAXMSGSZ, PKT_MAX_MSG_SZ, pkt_verify_hdr(), pkt_uncompress(), andns_uncompress(). - The maximum size of an uncompressed or compressed packet must be proportional to the total free memory reserved to the daemon. - pkt_uncompress() must be able to drop the packet if there's no free memory available. The same must be done by pkt_recv() and other similar functions. - option to disable the modification of the routing table - option to change on runtime the wait-times of the QSPN, radar, etc... -normal, -high, -low - option (both on command line and in netsukuku.conf) to disable the saving of caches. (the keyring will always be saved). - Change with something else the eliminable fatal() calls in netsukuku_hook() - Ipv6 support: use ff05::23 for multicast. qspn_gnode_count isn't IPv6 compatible! - Test request.c - Port the kernel route code for *BSD: take a look at rt_ioctl.c and rt_socket.c of quagga. - use PREFIX in the man pages - xmalloc.c: Implement a "wrapper heap". We do a big malloc() at the start and then we manage personally it, in this way we avoid the huge overhead of malloc. - Compressed maps: save the files in compressed formats - API for the syncronization of the maps the daemon. A third party program, might want to have always the latest maps. - Write the documentation for the code that can be used by other programs. (By the way it is already commented.) - krnl_conf.c: it reads /proc/kallsyms and verifies that there are the symbols used by the modules/builtins kernel code netsukuku is dependent on. kernel_conf.h will have an array like pkt_op_table (pkts.h). Each symbol will be checked by the init functions. There will be also associated an help function that tells what to do when the symbol is missing in /proc/kallsyms. For example, mark_rule_init() will do: if(krnl_conf_check("netfilter") <0) { krnl_netfilter_usage(); return -1 } - Launch a trigger script. Possible events: INET_UP, INET_DOWN, NEW_RNODE, DEAD_RNODE. - Use bireloc from autopackage - Use qemu to make Netsukuku run on windows?!? - /*\ \*/