Dibbler - a portable DHCPv6  1.0.2RC1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SrvAddrMgr.h
Go to the documentation of this file.
1 /*
2  * Dibbler - a portable DHCPv6
3  *
4  * authors: Tomasz Mrugalski <thomson@klub.com.pl>
5  * Marek Senderski <msend@o2.pl>
6  * changes: Grzegorz Pluto <g.pluto(at)u-r-b-a-n(dot)pl>
7  *
8  * released under GNU GPL v2 only licence
9  *
10  */
11 
12 #ifndef SRVADDRMGR_H
13 #define SRVADDRMGR_H
14 
15 #include <vector>
16 #include "AddrMgr.h"
17 #include "SrvCfgAddrClass.h"
18 #include "SrvCfgPD.h"
19 
20 #define SrvAddrMgr() (TSrvAddrMgr::instance())
21 
22 class TSrvAddrMgr : public TAddrMgr
23 {
24  public:
25  static void instanceCreate(const std::string& xmlFile, bool loadDB);
26  static TSrvAddrMgr & instance();
27 
29  {
30  public:
31  TIAType type; // address or prefix
32  SPtr<TIPv6Addr> Addr; // cached address, previously assigned to a client
33  SPtr<TDUID> Duid; // client's duid
34  };
35 
36  struct TExpiredInfo
37  {
40  SPtr<TIPv6Addr> addr; // address or prefix
41  int prefixLen; // just for prefixes
42  };
43 
44  ~TSrvAddrMgr();
45 
46  // IA address management
47  bool addClntAddr(SPtr<TDUID> clntDuid, SPtr<TIPv6Addr> clntAddr,
48  int iface, unsigned long IAID, unsigned long T1, unsigned long T2,
49  SPtr<TIPv6Addr> addr, unsigned long pref, unsigned long valid,
50  bool quiet);
51  bool delClntAddr(SPtr<TDUID> duid,unsigned long IAID, SPtr<TIPv6Addr> addr,
52  bool quiet);
53  virtual bool verifyAddr(SPtr<TIPv6Addr> addr);
54 
55  // TA address management
56  bool addTAAddr(SPtr<TDUID> clntDuid, SPtr<TIPv6Addr> clntAddr,
57  int iface, unsigned long iaid, SPtr<TIPv6Addr> addr,
58  unsigned long pref, unsigned long valid);
59  bool delTAAddr(SPtr<TDUID> duid,unsigned long iaid, SPtr<TIPv6Addr> addr, bool quiet);
60 
61  // prefix management
62  virtual bool delPrefix(SPtr<TDUID> clntDuid, unsigned long IAID, SPtr<TIPv6Addr> prefix, bool quiet);
63  virtual bool verifyPrefix(SPtr<TIPv6Addr> addr);
64 
65  // how many addresses does this client have?
66  unsigned long getLeaseCount(SPtr<TDUID> duid);
67 
68  void doDuties(std::vector<TExpiredInfo>& addrLst,
69  std::vector<TExpiredInfo>& tempAddrLst,
70  std::vector<TExpiredInfo>& prefixLst);
71 
72  void getAddrsCount(SPtr<TContainer< SPtr<TSrvCfgAddrClass> >> classes, long *clntCnt,
73  long *addrCnt, SPtr<TDUID> duid, int iface);
74 
75  bool addrIsFree(SPtr<TIPv6Addr> addr);
76  bool taAddrIsFree(SPtr<TIPv6Addr> addr);
77 
79 
80  // address and prefix caching
82  bool delCachedEntry(SPtr<TIPv6Addr> cachedEntry, TIAType type);
83  bool delCachedEntry(SPtr<TDUID> clntDuid, TIAType type);
84  void addCachedEntry(SPtr<TDUID> clntDuid, SPtr<TIPv6Addr> cachedEntry, TIAType type);
85 
86  void setCacheSize(int bytes);
87  void dump();
88 
89  protected:
90  void print(std::ostream & out);
91 
92  TSrvAddrMgr(const std::string& xmlfile, bool loadDB);
94 
95  void cacheRead();
96  void cacheDump();
97  void checkCacheSize();
98  TContainer< SPtr<TSrvCacheEntry> > Cache; // list of cached addresses
99  size_t CacheMaxSize; // maximum number of cached elements
100 };
101 
102 #endif
103