1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright (c) 1998 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27#pragma ident "%Z%%M% %I% %E% SMI" 28 29#include <string.h> 30#include <stdio.h> 31#include <sys/types.h> 32#include <limits.h> 33#include <stdlib.h> 34#include <netinet/in.h> 35#include <arpa/inet.h> 36 37#include "error.h" 38#include "snmp.h" 39#include "trap.h" 40#include "madman_trap.h" 41 42 43/***** LOCAL CONSTANTS *****/ 44 45 46/***** LOCAL VARIABLES *****/ 47 48static Subid applName_subids[] = { 1, 3, 6, 1, 2, 1, 27, 1, 1, 2, 0 }; 49static Oid applName_name = { applName_subids, 11 }; 50 51static Subid applOperStatus_subids[] = { 1, 3, 6, 1, 2, 1, 27, 1, 1, 6, 0 }; 52static Oid applOperStatus_name = { applOperStatus_subids, 11 }; 53 54static Subid alarmId_subids[] = { 1, 3, 6, 1, 4, 1, 42, 2, 8, 2, 3, 1, 0 }; 55static Oid alarmId_name = { alarmId_subids, 13 }; 56 57static Subid alarmSeverity_subids[] = { 1, 3, 6, 1, 4, 1, 42, 2, 8, 2, 3, 2, 0 }; 58static Oid alarmSeverity_name = { alarmSeverity_subids, 13 }; 59 60static Subid alarmDescr_subids[] = { 1, 3, 6, 1, 4, 1, 42, 2, 8, 2, 3, 3, 0 }; 61static Oid alarmDescr_name = { alarmDescr_subids, 13 }; 62 63 64/***********************************************************************/ 65 66void send_trap_appl_status_changed(int applIndex, char *applName, int applOperStatus) 67{ 68 SNMP_variable *list = NULL; 69 SNMP_value value; 70 71 72 /* applName */ 73 value.v_string.chars = (u_char *) applName; 74 if(applName == NULL) 75 value.v_string.len = 0; 76 else 77 /* LINTED */ 78 value.v_string.len = (int32_t)strlen(applName); 79 applName_name.subids[applName_name.len - 1] = applIndex; 80 list = snmp_typed_variable_append(list, &applName_name, 81 STRING, &value, error_label); 82 if(list == NULL) 83 { 84 error("send_trap_appl_status_changed(%d, %s, %d) failed: %s", 85 applIndex, applName, applOperStatus, 86 error_label); 87 return; 88 } 89 90 91 /* applOperStatus */ 92 value.v_integer = applOperStatus; 93 applOperStatus_name.subids[applOperStatus_name.len - 1] = applIndex; 94 list = snmp_typed_variable_append(list, &applOperStatus_name, 95 INTEGER, &value, error_label); 96 if(list == NULL) 97 { 98 error("send_trap_appl_status_changed(%d, %s, %d) failed: %s", 99 applIndex, applName, applOperStatus, 100 error_label); 101 return; 102 } 103 104 105 if(trap_send_to_all_destinators(NULL, 106 SNMP_TRAP_ENTERPRISESPECIFIC, TRAP_APPL_ALARM, 107 list, error_label)) 108 { 109 error("send_trap_appl_status_changed(%d, %s, %d) failed: %s", 110 applIndex, applName, applOperStatus, 111 error_label); 112 snmp_variable_list_free(list); 113 return; 114 } 115 snmp_variable_list_free(list); 116 117 118 return; 119} 120 121 122/***********************************************************************/ 123 124void send_trap_appl_alarm(int applIndex, char *applName, int alarmId, int alarmSeverity, char *alarmDescr) 125{ 126 SNMP_variable *list = NULL; 127 SNMP_value value; 128 129 130 /* applName */ 131 value.v_string.chars = (u_char *) applName; 132 if(applName == NULL) 133 value.v_string.len = 0; 134 else 135 /* LINTED */ 136 value.v_string.len = (int32_t)strlen(applName); 137 applName_name.subids[applName_name.len - 1] = applIndex; 138 list = snmp_typed_variable_append(list, &applName_name, 139 STRING, &value, error_label); 140 if(list == NULL) 141 { 142 error("send_trap_appl_alarm(%d, %s, %d, %d, %s) failed: %s", 143 applIndex, applName, alarmId, alarmSeverity, alarmDescr, 144 error_label); 145 return; 146 } 147 148 149 /* alarmId */ 150 value.v_integer = alarmId; 151 list = snmp_typed_variable_append(list, &alarmId_name, 152 INTEGER, &value, error_label); 153 if(list == NULL) 154 { 155 error("send_trap_appl_alarm(%d, %s, %d, %d, %s) failed: %s", 156 applIndex, applName, alarmId, alarmSeverity, alarmDescr, 157 error_label); 158 return; 159 } 160 161 162 /* alarmSeverity */ 163 value.v_integer = alarmSeverity; 164 list = snmp_typed_variable_append(list, &alarmSeverity_name, 165 INTEGER, &value, error_label); 166 if(list == NULL) 167 { 168 error("send_trap_appl_alarm(%d, %s, %d, %d, %s) failed: %s", 169 applIndex, applName, alarmId, alarmSeverity, alarmDescr, 170 error_label); 171 return; 172 } 173 174 175 /* alarmDescr */ 176 value.v_string.chars = (u_char *) alarmDescr; 177 if(alarmDescr == NULL) 178 value.v_string.len = 0; 179 else 180 /* LINTED */ 181 value.v_string.len = (int32_t)strlen(alarmDescr); 182 list = snmp_typed_variable_append(list, &alarmDescr_name, 183 STRING, &value, error_label); 184 if(list == NULL) 185 { 186 error("send_trap_appl_alarm(%d, %s, %d, %d, %s) failed: %s", 187 applIndex, applName, alarmId, alarmSeverity, alarmDescr, 188 error_label); 189 return; 190 } 191 192 193 if(trap_send_to_all_destinators(NULL, 194 SNMP_TRAP_ENTERPRISESPECIFIC, TRAP_APPL_ALARM, 195 list, error_label)) 196 { 197 error("send_trap_appl_alarm(%d, %s, %d, %d, %s) failed: %s", 198 applIndex, applName, alarmId, alarmSeverity, alarmDescr, 199 error_label); 200 snmp_variable_list_free(list); 201 return; 202 } 203 snmp_variable_list_free(list); 204 205 206 return; 207} 208 209 210/***********************************************************************/ 211 212char *alarmSeverity_string(int severity) 213{ 214 static char buffer[20] = ""; 215 216 217 switch(severity) 218 { 219 case SEVERITY_LOW: 220 sprintf(buffer, "low"); 221 break; 222 case SEVERITY_MEDIUM: 223 sprintf(buffer, "medium"); 224 break; 225 case SEVERITY_HIGH: 226 sprintf(buffer, "high"); 227 break; 228 default: 229 sprintf(buffer, "unknown(%d)", severity); 230 break; 231 } 232 233 return buffer; 234} 235 236 237