Dibbler - a portable DHCPv6  1.0.2RC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Todo List
Page 10. Bibliography
Page 2. Compilation
- describe remaining parameters
Page 4 General information
: Long/performance tests are required.
Page 6. Architecture

Member DigestTypes
: rename to AuthAlgorithm_DibblerDigestTypes
Member DnsMessage::compile (int maxlen)
: is this safe if chars are unsigned?
Member DNSUpdate::get_oldDnsRR ()
: Make this over UDP or TCP, not always TCP (TCP blocks on connect())
Member DnsUpdateModeCfg
: remove poslib.h inclusion from here
Member doRevDnsZoneRoot (char *src, char *dst, int lenght)
: what to do with prefixes which do not divide by 4?
Member doRevDnsZoneRoot (char *src, char *dst, int lenght)
: what to do with prefixes which do not divide by 4?
Member get_mac_from_ipv6 (const char *iface_name, int ifindex, const char *v6addr, char *mac, int *mac_len)

: Implement this for BSD see "/usr/sbin/ndp -a -n"

: Implement this for Linux see "/sbin/ip -6 neigh"

: Implement this for Solaris

Member if (PD_Count_==PD_Assigned_+1)
: it's just workaround. Prefix random generation should be implemented for real.
Member if_list_get ()
: Ugly workaround. Please remove one BSD guys fix their kernel.
Member init (const char *pidfile, const char *workdir)

: This is Linux specific. It will most likely not work on BSD or Mac OS

: buf needs to fit "/proc/%d/exe", where d is pid_t (on my system it's 20 B exactly with positive PID. However this is not portable.)

: This is linux-specific. It will not work on Solaris

Member ipaddr_update (const char *ifacename, int ifindex, const char *addr, unsigned long pref, unsigned long valid, int prefixLength)

: implement this

: Linux kernel currently does not provide API for dynamic addresses

: implement this

Member is_addr_tentative (char *ifacename, int iface, char *plainAddr)

: implement this

: implement this

Member is_addr_tentative (char *ifacename, int iface, char *plainAddr)

: implement this

: implement this

Member prefix_add (const char *ifname, int ifindex, const char *prefixPlain, int prefixLength, unsigned long prefered, unsigned long valid)

: implement this

: implement this

Member prefix_add (const char *ifname, int ifindex, const char *prefixPlain, int prefixLength, unsigned long prefered, unsigned long valid)

: implement this

: implement this

Member prefix_del (const char *ifname, int ifindex, const char *prefixPlain, int prefixLength)

: implement this

: implement this

Member prefix_update (const char *ifname, int ifindex, const char *prefixPlain, int prefixLength, unsigned long prefered, unsigned long valid)

: implement this

: implement this

Member sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx)
: see sha1.c for a better implementation.
Member sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx)
: see sha1.c for a better implementation.
Member SPtr< T >::operator* () const
: throw here if: ptr is NULL ptr->ptr is NULL
Member STATUSCODE_SUCCESS
: convert this to enum
Member TAddrIA::delPrefix (SPtr< TAddrPrefix > x)
: should we compare prefix length, too?
Member TAddrIA::delPrefix (SPtr< TIPv6Addr > x)
: should we compare prefix length, too?
Member TAddrMgr::addPrefix (SPtr< TAddrClient > client, SPtr< TDUID > duid, SPtr< TIPv6Addr > clntAddr, const std::string &ifname, int ifindex, unsigned long IAID, unsigned long T1, unsigned long T2, SPtr< TIPv6Addr > prefix, unsigned long pref, unsigned long valid, int length, bool quiet)
: This setState() was used on reconfigure branch, but not on master
Member TAddrMgr::delPrefix (SPtr< TDUID > clntDuid, unsigned long IAID, SPtr< TIPv6Addr > prefix, bool quiet)
: Cache for prefixes this->addCachedAddr(clntDuid, clntAddr);
Member TAddrMgr::parseAddrIA (const char *xmlFile, FILE *f, int t1, int t2, int iaid, const std::string &ifname, int ifindex, SPtr< TIPv6Addr > unicast=SPtr< TIPv6Addr >())
parse DUID
Member TCfgMgr::getKey ()
: add some parameter that will pick the right key
Member TClntCfgIface::isReqTimezone ()
: Once set, these are never used
Member TClntCfgIface::ReqDNSServer
: Remove those booleans and use State directly
Member TClntCfgMgr::setAuthAcceptMethods (const std::vector< DigestTypes > &methods)

move this to CfgMgr

move this to CfgMgr and unify with TSrvCfgMgr::setAuthDigests

Member TClntIfaceMgr::doDuties ()
: sleep cannot be performed here. What if client has to perform other action during those 3 seconds?
Member TClntIfaceMgr::select (unsigned int timeout)
Implement AUTH_DROP_UNAUTH_ on client-side
Member TClntMsg::answer (SPtr< TClntMsg > reply)
: set proper options to FAILED state
Member TClntMsg::checkReceivedAuthOption ()
calculate HMAC-MD5 checksum and compare it against stored key
Member TClntMsg::setDefaults ()
: This should be moved to TMsg
Member TClntMsgConfirm::doDuties ()
: MRD counters are a mess.
Member TClntMsgDecline::answer (SPtr< TClntMsg > Rep)
: Is UseMulticast option included?
Member TClntMsgRebind::updateIA (SPtr< TClntOptIA_NA > ptrOptIA, SPtr< TOptDUID > optSrvDUID, SPtr< TOptAddr > optUnicast)

