On Wed, 2006-01-11 at 11:42 +0530, [EMAIL PROTECTED] wrote:

> Can any one pls clarify whether snmptrapd can forward traps to master
> agent. 

Not currently, no.

It shouldn't be too difficult to implement.
Please find attached a suitable patch (*completely* untested!)
This should be triggered using an snmptrapd.conf entry such as:

        forward  default   agentx
or
        forward  OID       agentx

Let me know whether it works OK, and I'll look at adding this
(or something similar) to the suite.

Dave
--- snmptrapd_handlers.h.cln	2006-01-11 10:02:22.093810688 +0000
+++ snmptrapd_handlers.h	2006-01-11 10:02:30.613515496 +0000
@@ -29,6 +29,7 @@
 Netsnmp_Trap_Handler   command_handler;
 Netsnmp_Trap_Handler   event_handler;
 Netsnmp_Trap_Handler   forward_handler;
+Netsnmp_Trap_Handler   axforward_handler;
 Netsnmp_Trap_Handler   notification_handler;
 
 void free_trap1_fmt(void);
--- snmptrapd_handlers.c.cln	2006-01-11 09:52:23.439819928 +0000
+++ snmptrapd_handlers.c	2006-01-11 10:04:09.739446064 +0000
@@ -122,7 +122,10 @@
     DEBUGMSGTL(("read_config:forward", "registering forward for: "));
     if (!strcmp(buf, "default")) {
         DEBUGMSG(("read_config:forward", "default"));
-        traph = netsnmp_add_default_traphandler( forward_handler );
+        if ( !strcmp( cptr, "agentx" ))
+            traph = netsnmp_add_default_traphandler( axforward_handler );
+        else
+            traph = netsnmp_add_default_traphandler( forward_handler );
     } else {
 
         if (!read_objid(buf, obuf, &olen)) {
@@ -134,7 +137,10 @@
             return;
         }
         DEBUGMSGOID(("read_config:forward", obuf, olen));
-        traph = netsnmp_add_traphandler( forward_handler, obuf, olen );
+        if ( !strcmp( cptr, "agentx" ))
+            traph = netsnmp_add_traphandler( axforward_handler, obuf, olen );
+        else
+            traph = netsnmp_add_traphandler( forward_handler, obuf, olen );
     }
 
     DEBUGMSG(("read_config:forward", "\n"));
@@ -890,6 +896,17 @@
 
 
 /*
+ *  Trap handler for forwarding to the AgentX master agent
+ */
+int axforward_handler( netsnmp_pdu           *pdu,
+                       netsnmp_transport     *transport,
+                       netsnmp_trapd_handler *handler)
+{
+    send_v2trap( pdu->variables );
+    return NETSNMPTRAPD_HANDLER_OK;
+}
+
+/*
  *  Trap handler for forwarding to another destination
  */
 int   forward_handler( netsnmp_pdu           *pdu,

Reply via email to