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 * Copyright 1998 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #pragma ident "%Z%%M% %I% %E% SMI" 27 28 #include <sys/types.h> 29 #include "impl.h" 30 #include "pdu.h" 31 32 #ifndef _ACCESS_H_ 33 #define _ACCESS_H_ 34 35 #define READ_ONLY 1 36 #define READ_WRITE 2 37 38 typedef struct _Community { 39 struct _Community *next_community; 40 char *name; 41 int type; 42 } Community; 43 44 typedef struct _AccessPolicy { 45 Community *first_community; 46 int access_type; /* one access type for all the communities */ 47 int count; 48 } AccessPolicy; 49 50 typedef struct _AccessServer { 51 struct _AccessServer *next_acc_server; 52 AccessPolicy *first_acc_policy; 53 int attached; 54 } AccessServer; 55 56 typedef struct _Manager { 57 struct _Manager *next_manager; 58 char *name; 59 IPAddress ip_address; 60 AccessServer *first_acc_server; 61 } Manager; 62 63 /**************************************************** 64 65 -------------- 66 | Manager |--> 67 | xxxxxxx | 68 | :name | 69 | :ip_address | 70 -------------- 71 | 72 V 73 ---------- -------------- ------------- 74 | Manager |-->| AccessServer |-->| AccessServer|--> 75 ---------- -------------- ------------- 76 | 0 77 0 (link to shared object) 78 V V 79 ------------- --------- --------- 80 |AccessPolicy|-->|Community|-->|Community|--> 81 |xxxxxxxxxxxx| |xxxxxxxxx| --------- 82 |:access_type| |:name | 83 ------------- --------- 84 1 85 ******************************************************/ 86 typedef struct _SubMember { 87 Manager *first_manager; 88 char *community_string; 89 int count; 90 } SubMember; 91 92 typedef struct _SubGroup { 93 struct _SubGroup *next_sub_group; 94 SubMember *first_sub_member; 95 } SubGroup; 96 97 typedef struct _TrapSlot { 98 struct _TrapSlot *next_trap_slot; 99 SubGroup *first_sub_group; 100 int num; 101 } TrapSlot; 102 103 typedef struct _EFilter { 104 struct _EFilter *next_efilter; 105 TrapSlot *first_trap_slot; 106 Oid *enterprise; 107 char *name; 108 int type; /* generic or specific */ 109 } EFilter; 110 111 /**************************************************** 112 113 -------------- 114 | EFilter |--> 115 | xxxxxxx | 116 | :enterprise | 117 -------------- 118 | next_efilter 119 V 120 ---------- first_trap_slot ----------- next_trap_slot --------- 121 |EFilter |--------------->| TrapSlot |---------------->| TrapSlot|--> 122 ---------- | xxxxxxxxx | --------- 123 | | : num | 124 V ----------- 125 | first_sub_group 126 V 127 ------------------ ------------ 128 | SubGroup |next_sub_group | SubGroup | 129 | xxxxxxxxxxxxxxxx|--------------> ---------- 130 ------------------ 131 0 first_sub_member 132 0 133 V 134 ----------------- 135 | SubMember |first_manager --------- 136 | xxxxxxxxxxxxxxx |------------>| Manager | 137 |:community_string| --------- 138 ----------------- 139 140 ******************************************************/ 141 typedef struct _NameOidPair { 142 struct _NameOidPair *next; 143 char *name; 144 Oid *oid; 145 } NameOidPair; 146 147 /* routines for trap */ 148 extern EFilter* efilter_add(char* name, char *error_label); 149 extern TrapSlot* trap_slot_add(int num,EFilter *efilter,char *error_label); 150 extern void sub_group_add_tail(TrapSlot *slot,SubGroup *group); 151 extern void sub_member_free(SubMember *mem); 152 extern void sub_group_list_free(SubGroup *group); 153 extern void trap_slot_list_free(TrapSlot *slot); 154 extern void mem_filter_join(int low,int high,SubMember *mem,EFilter *filter); 155 extern void trace_filter(); 156 157 extern void init_manager_set(); 158 extern Manager* get_curr_manager_set(); 159 extern Manager* manager_add(char *name, char *error_label); 160 extern Manager* is_valid_manager(Address *address, Manager **mngr); 161 extern void delete_manager_list(); 162 extern void manager_list_free(Manager *mngr); 163 extern void trace_managers(); 164 165 extern int community_add(char *name, int type, char *error_label); 166 extern int is_valid_community(char *name, int type, Manager *mngr); 167 extern void delete_community_list(); 168 extern void trace_communities(Community *c); 169 extern void trace_access_server(AccessServer *as); 170 extern void trace_access_policy(AccessPolicy *ap); 171 172 extern void community_attach(AccessPolicy *ap, Community *comm); 173 extern void access_server_add_tail(Manager* mngr, AccessServer *acc_server); 174 extern void access_server_free(AccessServer *as); 175 extern void access_policy_list_free(AccessPolicy *ap); 176 extern int get_access_type(Manager *mngr,char *name); 177 178 /* name oid pair loading */ 179 extern void trace_name_oid_pair(); 180 extern Oid *enterprise_name_to_oid(char *name); 181 extern void load_enterprise_oid(char* filename); 182 183 extern void trap_filter_action(Oid *oid,int generic,int specific, 184 uint32_t time_stamp,SNMP_variable *variables); 185 186 #endif 187