]>
git.proxmox.com Git - mirror_frr.git/blob - lib/snmp.c
1cbd41c72089b4727fc5a0eb8f1c1102870817f1
2 * Copyright (C) 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
4 * This file is part of GNU Zebra.
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GNU Zebra; see the file COPYING. If not, write to the Free
18 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24 #include <net-snmp/net-snmp-config.h>
25 #include <net-snmp/net-snmp-includes.h>
29 #define min(A,B) ((A) < (B) ? (A) : (B))
32 oid_compare (const oid
*o1
, int o1_len
, const oid
*o2
, int o2_len
)
36 for (i
= 0; i
< min (o1_len
, o2_len
); i
++)
40 else if (o1
[i
] > o2
[i
])
52 oid_copy (void *dest
, const void *src
, size_t size
)
54 return memcpy (dest
, src
, size
* sizeof (oid
));
58 oid2in_addr (oid oid
[], int len
, struct in_addr
*addr
)
66 pnt
= (u_char
*) addr
;
68 for (i
= 0; i
< len
; i
++)
73 oid_copy_addr (oid oid
[], struct in_addr
*addr
, int len
)
81 pnt
= (u_char
*) addr
;
83 for (i
= 0; i
< len
; i
++)
88 smux_header_generic (struct variable
*v
, oid
*name
, size_t *length
, int exact
,
89 size_t *var_len
, WriteMethod
**write_method
)
91 oid fulloid
[MAX_OID_LEN
];
94 oid_copy (fulloid
, v
->name
, v
->namelen
);
95 fulloid
[v
->namelen
] = 0;
96 /* Check against full instance. */
97 ret
= oid_compare (name
, *length
, fulloid
, v
->namelen
+ 1);
99 /* Check single instance. */
100 if ((exact
&& (ret
!= 0)) || (!exact
&& (ret
>= 0)))
103 /* In case of getnext, fill in full instance. */
104 memcpy (name
, fulloid
, (v
->namelen
+ 1) * sizeof (oid
));
105 *length
= v
->namelen
+ 1;
108 *var_len
= sizeof(long); /* default to 'long' results */
110 return MATCH_SUCCEEDED
;
114 smux_header_table (struct variable
*v
, oid
*name
, size_t *length
, int exact
,
115 size_t *var_len
, WriteMethod
**write_method
)
117 /* If the requested OID name is less than OID prefix we
118 handle, adjust it to our prefix. */
119 if ((oid_compare (name
, *length
, v
->name
, v
->namelen
)) < 0)
123 oid_copy(name
, v
->name
, v
->namelen
);
124 *length
= v
->namelen
;
128 *var_len
= sizeof(long);
130 return MATCH_SUCCEEDED
;