1 /* 2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors 3 * 4 * Squid software is distributed under GPLv2+ license and includes 5 * contributions from numerous individuals and organizations. 6 * Please see the COPYING and CONTRIBUTORS files for details. 7 */ 8 9 #ifndef SQUID_SNMP_PDU_H 10 #define SQUID_SNMP_PDU_H 11 12 /* required for oid typedef */ 13 #include "asn1.h" 14 15 #if HAVE_NETINET_IN_H 16 #include <netinet/in.h> 17 #endif 18 19 /********************************************************************** 20 * 21 * Copyright 1997 by Carnegie Mellon University 22 * 23 * All Rights Reserved 24 * 25 * Permission to use, copy, modify, and distribute this software and its 26 * documentation for any purpose and without fee is hereby granted, 27 * provided that the above copyright notice appear in all copies and that 28 * both that copyright notice and this permission notice appear in 29 * supporting documentation, and that the name of CMU not be 30 * used in advertising or publicity pertaining to distribution of the 31 * software without specific, written prior permission. 32 * 33 * CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 34 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 35 * CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 36 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 37 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 38 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 39 * SOFTWARE. 40 * 41 * Author: Ryan Troll <ryan+@andrew.cmu.edu> 42 * 43 **********************************************************************/ 44 45 #ifdef __cplusplus 46 extern "C" { 47 #endif 48 49 /* An SNMP PDU */ 50 struct snmp_pdu { 51 int command; /* Type of this PDU */ 52 struct sockaddr_in address; /* Address of peer */ 53 54 int reqid; /* Integer32: Request id */ 55 int errstat; /* INTEGER: Error status */ 56 int errindex; /* INTEGER: Error index */ 57 58 /* SNMPv2 Bulk Request */ 59 int non_repeaters; /* INTEGER: */ 60 int max_repetitions; /* INTEGER: */ 61 62 struct variable_list *variables; /* Variable Bindings */ 63 64 /* Trap information */ 65 oid *enterprise; /* System OID */ 66 int enterprise_length; 67 struct sockaddr_in agent_addr; /* address of object generating trap */ 68 int trap_type; /* generic trap type */ 69 int specific_type; /* specific type */ 70 u_int time; /* Uptime */ 71 }; 72 73 struct snmp_pdu *snmp_pdu_create(int); 74 struct snmp_pdu *snmp_pdu_clone(struct snmp_pdu *); 75 struct snmp_pdu *snmp_pdu_fix(struct snmp_pdu *, int); 76 struct snmp_pdu *snmp_fix_pdu(struct snmp_pdu *, int); 77 void snmp_free_pdu(struct snmp_pdu *); 78 void snmp_pdu_free(struct snmp_pdu *); 79 80 u_char *snmp_pdu_encode(u_char *, int *, struct snmp_pdu *); 81 u_char *snmp_pdu_decode(u_char *, int *, struct snmp_pdu *); 82 83 /* Add a NULL Variable to a PDU */ 84 void snmp_add_null_var(struct snmp_pdu *, oid *, int); 85 86 /* RFC 1905: Protocol Operations for SNMPv2 87 * 88 * RFC 1157: A Simple Network Management Protocol (SNMP) 89 * 90 * PDU Types 91 */ 92 #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0) 93 #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1) 94 #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2) 95 #ifdef UNUSED_CODE 96 #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) 97 #define TRP_REQ_MSG (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) /*Obsolete */ 98 #endif 99 #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5) 100 #ifdef UNUSED_CODE 101 #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6) 102 #define SNMP_PDU_V2TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7) 103 #define SNMP_PDU_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x8) 104 #endif 105 #define MAX_BINDINGS 2147483647 /* PDU Defaults */ 106 #define SNMP_DEFAULT_ERRSTAT -1 107 #define SNMP_DEFAULT_ERRINDEX -1 108 #define SNMP_DEFAULT_ADDRESS 0 109 #define SNMP_DEFAULT_REQID 0 110 111 /* RFC 1907: Management Information Base for SNMPv2 112 * 113 * RFC 1157: A Simple Network Management Protocol (SNMP) 114 * 115 * Trap Types 116 */ 117 #if UNUSED_CODE 118 #define SNMP_TRAP_COLDSTART (0x0) 119 #define SNMP_TRAP_WARMSTART (0x1) 120 #define SNMP_TRAP_LINKDOWN (0x2) 121 #define SNMP_TRAP_LINKUP (0x3) 122 #define SNMP_TRAP_AUTHENTICATIONFAILURE (0x4) 123 #define SNMP_TRAP_EGPNEIGHBORLOSS (0x5) 124 #define SNMP_TRAP_ENTERPRISESPECIFIC (0x6) 125 #endif 126 127 #ifdef __cplusplus 128 } 129 #endif 130 131 #endif /* SQUID_SNMP_PDU_H */ 132 133