|
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 |