: what to do with new addrs?

:

:

Member TClntMsgReconfigure::check ()
: check if reconfigure-message option is received, if not, drop the message
Member TClntMsgRenew::doDuties ()
: increase RT from REN_TIMEOUT to REN_MAX_RT
Member TClntMsgRequest::TClntMsgRequest (TOptList opts, int iface)
: add support for unicast in IA_TA and IA_PD
Member TClntMsgSolicit::shallRejectAnswer (SPtr< TClntMsg > msg)

Check if proper IAIDs are returned, also if all IA were answered (if requested several IAs were requested)

Check all IA_NAs, not just first one

Member TClntOptFQDN::doDuties ()
: Check the DNS server with the given name.
Member TClntOptFQDN::TClntOptFQDN (char *buf, int bufsize, TMsg *parent)
: do some validity check
Member TClntOptIA_NA::countValidAddrs (SPtr< TAddrIA > ptrAddrIA)
: A) check if they repeats (possible with maliciious server)
Member TClntOptIA_NA::TClntOptIA_NA (SPtr< TClntCfgIA > ClntCfgIA, TMsg *parent)
: WTF? Why there are 5 different constructors??? There should be 2 or 3.
Member TClntOptIA_NA::TClntOptIA_NA (SPtr< TClntCfgIA > ClntCfgIA, SPtr< TAddrIA > ClntaddrIA, TMsg *parent)
: keep allocated address in TAddrClient
Member TClntOptTimeZone::isValid () const
: check is somehow
Member TClntOptTimeZone::setSrvDuid (SPtr< TDUID > duid)
remove this
Member TClntOptTimeZone::TClntOptTimeZone (char *buf, int bufsize, TMsg *parent)
: do some validity check
Member TClntTransMgr::checkDecline ()

: check result

: check result

Member TClntTransMgr::checkRequest ()
: Reimplement check request support.
Member TClntTransMgr::handleReconfigure (SPtr< TClntMsg > reconfMsg)

: check authentication here

: server may tell client to send, RENEW, REBIND or INF-REQUEST

Member TClntTransMgr::removeExpired ()
: call notify-script when address/prefix is expired
Member TDHCPClient::checkPrivileges ()
: check privileges
Member TDHCPRelay::checkPrivileges ()
: check privileges
Member TDHCPServer::checkPrivileges ()
: check privileges
Member THostRange::THostRange (SPtr< TIPv6Addr > addrl, SPtr< TIPv6Addr > addrR)
: prefix length could be calculated automatically here
Member TMsg::PeerAddr_
: rename to RemoteAddr_
Member TMsg::setAuthDigestPtr (char *ptr, unsigned len)
: remove from here (and move to AUTH option)
Member TMsg::validateAuthInfo (char *buf, int bufSize, AuthProtocols proto, const DigestTypesLst &acceptedDigestTypes)
: load plain text from a file
Member TOptAuthentication::getSPI () const
: remove this
Member TOptFQDN::isValid () const
Check the validity of this option
Member TOptGeneric::operator== (const TOptGeneric &other)
: Implement comparison for real
Member TOptIA_PD::isValid () const
check if suboptions are valid
Member TOptOptionRequest::OptCnt
: you're kidding me, right? Rewrite this ASAP
Member TOptTA::TOptTA (char *&buf, int &bufsize, TMsg *parent)
: Parse suboptions
Member TOptVendorData::getVendor ()
: should return uint32_t
Member TRelOptInterfaceID::TRelOptInterfaceID (char *data, int dataLen, TMsg *parent)
: Support length other than 4
Member TRelOptInterfaceID::TRelOptInterfaceID (int interfaceID, TMsg *parent)
: Support length other than 4
Member TSrvCfgIface::getAllowedAddrClassID (SPtr< TDUID > duid, SPtr< TIPv6Addr > clntAddr)
Buffer overflow for more than 100 classes
Member TSrvCfgIface::getFQDNDuid (const std::string &name)
: Implement this!
Member TSrvCfgMgr::countAvailAddrs (SPtr< TDUID > clntDuid, SPtr< TIPv6Addr > clntAddr, int iface)
: long long long int (128bit) could come in handy
Member TSrvCfgMgr::getRandomAddr (SPtr< TDUID > duid, SPtr< TIPv6Addr > clntAddr, int iface)
: get addrs from first address only
Member TSrvCfgMgr::InClientClass (SPtr< TSrvMsg > msg)
: Fix this! We check if message is from accepted client, but don't do anything with that info
Member TSrvCfgMgr::isClntSupported (SPtr< TSrvMsg > msg)
: reject-client and accept-only does not work in stateless mode
Member TSrvCfgMgr::matchParsedSystemInterfaces (SrvParser *parser)
: Client's class uses setIface{Name,ID}(). We should unite the
Member TSrvCfgMgr::setAuthDigests (const DigestTypesLst &digests)
move this to CfgMgr and unify with TClntCfgMgr::setAuthAcceptMethods
Member TSrvCfgPD::clntSupported (SPtr< TDUID > duid, SPtr< TIPv6Addr > clntAddr)
implement access control for PD for real
Member TSrvCfgPD::clntSupported (SPtr< TDUID > duid, SPtr< TIPv6Addr > clntAddr, SPtr< TSrvMsg > msg)
implement access control for PD for real
Member TSrvCfgPD::setOptions (SPtr< TSrvParsGlobalOpt > opt, int PDPrefix)
: this code is fishy. It behave erraticaly, when there is only 1 prefix to be assigned if (PD_Count_ > pool->rangeCount()) PD_Count_ = pool->rangeCount(); cnt++;
Member TSrvIfaceMgr::decodeRelayForw (SPtr< TIfaceIface > physicalIface, SPtr< TIPv6Addr > peer, char *buf, int bufsize)
: WTF is that? ----v
Member TSrvIfaceMgr::select (unsigned long timeout)

