File: [local] / src / usr.sbin / snmpd / application.h (download)
Revision 1.13, Sun Nov 12 16:07:34 2023 UTC (6 months, 3 weeks ago) by martijn
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, HEAD Changes since 1.12: +1 -5 lines
Now that the last consumer of mps.c is gone, remove it and its
application_legacy.c companion.
OK tb@
|
/* $OpenBSD: application.h,v 1.13 2023/11/12 16:07:34 martijn Exp $ */
/*
* Copyright (c) 2021 Martijn van Duren <martijn@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <sys/tree.h>
#include <ber.h>
#include <stdint.h>
#define APPL_OIDMAX 128 /* RFC 2578 Section 3.5 */
#define APPL_CONTEXTNAME_MAX 32 /* RFC 3415 vacmContextName */
/* Combination of RFC 3416 error-status and RFC 2741 res.error */
enum appl_error {
APPL_ERROR_NOERROR = 0,
APPL_ERROR_TOOBIG = 1,
APPL_ERROR_NOSUCHNAME = 2,
APPL_ERROR_BADVALUE = 3,
APPL_ERROR_READONLY = 4,
APPL_ERROR_GENERR = 5,
APPL_ERROR_NOACCESS = 6,
APPL_ERROR_WRONGTYPE = 7,
APPL_ERROR_WRONGLENGTH = 8,
APPL_ERROR_WRONGENCODING = 9,
APPL_ERROR_WRONGVALUE = 10,
APPL_ERROR_NOCREATION = 11,
APPL_ERROR_INCONSISTENTVALUE = 12,
APPL_ERROR_RESOURCEUNAVAILABLE = 13,
APPL_ERROR_COMMITFAILED = 14,
APPL_ERROR_UNDOFAILED = 15,
APPL_ERROR_AUTHORIZATIONERROR = 16,
APPL_ERROR_NOTWRITABLE = 17,
APPL_ERROR_INCONSISTENTNAME = 18,
APPL_ERROR_OPENFAILED = 256,
APPL_ERROR_NOTOPEN = 257,
APPL_ERROR_INDEXWRONGTYPE = 258,
APPL_ERROR_INDEXALREADYALLOCATED= 259,
APPL_ERROR_INDEXNONEAVAILABLE = 260,
APPL_ERROR_INDEXNOTALLOCATED = 261,
APPL_ERROR_UNSUPPORTEDCONTEXT = 262,
APPL_ERROR_DUPLICATEREGISTRATION= 263,
APPL_ERROR_UNKNOWNREGISTRATION = 264,
APPL_ERROR_UNKNOWNAGENTCAPS = 265,
APPL_ERROR_PARSEERROR = 266,
APPL_ERROR_REQUESTDENIED = 267,
APPL_ERROR_PROCESSINGERROR = 268
};
enum appl_exception {
APPL_EXC_NOSUCHOBJECT = 0,
APPL_EXC_NOSUCHINSTANCE = 1,
APPL_EXC_ENDOFMIBVIEW = 2
};
enum appl_close_reason {
APPL_CLOSE_REASONOTHER = 1,
APPL_CLOSE_REASONPARSEERROR = 2,
APPL_CLOSE_REASONPROTOCOLERROR = 3,
APPL_CLOSE_REASONTIMEOUTS = 4,
APPL_CLOSE_REASONSHUTDOWN = 5,
APPL_CLOSE_REASONBYMANAGER = 6
};
struct appl_varbind {
int8_t av_include; /* RFC 2741 section 5.1 */
struct ber_oid av_oid;
struct ber_oid av_oid_end;
struct ber_element *av_value;
struct appl_varbind *av_next;
};
struct snmp_message;
enum snmp_version;
struct appl_backend;
struct appl_context;
struct appl_backend_functions {
void (*ab_close)(struct appl_backend *, enum appl_close_reason);
void (*ab_get)(struct appl_backend *, int32_t, int32_t, const char *,
struct appl_varbind *);
void (*ab_getnext)(struct appl_backend *, int32_t, int32_t, const char *,
struct appl_varbind *);
/*
* RFC 3416 section 3: non-repeaters/max-repetitions = 0..max-bindings
* max-bindings = (2^31)-1
* RFC 2741 section 6.2.7: non-repeaters/max-repetitions = 2 bytes
* Go for the lowest common denominator.
*/
void (*ab_getbulk)(struct appl_backend *, int32_t, int32_t, int16_t,
int16_t, const char *, struct appl_varbind *);
};
struct appl_backend {
char *ab_name;
void *ab_cookie;
uint8_t ab_retries;
int ab_range; /* Supports searchrange */
struct appl_backend_functions *ab_fn;
/*
* Only store downstream requests: they reference upstream and when
* downstream requests are done the upstream request is finalized.
*/
RB_HEAD(appl_requests, appl_request_downstream) ab_requests;
};
void appl(void);
void appl_init(void);
void appl_shutdown(void);
struct appl_context *appl_context(const char *, int);
enum appl_error appl_addagentcaps(const char *, struct ber_oid *, const char *,
struct appl_backend *);
enum appl_error appl_removeagentcaps(const char *, struct ber_oid *,
struct appl_backend *);
struct ber_element *appl_sysorlastchange(struct ber_oid *);
struct ber_element *appl_sysortable(struct ber_oid *);
struct ber_element *appl_sysortable_getnext(int8_t, struct ber_oid *);
struct ber_element *appl_targetmib(struct ber_oid *);
enum appl_error appl_register(const char *, uint32_t, uint8_t, struct ber_oid *,
int, int, uint8_t, uint32_t, struct appl_backend *);
enum appl_error appl_unregister(const char *, uint8_t, struct ber_oid *,
uint8_t, uint32_t, struct appl_backend *);
void appl_close(struct appl_backend *);
void appl_processpdu(struct snmp_message *, const char *,
enum snmp_version , struct ber_element *);
void appl_response(struct appl_backend *, int32_t, enum appl_error, int16_t,
struct appl_varbind *);
void appl_report(struct snmp_message *, int32_t, struct ber_oid *);
struct ber_element *appl_exception(enum appl_exception);
/* application_agentx.c */
void appl_agentx(void);
void appl_agentx_init(void);
void appl_agentx_shutdown(void);
void appl_agentx_backend(int);
/* application_blocklist.c */
void appl_blocklist_init(void);
void appl_blocklist_shutdown(void);
/* application_internal.c */
void appl_internal_init(void);
void appl_internal_shutdown(void);
const char *appl_internal_object_int(struct ber_oid *, int32_t);
const char *appl_internal_object_string(struct ber_oid *, char *);