OSDN Git Service

Update INSTALL.ja.utf-8 for new release.
[ultramonkey-l7/ultramonkey-l7-v2.git] / src / snmpbridge.c
1
2 #include <map>
3 #include "l7vs_snmpbridge.h"
4 #include "logger_wrapper.h"
5 #include "parameter_wrapper.h"
6 #include "l7ag_parameter.h"
7
8 #define NIC_DEFAULT     "eth0"
9 #define ADDR_DEFAULT    "127.0.0.1"
10 #define PORT_DEFAULT    60162
11 #define INTERVAL_DEFAULT        1000
12
13 #define BRIDGE_STUB
14
15 static  std::map<LOG_CATEGORY_TAG,std::string> snmp_loglevel_map;
16 static  std::map<std::string,LOG_LEVEL_TAG> levelstring_map;
17
18 struct  l7ag_parameter  snmpparam;
19
20 //内部関数の定義
21 #ifndef BRIDGE_STUB
22 static  int     snmpbridge_send_message();
23 #endif
24 static  void    load_config();
25 static  void    load_loglevel();
26
27 /*!
28  * 初期化処理
29  * @return      int
30  */
31 int     l7vs_snmpbridge_initialize()
32 {
33         int     retval = 0;
34
35         //loglevelのテーブル作成
36         snmp_loglevel_map.clear();
37         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_START_STOP, "snmpagent_start_stop" ) );
38         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_MANAGER_RECEIVE, "snmpagent_manager_receive" ) );
39         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_MANAGER_SEND, "snmpagent_manager_send" ) );
40         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_L7VSD_RECEIVE, "snmpagent_l7vsd_receive" ) );
41         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_L7VSD_SEND, "snmpagent_l7vsd_send" ) );
42         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_LOGGER, "snmpagent_logger" ) );
43         snmp_loglevel_map.insert( std::pair<LOG_CATEGORY_TAG,std::string>( LOG_CAT_SNMPAGENT_PARAMETER, "snmpagent_parameter" ) );
44
45         levelstring_map.clear();
46         levelstring_map.insert( std::pair<std::string,LOG_LEVEL_TAG>("debug",LOG_LV_DEBUG) );
47         levelstring_map.insert( std::pair<std::string,LOG_LEVEL_TAG>("info",LOG_LV_INFO) );
48         levelstring_map.insert( std::pair<std::string,LOG_LEVEL_TAG>("warn",LOG_LV_WARN) );
49         levelstring_map.insert( std::pair<std::string,LOG_LEVEL_TAG>("error",LOG_LV_ERROR) );
50         levelstring_map.insert( std::pair<std::string,LOG_LEVEL_TAG>("fatal",LOG_LV_FATAL) );
51
52         load_config();
53
54 #ifndef BRIDGE_STUB
55         //ListenSocket作成
56
57         //待ち受け開始
58
59         //iom払い出し
60
61         //iom設定
62
63         //iom登録
64 #endif
65         return retval;
66 }
67
68 /*!
69  * 終了処理
70  * @param[in]
71  * @return
72  */
73 void    l7vs_snmpbridge_finalize()
74 {
75         //AgentとのTCP接続をcloseする
76
77         //ListenSocketをcloseする
78
79         //iom返却
80
81 }
82
83 /*!
84  * TRAP Request send
85  * @param[in]   TRAPID_TAG      Trap ID
86  * @param[in]   *message        Trap message
87  * @return      int             
88  */
89 int     l7vs_snmpbridge_send_trap( TRAPID_TAG trapid, char* message )
90 {
91         int     retval = 0;
92
93 #ifndef BRIDGE_STUB
94         //送信メッセージ作成
95
96
97         //iomに送信イベント登録
98         retval = snmpbridge_send_message();
99 #endif
100
101         return retval;
102 }
103
104 /*!
105  * パラメータファイル再読込み指示
106  */
107 void    l7vs_snmpbridge_reload_config()
108 {
109 #ifndef BRIDGE_STUB
110         //送信メッセージ作成
111
112         //iomに送信イベント登録
113         retval = snmpbridge_send_message();
114 #endif
115         
116         load_config();
117 }
118
119 /*!
120  * ログレベル設定指示
121  */
122 int     l7vs_snmpbridge_change_loglevel( LOG_CATEGORY_TAG snmp_log_category, LOG_LEVEL_TAG loglevel )
123 {
124         int     retval = 0;
125
126         if( snmpparam.loglevel.end() != snmpparam.loglevel.find( snmp_log_category ) ){
127 #ifndef BRIDGE_STUB
128                 //送信メッセージ作成
129
130                 //iomに送信イベント登録
131                 retval = snmpbridge_send_message();
132                 if( 0 == retval ){
133 #endif
134                         snmpparam.loglevel.find( snmp_log_category )->second = loglevel;
135 #ifndef BRIDGE_STUB
136                 }
137 #endif
138         }else{
139                 retval = -1;
140         }
141         return retval;
142 }
143
144 /*!
145  * ログレベル設定指示(カテゴリ全指定)
146  */
147 int     l7vs_snmpbridge_change_loglevel_allcategory( LOG_LEVEL_TAG loglevel )
148 {
149         int     retval = 0;
150
151 #ifndef BRIDGE_STUB
152                 //送信メッセージ作成
153
154                 //iomに送信イベント登録
155                 retval = snmpbridge_send_message();
156                 if( 0 == retval ){
157 #endif
158                         for( std::map<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>::iterator it = snmpparam.loglevel.begin(); it != snmpparam.loglevel.end(); ++it ){
159                                 it->second = loglevel;
160                         }
161 #ifndef BRIDGE_STUB
162                 }
163 #endif
164         
165         return retval;
166 }
167
168 /*!
169  * MIB収集結果送信
170  */
171 int     l7vs_snmpbridge_send_mibcollection()
172 {
173         int     retval = 0;
174         
175 #ifndef BRIDGE_STUB
176         //送信メッセージ作成
177
178         //iomに送信イベント登録
179         retval = snmpbridge_send_message();
180 #endif
181
182         return retval;
183 }
184
185 /*!
186  * 接続状態取得
187  */
188 int     l7vs_snmpbridge_get_connectionstate()
189 {
190         int     retval = 0;
191         
192 #ifdef BRIDGE_STUB
193         retval  = snmpparam.status;
194 #else
195 #endif
196         return retval;
197 }
198
199 /*!
200  * ログレベル取得
201  */
202 LOG_LEVEL_TAG   l7vs_snmpbridge_get_loglevel( LOG_CATEGORY_TAG snmp_log_category )
203 {
204         LOG_LEVEL_TAG   level = LOG_LV_NONE;
205         if( snmpparam.loglevel.end() != snmpparam.loglevel.find( snmp_log_category ) ){
206                 level = snmpparam.loglevel.find( snmp_log_category )->second;
207         }
208         return  level;
209 }
210
211 /*!
212  * コールバック
213  */
214 int     l7vs_snmpbridge_callback( l7vs_iomux* iom )
215 {
216         
217         return 0;
218 }
219
220 /*!
221  *
222  */
223 #ifndef BRIDGE_STUB
224 static  int     snmpbridge_send_message()
225 {
226
227         return 0;
228 }
229 #endif
230
231 /*!
232  *
233  */
234 static  void    load_config()
235 {
236         int     retval = 0;
237         //NIC
238         if( parameter_is_char_exist( PARAM_COMP_SNMPAGENT, "nic" ) ){
239                 snmpparam.nic = parameter_get_char_value( PARAM_COMP_SNMPAGENT, "nic" );
240         }else{
241                 snmpparam.nic = NIC_DEFAULT;
242         }
243         //EndPoint
244         if( parameter_is_char_exist( PARAM_COMP_SNMPAGENT, "ip_addr" ) ){
245                 snmpparam.address = parameter_get_char_value( PARAM_COMP_SNMPAGENT, "ip_addr" );
246         }else{
247                 snmpparam.address = ADDR_DEFAULT;
248         }
249         if( parameter_is_int_exist( PARAM_COMP_SNMPAGENT, "port" ) ){
250                 snmpparam.portno = parameter_get_int_value( PARAM_COMP_SNMPAGENT, "port" );
251         }else{
252                 snmpparam.portno = PORT_DEFAULT;
253         }
254
255         //Agentパラメータ読み出し
256         //リクエストインターバル
257         if( parameter_is_int_exist( PARAM_COMP_SNMPAGENT, "interval" ) ){
258                 snmpparam.interval = parameter_get_int_value( PARAM_COMP_SNMPAGENT, "interval" );
259         }else{
260                 snmpparam.interval = INTERVAL_DEFAULT;
261         }
262         if( parameter_is_int_exist( PARAM_COMP_SNMPAGENT, "status" ) ){
263                 snmpparam.status = parameter_get_int_value( PARAM_COMP_SNMPAGENT, "status" );
264         }else{
265                 snmpparam.status = 0;
266         }
267         load_loglevel();
268 }
269
270 static  void    load_loglevel()
271 {
272         //log level 取得
273         snmpparam.loglevel.clear();
274         //
275         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_start_stop" ) ){
276                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_START_STOP, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_start_stop" )] ) );
277         }else{
278                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_START_STOP, LOG_LV_INFO) );
279         }
280         //
281         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_manager_receive" ) ){
282                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_MANAGER_RECEIVE, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_manager_receive" )] ) );
283         }else{
284                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_MANAGER_RECEIVE, LOG_LV_INFO ) );
285         }
286         //
287         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_manager_send" ) ){
288                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_MANAGER_SEND, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_manager_send" )] ) );
289         }else{
290                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_MANAGER_SEND, LOG_LV_INFO ) );
291         }
292         //
293         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_l7vsd_receive" ) ){
294                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_L7VSD_RECEIVE, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_l7vsd_receive" )] ) );
295         }else{
296                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_L7VSD_RECEIVE, LOG_LV_INFO ) );
297         }
298         //
299         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_l7vsd_send" ) ){
300                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_L7VSD_SEND, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_l7vsd_send" )] ) );
301         }else{
302                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_L7VSD_SEND, LOG_LV_INFO ) );
303         }
304         //
305         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_logger" ) ){
306                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_LOGGER, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_logger" )] ) );
307         }else{
308                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_LOGGER, LOG_LV_INFO ) );
309         }
310         //
311         if( parameter_is_char_exist( PARAM_COMP_LOGGER, "snmpagent_parameter" ) ){
312                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_PARAMETER, levelstring_map[parameter_get_char_value( PARAM_COMP_LOGGER, "snmpagent_parameter" )] ) );
313         }else{
314                 snmpparam.loglevel.insert( std::pair<LOG_CATEGORY_TAG,LOG_LEVEL_TAG>( LOG_CAT_SNMPAGENT_PARAMETER, LOG_LV_INFO ) );
315         }
316 }
317