PowerDNS on a Raspberry Pi running NetBSD

Christof Meerwald <[email protected]>
Newsgroups gmane.network.dns.powerdns.devel
Message-ID <[email protected]>
Hi,

just tried running PowerDNS (Recursor 3.5.2 and auth 3.3-pc1) on my
Raspberry Pi (with NetBSD 6.1) - and it worked with some small code
changes:

diff -ur pdns-recursor-3.5.2.orig/logger.cc pdns-recursor-3.5.2/logger.cc
--- pdns-recursor-3.5.2.orig/logger.cc	2013-06-07 07:05:34.000000000 +0000
+++ pdns-recursor-3.5.2/logger.cc	2013-01-20 00:03:52.000000000 +0000
@@ -163,6 +163,15 @@
   return *this;
 }
 
+Logger& Logger::operator<<(long long i)
+{
+  ostringstream tmp;
+  tmp<<i;
+
+  *this<<tmp.str();
+
+  return *this;
+}
 
 Logger& Logger::operator<<(long i)
 {
diff -ur pdns-recursor-3.5.2.orig/logger.hh pdns-recursor-3.5.2/logger.hh
--- pdns-recursor-3.5.2.orig/logger.hh	2013-06-07 07:05:34.000000000 +0000
+++ pdns-recursor-3.5.2/logger.hh	2013-01-20 00:03:25.000000000 +0000
@@ -115,6 +115,7 @@
   Logger& operator<<(long);   //!< log an unsigned int
   Logger& operator<<(unsigned long);   //!< log an unsigned int
   Logger& operator<<(unsigned long long);   //!< log an unsigned 64 bit int
+  Logger& operator<<(long long);   //!< log a signed 64 bit int
   Logger& operator<<(Urgency);    //!< set the urgency, << style
 
 #ifndef WIN32
diff -ur pdns-recursor-3.5.2.orig/misc.hh pdns-recursor-3.5.2/misc.hh
--- pdns-recursor-3.5.2.orig/misc.hh	2013-06-07 07:05:34.000000000 +0000
+++ pdns-recursor-3.5.2/misc.hh	2013-06-15 14:03:10.000000000 +0000
@@ -68,6 +68,10 @@
 #include <ctype.h>
 #include <vector>
 
+#if defined( __NetBSD__ ) && defined( __arm__ )
+#include <sys/atomic.h>
+#endif
+
 #include "namespaces.hh"
 bool chopOff(string &domain);
 bool chopOffDotted(string &domain);
@@ -386,6 +390,12 @@
 
         return r;
     }
+    #elif defined( __NetBSD__ ) && defined( __arm__ )
+    static int atomic_exchange_and_add( unsigned int * pw, int dv )
+    {
+      membar_sync();
+      return atomic_add_int_nv(pw, dv) - dv;
+    }
     #else 
     static int atomic_exchange_and_add( unsigned int * pw, int dv )
     {


So, time_t is defined as int64_t (i.e. long long), therefore I needed
to add another overload to Logger to avoid overload resolution
disambiguities.

__sync_fetch_and_add doesn't seem to be supported on that particular
platform, but there is a sys/atomic.h header providing similar
functions.


Christof

-- 

http://cmeerw.org                              sip:cmeerw at cmeerw.org
mailto:cmeerw at cmeerw.org                   xmpp:cmeerw at cmeerw.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.