Creating irdp socket requires more privileges.
diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index fab7acb..acf2f8c 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -1,3 +1,7 @@
+2004-07-13 Hasso Tepper <hasso@estpak.ee>
+
+	* irdp_main.c: Add privilege change.
+
 2004-07-12  Hasso Tepper <hasso@estpak.ee>
 
 	* irdp_interface.c: follow common style while naming vty command
diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c
index dac6aea..56e4184 100644
--- a/zebra/irdp_main.c
+++ b/zebra/irdp_main.c
@@ -50,6 +50,7 @@
 #include "log.h"
 #include "zclient.h"
 #include "thread.h"
+#include "privs.h"
 #include "zebra/interface.h"
 #include "zebra/rtadv.h"
 #include "zebra/rib.h"
@@ -64,6 +65,8 @@
 
 /* GLOBAL VARS */
 
+extern struct zebra_privs_t zserv_privs;
+
 /* Master of threads. */
 extern struct zebra_t zebrad;
 struct thread *t_irdp_raw;
@@ -98,7 +101,16 @@
 {
   int ret, i;
 
+  if ( zserv_privs.change (ZPRIVS_RAISE) )
+       zlog_err ("irdp_sock_init: could not raise privs, %s",
+                  strerror (errno) );
+
   irdp_sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
+
+  if ( zserv_privs.change (ZPRIVS_LOWER) )
+       zlog_err ("irdp_sock_init: could not lower privs, %s",
+             strerror (errno) );
+
   if (irdp_sock < 0) {
     zlog_warn ("IRDP: can't create irdp socket %s", strerror(errno));
     return irdp_sock;