2003-06-19 Paul Jakma <paul@dishone.st>

	* Fix lib/smux.c's reliance on daemons exporting struct
          thread_master *master.
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c
index 598fc3c..6e9beab 100644
--- a/bgpd/bgp_snmp.c
+++ b/bgpd/bgp_snmp.c
@@ -242,6 +242,7 @@
   {BGP4PATHATTRUNKNOWN,       OCTET_STRING, RONLY, bgp4PathAttrTable,
    3, {6, 1, 14}},
 };
+
 
 static u_char *
 bgpVersion (struct variable *v, oid name[], size_t *length, int exact,
@@ -874,7 +875,12 @@
 void
 bgp_snmp_init ()
 {
-  smux_init (bgpd_oid, sizeof bgpd_oid / sizeof (oid));
+  struct bgp_master *bm;
+  
+  if ( !(bm = bgp_get_master ()) )
+    return;
+    
+  smux_init (bm->master, bgpd_oid, sizeof bgpd_oid / sizeof (oid));
   REGISTER_MIB("mibII/bgp", bgp_variables, variable, bgp_oid);
   smux_start ();
 }
diff --git a/lib/smux.c b/lib/smux.c
index 952c5a8..c6884d1 100644
--- a/lib/smux.c
+++ b/lib/smux.c
@@ -29,7 +29,6 @@
 #include <snmp.h>
 #include <snmp_impl.h>
 
-#include "smux.h"
 #include "log.h"
 #include "thread.h"
 #include "linklist.h"
@@ -37,6 +36,7 @@
 #include "version.h"
 #include "memory.h"
 #include "sockunion.h"
+#include "smux.h"
 
 #define min(A,B) ((A) < (B) ? (A) : (B))
 
@@ -81,6 +81,9 @@
   SMUX_NODE,
   ""                            /* SMUX has no interface. */
 };
+
+/* thread master */
+static struct thread_master *master;
 
 void *
 oid_copy (void *dest, void *src, size_t size)
@@ -1224,7 +1227,7 @@
     }
 }
 
-extern struct thread_master *master;
+
 
 void
 smux_event (enum smux_event event, int sock)
@@ -1471,7 +1474,7 @@
 
 /* Initialize some values then schedule first SMUX connection. */
 void
-smux_init (oid defoid[], size_t defoid_len)
+smux_init (struct thread_master *tm, oid defoid[], size_t defoid_len)
 {
   /* Set default SMUX oid. */
   smux_default_oid = defoid;
@@ -1480,6 +1483,9 @@
   smux_oid = smux_default_oid;
   smux_oid_len = smux_default_oid_len;
   smux_passwd = smux_default_passwd;
+
+  /* copy callers thread master */
+  master = tm;
   
   /* Make MIB tree. */
   treelist = list_new();
diff --git a/lib/smux.h b/lib/smux.h
index 91c3d46..1d25993 100644
--- a/lib/smux.h
+++ b/lib/smux.h
@@ -144,12 +144,12 @@
     (u_char *) &snmp_in_addr_val \
   )
 
-void smux_init (oid [], size_t);
+void smux_init (struct thread_master *tm, oid [], size_t);
 void smux_start (void);
 void smux_register_mib(char *, struct variable *, size_t, int, oid [], size_t);
 int smux_header_generic (struct variable *, oid [], size_t *, int, size_t *, 
     WriteMethod **);
-int smux_trap (oid *, size_t, oid *, size_t, struct trap_object *, size_t, unsigned int);
+int smux_trap (oid *, size_t, oid *, size_t, struct trap_object *, size_t, unsigned int, u_char);
 
 int oid_compare (oid *, int, oid *, int);
 void oid2in_addr (oid [], int, struct in_addr *);
diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c
index 2e1a9b3..41955ba 100644
--- a/ospfd/ospf_snmp.c
+++ b/ospfd/ospf_snmp.c
@@ -2477,9 +2477,11 @@
 void
 ospf_snmp_init ()
 {
+  struct ospf *ospf;
+
   ospf_snmp_iflist = list_new ();
   ospf_snmp_vl_table = route_table_init ();
-  smux_init (ospfd_oid, sizeof (ospfd_oid) / sizeof (oid));
+  smux_init (om->master, ospfd_oid, sizeof (ospfd_oid) / sizeof (oid));
   REGISTER_MIB("mibII/ospf", ospf_variables, variable, ospf_oid);
   smux_start ();
 }
diff --git a/ripd/rip_snmp.c b/ripd/rip_snmp.c
index 5a5060f..72f0ff2 100644
--- a/ripd/rip_snmp.c
+++ b/ripd/rip_snmp.c
@@ -152,6 +152,8 @@
   {RIP2PEERRCVBADROUTES,      COUNTER, RONLY, rip2PeerTable,
    3, {4, 1, 6}}
 };
+
+extern struct thread_master *master;
 
 static u_char *
 rip2Globals (struct variable *v, oid name[], size_t *length,
@@ -406,9 +408,9 @@
     return ripVersion1;
   else if (rip)
     {
-      if (rip->version == RIPv2)
+      if (rip->version_send == RIPv2)
 	return ripVersion2;
-      else if (rip->version == RIPv1)
+      else if (rip->version_send == RIPv1)
 	return ripVersion1;
     }
   return doNotSend;
@@ -573,7 +575,7 @@
 {
   rip_ifaddr_table = route_table_init ();
 
-  smux_init (ripd_oid, sizeof (ripd_oid) / sizeof (oid));
+  smux_init (master, ripd_oid, sizeof (ripd_oid) / sizeof (oid));
   REGISTER_MIB("mibII/rip", rip_variables, variable, rip_oid);
   smux_start ();
 }
diff --git a/zebra/zebra_snmp.c b/zebra/zebra_snmp.c
index 051aaaa..5095095 100644
--- a/zebra/zebra_snmp.c
+++ b/zebra/zebra_snmp.c
@@ -37,6 +37,7 @@
 #include "table.h"
 
 #include "zebra/rib.h"
+#include "zebra/zserv.h"
 
 #define IPFWMIB 1,3,6,1,2,1,4,24
 #define ZEBRAOID 1,3,6,1,4,1,3317,1,2,1
@@ -83,6 +84,8 @@
 #define IPADDRESS ASN_IPADDRESS
 #define OBJECTIDENTIFIER ASN_OBJECT_ID
 
+extern struct zebra_t zebrad;
+
 oid ipfw_oid [] = { IPFWMIB };
 oid zebra_oid [] = { ZEBRAOID };
 
@@ -561,7 +564,7 @@
 void
 zebra_snmp_init ()
 {
-  smux_init (zebra_oid, sizeof (zebra_oid) / sizeof (oid));
+  smux_init (zebrad.master, zebra_oid, sizeof (zebra_oid) / sizeof (oid));
   REGISTER_MIB("mibII/ipforward", zebra_variables, variable, ipfw_oid);
   smux_start ();
 }