|
1 --- net-snmp-5.4.1.orig/agent/mibgroup/kernel_sunos5.c 2013-01-11 11:46:28.795419820 -0800 |
|
2 +++ net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c 2013-01-11 11:45:51.611042099 -0800 |
|
3 @@ -280,7 +280,9 @@ |
|
4 kstat_t *ks; |
|
5 kid_t kid; |
|
6 kstat_named_t *named; |
|
7 + |
|
8 int ret = -1; /* fail unless ... */ |
|
9 + int lookup_stat = 0; |
|
10 |
|
11 if (kstat_fd == 0) { |
|
12 kstat_fd = kstat_open(); |
|
13 @@ -291,27 +293,88 @@ |
|
14 if ((ksc = kstat_fd) == NULL) { |
|
15 goto Return; |
|
16 } |
|
17 - ks = kstat_lookup(ksc, classname, -1, statname); |
|
18 - if (ks == NULL) { |
|
19 - DEBUGMSGTL(("kernel_sunos5", "class %s, stat %s not found\n", |
|
20 - classname ? classname : "NULL", |
|
21 - statname ? statname : "NULL")); |
|
22 - goto Return; |
|
23 - } |
|
24 - kid = kstat_read(ksc, ks, NULL); |
|
25 - if (kid == -1) { |
|
26 - DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n", |
|
27 - classname ? classname : "NULL", statname ? statname : "NULL")); |
|
28 - goto Return; |
|
29 - } |
|
30 - named = kstat_data_lookup(ks, varname); |
|
31 - if (named == NULL) { |
|
32 - DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n", |
|
33 - varname, classname ? classname : "NULL", |
|
34 - statname ? statname : "NULL")); |
|
35 - goto Return; |
|
36 + |
|
37 + if ((ks = kstat_lookup(ksc, statname, 0, "link")) != NULL) |
|
38 + { |
|
39 + kid = kstat_read(ksc, ks, NULL); |
|
40 + if (kid == -1) { |
|
41 + DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n", |
|
42 + statname ? statname : "NULL", "link")); |
|
43 + } |
|
44 + else |
|
45 + { |
|
46 + named = kstat_data_lookup(ks, varname); |
|
47 + if (named == NULL) { |
|
48 + DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n", |
|
49 + varname, statname ? statname : "NULL", "link")); |
|
50 + } |
|
51 + else { |
|
52 + switch (named->data_type) { |
|
53 +#ifdef KSTAT_DATA_INT32 /* Solaris 2.6 and up */ |
|
54 + case KSTAT_DATA_INT32: |
|
55 + if(named->value.i32) |
|
56 + lookup_stat = 1; |
|
57 + break; |
|
58 + case KSTAT_DATA_UINT32: |
|
59 + if(named->value.ui32) |
|
60 + lookup_stat = 1; |
|
61 + break; |
|
62 + case KSTAT_DATA_INT64: |
|
63 + if(named->value.i64) |
|
64 + lookup_stat = 1; |
|
65 + break; |
|
66 + case KSTAT_DATA_UINT64: |
|
67 + if(named->value.ui64) |
|
68 + lookup_stat = 1; |
|
69 + break; |
|
70 +#else |
|
71 + case KSTAT_DATA_LONG: |
|
72 + if(named->value.l) |
|
73 + lookup_stat = 1; |
|
74 + break; |
|
75 + case KSTAT_DATA_ULONG: |
|
76 + if(named->value.ul) |
|
77 + lookup_stat = 1; |
|
78 + break; |
|
79 + case KSTAT_DATA_LONGLONG: |
|
80 + if(named->value.ll) |
|
81 + lookup_stat = 1; |
|
82 + break; |
|
83 + case KSTAT_DATA_ULONGLONG: |
|
84 + if(named->value.ull) |
|
85 + lookup_stat = 1; |
|
86 + break; |
|
87 +#endif |
|
88 + } |
|
89 + } |
|
90 + } |
|
91 } |
|
92 - |
|
93 + |
|
94 + if(!lookup_stat) |
|
95 + { |
|
96 + ks = kstat_lookup(ksc, classname, -1, statname); |
|
97 + if (ks == NULL) { |
|
98 + DEBUGMSGTL(("kernel_sunos5", "class %s, stat %s not found\n", |
|
99 + classname ? classname : "NULL", |
|
100 + statname ? statname : "NULL")); |
|
101 + goto Return; |
|
102 + } |
|
103 + |
|
104 + kid = kstat_read(ksc, ks, NULL); |
|
105 + if (kid == -1) { |
|
106 + DEBUGMSGTL(("kernel_sunos5", "cannot read class %s stats %s\n", |
|
107 + classname ? classname : "NULL", statname ? statname : "NULL")); |
|
108 + goto Return; |
|
109 + } |
|
110 + |
|
111 + named = kstat_data_lookup(ks, varname); |
|
112 + if (named == NULL) { |
|
113 + DEBUGMSGTL(("kernel_sunos5", "no var %s for class %s stat %s\n", |
|
114 + varname, classname ? classname : "NULL", |
|
115 + statname ? statname : "NULL")); |
|
116 + goto Return; |
|
117 + } |
|
118 + } |
|
119 ret = 0; /* maybe successful */ |
|
120 switch (named->data_type) { |
|
121 #ifdef KSTAT_DATA_INT32 /* Solaris 2.6 and up */ |
|
122 @@ -428,11 +491,20 @@ |
|
123 /* |
|
124 * Get the named statistics |
|
125 */ |
|
126 - if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL) { |
|
127 - ret = -10; |
|
128 - goto Return; /* kstat errors */ |
|
129 - } |
|
130 |
|
131 + if ((ks = kstat_lookup(ksc, module_name, instance, statname)) == NULL) |
|
132 + { |
|
133 + /* |
|
134 + * Try to lookup the kstat module with |
|
135 + * modulename = linkname and statname = "link". |
|
136 + */ |
|
137 + |
|
138 + if ((ks = kstat_lookup(ksc, statname, 0, "link")) == NULL) { |
|
139 + ret = -10; |
|
140 + goto Return; /* kstat errors */ |
|
141 + } |
|
142 + } |
|
143 + |
|
144 if (kstat_read(ksc, ks, NULL) <= 0) { |
|
145 ret = -10; |
|
146 goto Return; /* kstat errors */ |