]>
git.proxmox.com Git - mirror_frr.git/blob - lib/smux.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
9 #include <net-snmp/agent/net-snmp-agent-includes.h>
10 #include <net-snmp/agent/snmp_vars.h>
19 /* Structures here are mostly compatible with UCD SNMP 4.1.1 */
20 #define MATCH_FAILED (-1)
21 #define MATCH_SUCCEEDED 0
23 /* SYNTAX TruthValue from SNMPv2-TC. */
27 /* SYNTAX RowStatus from SNMPv2-TC. */
29 #define SNMP_INVALID 2
31 #define IN_ADDR_SIZE sizeof(struct in_addr)
32 #define IN6_ADDR_SIZE sizeof(struct in6_addr)
34 /* IANAipRouteProtocol */
35 #define IANAIPROUTEPROTOCOLOTHER 1
36 #define IANAIPROUTEPROTOCOLLOCAL 2
37 #define IANAIPROUTEPROTOCOLNETMGMT 3
38 #define IANAIPROUTEPROTOCOLICMP 4
39 #define IANAIPROUTEPROTOCOLEGP 5
40 #define IANAIPROUTEPROTOCOLGGP 6
41 #define IANAIPROUTEPROTOCOLHELLO 7
42 #define IANAIPROUTEPROTOCOLRIP 8
43 #define IANAIPROUTEPROTOCOLISIS 9
44 #define IANAIPROUTEPROTOCOLESIS 10
45 #define IANAIPROUTEPROTOCOLCISCOIGRP 11
46 #define IANAIPROUTEPROTOCOLBBNSPFIGP 12
47 #define IANAIPROUTEPROTOCOLOSPF 13
48 #define IANAIPROUTEPROTOCOLBGP 14
49 #define IANAIPROUTEPROTOCOLIDPR 15
50 #define IANAIPROUTEPROTOCOLCISCOEIGRP 16
51 #define IANAIPROUTEPROTOCOLDVMRP 17
53 #define INETADDRESSTYPEUNKNOWN 0
54 #define INETADDRESSTYPEIPV4 1
55 #define INETADDRESSTYPEIPV6 2
58 #define REGISTER_MIB(descr, var, vartype, theoid) \
59 smux_register_mib(descr, (struct variable *)var, \
60 sizeof(struct vartype), \
61 sizeof(var) / sizeof(struct vartype), theoid, \
62 sizeof(theoid) / sizeof(oid))
65 int namelen
; /* Negative if the object is not indexed */
66 oid name
[MAX_OID_LEN
];
71 oid indexname
[MAX_OID_LEN
];
73 /* Declare SMUX return value. */
74 #define SNMP_LOCAL_VARIABLES \
75 static long snmp_int_val __attribute__((unused)); \
76 static struct in_addr snmp_in_addr_val __attribute__((unused)); \
77 static uint8_t snmp_octet_val __attribute__((unused)); \
78 static char snmp_string_val[255] __attribute__((unused));
79 #define SNMP_INTEGER(V) \
80 (*var_len = sizeof(snmp_int_val), snmp_int_val = V, \
81 (uint8_t *)&snmp_int_val)
83 #define SNMP_OCTET(V) \
84 (*var_len = sizeof(snmp_octet_val), snmp_octet_val = V, \
85 (uint8_t *)&snmp_octet_val)
87 #define SNMP_STRING(V) \
88 (*var_len = MIN(sizeof(snmp_string_val), strlen(V) + 1), \
89 strlcpy(snmp_string_val, V, *var_len), (uint8_t *)&snmp_string_val)
91 #define SNMP_IPADDRESS(V) \
92 (*var_len = sizeof(struct in_addr), snmp_in_addr_val = V, \
93 (uint8_t *)&snmp_in_addr_val)
95 #define SNMP_IP6ADDRESS(V) (*var_len = sizeof(struct in6_addr), (uint8_t *)&V)
98 * Check to see if snmp is enabled or not
100 extern bool smux_enabled(void);
102 extern void smux_init(struct event_loop
*tm
);
103 extern void smux_agentx_enable(void);
104 extern void smux_register_mib(const char *, struct variable
*, size_t, int,
106 extern int smux_header_generic(struct variable
*, oid
[], size_t *, int,
107 size_t *, WriteMethod
**);
108 extern int smux_header_table(struct variable
*, oid
*, size_t *, int, size_t *,
111 /* For traps, three OID are provided:
113 1. The enterprise OID to use (the last argument will be appended to
114 it to form the SNMP trap OID)
116 2. The base OID for objects to be sent in traps.
118 3. The index OID for objects to be sent in traps. This index is used
119 to designate a particular instance of a column.
121 The provided trap object contains the bindings to be sent with the
122 trap. The base OID will be prefixed to the provided OID and, if the
123 length is positive, the requested OID is assumed to be a columnar
124 object and the index OID will be appended.
126 The two first arguments are the MIB registry used to locate the trap
129 The use of the arguments may differ depending on the implementation
132 extern void smux_trap(struct variable
*, size_t, const oid
*, size_t,
133 const oid
*, size_t, const oid
*, size_t,
134 const struct trap_object
*, size_t, uint8_t);
136 extern int smux_trap_multi_index(struct variable
*vp
, size_t vp_len
,
137 const oid
*ename
, size_t enamelen
,
138 const oid
*name
, size_t namelen
,
139 struct index_oid
*iname
, size_t index_len
,
140 const struct trap_object
*trapobj
,
141 size_t trapobjlen
, uint8_t sptrap
);
143 extern void smux_events_update(void);
144 extern int oid_compare(const oid
*, int, const oid
*, int);
145 extern void oid2in_addr(oid
[], int, struct in_addr
*);
146 extern void oid2in6_addr(oid oid
[], struct in6_addr
*addr
);
147 extern void oid2int(oid oid
[], int *dest
);
148 extern void *oid_copy(void *, const void *, size_t);
149 extern void oid_copy_in_addr(oid
[], const struct in_addr
*);
150 extern void oid_copy_in6_addr(oid
[], const struct in6_addr
*);
151 extern void oid_copy_int(oid oid
[], int *val
);
152 extern void oid2string(oid oid
[], int len
, char *string
);
153 extern void oid_copy_str(oid oid
[], const char *string
, int len
);
155 DECLARE_HOOK(agentx_enabled
, (), ());
161 #endif /* _ZEBRA_SNMP_H */