/* * Generic */ #define OID_MAX 128 struct oid { uint32_t subid[OID_MAX]; size_t n_subid; int include; }; struct searchrange { struct oid start; struct oid end; }; enum type { TYPE_INTEGER = 2, TYPE_OCTETSTRING = 4, TYPE_NULL = 5, TYPE_OBJECTIDENTIFIER = 6, TYPE_IPADDRESS = 64, TYPE_COUNTER32 = 65, TYPE_GAUGE32 = 66, TYPE_TIMETICKS = 67, TYPE_OPAQUE = 68, TYPE_COUNTER64 = 70, TYPE_NOSUCHOBJECT = 128, TYPE_NOSUCHINSTANCE = 129, TYPE_ENDOFMIBVIEW = 130, /* Don't expect a specific value: mod 1000 */ TYPE_INTEGER_UNKNOWN = 1002, TYPE_OCTETSTRING_UNKNOWN = 1004, TYPE_OBJECTIDENTIFIER_UNKNOWN = 1006, TYPE_IPADDRESS_UNKNOWN = 1064 }; enum error { NOERROR = 0, NOAGENTXERROR = 0, TOOBIG = 1, NOSUCHNAME = 2, BADVALUE = 3, READONLY = 4, GENERR = 5, NOACCESS = 6, WRONGTYPE = 7, WRONGLENGTH = 8, WRONGENCODING = 9, WRONGVALUE = 10, NOCREATION = 11, INCONSISTENTVALUE = 12, RESOURCEUNAVAILABLE = 13, COMMITFAILED = 14, UNDOFAILED = 15, AUTHORIZATIONERROR = 16, NOTWRITABLE = 17, INCONSISTENTNAME = 18, OPENFAILED = 256, NOTOPEN = 257, INDEXWRONGTYPE = 258, INDEXALREADYALLOCATED = 259, INDEXNONEAVAILABLE = 260, INDEXNOTALLOCATED = 261, UNSUPPORTEDCONTEXT = 262, DUPLICATEREGISTRATION = 263, UNKNOWNREGISTRATION = 264, UNKNOWNAGENTCAPS = 265, PARSEERROR = 266, REQUESTDENIED = 267, PROCESSINGERROR = 268 }; enum close_reason { REASONOTHER = 1, REASONPARSEERROR = 2, REASONPROTOCOLERROR = 3, REASONTIMEOUTS = 4, REASONSHUTDOWN = 5, REASONBYMANAGER = 6 }; struct varbind { int typeunknown; int nameunknown; int dataunknown; enum type type; struct oid name; union data { int32_t int32; uint32_t uint32; uint64_t uint64; struct oid oid; struct octetstring { char *string; size_t len; } octetstring; } data; }; enum snmp_request { REQUEST_GET = 0, REQUEST_GETNEXT = 1, REQUEST_RESPONSE = 2, REQUEST_SET = 3, REQUEST_TRAP = 4, REQUEST_GETBULK = 5, REQUEST_INFORM = 6, REQUEST_TRAPV2 = 7, REQUEST_REPORT = 8 }; extern int verbose; extern char *axsocket; extern char *hostname; extern char *servname; extern char *community; int oid_cmp(struct oid *, struct oid *); char *oid_print(struct oid *, char *, size_t); #define OID_STRUCT(...) (struct oid){ \ .subid = { __VA_ARGS__ }, \ .n_subid = (sizeof((uint32_t []) { __VA_ARGS__ }) / sizeof(uint32_t)) \ } #define OID_ARG(...) (uint32_t []) { __VA_ARGS__ }, \ (sizeof((uint32_t []) { __VA_ARGS__ }) / sizeof(uint32_t)) /* * AgentX */ #define MIB_OPENBSD_REGRESS 1, 3, 6, 1, 4, 1, 30155, 42 /* Subagent names */ #define MIB_SUBAGENTS MIB_OPENBSD_REGRESS, 1 #define MIB_SUBAGENT_OPEN MIB_SUBAGENTS, 1 #define MIB_SUBAGENT_PING MIB_SUBAGENTS, 2 #define MIB_SUBAGENT_CLOSE MIB_SUBAGENTS, 3 #define MIB_SUBAGENT_REGISTER MIB_SUBAGENTS, 4 #define MIB_SUBAGENT_UNREGISTER MIB_SUBAGENTS, 4 #define MIB_SUBAGENT_BACKEND MIB_SUBAGENTS, 5 #define MIB_SUBAGENT_SNMP MIB_SUBAGENTS, 6 #define MIB_SUBAGENT_TRANSPORT MIB_SUBAGENTS, 7 /* Region used for registration testing */ #define MIB_REGISTER MIB_OPENBSD_REGRESS, 2 #define MIB_UNREGISTER MIB_OPENBSD_REGRESS, 3 #define MIB_BACKEND MIB_OPENBSD_REGRESS, 4 #define MIB_SNMP MIB_OPENBSD_REGRESS, 5 #define MIB_TRANSPORT MIB_OPENBSD_REGRESS, 6 #define SYSORTABLE 1, 3, 6, 1, 2, 1, 1, 9 int agentx_connect(const char *); uint32_t agentx_open(int, int, uint8_t, uint32_t[], size_t, const char *); void agentx_close(int, uint32_t, enum close_reason); void agentx_register(int, uint32_t, uint8_t, uint8_t, uint8_t, uint8_t, uint32_t[], size_t, uint32_t); void agentx_response(int, void *, enum error, uint16_t, struct varbind *, size_t); void agentx_get_handle(const char *, const void *, size_t, uint8_t, uint32_t, struct varbind *, size_t); void agentx_getnext_handle(const char *, const void *, size_t, uint8_t, uint32_t, struct searchrange *, struct varbind *, size_t); size_t agentx_getbulk_handle(const char *, const void *, size_t, uint8_t, int32_t, struct varbind *, size_t, struct varbind *); size_t agentx_read(int, void *, size_t, int); void agentx_timeout(int, int); /* Tests */ void agentx_open_nnbo(void); void agentx_open_nbo(void); void agentx_open_invalidversion(void); void agentx_open_ignore_sessionid(void); void agentx_open_invalid_oid(void); void agentx_open_descr_too_long(void); void agentx_open_descr_invalid(void); void agentx_open_context(void); void agentx_open_instance_registration(void); void agentx_open_new_index(void); void agentx_open_any_index(void); void agentx_ping_notopen(void); void agentx_ping_invalid_sessionid(void); void agentx_ping_default(void); void agentx_ping_context(void); void agentx_ping_invalid_version(void); void agentx_ping_instance_registration(void); void agentx_ping_new_index(void); void agentx_ping_any_index(void); void agentx_ping_nbo_nnbo(void); void agentx_ping_nnbo_nbo(void); void agentx_ping_invalid_version_close(void); void agentx_close_notopen(void); void agentx_close_reasonother(void); void agentx_close_reasonparseerror(void); void agentx_close_reasonprotocolerror(void); void agentx_close_reasontimouts(void); void agentx_close_reasonshutdown(void); void agentx_close_reasonbymanager(void); void agentx_close_reasoninvalid(void); void agentx_close_single(void); void agentx_close_notowned(void); void agentx_close_invalid_sessionid(void); void agentx_close_context(void); void agentx_close_invalid_version(void); void agentx_close_instance_registration(void); void agentx_close_new_index(void); void agentx_close_any_index(void); void agentx_close_nnbo_nbo(void); void agentx_register_notopen(void); void agentx_register_invalid_sessionid(void); void agentx_register_default(void); void agentx_register_context(void); void agentx_register_invalid_version(void); void agentx_register_instance_registration(void); void agentx_register_new_index(void); void agentx_register_any_index(void); void agentx_register_duplicate_self(void); void agentx_register_duplicate_twocon(void); void agentx_register_duplicate_priority(void); void agentx_register_range(void); void agentx_register_range_invalidupperbound(void); void agentx_register_range_single(void); void agentx_register_range_overlap_single(void); void agentx_register_single_overlap_range(void); void agentx_register_range_overlap_range(void); void agentx_register_below(void); void agentx_register_above(void); void agentx_register_restricted(void); void agentx_unregister_notopen(void); void agentx_unregister_invalid_sessionid(void); void agentx_unregister_notregistered(void); void agentx_unregister_single(void); void agentx_unregister_single_notowned(void); void agentx_unregister_range(void); void agentx_unregister_range_single(void); void agentx_unregister_range_subset(void); void agentx_unregister_range_extra(void); void agentx_unregister_range_priority(void); void agentx_unregister_range_notowned(void); /* * SNMP */ socklen_t snmp_resolve(int, const char *, const char *, struct sockaddr *); int snmp_connect(int, struct sockaddr *, socklen_t); int32_t snmpv2_get(int, const char *, int32_t, struct varbind *, size_t); int32_t snmpv2_getnext(int, const char *, int32_t, struct varbind *, size_t); int32_t snmpv2_getbulk(int, const char *, int32_t, int32_t, int32_t, struct varbind *, size_t); struct ber_element *snmpv2_build(const char *, enum snmp_request, int32_t, int32_t, int32_t, struct varbind *, size_t); void snmpv2_response_validate(int, int, const char *, int32_t, int32_t, int32_t, struct varbind *, size_t); void snmp_timeout(int, int); void smi_debug_elements(struct ber_element *); void backend_get_integer(void); void backend_get_octetstring(void); void backend_get_objectidentifier(void); void backend_get_ipaddress(void); void backend_get_counter32(void); void backend_get_gauge32(void); void backend_get_timeticks(void); void backend_get_opaque(void); void backend_get_counter64(void); void backend_get_nosuchobject(void); void backend_get_nosuchinstance(void); void backend_get_endofmibview(void); void backend_get_two_single_backend(void); void backend_get_two_double_backend(void); void backend_get_wrongorder(void); void backend_get_toofew(void); void backend_get_toomany(void); void backend_get_instance(void); void backend_get_instance_below(void); void backend_get_timeout_default(void); void backend_get_timeout_session_lower(void); void backend_get_timeout_session_higher(void); void backend_get_timeout_region_lower(void); void backend_get_timeout_region_higher(void); void backend_get_priority_lower(void); void backend_get_priority_higher(void); void backend_get_priority_below_lower(void); void backend_get_priority_below_higher(void); void backend_get_close(void); void backend_get_close_overlap(void); void backend_get_disappear(void); void backend_get_disappear_overlap(void); void backend_get_disappear_doublesession(void); void backend_get_octetstring_max(void); void backend_get_octetstring_too_long(void); void backend_get_ipaddress_too_short(void); void backend_get_ipaddress_too_long(void); void backend_get_opaque_non_ber(void); void backend_get_opaque_double_value(void); void backend_getnext_selfbound(void); void backend_getnext_lowerbound(void); void backend_getnext_lowerbound_self(void); void backend_getnext_lowerbound_highprio(void); void backend_getnext_lowerbound_lowprio(void); void backend_getnext_sibling(void); void backend_getnext_child_gap(void); void backend_getnext_nosuchobject(void); void backend_getnext_nosuchinstance(void); void backend_getnext_endofmibview(void); void backend_getnext_inclusive(void); void backend_getnext_jumpnext(void); void backend_getnext_jumpnext_endofmibview(void); void backend_getnext_jump_up(void); void backend_getnext_jump_up(void); void backend_getnext_two_single_backend(void); void backend_getnext_two_double_backend(void); void backend_getnext_instance_below(void); void backend_getnext_instance(void); void backend_getnext_instance_exact(void); void backend_getnext_instance_ignore(void); void backend_getnext_instance_ignore(void); void backend_getnext_backwards(void); void backend_getnext_stale(void); void backend_getnext_inclusive_backwards(void); void backend_getnext_toofew(void); void backend_getnext_toomany(void); void backend_getnext_response_equal_end(void); void backend_getnext_instance_below_region_before_instance(void); void backend_getnext_instance_below_region_on_instance(void); void backend_getnext_instance_below_region_below_instance(void); void backend_getbulk_nonrep_zero_maxrep_one(void); void backend_getbulk_nonrep_zero_maxrep_two(void); void backend_getbulk_nonrep_one_maxrep_one(void); void backend_getbulk_nonrep_one_maxrep_two(void); void backend_getbulk_nonrep_two_maxrep_two(void); void backend_getbulk_nonrep_negative(void); void backend_getbulk_endofmibview(void); void backend_getbulk_endofmibview_second_rep(void); void backend_getbulk_endofmibview_two_varbinds(void); void backend_error_get_toobig(void); void backend_error_get_nosuchname(void); void backend_error_get_badvalue(void); void backend_error_get_readonly(void); void backend_error_get_generr(void); void backend_error_get_wrongtype(void); void backend_error_get_wronglength(void); void backend_error_get_wrongencoding(void); void backend_error_get_wrongvalue(void); void backend_error_get_nocreation(void); void backend_error_get_inconsistentvalue(void); void backend_error_get_commitfailed(void); void backend_error_get_undofailed(void); void backend_error_get_authorizationerror(void); void backend_error_get_notwritable(void); void backend_error_get_inconsistentname(void); void backend_error_get_openfailed(void); void backend_error_get_notopen(void); void backend_error_get_indexwrongtype(void); void backend_error_get_indexalreadyallocated(void); void backend_error_get_indexnonavailable(void); void backend_error_get_indexnotallocated(void); void backend_error_get_duplicateregistration(void); void backend_error_get_requestdenied(void); void backend_error_get_processingerror(void); void backend_error_get_nonstandard(void); void backend_error_getnext_toobig(void); void backend_error_getnext_nosuchname(void); void backend_error_getnext_badvalue(void); void backend_error_getnext_readonly(void); void backend_error_getnext_generr(void); void backend_error_getnext_noaccess(void); void backend_error_getnext_wrongtype(void); void backend_error_getnext_wronglength(void); void backend_error_getnext_wrongencoding(void); void backend_error_getnext_wrongvalue(void); void backend_error_getnext_nocreation(void); void backend_error_getnext_inconsistentvalue(void); void backend_error_getnext_resourceunavailable(void); void backend_error_getnext_commitfailed(void); void backend_error_getnext_undofailed(void); void backend_error_getnext_notwritable(void); void backend_error_getnext_inconsistentname(void); void backend_error_getnext_openfailed(void); void backend_error_getnext_notopen(void); void backend_error_getnext_indexwrongtype(void); void backend_error_getnext_indexalreadyallocated(void); void backend_error_getnext_indexnonavailable(void); void backend_error_getnext_indexnotallocated(void); void backend_error_getnext_unsupportedcontext(void); void backend_error_getnext_duplicateregistration(void); void backend_error_getnext_unknownregistration(void); void backend_error_getnext_parseerror(void); void backend_error_getnext_requestdenied(void); void backend_error_getnext_processingerror(void); void backend_error_getnext_nonstandard(void); void backend_error_getbulk_firstrepetition(void); void backend_error_getbulk_secondrepetition(void); void snmp_v3_usm_noauthpriv(void); void transport_tcp_get(void); void transport_tcp_disconnect(void); void transport_tcp_double_get_disconnect(void);