xref: /onnv-gate/usr/src/cmd/agents/snmp/agent/access.h (revision 0:68f95e015346)
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