components/net-snmp/patches/033.16242256.linkUpDown_notifictns.patch
branchs11-update
changeset 2989 b14351c01d53
equal deleted inserted replaced
2987:01d2e6a3aae8 2989:b14351c01d53
       
     1 Source : http://net-snmp.svn.sourceforge.net/viewvc/net-snmp?revision=16984&view=revision
       
     2 
       
     3 ------------------------------------------------------------------------------------------
       
     4 --- a/agent/mibgroup/disman/event/mteObjects.h	Wed Sep 28 16:36:38 2005
       
     5 +++ b/agent/mibgroup/disman/event/mteObjects.h	Fri Mar 29 07:56:26 2013
       
     6 @@ -53,6 +53,7 @@
       
     7                                   char *owner,   char   *oname,
       
     8                                   oid  *suffix,  size_t  sfx_len );
       
     9  int  mteObjects_internal_vblist( netsnmp_variable_list *vblist,
       
    10 -                                 char *oname,   struct mteTrigger *trigger);
       
    11 +                                 char *oname,   struct mteTrigger *trigger,
       
    12 +								  netsnmp_session *s);
       
    13  
       
    14  #endif                          /* MTEOBJECTS_H */
       
    15 --- a/agent/mibgroup/disman/event/mteObjects.c	Tue Sep 19 12:06:06 2006
       
    16 +++ b/agent/mibgroup/disman/event/mteObjects.c	Fri Mar 29 08:06:13 2013
       
    17 @@ -335,7 +335,9 @@
       
    18  
       
    19  int
       
    20  mteObjects_internal_vblist( netsnmp_variable_list *vblist,
       
    21 -                            char   *oname, struct mteTrigger *trigger)
       
    22 +                            char   *oname,
       
    23 +							 struct mteTrigger *trigger,
       
    24 +							 netsnmp_session   *sess)
       
    25  {
       
    26      netsnmp_variable_list *var = NULL, *vp;
       
    27      oid mteHotTrigger[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 1, 0};
       
    28 @@ -343,7 +345,12 @@
       
    29      oid mteHotContext[] = {1, 3, 6, 1, 2, 1, 88, 2, 1, 3, 0};
       
    30      oid mteHotOID[]     = {1, 3, 6, 1, 2, 1, 88, 2, 1, 4, 0};
       
    31      oid mteHotValue[]   = {1, 3, 6, 1, 2, 1, 88, 2, 1, 5, 0};
       
    32 +	oid ifIndexOid[]    = {1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 0};
       
    33 +	oid ifAdminStatus[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 7, 0};
       
    34 +	oid ifOperStatus[]  = {1, 3, 6, 1, 2, 1, 2, 2, 1, 8, 0};
       
    35  
       
    36 +	oid if_index;
       
    37 +
       
    38      /*
       
    39       * Construct the varbinds for this (internal) event...
       
    40       */
       
    41 @@ -370,6 +377,40 @@
       
    42                                trigger->mteTriggerFired->type,
       
    43                                trigger->mteTriggerFired->val.string,
       
    44                                trigger->mteTriggerFired->val_len);
       
    45 +	} else if ((!strcmp(oname, "_linkUpDown"  ))) {
       
    46 +		/*
       
    47 +		 * The ifOperStatus varbind that triggered this entry
       
    48 +		 * is held in the trigger->mteTriggerFired field
       
    49 +		 *
       
    50 +		 * We can retrieve the ifIndex and ifOperStatus values
       
    51 +		 * from this varbind.  But first we need to tweak the
       
    52 +		 * static ifXXX OID arrays to include the correct index.
       
    53 +		 * (or this could be passed in from the calling routine?)
       
    54 +		 *
       
    55 +		 * Unfortunately we don't have the current AdminStatus value,
       
    56 +		 * so we'll need to make another query to retrieve that.
       
    57 +		 */
       
    58 +		if_index = trigger->mteTriggerFired->name[10];
       
    59 +		ifIndexOid[10] = if_index;
       
    60 +		ifAdminStatus[10] = if_index;
       
    61 +		ifOperStatus[10] = if_index;
       
    62 +		snmp_varlist_add_variable( &var,
       
    63 +				ifIndexOid, OID_LENGTH(ifIndexOid),
       
    64 +				ASN_INTEGER, &if_index, sizeof(if_index));
       
    65 +
       
    66 +		/* Set up a dummy varbind for ifAdminStatus... */
       
    67 +		snmp_varlist_add_variable( &var,
       
    68 +				ifAdminStatus, OID_LENGTH(ifAdminStatus),
       
    69 +				ASN_INTEGER,
       
    70 +				trigger->mteTriggerFired->val.integer,
       
    71 +				trigger->mteTriggerFired->val_len);
       
    72 +		/* ... then retrieve the actual value */
       
    73 +		netsnmp_query_get(var->next_variable, sess);
       
    74 +		snmp_varlist_add_variable( &var,
       
    75 +				ifOperStatus, OID_LENGTH(ifOperStatus),
       
    76 +				ASN_INTEGER,
       
    77 +				trigger->mteTriggerFired->val.integer,
       
    78 +				trigger->mteTriggerFired->val_len);
       
    79      } else {
       
    80          DEBUGMSGTL(("disman:event:objects",
       
    81                      "Unknown internal objects tag (%s)\n", oname));
       
    82 --- a/agent/mibgroup/disman/event/mteEvent.c	Mon Jul  2 07:02:29 2007
       
    83 +++ b/agent/mibgroup/disman/event/mteEvent.c	Fri Mar 29 09:46:24 2013
       
    84 @@ -266,7 +266,7 @@
       
    85      return fired;
       
    86  }
       
    87  
       
    88 -
       
    89 +#ifdef __NOT_NEEDED
       
    90  void
       
    91  _insert_internal_objects( netsnmp_variable_list *vblist, char *oname,
       
    92                            struct mteTrigger *trigger)
       
    93 @@ -322,6 +322,7 @@
       
    94      vp->next_variable     = vblist->next_variable;
       
    95      vblist->next_variable = var;
       
    96  }
       
    97 +#endif
       
    98  
       
    99  int
       
   100  _mteEvent_fire_notify( struct mteEvent   *entry,     /* The event to fire  */
       
   101 @@ -331,6 +332,8 @@
       
   102      netsnmp_variable_list *var, *v2;
       
   103      oid    snmptrap_oid[]   = { 1,3,6,1,6,3,1,1,4,1,0 };
       
   104      size_t snmptrap_oid_len = OID_LENGTH(snmptrap_oid);
       
   105 +	netsnmp_session *s;
       
   106 +
       
   107           /*
       
   108            * The Event-MIB specification says that objects from the
       
   109            *   mteEventTable should come after those from the trigger,
       
   110 @@ -394,9 +397,10 @@
       
   111       */
       
   112      v2 = var->next_variable;
       
   113      if (entry->session)
       
   114 -        netsnmp_query_get( v2, entry->session );
       
   115 +		s = entry->session;
       
   116      else
       
   117 -        netsnmp_query_get( v2, trigger->session );
       
   118 +		s = trigger->session;
       
   119 +	netsnmp_query_get( v2, s );
       
   120  
       
   121      /*
       
   122       * ... add any "internal" objects...
       
   123 @@ -405,11 +409,11 @@
       
   124      if (strcmp(entry->mteNotifyOwner, "_snmpd") == 0) {
       
   125          DEBUGMSGTL(("disman:event:fire", "Adding event objects (internal)\n"));
       
   126          if ( !strictOrdering ) {
       
   127 -            mteObjects_internal_vblist(var, entry->mteNotifyObjects, trigger);
       
   128 +            mteObjects_internal_vblist(var, entry->mteNotifyObjects, trigger, s);
       
   129          } else {
       
   130              for (v2 = var; v2 && v2->next_variable; v2=v2->next_variable)
       
   131                  ;
       
   132 -            mteObjects_internal_vblist(v2, entry->mteNotifyObjects, trigger);
       
   133 +            mteObjects_internal_vblist(v2, entry->mteNotifyObjects, trigger, s);
       
   134          }
       
   135      }
       
   136