summaryrefslogtreecommitdiff
path: root/osdep/BSDRoutingTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/BSDRoutingTable.cpp')
-rw-r--r--osdep/BSDRoutingTable.cpp43
1 files changed, 24 insertions, 19 deletions
diff --git a/osdep/BSDRoutingTable.cpp b/osdep/BSDRoutingTable.cpp
index 6d44c3ec..5b24af96 100644
--- a/osdep/BSDRoutingTable.cpp
+++ b/osdep/BSDRoutingTable.cpp
@@ -25,6 +25,10 @@
* LLC. Start here: http://www.zerotier.com/
*/
+#include "../node/Constants.hpp"
+
+#ifdef __BSD__
+
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -45,7 +49,6 @@
#include <algorithm>
#include <utility>
-#include "../node/Constants.hpp"
#include "BSDRoutingTable.hpp"
// All I wanted was the bloody rounting table. I didn't expect the Spanish inquisition.
@@ -62,9 +65,9 @@ BSDRoutingTable::~BSDRoutingTable()
{
}
-std::vector<RoutingTable::Entry> BSDRoutingTable::get(bool includeLinkLocal,bool includeLoopback) const
+std::vector<RoutingTableEntry> BSDRoutingTable::get(bool includeLinkLocal,bool includeLoopback) const
{
- std::vector<RoutingTable::Entry> entries;
+ std::vector<RoutingTableEntry> entries;
int mib[6];
size_t needed;
@@ -88,7 +91,7 @@ std::vector<RoutingTable::Entry> BSDRoutingTable::get(bool includeLinkLocal,bool
char *saend = next + rtm->rtm_msglen;
if (((rtm->rtm_flags & RTF_LLINFO) == 0)&&((rtm->rtm_flags & RTF_HOST) == 0)&&((rtm->rtm_flags & RTF_UP) != 0)&&((rtm->rtm_flags & RTF_MULTICAST) == 0)) {
- RoutingTable::Entry e;
+ RoutingTableEntry e;
e.deviceIndex = -9999; // unset
int which = 0;
@@ -202,14 +205,14 @@ std::vector<RoutingTable::Entry> BSDRoutingTable::get(bool includeLinkLocal,bool
}
}
- for(std::vector<ZeroTier::RoutingTable::Entry>::iterator e1(entries.begin());e1!=entries.end();++e1) {
+ for(std::vector<ZeroTier::RoutingTableEntry>::iterator e1(entries.begin());e1!=entries.end();++e1) {
if ((!e1->device[0])&&(e1->deviceIndex >= 0))
if_indextoname(e1->deviceIndex,e1->device);
}
- for(std::vector<ZeroTier::RoutingTable::Entry>::iterator e1(entries.begin());e1!=entries.end();++e1) {
+ for(std::vector<ZeroTier::RoutingTableEntry>::iterator e1(entries.begin());e1!=entries.end();++e1) {
if ((!e1->device[0])&&(e1->gateway)) {
int bestMetric = 9999999;
- for(std::vector<ZeroTier::RoutingTable::Entry>::iterator e2(entries.begin());e2!=entries.end();++e2) {
+ for(std::vector<ZeroTier::RoutingTableEntry>::iterator e2(entries.begin());e2!=entries.end();++e2) {
if ((e1->gateway.within(e2->destination))&&(e2->metric <= bestMetric)) {
bestMetric = e2->metric;
Utils::scopy(e1->device,sizeof(e1->device),e2->device);
@@ -223,14 +226,14 @@ std::vector<RoutingTable::Entry> BSDRoutingTable::get(bool includeLinkLocal,bool
return entries;
}
-RoutingTable::Entry BSDRoutingTable::set(const InetAddress &destination,const InetAddress &gateway,const char *device,int metric)
+RoutingTableEntry BSDRoutingTable::set(const InetAddress &destination,const InetAddress &gateway,const char *device,int metric)
{
if ((!gateway)&&((!device)||(!device[0])))
- return RoutingTable::Entry();
+ return RoutingTableEntry();
- std::vector<RoutingTable::Entry> rtab(get(true,true));
+ std::vector<RoutingTableEntry> rtab(get(true,true));
- for(std::vector<RoutingTable::Entry>::iterator e(rtab.begin());e!=rtab.end();++e) {
+ for(std::vector<RoutingTableEntry>::iterator e(rtab.begin());e!=rtab.end();++e) {
if (e->destination == destination) {
if (((!device)||(!device[0]))||(!strcmp(device,e->device))) {
long p = (long)fork();
@@ -248,7 +251,7 @@ RoutingTable::Entry BSDRoutingTable::set(const InetAddress &destination,const In
}
if (metric < 0)
- return RoutingTable::Entry();
+ return RoutingTableEntry();
{
char hcstr[64];
@@ -270,8 +273,8 @@ RoutingTable::Entry BSDRoutingTable::set(const InetAddress &destination,const In
}
rtab = get(true,true);
- std::vector<RoutingTable::Entry>::iterator bestEntry(rtab.end());
- for(std::vector<RoutingTable::Entry>::iterator e(rtab.begin());e!=rtab.end();++e) {
+ std::vector<RoutingTableEntry>::iterator bestEntry(rtab.end());
+ for(std::vector<RoutingTableEntry>::iterator e(rtab.begin());e!=rtab.end();++e) {
if ((e->destination == destination)&&(e->gateway.ipsEqual(gateway))) {
if ((device)&&(device[0])) {
if (!strcmp(device,e->device)) {
@@ -286,7 +289,7 @@ RoutingTable::Entry BSDRoutingTable::set(const InetAddress &destination,const In
if (bestEntry != rtab.end())
return *bestEntry;
- return RoutingTable::Entry();
+ return RoutingTableEntry();
}
} // namespace ZeroTier
@@ -299,8 +302,8 @@ int main(int argc,char **argv)
BSDRoutingTable rt;
printf("<destination> <gateway> <interface> <metric>\n");
- std::vector<RoutingTable::Entry> ents(rt.get());
- for(std::vector<RoutingTable::Entry>::iterator e(ents.begin());e!=ents.end();++e)
+ std::vector<RoutingTableEntry> ents(rt.get());
+ for(std::vector<RoutingTableEntry>::iterator e(ents.begin());e!=ents.end();++e)
printf("%s\n",e->toString().c_str());
printf("\n");
@@ -311,7 +314,7 @@ int main(int argc,char **argv)
printf("<destination> <gateway> <interface> <metric>\n");
ents = rt.get();
- for(std::vector<RoutingTable::Entry>::iterator e(ents.begin());e!=ents.end();++e)
+ for(std::vector<RoutingTableEntry>::iterator e(ents.begin());e!=ents.end();++e)
printf("%s\n",e->toString().c_str());
printf("\n");
@@ -322,10 +325,12 @@ int main(int argc,char **argv)
printf("<destination> <gateway> <interface> <metric>\n");
ents = rt.get();
- for(std::vector<RoutingTable::Entry>::iterator e(ents.begin());e!=ents.end();++e)
+ for(std::vector<RoutingTableEntry>::iterator e(ents.begin());e!=ents.end();++e)
printf("%s\n",e->toString().c_str());
printf("\n");
return 0;
}
#endif
+
+#endif // __BSD__