: Implement support for draft-ietf-dhc-link-layer-address-opt

: Store MAC address in the message, so it could be logged later or added to the database

Member TSrvMsg::addRelayInfo (SPtr< TIPv6Addr > linkAddr, SPtr< TIPv6Addr > peerAddr, int hop, const TOptList &echoList)

: modify this to use RelayInfo structure

: what about this?

Member TSrvMsg::appendAuthenticationOption (SPtr< TDUID > duid)
: server now forces its default algorithm. It should be possible for the server to keep using whatever the client chose.
Member TSrvMsg::appendRequestedOptions (SPtr< TDUID > duid, SPtr< TIPv6Addr > addr, int iface, SPtr< TOptOptionRequest > reqOpt)
: Make this an array of options and handle them in an uniform manner
Member TSrvMsg::processOptions (SPtr< TSrvMsg > clientMsg, bool quiet)
: remember that client supports reconfigure
Member TSrvMsg::RemoteID
: this should be moved to RelayInfo_ structure
Member TSrvMsg::setRemoteID (SPtr< TOptVendorData > remoteID)
: get out with this shit
Member TSrvMsgConfirm::~TSrvMsgConfirm ()
this is obsolete
Member TSrvMsgLeaseQuery::check ()
: validation
Member TSrvMsgLeaseQueryReply::appendClientData (SPtr< TAddrClient > cli)
: add all temporary addresses
Member TSrvMsgReply::TSrvMsgReply (SPtr< TSrvMsgRelease > question)
When the server receives a Release message via unicast from a client to which the server has not sent a unicast option, the server discards the Release message and responds with a Reply message containing a Status Code option with value UseMulticast, a Server Identifier option containing the server's DUID, the Client Identifier option from the client message, and no other options.
Member TSrvOptIA_NA::assignAddr (SPtr< TIPv6Addr > addr, uint32_t pref, uint32_t valid, bool quiet)
: remove get addr-params
Member TSrvOptIA_NA::rebind (SPtr< TSrvOptIA_NA > queryOpt, unsigned long &addrCount)
: 18.2.4 par. 3 (check if addrs are appropriate for this link)
Member TSrvOptIA_NA::TSrvOptIA_NA (char *buf, int bufsize, TMsg *parent)
: implement unpack()
Member TSrvOptIA_PD::confirm (SPtr< TSrvOptIA_PD > queryOpt, SPtr< TSrvCfgIface > iface)
: implement PD support in CONFIRM message
Member TSrvOptIA_PD::Iface
: replace with Parent->getIface();
Member TSrvOptIA_PD::rebind (SPtr< TSrvOptIA_PD > queryOpt, SPtr< TSrvCfgIface > iface)
: implement PD support in REBIND message
Member TSrvOptIA_PD::release (SPtr< TSrvOptIA_PD > queryOpt, SPtr< TSrvCfgIface > iface)
: implement PD support in RELEASE message
Member TSrvOptIA_PD::TSrvOptIA_PD (char *buf, int bufsize, TMsg *parent)
: implement unpack
Member TSrvOptInterfaceID::TSrvOptInterfaceID (int id, TMsg *parent)
: not endian-safe!
Member TSrvOptTA::Iface
: replace with Parent->getIface();
Member TSrvOptTA::releaseAllAddrs (bool quiet)
: Why 4 construstors?
Member TSrvParsIfaceOpt::Preference_
: Preference should be a global value
Member TSrvTransMgr::checkReconfigures ()
clean up this shit
Member TSrvTransMgr::removeExpired (std::vector< TSrvAddrMgr::TExpiredInfo > &addrLst, std::vector< TSrvAddrMgr::TExpiredInfo > &tempAddrLst, std::vector< TSrvAddrMgr::TExpiredInfo > &prefixLst)
: remove this FQDN from the list of used names