Commits

Vincent Bernat authored 0f0ab518087
snmp: fix OSPFV3-MIB implementation

Use the real MIB from RFC 5643. Fix used ASN1 types. Indexes are not exported any more (they are "no access"). Fix some endian issues. Also, ID are just integers, not IPv4 addresses. No additional OID are supported in this commit.
No tags

ospf6d/ospf6_snmp.c

Modified
37 37 #include "ospf6_route.h"
38 38 #include "ospf6_top.h"
39 39 #include "ospf6_area.h"
40 40 #include "ospf6_interface.h"
41 41 #include "ospf6_message.h"
42 42 #include "ospf6_neighbor.h"
43 43 #include "ospf6d.h"
44 44 #include "ospf6_snmp.h"
45 45
46 46 /* OSPFv3-MIB */
47 -#define OSPFv3MIB 1,3,6,1,3,102
47 +#define OSPFv3MIB 1,3,6,1,2,1,191
48 48
49 49 /* OSPFv3 MIB General Group values. */
50 50 #define OSPFv3ROUTERID 1
51 51 #define OSPFv3ADMINSTAT 2
52 52 #define OSPFv3VERSIONNUMBER 3
53 53 #define OSPFv3AREABDRRTRSTATUS 4
54 54 #define OSPFv3ASBDRRTRSTATUS 5
55 55 #define OSPFv3ASSCOPELSACOUNT 6
56 56 #define OSPFv3ASSCOPELSACHECKSUMSUM 7
57 57 #define OSPFv3ORIGINATENEWLSAS 8
58 58 #define OSPFv3RXNEWLSAS 9
59 59 #define OSPFv3EXTLSACOUNT 10
60 60 #define OSPFv3EXTAREALSDBLIMIT 11
61 -#define OSPFv3MULTICASTEXTENSIONS 12
62 -#define OSPFv3EXITOVERFLOWINTERVAL 13
63 -#define OSPFv3DEMANDEXTENSIONS 14
64 -#define OSPFv3TRAFFICENGINEERINGSUPPORT 15
65 -#define OSPFv3REFERENCEBANDWIDTH 16
66 -#define OSPFv3RESTARTSUPPORT 17
67 -#define OSPFv3RESTARTINTERVAL 18
68 -#define OSPFv3RESTARTSTATUS 19
69 -#define OSPFv3RESTARTAGE 20
70 -#define OSPFv3RESTARTEXITREASON 21
71 -
72 -/* OSPFv3 MIB Area Table values. */
73 -#define OSPFv3AREAID 1
61 +#define OSPFv3EXITOVERFLOWINTERVAL 12
62 +#define OSPFv3DEMANDEXTENSIONS 13
63 +#define OSPFv3REFERENCEBANDWIDTH 14
64 +#define OSPFv3RESTARTSUPPORT 15
65 +#define OSPFv3RESTARTINTERVAL 16
66 +#define OSPFv3RESTARTSTRICTLSACHECKING 17
67 +#define OSPFv3RESTARTSTATUS 18
68 +#define OSPFv3RESTARTAGE 19
69 +#define OSPFv3RESTARTEXITREASON 20
70 +#define OSPFv3NOTIFICATIONENABLE 21
71 +#define OSPFv3STUBROUTERSUPPORT 22
72 +#define OSPFv3STUBROUTERADVERTISEMENT 23
73 +#define OSPFv3DISCONTINUITYTIME 24
74 +#define OSPFv3RESTARTTIME 25
75 +
76 +/* OSPFv3 MIB Area Table values: ospfv3AreaTable */
74 77 #define OSPFv3IMPORTASEXTERN 2
75 78 #define OSPFv3AREASPFRUNS 3
76 79 #define OSPFv3AREABDRRTRCOUNT 4
77 80 #define OSPFv3AREAASBDRRTRCOUNT 5
78 81 #define OSPFv3AREASCOPELSACOUNT 6
79 82 #define OSPFv3AREASCOPELSACKSUMSUM 7
80 83 #define OSPFv3AREASUMMARY 8
81 -#define OSPFv3AREASTATUS 9
82 -#define OSPFv3STUBMETRIC 10
84 +#define OSPFv3AREAROWSTATUS 9
85 +#define OSPFv3AREASTUBMETRIC 10
83 86 #define OSPFv3AREANSSATRANSLATORROLE 11
84 87 #define OSPFv3AREANSSATRANSLATORSTATE 12
85 -#define OSPFv3AREANSSATRANSLATORSTABILITYINTERVAL 13
88 +#define OSPFv3AREANSSATRANSLATORSTABINTERVAL 13
86 89 #define OSPFv3AREANSSATRANSLATOREVENTS 14
87 90 #define OSPFv3AREASTUBMETRICTYPE 15
91 +#define OSPFv3AREATEENABLED 16
88 92
89 -/* OSPFv3 MIB Area Lsdb Table values. */
90 -#define OSPFv3AREALSDBAREAID 1
91 -#define OSPFv3AREALSDBTYPE 2
92 -#define OSPFv3AREALSDBROUTERID 3
93 -#define OSPFv3AREALSDBLSID 4
93 +/* OSPFv3 MIB AS Lsdb Table values: ospfv3AsLsdbTable */
94 +#define OSPFv3ASLSDBSEQUENCE 4
95 +#define OSPFv3ASLSDBAGE 5
96 +#define OSPFv3ASLSDBCHECKSUM 6
97 +#define OSPFv3ASLSDBADVERTISEMENT 7
98 +#define OSPFv3ASLSDBTYPEKNOWN 8
99 +
100 +/* OSPFv3 MIB Area Lsdb Table values: ospfv3AreaLsdbTable */
94 101 #define OSPFv3AREALSDBSEQUENCE 5
95 102 #define OSPFv3AREALSDBAGE 6
96 103 #define OSPFv3AREALSDBCHECKSUM 7
97 104 #define OSPFv3AREALSDBADVERTISEMENT 8
98 105 #define OSPFv3AREALSDBTYPEKNOWN 9
99 106
107 +/* OSPFv3 MIB Link Lsdb Table values: ospfv3LinkLsdbTable */
108 +#define OSPFv3LINKLSDBSEQUENCE 6
109 +#define OSPFv3LINKLSDBAGE 7
110 +#define OSPFv3LINKLSDBCHECKSUM 8
111 +#define OSPFv3LINKLSDBADVERTISEMENT 9
112 +#define OSPFv3LINKLSDBTYPEKNOWN 10
113 +
114 +/* OSPFv3 MIB Host Table values: ospfv3HostTable */
115 +#define OSPFv3HOSTMETRIC 3
116 +#define OSPFv3HOSTROWSTATUS 4
117 +#define OSPFv3HOSTAREAID 5
118 +
119 +/* OSPFv3 MIB Interface Table values: ospfv3IfTable */
120 +#define OSPFv3IFAREAID 3
121 +#define OSPFv3IFTYPE 4
122 +#define OSPFv3IFADMINSTATUS 5
123 +#define OSPFv3IFRTRPRIORITY 6
124 +#define OSPFv3IFTRANSITDELAY 7
125 +#define OSPFv3IFRETRANSINTERVAL 8
126 +#define OSPFv3IFHELLOINTERVAL 9
127 +#define OSPFv3IFRTRDEADINTERVAL 10
128 +#define OSPFv3IFPOLLINTERVAL 11
129 +#define OSPFv3IFSTATE 12
130 +#define OSPFv3IFDESIGNATEDROUTER 13
131 +#define OSPFv3IFBACKUPDESIGNATEDROUTER 14
132 +#define OSPFv3IFEVENTS 15
133 +#define OSPFv3IFROWSTATUS 16
134 +#define OSPFv3IFDEMAND 17
135 +#define OSPFv3IFMETRICVALUE 18
136 +#define OSPFv3IFLINKSCOPELSACOUNT 19
137 +#define OSPFv3IFLINKLSACKSUMSUM 20
138 +#define OSPFv3IFDEMANDNBRPROBE 21
139 +#define OSPFv3IFDEMANDNBRPROBERETRANSLIMIT 22
140 +#define OSPFv3IFDEMANDNBRPROBEINTERVAL 23
141 +#define OSPFv3IFTEDISABLED 24
142 +#define OSPFv3IFLINKLSASUPPRESSION 25
143 +
144 +/* OSPFv3 MIB Virtual Interface Table values: ospfv3VirtIfTable */
145 +#define OSPFv3VIRTIFINDEX 3
146 +#define OSPFv3VIRTIFINSTID 4
147 +#define OSPFv3VIRTIFTRANSITDELAY 5
148 +#define OSPFv3VIRTIFRETRANSINTERVAL 6
149 +#define OSPFv3VIRTIFHELLOINTERVAL 7
150 +#define OSPFv3VIRTIFRTRDEADINTERVAL 8
151 +#define OSPFv3VIRTIFSTATE 9
152 +#define OSPFv3VIRTIFEVENTS 10
153 +#define OSPFv3VIRTIFROWSTATUS 11
154 +#define OSPFv3VIRTIFLINKSCOPELSACOUNT 12
155 +#define OSPFv3VIRTIFLINKLSACKSUMSUM 13
156 +
157 +/* OSPFv3 MIB Neighbors Table values: ospfv3NbrTable */
158 +#define OSPFv3NBRADDRESSTYPE 4
159 +#define OSPFv3NBRADDRESS 5
160 +#define OSPFv3NBROPTIONS 6
161 +#define OSPFv3NBRPRIORITY 7
162 +#define OSPFv3NBRSTATE 8
163 +#define OSPFv3NBREVENTS 9
164 +#define OSPFv3NBRLSRETRANSQLEN 10
165 +#define OSPFv3NBRHELLOSUPPRESSED 11
166 +#define OSPFv3NBRIFID 12
167 +#define OSPFv3NBRRESTARTHELPERSTATUS 13
168 +#define OSPFv3NBRRESTARTHELPERAGE 14
169 +#define OSPFv3NBRRESTARTHELPEREXITREASON 15
170 +
171 +/* OSPFv3 MIB Configured Neighbors Table values: ospfv3CfgNbrTable */
172 +#define OSPFv3CFGNBRPRIORITY 5
173 +#define OSPFv3CFGNBRROWSTATUS 6
174 +
175 +/* OSPFv3 MIB Virtual Neighbors Table values: ospfv3VirtNbrTable */
176 +#define OSPFv3VIRTNBRIFINDEX 3
177 +#define OSPFv3VIRTNBRIFINSTID 4
178 +#define OSPFv3VIRTNBRADDRESSTYPE 5
179 +#define OSPFv3VIRTNBRADDRESS 6
180 +#define OSPFv3VIRTNBROPTIONS 7
181 +#define OSPFv3VIRTNBRSTATE 8
182 +#define OSPFv3VIRTNBREVENTS 9
183 +#define OSPFv3VIRTNBRLSRETRANSQLEN 10
184 +#define OSPFv3VIRTNBRHELLOSUPPRESSED 11
185 +#define OSPFv3VIRTNBRIFID 12
186 +#define OSPFv3VIRTNBRRESTARTHELPERSTATUS 13
187 +#define OSPFv3VIRTNBRRESTARTHELPERAGE 14
188 +#define OSPFv3VIRTNBRRESTARTHELPEREXITREASON 15
189 +
190 +/* OSPFv3 MIB Area Aggregate Table values: ospfv3AreaAggregateTable */
191 +#define OSPFv3AREAAGGREGATEROWSTATUS 6
192 +#define OSPFv3AREAAGGREGATEEFFECT 7
193 +#define OSPFv3AREAAGGREGATEROUTETAG 8
194 +
195 +/* OSPFv3 MIB Virtual Link Lsdb Table values: ospfv3VirtLinkLsdbTable */
196 +#define OSPFv3VIRTLINKLSDBSEQUENCE 6
197 +#define OSPFv3VIRTLINKLSDBAGE 7
198 +#define OSPFv3VIRTLINKLSDBCHECKSUM 8
199 +#define OSPFv3VIRTLINKLSDBADVERTISEMENT 9
200 +#define OSPFv3VIRTLINKLSDBTYPEKNOWN 10
201 +
100 202 /* SYNTAX Status from OSPF-MIB. */
101 203 #define OSPF_STATUS_ENABLED 1
102 204 #define OSPF_STATUS_DISABLED 2
103 205
104 206 /* SNMP value hack. */
105 207 #define COUNTER ASN_COUNTER
106 208 #define INTEGER ASN_INTEGER
107 209 #define GAUGE ASN_GAUGE
210 +#define UNSIGNED ASN_UNSIGNED
108 211 #define TIMETICKS ASN_TIMETICKS
109 212 #define IPADDRESS ASN_IPADDRESS
110 213 #define STRING ASN_OCTET_STR
111 214
112 215 /* For return values e.g. SNMP_INTEGER macro */
113 216 SNMP_LOCAL_VARIABLES
114 217
115 -static struct in_addr tmp;
116 -#define INT32_INADDR(x) \
117 - (tmp.s_addr = (x), tmp)
118 -
119 218 /* OSPFv3-MIB instances. */
120 219 oid ospfv3_oid [] = { OSPFv3MIB };
121 220
122 -/* empty ID 0.0.0.0 e.g. empty router-id */
123 -static struct in_addr ospf6_empty_id = {0};
124 -
125 221 /* Hook functions. */
126 222 static u_char *ospfv3GeneralGroup (struct variable *, oid *, size_t *,
127 223 int, size_t *, WriteMethod **);
128 224 static u_char *ospfv3AreaEntry (struct variable *, oid *, size_t *,
129 225 int, size_t *, WriteMethod **);
130 226 static u_char *ospfv3AreaLsdbEntry (struct variable *, oid *, size_t *,
131 227 int, size_t *, WriteMethod **);
132 228
133 229 struct variable ospfv3_variables[] =
134 230 {
135 231 /* OSPF general variables */
136 - {OSPFv3ROUTERID, IPADDRESS, RWRITE, ospfv3GeneralGroup,
232 + {OSPFv3ROUTERID, UNSIGNED, RWRITE, ospfv3GeneralGroup,
137 233 3, {1, 1, 1}},
138 234 {OSPFv3ADMINSTAT, INTEGER, RWRITE, ospfv3GeneralGroup,
139 235 3, {1, 1, 2}},
140 236 {OSPFv3VERSIONNUMBER, INTEGER, RONLY, ospfv3GeneralGroup,
141 237 3, {1, 1, 3}},
142 238 {OSPFv3AREABDRRTRSTATUS, INTEGER, RONLY, ospfv3GeneralGroup,
143 239 3, {1, 1, 4}},
144 240 {OSPFv3ASBDRRTRSTATUS, INTEGER, RWRITE, ospfv3GeneralGroup,
145 241 3, {1, 1, 5}},
146 242 {OSPFv3ASSCOPELSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup,
147 243 3, {1, 1, 6}},
148 - {OSPFv3ASSCOPELSACHECKSUMSUM, INTEGER, RONLY, ospfv3GeneralGroup,
244 + {OSPFv3ASSCOPELSACHECKSUMSUM,UNSIGNED, RONLY, ospfv3GeneralGroup,
149 245 3, {1, 1, 7}},
150 246 {OSPFv3ORIGINATENEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup,
151 247 3, {1, 1, 8}},
152 248 {OSPFv3RXNEWLSAS, COUNTER, RONLY, ospfv3GeneralGroup,
153 249 3, {1, 1, 9}},
154 250 {OSPFv3EXTLSACOUNT, GAUGE, RONLY, ospfv3GeneralGroup,
155 251 3, {1, 1, 10}},
156 252 {OSPFv3EXTAREALSDBLIMIT, INTEGER, RWRITE, ospfv3GeneralGroup,
157 253 3, {1, 1, 11}},
158 - {OSPFv3MULTICASTEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup,
254 + {OSPFv3EXITOVERFLOWINTERVAL, UNSIGNED, RWRITE, ospfv3GeneralGroup,
159 255 3, {1, 1, 12}},
160 - {OSPFv3EXITOVERFLOWINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup,
161 - 3, {1, 1, 13}},
162 256 {OSPFv3DEMANDEXTENSIONS, INTEGER, RWRITE, ospfv3GeneralGroup,
257 + 3, {1, 1, 13}},
258 + {OSPFv3REFERENCEBANDWIDTH, UNSIGNED, RWRITE, ospfv3GeneralGroup,
163 259 3, {1, 1, 14}},
164 - {OSPFv3TRAFFICENGINEERINGSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup,
260 + {OSPFv3RESTARTSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup,
165 261 3, {1, 1, 15}},
166 - {OSPFv3REFERENCEBANDWIDTH, INTEGER, RWRITE, ospfv3GeneralGroup,
262 + {OSPFv3RESTARTINTERVAL, UNSIGNED, RWRITE, ospfv3GeneralGroup,
167 263 3, {1, 1, 16}},
168 - {OSPFv3RESTARTSUPPORT, INTEGER, RWRITE, ospfv3GeneralGroup,
264 + {OSPFv3RESTARTSTRICTLSACHECKING, INTEGER, RWRITE, ospfv3GeneralGroup,
169 265 3, {1, 1, 17}},
170 - {OSPFv3RESTARTINTERVAL, INTEGER, RWRITE, ospfv3GeneralGroup,
171 - 3, {1, 1, 18}},
172 266 {OSPFv3RESTARTSTATUS, INTEGER, RONLY, ospfv3GeneralGroup,
267 + 3, {1, 1, 18}},
268 + {OSPFv3RESTARTAGE, UNSIGNED, RONLY, ospfv3GeneralGroup,
173 269 3, {1, 1, 19}},
174 - {OSPFv3RESTARTAGE, INTEGER, RONLY, ospfv3GeneralGroup,
175 - 3, {1, 1, 20}},
176 270 {OSPFv3RESTARTEXITREASON, INTEGER, RONLY, ospfv3GeneralGroup,
271 + 3, {1, 1, 20}},
272 + {OSPFv3NOTIFICATIONENABLE, INTEGER, RWRITE, ospfv3GeneralGroup,
177 273 3, {1, 1, 21}},
274 + {OSPFv3STUBROUTERSUPPORT, INTEGER, RONLY, ospfv3GeneralGroup,
275 + 3, {1, 1, 22}},
276 + {OSPFv3STUBROUTERADVERTISEMENT, INTEGER, RWRITE, ospfv3GeneralGroup,
277 + 3, {1, 1, 23}},
278 + {OSPFv3DISCONTINUITYTIME, TIMETICKS, RONLY, ospfv3GeneralGroup,
279 + 3, {1, 1, 24}},
280 + {OSPFv3RESTARTTIME, TIMETICKS, RONLY, ospfv3GeneralGroup,
281 + 3, {1, 1, 25}},
178 282
179 283 /* OSPFv3 Area Data Structure */
180 - {OSPFv3AREAID, IPADDRESS, RONLY, ospfv3AreaEntry,
181 - 4, {1, 2, 1, 1}},
182 284 {OSPFv3IMPORTASEXTERN, INTEGER, RWRITE, ospfv3AreaEntry,
183 285 4, {1, 2, 1, 2}},
184 286 {OSPFv3AREASPFRUNS, COUNTER, RONLY, ospfv3AreaEntry,
185 287 4, {1, 2, 1, 3}},
186 288 {OSPFv3AREABDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry,
187 289 4, {1, 2, 1, 4}},
188 290 {OSPFv3AREAASBDRRTRCOUNT, GAUGE, RONLY, ospfv3AreaEntry,
189 291 4, {1, 2, 1, 5}},
190 292 {OSPFv3AREASCOPELSACOUNT, GAUGE, RONLY, ospfv3AreaEntry,
191 293 4, {1, 2, 1, 6}},
192 - {OSPFv3AREASCOPELSACKSUMSUM, INTEGER, RONLY, ospfv3AreaEntry,
294 + {OSPFv3AREASCOPELSACKSUMSUM, UNSIGNED, RONLY, ospfv3AreaEntry,
193 295 4, {1, 2, 1, 7}},
194 296 {OSPFv3AREASUMMARY, INTEGER, RWRITE, ospfv3AreaEntry,
195 297 4, {1, 2, 1, 8}},
196 - {OSPFv3AREASTATUS, INTEGER, RWRITE, ospfv3AreaEntry,
298 + {OSPFv3AREAROWSTATUS, INTEGER, RWRITE, ospfv3AreaEntry,
197 299 4, {1, 2, 1, 9}},
198 - {OSPFv3STUBMETRIC, INTEGER, RWRITE, ospfv3AreaEntry,
300 + {OSPFv3AREASTUBMETRIC, INTEGER, RWRITE, ospfv3AreaEntry,
199 301 4, {1, 2, 1, 10}},
200 302 {OSPFv3AREANSSATRANSLATORROLE, INTEGER, RWRITE, ospfv3AreaEntry,
201 303 4, {1, 2, 1, 11}},
202 304 {OSPFv3AREANSSATRANSLATORSTATE, INTEGER, RONLY, ospfv3AreaEntry,
203 305 4, {1, 2, 1, 12}},
204 - {OSPFv3AREANSSATRANSLATORSTABILITYINTERVAL, INTEGER, RWRITE, ospfv3AreaEntry,
306 + {OSPFv3AREANSSATRANSLATORSTABINTERVAL, UNSIGNED, RWRITE, ospfv3AreaEntry,
205 307 4, {1, 2, 1, 13}},
206 308 {OSPFv3AREANSSATRANSLATOREVENTS, COUNTER, RONLY, ospfv3AreaEntry,
207 309 4, {1, 2, 1, 14}},
208 310 {OSPFv3AREASTUBMETRICTYPE, INTEGER, RWRITE, ospfv3AreaEntry,
209 311 4, {1, 2, 1, 15}},
312 + {OSPFv3AREATEENABLED, INTEGER, RWRITE, ospfv3AreaEntry,
313 + 4, {1, 2, 1, 16}},
210 314
211 - {OSPFv3AREALSDBAREAID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
212 - 4, {1, 4, 1, 1}},
213 - {OSPFv3AREALSDBTYPE, GAUGE, RONLY, ospfv3AreaLsdbEntry,
214 - 4, {1, 4, 1, 2}},
215 - {OSPFv3AREALSDBROUTERID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
216 - 4, {1, 4, 1, 3}},
217 - {OSPFv3AREALSDBLSID, IPADDRESS, RONLY, ospfv3AreaLsdbEntry,
218 - 4, {1, 4, 1, 4}},
315 + /* OSPFv3 Area LSDB */
219 316 {OSPFv3AREALSDBSEQUENCE, INTEGER, RONLY, ospfv3AreaLsdbEntry,
220 317 4, {1, 4, 1, 5}},
221 - {OSPFv3AREALSDBAGE, INTEGER, RONLY, ospfv3AreaLsdbEntry,
318 + {OSPFv3AREALSDBAGE, UNSIGNED, RONLY, ospfv3AreaLsdbEntry,
222 319 4, {1, 4, 1, 6}},
223 320 {OSPFv3AREALSDBCHECKSUM, INTEGER, RONLY, ospfv3AreaLsdbEntry,
224 321 4, {1, 4, 1, 7}},
225 322 {OSPFv3AREALSDBADVERTISEMENT, STRING, RONLY, ospfv3AreaLsdbEntry,
226 323 4, {1, 4, 1, 8}},
227 324 {OSPFv3AREALSDBTYPEKNOWN, INTEGER, RONLY, ospfv3AreaLsdbEntry,
228 325 4, {1, 4, 1, 9}},
229 326
230 327 };
231 328
234 331 int exact, size_t *var_len, WriteMethod **write_method)
235 332 {
236 333 /* Check whether the instance identifier is valid */
237 334 if (smux_header_generic (v, name, length, exact, var_len, write_method)
238 335 == MATCH_FAILED)
239 336 return NULL;
240 337
241 338 /* Return the current value of the variable */
242 339 switch (v->magic)
243 340 {
244 - case OSPFv3ROUTERID: /* 1*/
341 + case OSPFv3ROUTERID:
245 342 /* Router-ID of this OSPF instance. */
246 343 if (ospf6)
247 - return SNMP_IPADDRESS (INT32_INADDR (ospf6->router_id));
248 - else
249 - return SNMP_IPADDRESS (ospf6_empty_id);
250 - break;
251 - case OSPFv3ADMINSTAT: /* 2*/
252 - break;
253 - case OSPFv3VERSIONNUMBER: /* 3*/
254 - break;
255 - case OSPFv3AREABDRRTRSTATUS: /* 4*/
256 - break;
257 - case OSPFv3ASBDRRTRSTATUS: /* 5*/
258 - break;
259 - case OSPFv3ASSCOPELSACOUNT: /* 6*/
260 - break;
261 - case OSPFv3ASSCOPELSACHECKSUMSUM: /* 7*/
262 - break;
263 - case OSPFv3ORIGINATENEWLSAS: /* 8*/
264 - break;
265 - case OSPFv3RXNEWLSAS: /* 9*/
266 - break;
267 - case OSPFv3EXTLSACOUNT: /*10*/
268 - break;
269 - case OSPFv3EXTAREALSDBLIMIT: /*11*/
270 - break;
271 - case OSPFv3MULTICASTEXTENSIONS: /*12*/
272 - break;
273 - case OSPFv3EXITOVERFLOWINTERVAL: /*13*/
274 - break;
275 - case OSPFv3DEMANDEXTENSIONS: /*14*/
276 - break;
277 - case OSPFv3TRAFFICENGINEERINGSUPPORT: /*15*/
278 - break;
279 - case OSPFv3REFERENCEBANDWIDTH: /*16*/
280 - break;
281 - case OSPFv3RESTARTSUPPORT: /*17*/
282 - break;
283 - case OSPFv3RESTARTINTERVAL: /*18*/
284 - break;
285 - case OSPFv3RESTARTSTATUS: /*19*/
286 - break;
287 - case OSPFv3RESTARTAGE: /*20*/
288 - break;
289 - case OSPFv3RESTARTEXITREASON: /*21*/
290 - break;
291 - default:
344 + return SNMP_INTEGER (ntohl (ospf6->router_id));
345 + return SNMP_INTEGER (0);
346 + case OSPFv3ADMINSTAT:
347 + case OSPFv3VERSIONNUMBER:
348 + case OSPFv3AREABDRRTRSTATUS:
349 + case OSPFv3ASBDRRTRSTATUS:
350 + case OSPFv3ASSCOPELSACOUNT:
351 + case OSPFv3ASSCOPELSACHECKSUMSUM:
352 + case OSPFv3ORIGINATENEWLSAS:
353 + case OSPFv3RXNEWLSAS:
354 + case OSPFv3EXTLSACOUNT:
355 + case OSPFv3EXTAREALSDBLIMIT:
356 + case OSPFv3EXITOVERFLOWINTERVAL:
357 + case OSPFv3DEMANDEXTENSIONS:
358 + case OSPFv3REFERENCEBANDWIDTH:
359 + case OSPFv3RESTARTSUPPORT:
360 + case OSPFv3RESTARTINTERVAL:
361 + case OSPFv3RESTARTSTRICTLSACHECKING:
362 + case OSPFv3RESTARTSTATUS:
363 + case OSPFv3RESTARTAGE:
364 + case OSPFv3RESTARTEXITREASON:
365 + case OSPFv3NOTIFICATIONENABLE:
366 + case OSPFv3STUBROUTERSUPPORT:
367 + case OSPFv3STUBROUTERADVERTISEMENT:
368 + case OSPFv3DISCONTINUITYTIME:
369 + case OSPFv3RESTARTTIME:
370 + /* TODO: Not implemented */
292 371 return NULL;
293 372 }
294 373 return NULL;
295 374 }
296 375
297 376 static u_char *
298 377 ospfv3AreaEntry (struct variable *v, oid *name, size_t *length,
299 378 int exact, size_t *var_len, WriteMethod **write_method)
300 379 {
301 380 struct ospf6_area *oa, *area = NULL;
302 381 u_int32_t area_id = 0;
303 382 struct listnode *node;
304 383 unsigned int len;
384 + char a[16];
305 385
306 386 if (ospf6 == NULL)
307 387 return NULL;
308 388
309 389 if (smux_header_table(v, name, length, exact, var_len, write_method)
310 390 == MATCH_FAILED)
311 391 return NULL;
312 392
313 393 len = *length - v->namelen;
314 - len = (len >= sizeof (u_int32_t) ? sizeof (u_int32_t) : 0);
315 - if (exact && len != sizeof (u_int32_t))
394 + len = (len >= 1 ? sizeof 1 : 0);
395 + if (exact && len != 1)
316 396 return NULL;
317 397 if (len)
318 - oid2in_addr (name + v->namelen, len, (struct in_addr *) &area_id);
398 + area_id = htonl (name[v->namelen]);
319 399
400 + inet_ntop (AF_INET, &area_id, a, sizeof (a));
320 401 zlog_debug ("SNMP access by area: %s, exact=%d len=%d length=%lu",
321 - inet_ntoa (* (struct in_addr *) &area_id),
322 - exact, len, (u_long)*length);
402 + a, exact, len, (u_long)*length);
323 403
324 404 for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
325 405 {
326 406 if (area == NULL)
327 407 {
328 408 if (len == 0) /* return first area entry */
329 409 area = oa;
330 410 else if (exact && ntohl (oa->area_id) == ntohl (area_id))
331 411 area = oa;
332 412 else if (ntohl (oa->area_id) > ntohl (area_id))
333 413 area = oa;
334 414 }
335 415 }
336 416
337 417 if (area == NULL)
338 418 return NULL;
339 419
340 - *length = v->namelen + sizeof (u_int32_t);
341 - oid_copy_addr (name + v->namelen, (struct in_addr *) &area->area_id,
342 - sizeof (u_int32_t));
420 + *length = v->namelen + 1;
421 + name[v->namelen] = ntohl (area->area_id);
343 422
423 + inet_ntop (AF_INET, &area->area_id, a, sizeof (a));
344 424 zlog_debug ("SNMP found area: %s, exact=%d len=%d length=%lu",
345 - inet_ntoa (* (struct in_addr *) &area->area_id),
346 - exact, len, (u_long)*length);
425 + a, exact, len, (u_long)*length);
347 426
348 427 switch (v->magic)
349 428 {
350 - case OSPFv3AREAID: /* 1*/
351 - return SNMP_IPADDRESS (INT32_INADDR (area->area_id));
352 - break;
353 - case OSPFv3IMPORTASEXTERN: /* 2*/
429 + case OSPFv3IMPORTASEXTERN:
354 430 return SNMP_INTEGER (ospf6->external_table->count);
355 431 break;
356 - default:
432 + case OSPFv3AREASPFRUNS:
433 + case OSPFv3AREABDRRTRCOUNT:
434 + case OSPFv3AREAASBDRRTRCOUNT:
435 + case OSPFv3AREASCOPELSACOUNT:
436 + case OSPFv3AREASCOPELSACKSUMSUM:
437 + case OSPFv3AREASUMMARY:
438 + case OSPFv3AREAROWSTATUS:
439 + case OSPFv3AREASTUBMETRIC:
440 + case OSPFv3AREANSSATRANSLATORROLE:
441 + case OSPFv3AREANSSATRANSLATORSTATE:
442 + case OSPFv3AREANSSATRANSLATORSTABINTERVAL:
443 + case OSPFv3AREANSSATRANSLATOREVENTS:
444 + case OSPFv3AREASTUBMETRICTYPE:
445 + case OSPFv3AREATEENABLED:
446 + /* Not implemented. */
357 447 return NULL;
358 - break;
359 448 }
360 449 return NULL;
361 450 }
362 451
363 452 static u_char *
364 453 ospfv3AreaLsdbEntry (struct variable *v, oid *name, size_t *length,
365 454 int exact, size_t *var_len, WriteMethod **write_method)
366 455 {
367 456 struct ospf6_lsa *lsa = NULL;
368 - struct in_addr area_id;
457 + u_int32_t area_id, id, adv_router;
369 458 u_int16_t type;
370 - struct in_addr id;
371 - struct in_addr adv_router;
372 459 int len;
373 460 oid *offset;
374 461 int offsetlen;
375 462 char a[16], b[16], c[16];
376 463 struct ospf6_area *oa;
377 464 struct listnode *node;
378 465
379 466 if (smux_header_table(v, name, length, exact, var_len, write_method)
380 467 == MATCH_FAILED)
381 468 return NULL;
382 469
383 - memset (&area_id, 0, sizeof (struct in_addr));
384 - type = 0;
385 - memset (&id, 0, sizeof (struct in_addr));
386 - memset (&adv_router, 0, sizeof (struct in_addr));
470 + area_id = type = id = adv_router = 0;
387 471
388 472 /* Check OSPFv3 instance. */
389 473 if (ospf6 == NULL)
390 474 return NULL;
391 475
392 476 /* Get variable length. */
393 477 offset = name + v->namelen;
394 478 offsetlen = *length - v->namelen;
395 479
396 -#define OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET \
397 - (IN_ADDR_SIZE + 1 + IN_ADDR_SIZE + IN_ADDR_SIZE)
480 +#define OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET 4
398 481
399 482 if (exact && offsetlen != OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET)
400 483 return NULL;
401 484
402 485 /* Parse area-id */
403 - len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
486 + len = (offsetlen < 1 ? 0 : 1);
404 487 if (len)
405 - oid2in_addr (offset, len, &area_id);
488 + area_id = htonl (*offset);
406 489 offset += len;
407 490 offsetlen -= len;
408 491
409 492 /* Parse type */
410 - len = (offsetlen < 1 ? offsetlen : 1);
493 + len = (offsetlen < 1 ? 0 : 1);
411 494 if (len)
412 495 type = htons (*offset);
413 496 offset += len;
414 497 offsetlen -= len;
415 498
416 499 /* Parse Router-ID */
417 - len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
500 + len = (offsetlen < 1 ? 0 : 1);
418 501 if (len)
419 - oid2in_addr (offset, len, &adv_router);
502 + adv_router = htonl (*offset);
420 503 offset += len;
421 504 offsetlen -= len;
422 505
423 506 /* Parse LS-ID */
424 - len = (offsetlen < IN_ADDR_SIZE ? offsetlen : IN_ADDR_SIZE);
507 + len = (offsetlen < 1 ? 0 : 1);
425 508 if (len)
426 - oid2in_addr (offset, len, &id);
509 + id = htonl (*offset);
427 510 offset += len;
428 511 offsetlen -= len;
429 512
430 513 inet_ntop (AF_INET, &area_id, a, sizeof (a));
431 514 inet_ntop (AF_INET, &adv_router, b, sizeof (b));
432 515 inet_ntop (AF_INET, &id, c, sizeof (c));
433 516 zlog_debug ("SNMP access by lsdb: area=%s exact=%d length=%lu magic=%d"
434 517 " type=%#x adv_router=%s id=%s",
435 518 a, exact, (u_long)*length, v->magic, ntohs (type), b, c);
436 519
437 520 if (exact)
438 521 {
439 - oa = ospf6_area_lookup (area_id.s_addr, ospf6);
440 - lsa = ospf6_lsdb_lookup (type, id.s_addr, adv_router.s_addr, oa->lsdb);
522 + oa = ospf6_area_lookup (area_id, ospf6);
523 + lsa = ospf6_lsdb_lookup (type, id, adv_router, oa->lsdb);
441 524 }
442 525 else
443 526 {
444 527 for (ALL_LIST_ELEMENTS_RO (ospf6->area_list, node, oa))
445 528 {
446 529 if (lsa)
447 530 continue;
448 - if (ntohl (oa->area_id) < ntohl (area_id.s_addr))
531 + if (oa->area_id < area_id)
449 532 continue;
450 533
451 - lsa = ospf6_lsdb_lookup_next (type, id.s_addr, adv_router.s_addr,
534 + lsa = ospf6_lsdb_lookup_next (type, id, adv_router,
452 535 oa->lsdb);
453 536 if (! lsa)
454 537 {
455 538 type = 0;
456 - memset (&id, 0, sizeof (struct in_addr));
457 - memset (&adv_router, 0, sizeof (struct in_addr));
539 + id = 0;
540 + adv_router = 0;
458 541 }
459 542 }
460 543 }
461 544
462 545 if (! lsa)
463 546 {
464 547 zlog_debug ("SNMP respond: No LSA to return");
465 548 return NULL;
466 549 }
467 550 oa = OSPF6_AREA (lsa->lsdb->data);
468 551
469 552 zlog_debug ("SNMP respond: area: %s lsa: %s", oa->name, lsa->name);
470 553
471 554 /* Add Index (AreaId, Type, RouterId, Lsid) */
472 555 *length = v->namelen + OSPFV3_AREA_LSDB_ENTRY_EXACT_OFFSET;
473 556 offset = name + v->namelen;
474 - oid_copy_addr (offset, (struct in_addr *) &oa->area_id, IN_ADDR_SIZE);
475 - offset += IN_ADDR_SIZE;
557 + *offset = ntohl (oa->area_id);
558 + offset++;
476 559 *offset = ntohs (lsa->header->type);
477 560 offset++;
478 - oid_copy_addr (offset, (struct in_addr *) &lsa->header->adv_router,
479 - IN_ADDR_SIZE);
480 - offset += IN_ADDR_SIZE;
481 - oid_copy_addr (offset, (struct in_addr *) &lsa->header->id, IN_ADDR_SIZE);
482 - offset += IN_ADDR_SIZE;
561 + *offset = ntohl (lsa->header->adv_router);
562 + offset++;
563 + *offset = ntohl (lsa->header->id);
564 + offset++;
483 565
484 566 /* Return the current value of the variable */
485 567 switch (v->magic)
486 568 {
487 - case OSPFv3AREALSDBAREAID: /* 1 */
488 - area_id.s_addr = OSPF6_AREA (lsa->lsdb->data)->area_id;
489 - return SNMP_IPADDRESS (area_id);
490 - break;
491 - case OSPFv3AREALSDBTYPE: /* 2 */
492 - return SNMP_INTEGER (ntohs (lsa->header->type));
569 + case OSPFv3AREALSDBSEQUENCE:
570 + return SNMP_INTEGER (ntohl (lsa->header->seqnum));
493 571 break;
494 - case OSPFv3AREALSDBROUTERID: /* 3 */
495 - adv_router.s_addr = lsa->header->adv_router;
496 - return SNMP_IPADDRESS (adv_router);
497 - break;
498 - case OSPFv3AREALSDBLSID: /* 4 */
499 - id.s_addr = lsa->header->id;
500 - return SNMP_IPADDRESS (id);
501 - break;
502 - case OSPFv3AREALSDBSEQUENCE: /* 5 */
503 - return SNMP_INTEGER (lsa->header->seqnum);
504 - break;
505 - case OSPFv3AREALSDBAGE: /* 6 */
572 + case OSPFv3AREALSDBAGE:
506 573 ospf6_lsa_age_current (lsa);
507 - return SNMP_INTEGER (lsa->header->age);
574 + return SNMP_INTEGER (ntohs (lsa->header->age));
508 575 break;
509 - case OSPFv3AREALSDBCHECKSUM: /* 7 */
510 - return SNMP_INTEGER (lsa->header->checksum);
576 + case OSPFv3AREALSDBCHECKSUM:
577 + return SNMP_INTEGER (ntohs (lsa->header->checksum));
511 578 break;
512 - case OSPFv3AREALSDBADVERTISEMENT: /* 8 */
579 + case OSPFv3AREALSDBADVERTISEMENT:
513 580 *var_len = ntohs (lsa->header->length);
514 581 return (u_char *) lsa->header;
515 582 break;
516 - case OSPFv3AREALSDBTYPEKNOWN: /* 9 */
583 + case OSPFv3AREALSDBTYPEKNOWN:
517 584 return SNMP_INTEGER (OSPF6_LSA_IS_KNOWN (lsa->header->type) ?
518 585 SNMP_TRUE : SNMP_FALSE);
519 586 break;
520 - default:
521 - return NULL;
522 - break;
523 587 }
524 588 return NULL;
525 589 }
526 590
527 591
528 592 /* Register OSPFv3-MIB. */
529 593 void
530 594 ospf6_snmp_init (struct thread_master *master)
531 595 {
532 596 smux_init (master);

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut