00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __WVINTERFACE_H
00009 #define __WVINTERFACE_H
00010
00011 #include "wvaddr.h"
00012 #include "wvhashtable.h"
00013 #include "wvlog.h"
00014
00015 struct ifreq;
00016 struct iwreq;
00017 struct rtentry;
00018
00024 class WvInterface
00025 {
00026 WvAddr *my_hwaddr;
00027 WvIPNet *my_ipaddr;
00028
00029 WvLog err;
00030
00031
00033 void fill_rte(struct rtentry *rte, char ifname[17],
00034 const WvIPNet &dest, const WvIPAddr &gw,
00035 int metric);
00036
00037 int really_addroute(const WvIPNet &dest, const WvIPAddr &gw,
00038 const WvIPAddr &src, int metric,
00039 WvStringParm table, bool shutup);
00040 public:
00041 WvString name;
00042 bool valid;
00043
00044 WvInterface(WvStringParm _name);
00045 ~WvInterface();
00046
00048 void rescan();
00049
00051 const WvAddr &hwaddr();
00052
00054 const WvIPNet &ipaddr();
00055
00057 const WvIPAddr dstaddr();
00058
00060 int getflags();
00061
00063 int setflags(int clear, int set);
00064
00066 bool isup();
00067 void up(bool enable);
00068
00070 bool ispromisc();
00071 void promisc(bool enable);
00072
00074 int ptp(bool enable, const WvIPNet &addr);
00075
00082 int setipaddr(const WvIPNet &addr);
00083
00089 int setmtu(int mtu);
00090
00096 int sethwaddr(const WvAddr &addr);
00097
00099 int addroute(const WvIPNet &dest, int metric = 0,
00100 WvStringParm table = "default");
00101 int addroute(const WvIPNet &dest, const WvIPAddr &gw,
00102 const WvIPAddr &src, int metric = 0,
00103 WvStringParm table = "default");
00104
00106 int delroute(const WvIPNet &dest, int metric = 0,
00107 WvStringParm table = "default");
00108 int delroute(const WvIPNet &dest, const WvIPAddr &gw, int metric = 0,
00109 WvStringParm table = "default");
00110
00112 bool isarp();
00113 int addarp(const WvIPNet &proto, const WvAddr &hw, bool proxy);
00114
00116 int req(int ioctl_num, struct ifreq *ifr);
00117
00119 int req(int ioctl_num, struct iwreq *ifr);
00120 };
00121
00122 DeclareWvDict2(WvInterfaceDictBase, WvInterface, WvString, name);
00123
00124 class WvInterfaceDict
00125 {
00126 public:
00127 WvLog log;
00128 static WvInterfaceDictBase slist;
00129 static int links;
00130
00131 class Iter : public WvInterfaceDictBase::Iter
00132 {
00133 public:
00134 Iter(WvInterfaceDict &l)
00135 : WvInterfaceDictBase::Iter(l.slist)
00136 { }
00137 };
00138
00139 class Sorter : public WvInterfaceDictBase::Sorter
00140 {
00141 public:
00142 Sorter(WvInterfaceDict &l,
00143 WvInterfaceDictBase::Sorter::RealCompareFunc *f)
00144 : WvInterfaceDictBase::Sorter(l.slist, f)
00145 { }
00146 };
00147
00148 WvInterfaceDict();
00149 ~WvInterfaceDict();
00150
00151 void update();
00152 WvString islocal(const WvAddr &addr);
00153 bool on_local_net(const WvIPNet &addr);
00154
00155 WvInterface *operator[] (WvStringParm str)
00156 { return slist[str]; }
00157
00158
00159
00160 };
00161
00162 #endif // __WVINTERFACE_H