* copy vendor drop to trunk
[lab.git] / Dev / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Cedar.h
1 // SoftEther UT-VPN SourceCode\r
2 // \r
3 // Copyright (C) 2004-2010 SoftEther Corporation.\r
4 // Copyright (C) 2004-2010 University of Tsukuba, Japan.\r
5 // Copyright (C) 2003-2010 Daiyuu Nobori.\r
6 // All Rights Reserved.\r
7 // \r
8 // http://utvpn.tsukuba.ac.jp/\r
9 // \r
10 // This program is free software; you can redistribute it and/or\r
11 // modify it under the terms of the GNU General Public License\r
12 // version 2 as published by the Free Software Foundation.\r
13 // \r
14 // This program is distributed in the hope that it will be useful,\r
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
17 // GNU General Public License for more details.\r
18 // \r
19 // You should have received a copy of the GNU General Public License version 2\r
20 // along with this program; if not, write to the Free Software\r
21 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
22 // \r
23 // このファイルは GPL バージョン 2 ライセンスで公開されています。\r
24 // 誰でもこのファイルの内容を複製、改変したり、改変したバージョンを再配布\r
25 // することができます。ただし、原著作物を改変した場合は、原著作物の著作権表示\r
26 // を除去することはできません。改変した著作物を配布する場合は、改変実施者の\r
27 // 著作権表示を原著作物の著作権表示に付随して記載するようにしてください。\r
28 // \r
29 // この SoftEther UT-VPN オープンソース・プロジェクトは、日本国の\r
30 // ソフトイーサ株式会社 (SoftEther Corporation, http://www.softether.co.jp/ )\r
31 // および筑波大学 (University of Tsukuba, http://www.tsukuba.ac.jp/ ) によって\r
32 // ホストされています。\r
33 // 本プログラムの配布者は、本プログラムを、業としての利用以外のため、\r
34 // および、試験または研究のために利用が行われることを想定して配布\r
35 // しています。\r
36 // SoftEther UT-VPN プロジェクトの Web サイトは http://utvpn.tsukuba.ac.jp/ に\r
37 // あります。\r
38 // 本ソフトウェアの不具合の修正、機能改良、セキュリティホールの修復などのコード\r
39 // の改変を行った場合で、その成果物を SoftEther UT-VPN プロジェクトに提出して\r
40 // いただける場合は、 http://utvpn.tsukuba.ac.jp/ までソースコードを送付して\r
41 // ください。SoftEther UT-VPN プロジェクトの本体リリースまたはブランチリリース\r
42 // に組み込みさせていただきます。\r
43 // \r
44 // GPL に基づいて原著作物が提供される本ソフトウェアの改良版を配布、販売する\r
45 // 場合は、そのソースコードを GPL に基づいて誰にでも開示する義務が生じます。\r
46 // \r
47 // 本ソフトウェアに関連する著作権、特許権、商標権はソフトイーサ株式会社\r
48 // (SoftEther Corporation) およびその他の著作権保持者が保有しています。\r
49 // ソフトイーサ株式会社等はこれらの権利を放棄していません。本ソフトウェアの\r
50 // 二次著作物を配布、販売する場合は、これらの権利を侵害しないようにご注意\r
51 // ください。\r
52 // \r
53 // お願い: どのような通信ソフトウェアにも通常は必ず未発見の\r
54 // セキュリティホールが潜んでいます。本ソースコードをご覧いただいた結果、\r
55 // UT-VPN にセキュリティホールを発見された場合は、当該セキュリティホールの\r
56 // 情報を不特定多数に開示される前に、必ず、ソフトイーサ株式会社\r
57 // および脆弱性情報の届出を受け付ける公的機関まで通報いただき、\r
58 // 公益保護にご協力いただきますようお願い申し上げます。\r
59 // \r
60 // ソフトイーサ株式会社は、当該セキュリティホールについて迅速に対処を\r
61 // 行い、UT-VPN および UT-VPN に関連するソフトウェアのユーザー・顧客\r
62 // を保護するための努力を行います。\r
63 // \r
64 // ソフトイーサへの届出先: http://www.softether.co.jp/jp/contact/\r
65 // 日本国内の脆弱性情報届出受付公的機関:\r
66 //         独立行政法人 情報処理推進機構\r
67 //         http://www.ipa.go.jp/security/vuln/report/\r
68 // \r
69 // 上記各事項について不明な点は、ソフトイーサ株式会社までご連絡ください。\r
70 // 連絡先: http://www.softether.co.jp/jp/contact/\r
71 \r
72 // -----------------------------------------------\r
73 // [ChangeLog]\r
74 // 2010.05.20\r
75 //  新規リリース by SoftEther\r
76 // -----------------------------------------------\r
77 \r
78 // Cedar.h\r
79 // Cedar.c のヘッダ\r
80 \r
81 #ifndef CEDAR_H\r
82 #define CEDAR_H\r
83 \r
84 \r
85 //////////////////////////////////////////////////////////////////////\r
86 // \r
87 // 製品情報関連定数\r
88 // \r
89 //////////////////////////////////////////////////////////////////////\r
90 \r
91 #define bool    UINT\r
92 #define BOOL    UINT\r
93 \r
94 // バージョン番号\r
95 #define CEDAR_VER                                       101\r
96 \r
97 // ビルド番号\r
98 #define CEDAR_BUILD                                     7101\r
99 \r
100 // ベータ番号\r
101 //#define       BETA_NUMBER                                     2\r
102 \r
103 // ビルド担当者の名前を指定\r
104 #ifndef BUILDER_NAME\r
105 #define BUILDER_NAME            "yagi"\r
106 #endif  // BUILDER_NAME\r
107 \r
108 // ビルドした場所を指定\r
109 #ifndef BUILD_PLACE\r
110 #define BUILD_PLACE                     "pc25"\r
111 #endif  // BUILD_PLACE\r
112 \r
113 // ビルド日時を指定\r
114 #define BUILD_DATE_Y            2010\r
115 #define BUILD_DATE_M            6\r
116 #define BUILD_DATE_D            27\r
117 #define BUILD_DATE_HO           18\r
118 #define BUILD_DATE_MI           40\r
119 #define BUILD_DATE_SE           28\r
120 \r
121 // 許容する時差\r
122 #define ALLOW_TIMESTAMP_DIFF            (UINT64)(3 * 24 * 60 * 60 * 1000)\r
123 \r
124 // SoftEther UT-VPN シリーズ製品名\r
125 #define CEDAR_PRODUCT_STR                       "UT-VPN"\r
126 \r
127 // Server 製品名\r
128 #define CEDAR_SERVER_STR                        "UT-VPN Server"\r
129 \r
130 // Bridge 製品名\r
131 #define CEDAR_BRIDGE_STR                        "UT-VPN Bridge"\r
132 \r
133 // Server 製品名 (ベータ)\r
134 #define CEDAR_BETA_SERVER                       "UT-VPN Server Pre Release"\r
135 \r
136 // VPN Server Manager 製品名\r
137 #define CEDAR_MANAGER_STR                       "UT-VPN Server Manager"\r
138 \r
139 // VPN Command-Line Admin Tool 製品名\r
140 #define CEDAR_CUI_STR                           "UT-VPN Command-Line Admin Tool"\r
141 \r
142 // VPN User-mode Router 製品名\r
143 #define CEDAR_ROUTER_STR                        "UT-VPN User-mode Router"\r
144 \r
145 // VPN Client 製品名\r
146 #define CEDAR_CLIENT_STR                        "UT-VPN Client"\r
147 \r
148 // VPN Client Manager 製品名\r
149 #define CEDAR_CLIENT_MANAGER_STR        "UT-VPN Client Connection Manager"\r
150 \r
151 // VPN Server のカスケード接続時の製品名\r
152 #define CEDAR_SERVER_LINK_STR           "UT-VPN Server (Cascade Mode)"\r
153 \r
154 // VPN Server のサーバーファーム RPC 接続時の製品名\r
155 #define CEDAR_SERVER_FARM_STR           "UT-VPN Server (Cluster RPC Mode)"\r
156 \r
157 \r
158 // IDS 検出用シグネチャの指定\r
159 #define CEDAR_SIGNATURE_STR                     "SE-UTVPN-PROTOCOL"\r
160 \r
161 // スマートカードのデフォルトの RSA 証明書名\r
162 #define SECURE_DEFAULT_CERT_NAME        "VPN_RSA_CERT"\r
163 \r
164 // スマートカードのデフォルトの RSA 秘密鍵名\r
165 #define SECURE_DEFAULT_KEY_NAME         "VPN_RSA_KEY"\r
166 \r
167 // 8 文字の非表示パスワード文字列\r
168 #define HIDDEN_PASSWORD                         "********"\r
169 \r
170 \r
171 \r
172 //////////////////////////////////////////////////////////////////////\r
173 // \r
174 // 各種文字列の最大長の定義\r
175 // \r
176 //////////////////////////////////////////////////////////////////////\r
177 \r
178 #define MAX_ACCOUNT_NAME_LEN            255             // 最大アカウント名長\r
179 #define MAX_USERNAME_LEN                        255             // ユーザー名最大長\r
180 #define MAX_PASSWORD_LEN                        255             // パスワード名最大長\r
181 #define MAX_HOST_NAME_LEN                       255             // ホスト名最大長\r
182 #define MAX_PROXY_USERNAME_LEN          255             // プロキシユーザー名最大長\r
183 #define MAX_PROXY_PASSWORD_LEN          255             // プロキシパスワード最大長\r
184 #define MAX_SERVER_STR_LEN                      255             // サーバー文字列最大長\r
185 #define MAX_CLIENT_STR_LEN                      255             // クライアント文字列最大長\r
186 #define MAX_HUBNAME_LEN                         255             // HUB 名最大長\r
187 #define MAX_SESSION_NAME_LEN            255             // セッション名最大長\r
188 #define MAX_CONNECTION_NAME_LEN         255             // コネクション名最大長\r
189 #define MAX_DEVICE_NAME_LEN                     31              // デバイス名最大長\r
190 #define MAX_DEVICE_NAME_LEN_9X          4               // Win9x での仮想 LAN カード名最大長\r
191 #define MAX_ACCESSLIST_NOTE_LEN         255             // アクセスリストのメモ最大長\r
192 #define MAX_SECURE_DEVICE_FILE_LEN      255             // セキュアデバイス内ファイル名最大長\r
193 #define MAX_ADMIN_OPTION_NAME_LEN       63              // 管理オプション名\r
194 \r
195 \r
196 //////////////////////////////////////////////////////////////////////\r
197 // \r
198 // サーバーおよびセッション管理関連定数\r
199 // \r
200 //////////////////////////////////////////////////////////////////////\r
201 \r
202 #define SERVER_MAX_SESSIONS                     4096    // サーバーがサポートする最大セッション数\r
203 #define SERVER_MAX_SESSIONS_FOR_64BIT   100000  // サーバーがサポートする最大セッション数 (64 bit)\r
204 #define NAT_MAX_SESSIONS                        4096    // NAT がサポートする最大セッション数\r
205 #define MAX_HUBS                                        4096    // 仮想 HUB の最大数 (32 bit)\r
206 #define MAX_HUBS_FOR_64BIT                      100000  // 仮想 HUB の最大数 (64 bit)\r
207 #define MAX_ACCESSLISTS                         4096    // アクセスリストの最大数\r
208 #define MAX_USERS                                       10000   // 最大ユーザー数\r
209 #define MAX_GROUPS                                      10000   // 最大グループ数\r
210 #define MAX_MAC_TABLES                          65536   // 最大 MAC アドレステーブル数\r
211 #define MAX_IP_TABLES                           65536   // 最大 IP アドレステーブル数\r
212 #define MAX_HUB_CERTS                           4096    // 登録できるルート CA 最大数\r
213 #define MAX_HUB_CRLS                            4096    // 登録できる CRL 最大数\r
214 #define MAX_HUB_ACS                                     4096    // 登録できる AC 最大数\r
215 #define MAX_HUB_LINKS                           128             // 登録できるカスケード接続最大数\r
216 #define MAX_HUB_ADMIN_OPTIONS           4096    // 登録できる仮想 HUB 管理オプション最大数\r
217 \r
218 #define MAX_PACKET_SIZE                         1560    // 最大パケットサイズ\r
219 #define UDP_BUF_SIZE                            (32 * 1024) // UDP パケットサイズの目安\r
220 \r
221 #define MAX_SEND_SOCKET_QUEUE_SIZE      (1600 * 1600 * 1)       // 最大送信キューサイズ\r
222 #define MIN_SEND_SOCKET_QUEUE_SIZE      (1600 * 200 * 1)\r
223 #define MAX_SEND_SOCKET_QUEUE_NUM       128             // 最大送信キュー数\r
224 #define MAX_TCP_CONNECTION                      32              // 最大 TCP コネクション数\r
225 #define SELECT_TIME                                     256\r
226 #define SELECT_TIME_FOR_NAT                     30\r
227 #define SELECT_TIME_FOR_DELAYED_PKT     1               // 遅延パケットがある場合\r
228 #define MAX_STORED_QUEUE_NUM            1024            // セッションごとにストアできるキューの数\r
229 #define MAX_BUFFERING_PACKET_SIZE       (1600 * 1600)   // バッファリング可能なパケットサイズの最大値\r
230 \r
231 #define TIMEOUT_MIN                                     (5 * 1000)      // 最小タイムアウト秒数\r
232 #define TIMEOUT_MAX                                     (60 * 1000)     // 最大タイムアウト秒数\r
233 #define TIMEOUT_DEFAULT                         (30 * 1000) // デフォルトのタイムアウト秒数\r
234 #define CONNECTING_TIMEOUT                      (15 * 1000)     // 接続中のタイムアウト秒数\r
235 #define CONNECTING_TIMEOUT_PROXY        (4 * 1000)      // 接続中のタイムアウト秒数 (Proxy)\r
236 #define CONNECTING_POOLING_SPAN         (3 * 1000) // 接続中のポーリング間隔\r
237 #define MIN_RETRY_INTERVAL                      (5 * 1000)              // 最小リトライ間隔\r
238 #define MAX_RETRY_INTERVAL                      (300 * 1000)    // 最大リトライ間隔\r
239 #define RETRY_INTERVAL_SPECIAL          (60 * 1000)             // 特別な場合の再接続間隔\r
240 \r
241 #define MAC_MIN_LIMIT_COUNT                     3               // 最小 MAC アドレス数制限値\r
242 #define IP_MIN_LIMIT_COUNT                      4               // 最小 IPv4 アドレス数制限値\r
243 #define IP_MIN_LIMIT_COUNT_V6           5               // 最小 IPv6 アドレス数制限値\r
244 #define IP_LIMIT_WHEN_NO_ROUTING_V6     15              // NoRouting ポリシーが有効な場合の IPv6 アドレス数制限値\r
245 \r
246 #define MAC_TABLE_EXCLUSIVE_TIME        (13 * 1000)                     // MAC アドレスを占有することができる期間\r
247 #define IP_TABLE_EXCLUSIVE_TIME         (13 * 1000)                     // IP アドレスを占有することができる期間\r
248 #define MAC_TABLE_EXPIRE_TIME           (600 * 1000)                    // MAC アドレステーブル有効期限\r
249 #define IP_TABLE_EXPIRE_TIME            (60 * 1000)                     // IP アドレステーブル有効期限\r
250 #define IP_TABLE_EXPIRE_TIME_DHCP       (5 * 60 * 1000)         // IP アドレステーブル有効期限 (DHCP の場合)\r
251 #define HUB_ARP_SEND_INTERVAL           (5 * 1000)                      // ARP パケット送信間隔 (生存チェック)\r
252 \r
253 #define LIMITER_SAMPLING_SPAN           1000    // トラフィック制限装置のサンプリング間隔\r
254 \r
255 #define STORM_CHECK_SPAN                        500             // ブロードキャストストームチェック間隔\r
256 #define STORM_DISCARD_VALUE_START       3               // ブロードキャストパケット破棄値開始値\r
257 #define STORM_DISCARD_VALUE_END         1024    // ブロードキャストパケット破棄値終了値\r
258 \r
259 #define KEEP_INTERVAL_MIN                       5               // パケット送出間隔最小値\r
260 #define KEEP_INTERVAL_DEFAULT           50              // パケット送出間隔デフォルト値\r
261 #define KEEP_INTERVAL_MAX                       600             // パケット送出間隔最大値\r
262 #define KEEP_TCP_TIMEOUT                        1000    // TCP タイムアウト値\r
263 \r
264 #define TICKET_EXPIRES                          (60 * 1000)     // チケットの有効期限\r
265 \r
266 \r
267 #define FARM_BASE_POINT                         100000          // クラスタ得点の基準値\r
268 #define FARM_DEFAULT_WEIGHT                     100                     // 標準の性能基準比\r
269 \r
270 \r
271 // HTTPS サーバー / クライアント関連文字列定数\r
272 #define DEFAULT_USER_AGENT      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"\r
273 #define DEFAULT_ACCEPT          "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*"\r
274 #define DEFAULT_ENCODING        "gzip, deflate"\r
275 #define HTTP_CONTENT_TYPE       "text/html; charset=iso-8859-1"\r
276 #define HTTP_CONTENT_TYPE2      "application/octet-stream"\r
277 #define HTTP_CONTENT_TYPE3      "image/jpeg"\r
278 #define HTTP_CONTENT_TYPE4      "text/html"\r
279 #define HTTP_CONTENT_TYPE5      "message/rfc822"\r
280 #define HTTP_KEEP_ALIVE         "timeout=15; max=19"\r
281 #define HTTP_VPN_TARGET         "/vpnsvc/vpn.cgi"\r
282 #define HTTP_VPN_TARGET2        "/vpnsvc/connect.cgi"\r
283 #define HTTP_VPN_TARGET_POSTDATA        "VPNCONNECT"\r
284 #define HTTP_SAITAMA            "/saitama.jpg"\r
285 #define HTTP_PICTURES           "/picture"\r
286 \r
287 #define SE_UDP_SIGN                     "SE2P"          // 未使用 (旧 UDP モードのみ)\r
288 \r
289 // トラフィック情報更新間隔\r
290 #define INCREMENT_TRAFFIC_INTERVAL              (10 * 1000)\r
291 \r
292 // クライアント セッションの状態\r
293 #define CLIENT_STATUS_CONNECTING        0               // 接続中\r
294 #define CLIENT_STATUS_NEGOTIATION       1               // ネゴシエーション中\r
295 #define CLIENT_STATUS_AUTH                      2               // ユーザー認証中\r
296 #define CLIENT_STATUS_ESTABLISHED       3               // 接続完了\r
297 #define CLIENT_STATUS_RETRY                     4               // リトライまで待機中\r
298 #define CLIENT_STATUS_IDLE                      5               // アイドル状態\r
299 \r
300 // ファイル転送時に一度に転送するブロック\r
301 #define FTP_BLOCK_SIZE                          (640 * 1024)\r
302 \r
303 // syslog 設定\r
304 #define SYSLOG_NONE                                                     0               // syslog を使わない\r
305 #define SYSLOG_SERVER_LOG                                       1               // サーバーログのみ\r
306 #define SYSLOG_SERVER_AND_HUB_SECURITY_LOG      2               // サーバーと仮想 HUB セキュリティログ\r
307 #define SYSLOG_SERVER_AND_HUB_ALL_LOG           3               // サーバー、仮想 HUB セキュリティおよびパケットログ\r
308 \r
309 #define SYSLOG_PORT                                     514                     // syslog ポート番号\r
310 #define SYSLOG_POLL_IP_INTERVAL         (UINT64)(3600 * 1000)   // IP アドレスを調べる間隔\r
311 #define SYSLOG_POLL_IP_INTERVAL_NG      (UINT64)(60 * 1000)     // IP アドレスを調べる間隔 (前回失敗時)\r
312 \r
313 //////////////////////////////////////////////////////////////////////\r
314 // \r
315 // コネクション関連の定数\r
316 // \r
317 //////////////////////////////////////////////////////////////////////\r
318 \r
319 // インターネット接続維持機能 (KeepAlive)\r
320 \r
321 #define KEEP_RETRY_INTERVAL             (60 * 1000)                     // 接続失敗時の再接続間隔\r
322 #define KEEP_MIN_PACKET_SIZE    1                                       // 最小パケットサイズ\r
323 #define KEEP_MAX_PACKET_SIZE    128                                     // 最大パケットサイズ\r
324 #define KEEP_POLLING_INTERVAL   250                                     // KEEP ポーリング間隔\r
325 \r
326 // 定数\r
327 #define RECV_BUF_SIZE                           65536                   // 一度に受信するバッファサイズ\r
328 \r
329 // プロキシの種類\r
330 #define PROXY_DIRECT                    0       // 直接 TCP 接続\r
331 #define PROXY_HTTP                              1       // HTTP プロキシサーバー経由接続\r
332 #define PROXY_SOCKS                             2       // SOCKS プロキシサーバー経由接続\r
333 \r
334 // データの流れる方向\r
335 #define TCP_BOTH                                0       // 双方向\r
336 #define TCP_SERVER_TO_CLIENT    1       // サーバー -> クライアント方向のみ\r
337 #define TCP_CLIENT_TO_SERVER    2       // クライアント -> サーバー方向のみ\r
338 \r
339 // コネクションの種類\r
340 #define CONNECTION_TYPE_CLIENT                  0       // クライアント\r
341 #define CONNECTION_TYPE_INIT                    1       // 初期化中\r
342 #define CONNECTION_TYPE_LOGIN                   2       // ログインコネクション\r
343 #define CONNECTION_TYPE_ADDITIONAL              3       // 追加接続コネクション\r
344 #define CONNECTION_TYPE_FARM_RPC                4       // サーバーファーム用 RPC\r
345 #define CONNECTION_TYPE_ADMIN_RPC               5       // 管理用 RPC\r
346 #define CONNECTION_TYPE_ENUM_HUB                6       // HUB 列挙\r
347 #define CONNECTION_TYPE_PASSWORD                7       // パスワード変更\r
348 \r
349 // プロトコル\r
350 #define CONNECTION_TCP                                  0       // TCP プロトコル\r
351 #define CONNECTION_UDP                                  1       // UDP プロトコル\r
352 #define CONNECTION_HUB_LAYER3                   6       // Layer-3 スイッチ セッション\r
353 #define CONNECTION_HUB_BRIDGE                   7       // Bridge セッション\r
354 #define CONNECTION_HUB_SECURE_NAT               8       // Secure NAT セッション\r
355 #define CONNECTION_HUB_LINK_SERVER              9       // HUB リンクセッション\r
356 \r
357 \r
358 // 状態\r
359 #define CONNECTION_STATUS_ACCEPTED              0       // 接続を受け付けた (クライアント側)\r
360 #define CONNECTION_STATUS_NEGOTIATION   1       // ネゴシエーション中\r
361 #define CONNECTION_STATUS_USERAUTH              2       // ユーザー認証中\r
362 #define CONNECTION_STATUS_ESTABLISHED   3       // コネクション確立済み\r
363 #define CONNECTION_STATUS_CONNECTING    0       // 接続中 (クライアント側)\r
364 \r
365 // KeepAlive パケットのマジックナンバー\r
366 #define KEEP_ALIVE_MAGIC                                0xffffffff\r
367 #define MAX_KEEPALIVE_SIZE                              512\r
368 \r
369 \r
370 \r
371 //////////////////////////////////////////////////////////////////////\r
372 // \r
373 // 仮想 HUB 関連の定数\r
374 // \r
375 //////////////////////////////////////////////////////////////////////\r
376 \r
377 #define SE_HUB_MAC_ADDR_SIGN                            0xAE                                    // 仮想 HUB MAC アドレスのサイン\r
378 \r
379 // トラフィック差分値\r
380 #define TRAFFIC_DIFF_USER               0               // ユーザー\r
381 #define TRAFFIC_DIFF_HUB                1               // 仮想 HUB\r
382 #define MAX_TRAFFIC_DIFF                30000   // 最大件数\r
383 \r
384 // HUB の種類\r
385 #define HUB_TYPE_STANDALONE                     0       // スタンドアロン HUB\r
386 #define HUB_TYPE_FARM_STATIC            1       // スタティック HUB\r
387 #define HUB_TYPE_FARM_DYNAMIC           2       // ダイナミック HUB\r
388 \r
389 // アクセスリストにおける遅延、ジッタ、パケットロス関係\r
390 #define HUB_ACCESSLIST_DELAY_MAX        10000           // 最大遅延\r
391 #define HUB_ACCESSLIST_JITTER_MAX       100                     // 最大ジッタ\r
392 #define HUB_ACCESSLIST_LOSS_MAX         100                     // 最大パケットロス\r
393 \r
394 // メッセージ関係\r
395 #define HUB_MAXMSG_LEN                          20000           // 最大メッセージ文字数\r
396 \r
397 \r
398 \r
399 //////////////////////////////////////////////////////////////////////\r
400 // \r
401 // ユーザー認証の種類\r
402 // \r
403 //////////////////////////////////////////////////////////////////////\r
404 \r
405 // サーバー側における定数\r
406 #define AUTHTYPE_ANONYMOUS                              0                       // 匿名認証\r
407 #define AUTHTYPE_PASSWORD                               1                       // パスワード認証\r
408 #define AUTHTYPE_USERCERT                               2                       // ユーザー証明書認証\r
409 #define AUTHTYPE_ROOTCERT                               3                       // 信頼するルート証明期間が発行する証明書\r
410 #define AUTHTYPE_RADIUS                                 4                       // Radius 認証\r
411 #define AUTHTYPE_NT                                             5                       // Windows NT 認証\r
412 #define AUTHTYPE_TICKET                                 99                      // チケット認証\r
413 \r
414 // クライアント側における定数\r
415 #define CLIENT_AUTHTYPE_ANONYMOUS               0                       // 匿名認証\r
416 #define CLIENT_AUTHTYPE_PASSWORD                1                       // パスワード認証\r
417 #define CLIENT_AUTHTYPE_PLAIN_PASSWORD  2                       // プレーンパスワード認証\r
418 #define CLIENT_AUTHTYPE_CERT                    3                       // 証明書認証\r
419 #define CLIENT_AUTHTYPE_SECURE                  4                       // セキュアデバイス認証\r
420 \r
421 // Radius 関係\r
422 #define RADIUS_DEFAULT_PORT             1812                    // デフォルトのポート番号\r
423 #define RADIUS_RETRY_INTERVAL   500                             // 再送間隔\r
424 #define RADIUS_RETRY_TIMEOUT    (10 * 1000)             // タイムアウト時間\r
425 \r
426 \r
427 \r
428 //////////////////////////////////////////////////////////////////////\r
429 // \r
430 // TCP リスナー関係の定数\r
431 // \r
432 //////////////////////////////////////////////////////////////////////\r
433 \r
434 // Listen に失敗した場合の再試行回数\r
435 #define LISTEN_RETRY_TIME                       (2 * 1000)              // 普通に Listen に失敗した場合\r
436 #define LISTEN_RETRY_TIME_NOIPV6        (60 * 1000)             // IPv6 サポートが無効な場合\r
437 \r
438 \r
439 // リスナーの使用するプロトコル\r
440 #define LISTENER_TCP                            0               // TCP/IP\r
441 #define LISTENER_UDP                            1               // UDP/IP\r
442 \r
443 // リスナーの状態\r
444 #define LISTENER_STATUS_TRYING          0               // 試行中\r
445 #define LISTENER_STATUS_LISTENING       1               // Listen 中\r
446 \r
447 // 最大の UDP パケットサイズ\r
448 #define UDP_PACKET_SIZE                         65536\r
449 \r
450 // 標準の IP アドレスごとのコネクション数\r
451 #define DEFAULT_MAX_CONNECTIONS_PER_IP  256\r
452 #define MIN_MAX_CONNECTIONS_PER_IP      10              // 最小値\r
453 \r
454 // 許容される未処理のコネクション数\r
455 #define DEFAULT_MAX_UNESTABLISHED_CONNECTIONS   1000\r
456 #define MIN_MAX_UNESTABLISHED_CONNECTIONS       30      // 最小値\r
457 \r
458 \r
459 //////////////////////////////////////////////////////////////////////\r
460 // \r
461 // ログ関係の定数\r
462 // \r
463 //////////////////////////////////////////////////////////////////////\r
464 \r
465 #define LOG_ENGINE_SAVE_START_CACHE_COUNT       100000          // 強制的に保存を開始する数\r
466 #define LOG_ENGINE_BUFFER_CACHE_SIZE_MAX        (10 * 1024 * 1024)      // 書き込みキャッシュサイズ\r
467 \r
468 // ファイル名などの定数\r
469 #define SERVER_LOG_DIR_NAME                     "@server_log"\r
470 #define BRIDGE_LOG_DIR_NAME                     SERVER_LOG_DIR_NAME\r
471 #define SERVER_LOG_PERFIX                       "vpn"\r
472 \r
473 #define HUB_SECURITY_LOG_DIR_NAME       "@security_log"\r
474 #define HUB_SECURITY_LOG_FILE_NAME      "@security_log/%s"\r
475 #define HUB_SECURITY_LOG_PREFIX         "sec"\r
476 #define HUB_PACKET_LOG_DIR_NAME         "@packet_log"\r
477 #define HUB_PACKET_LOG_FILE_NAME        "@packet_log/%s"\r
478 #define HUB_PACKET_LOG_PREFIX           "pkt"\r
479 \r
480 #define NAT_LOG_DIR_NAME                        "@secure_nat_log"\r
481 #define NAT_LOG_FILE_NAME                       "@secure_nat_log/%s"\r
482 #define NAT_LOG_PREFIX                          "snat"\r
483 \r
484 #define CLIENT_LOG_DIR_NAME                     "@client_log"\r
485 #define CLIENT_LOG_PREFIX                       "client"\r
486 \r
487 // パケットログ設定\r
488 #define NUM_PACKET_LOG                          16\r
489 #define PACKET_LOG_TCP_CONN                     0               // TCP コネクションログ\r
490 #define PACKET_LOG_TCP                          1               // TCP パケットログ\r
491 #define PACKET_LOG_DHCP                         2               // DHCP ログ\r
492 #define PACKET_LOG_UDP                          3               // UDP ログ\r
493 #define PACKET_LOG_ICMP                         4               // ICMP ログ\r
494 #define PACKET_LOG_IP                           5               // IP ログ\r
495 #define PACKET_LOG_ARP                          6               // ARP ログ\r
496 #define PACKET_LOG_ETHERNET                     7               // Ethernet ログ\r
497 \r
498 #define PACKET_LOG_NONE                         0               // 保存しない\r
499 #define PACKET_LOG_HEADER                       1               // ヘッダのみ\r
500 #define PACKET_LOG_ALL                          2               // データも保存する\r
501 \r
502 // ログ切り替えのタイミング\r
503 #define LOG_SWITCH_NO                           0               // 切り替え無し\r
504 #define LOG_SWITCH_SECOND                       1               // 1 秒単位\r
505 #define LOG_SWITCH_MINUTE                       2               // 1 分単位\r
506 #define LOG_SWITCH_HOUR                         3               // 1 時間単位\r
507 #define LOG_SWITCH_DAY                          4               // 1 日単位\r
508 #define LOG_SWITCH_MONTH                        5               // 1 ヶ月単位\r
509 \r
510 // ディスクの空き容量の最小サイズ\r
511 #define DISK_FREE_SPACE_MIN                     1048576 // 1 MBytes\r
512 #define DISK_FREE_SPACE_DEFAULT         (DISK_FREE_SPACE_MIN * 100)     // 100 Mbytes\r
513 \r
514 // 空き容量をチェックする間隔\r
515 #define DISK_FREE_CHECK_INTERVAL        (5 * 60 * 1000)\r
516 \r
517 // 簡易ログ\r
518 #define TINY_LOG_DIRNAME                        "@tiny_log"\r
519 #define TINY_LOG_FILENAME                       "@tiny_log/%04u%02u%02u_%02u%02u%02u.log"\r
520 \r
521 \r
522 //////////////////////////////////////////////////////////////////////\r
523 // \r
524 // Carrier Edition 関係の定数\r
525 // \r
526 //////////////////////////////////////////////////////////////////////\r
527 \r
528 #define CE_SNAPSHOT_INTERVAL            ((UINT64)(3600 * 1000))\r
529 //#define CE_SNAPSHOT_INTERVAL          ((UINT64)(3000))\r
530 #define CE_SNAPSHOT_POLLING_INTERVAL    (1 * 1000)\r
531 #define CE_SNAPSHOT_POLLING_INTERVAL_LICENSE    (30 * 1000)\r
532 #define CE_SNAPSHOT_DIR_NAME            "@carrier_log"\r
533 #define CE_SNAPSHOT_PREFIX                      "carrier"\r
534 \r
535 \r
536 //////////////////////////////////////////////////////////////////////\r
537 // \r
538 // 通信プロトコル関係の定数\r
539 // \r
540 //////////////////////////////////////////////////////////////////////\r
541 \r
542 // 管理者ユーザー名\r
543 #define ADMINISTRATOR_USERNAME          "administrator"\r
544 // HTTP ヘッダの 1 行のサイズの最大値\r
545 #define HTTP_HEADER_LINE_MAX_SIZE       4096\r
546 // PACK に含める乱数サイズの最大値\r
547 #define HTTP_PACK_RAND_SIZE_MAX         1000\r
548 // ランダムサイズの最大値\r
549 #define RAND_SIZE_MAX                           4096\r
550 // ランダムサイズキャッシュの有効期限\r
551 #define RAND_SIZE_CACHE_EXPIRE          (24 * 60 * 60 * 1000)\r
552 // 管理許可 IP アドレスリストファイル名\r
553 #define ADMINIP_TXT                                     "@adminip.txt"\r
554 \r
555 #define NON_SSL_MIN_COUNT                       60\r
556 #define NON_SSL_ENTRY_EXPIRES           (60 * 60 * 1000)\r
557 \r
558 //////////////////////////////////////////////////////////////////////\r
559 // \r
560 // カスケード接続関係の定数\r
561 // \r
562 //////////////////////////////////////////////////////////////////////\r
563 \r
564 #define LINK_DEVICE_NAME                "_SEHUBLINKCLI_"\r
565 #define LINK_USER_NAME                  "link"\r
566 #define LINK_USER_NAME_PRINT    "Cascade"\r
567 \r
568 \r
569 \r
570 //////////////////////////////////////////////////////////////////////\r
571 // \r
572 // SecureNAT 接続関係の定数\r
573 // \r
574 //////////////////////////////////////////////////////////////////////\r
575 \r
576 #define SNAT_DEVICE_NAME                "_SEHUBSECURENAT_"\r
577 #define SNAT_USER_NAME                  "securenat"\r
578 #define SNAT_USER_NAME_PRINT    "SecureNAT"\r
579 \r
580 \r
581 \r
582 //////////////////////////////////////////////////////////////////////\r
583 // \r
584 // Bridge 接続関係の定数\r
585 // \r
586 //////////////////////////////////////////////////////////////////////\r
587 \r
588 #define BRIDGE_DEVICE_NAME                              "_SEHUBBRIDGE_"\r
589 #define BRIDGE_USER_NAME                                "localbridge"\r
590 #define BRIDGE_USER_NAME_PRINT                  "Local Bridge"\r
591 #define BRIDGE_TRY_SPAN                                 1000\r
592 #define BRIDGE_NUM_DEVICE_CHECK_SPAN    (5 * 60 * 1000)\r
593 #define BRIDGE_NETWORK_CONNECTION_STR   L"%s [%S]"\r
594 \r
595 \r
596 \r
597 //////////////////////////////////////////////////////////////////////\r
598 // \r
599 // EtherLogger 関係の定数\r
600 // \r
601 //////////////////////////////////////////////////////////////////////\r
602 \r
603 #define EL_ADMIN_PORT                   22888\r
604 #define EL_CONFIG_FILENAME              "@etherlogger.config"\r
605 #define EL_PACKET_LOG_DIR_NAME  "@etherlogger_log"\r
606 #define EL_PACKET_LOG_FILE_NAME "@etherlogger_log/%s"\r
607 #define EL_PACKET_LOG_PREFIX    "pkt"\r
608 #define EL_LICENSE_CHECK_SPAN   (10 * 1000)\r
609 \r
610 \r
611 \r
612 //////////////////////////////////////////////////////////////////////\r
613 // \r
614 // Layer-3 Switch 関係の定数\r
615 // \r
616 //////////////////////////////////////////////////////////////////////\r
617 \r
618 #define MAX_NUM_L3_SWITCH               4096\r
619 #define MAX_NUM_L3_IF                   4096\r
620 #define MAX_NUM_L3_TABLE                4096\r
621 \r
622 \r
623 \r
624 //////////////////////////////////////////////////////////////////////\r
625 // \r
626 // User-mode Router 関係の定数\r
627 // \r
628 //////////////////////////////////////////////////////////////////////\r
629 \r
630 #define ARP_ENTRY_EXPIRES                       (30 * 1000)             // ARP テーブル有効期限\r
631 #define ARP_ENTRY_POLLING_TIME          (1 * 1000)              // ARP テーブル清掃タイマ\r
632 #define ARP_REQUEST_TIMEOUT                     (200)                   // ARP リクエストタイムアウト時間\r
633 #define ARP_REQUEST_GIVEUP                      (5 * 1000)              // ARP リクエストの送信を諦める時刻\r
634 #define IP_WAIT_FOR_ARP_TIMEOUT         (5 * 1000)              // IP パケットが ARP テーブルを待つ合計時間\r
635 #define IP_COMBINE_TIMEOUT                      (10 * 1000)             // IP パケットの結合タイムアウト\r
636 #define NAT_TCP_MAX_TIMEOUT                     (2000000 * 1000)        // 最大 TCP セッションタイムアウト秒数\r
637 #define NAT_UDP_MAX_TIMEOUT                     (2000000 * 1000)        // 最大 UDP セッションタイムアウト秒数\r
638 #define NAT_TCP_MIN_TIMEOUT                     (5 * 60 * 1000)         // 最小 TCP セッションタイムアウト秒数\r
639 #define NAT_UDP_MIN_TIMEOUT                     (10 * 1000)                     // 最小 UDP セッションタイムアウト秒数\r
640 #define NAT_TCP_RECV_WINDOW_SIZE        64512                           // TCP 受信ウインドウサイズ\r
641 #define NAT_TCP_SYNACK_SEND_TIMEOUT     250                                     // TCP SYN+ACK 送信間隔\r
642 #define NAT_SEND_BUF_SIZE                       (64 * 1024)                     // TCP 送信バッファサイズ\r
643 #define NAT_RECV_BUF_SIZE                       (64 * 1024)                     // TCP 受信バッファサイズ\r
644 #define NAT_TMPBUF_SIZE                         (128 * 1024)            // TCP 一時メモリ領域サイズ\r
645 #define NAT_ACK_KEEPALIVE_SPAN          (5 * 1000)                      // TCP キープアライブ用 ACK 送信間隔\r
646 #define NAT_INITIAL_RTT_VALUE           500                                     // 初期 RTT 値\r
647 #define NAT_FIN_SEND_INTERVAL           1000                            // FIN 送信間隔\r
648 #define NAT_FIN_SEND_MAX_COUNT          5                                       // 合計 FIN 送信数\r
649 #define NAT_DNS_PROXY_PORT                      53                                      // DNS プロキシポート番号\r
650 #define NAT_DNS_RESPONSE_TTL            (20 * 60)                       // DNS 応答の TTL\r
651 #define NAT_DHCP_SERVER_PORT            67                                      // DHCP サーバーポート番号\r
652 #define DHCP_MIN_EXPIRE_TIMESPAN        (15 * 1000)                     // DHCP 最小有効期限\r
653 #define DHCP_POLLING_INTERVAL           1000                            // DHCP ポーリング間隔\r
654 #define X32                                                     ((UINT64)4294967296ULL) // 32bit + 1\r
655 #define NAT_DNS_QUERY_TIMEOUT           (512)                           // DNS クエリのタイムアウト値\r
656 \r
657 // ビーコン送信間隔\r
658 #define BEACON_SEND_INTERVAL            (5 * 1000)\r
659 \r
660 // IP パケットの結合用のキューで許容される合計サイズ クォータ\r
661 #define IP_COMBINE_WAIT_QUEUE_SIZE_QUOTA        (50 * 1024 * 1024)\r
662 \r
663 // ヘッダサイズ定数\r
664 #define MAC_HEADER_SIZE                         (sizeof(MAC_HEADER))\r
665 #define ARP_HEADER_SIZE                         (sizeof(ARPV4_HEADER))\r
666 #define IP_HEADER_SIZE                          (sizeof(IPV4_HEADER))\r
667 #define TCP_HEADER_SIZE                         (sizeof(TCP_HEADER))\r
668 #define UDP_HEADER_SIZE                         (sizeof(UDP_HEADER))\r
669 \r
670 // データ最大サイズ定数\r
671 #define MAX_L3_DATA_SIZE                        (1500)\r
672 #define MAX_IP_DATA_SIZE                        (MAX_L3_DATA_SIZE - IP_HEADER_SIZE)\r
673 #define MAX_TCP_DATA_SIZE                       (MAX_IP_DATA_SIZE - TCP_HEADER_SIZE)\r
674 #define MAX_UDP_DATA_SIZE                       (MAX_IP_DATA_SIZE - UDP_HEADER_SIZE)\r
675 #define MAX_IP_DATA_SIZE_TOTAL          (65535)\r
676 \r
677 // IP パケットオプション定数\r
678 #define DEFAULT_IP_TOS                          0                               // IP ヘッダの TOS\r
679 #define DEFAULT_IP_TTL                          128                             // IP ヘッダの TTL\r
680 \r
681 // NAT セッションの種類\r
682 #define NAT_TCP                                         0               // TCP NAT\r
683 #define NAT_UDP                                         1               // UDP NAT\r
684 #define NAT_DNS                                         2               // DNS NAT\r
685 \r
686 // NAT セッションの状態\r
687 #define NAT_TCP_CONNECTING                      0               // 接続中\r
688 #define NAT_TCP_SEND_RESET                      1               // RST を送信する (接続失敗または切断)\r
689 #define NAT_TCP_CONNECTED                       2               // 接続完了\r
690 #define NAT_TCP_ESTABLISHED                     3               // 接続確立済み\r
691 #define NAT_TCP_WAIT_DISCONNECT         4               // ソケット切断を待機\r
692 \r
693 // DHCP クライアント動作\r
694 #define DHCP_DISCOVER           1\r
695 #define DHCP_REQUEST            3\r
696 \r
697 // DHCP サーバー動作\r
698 #define DHCP_OFFER                      2\r
699 #define DHCP_ACK                        5\r
700 #define DHCP_NACK                       6\r
701 \r
702 // DHCP 関係の定数\r
703 #define DHCP_ID_MESSAGE_TYPE            0x35\r
704 #define DHCP_ID_REQUEST_IP_ADDRESS      0x32\r
705 #define DHCP_ID_HOST_NAME                       0x0c\r
706 #define DHCP_ID_SERVER_ADDRESS          0x36\r
707 #define DHCP_ID_LEASE_TIME                      0x33\r
708 #define DHCP_ID_DOMAIN_NAME                     0x0f\r
709 #define DHCP_ID_SUBNET_MASK                     0x01\r
710 #define DHCP_ID_GATEWAY_ADDR            0x03\r
711 #define DHCP_ID_DNS_ADDR                        0x06\r
712 \r
713 \r
714 \r
715 \r
716 //////////////////////////////////////////////////////////////////////\r
717 // \r
718 // UNIX 用仮想 LAN カード関係定数\r
719 // \r
720 //////////////////////////////////////////////////////////////////////\r
721 \r
722 #define TAP_FILENAME_1                          "/dev/net/tun"\r
723 #define TAP_FILENAME_2                          "/dev/tun"\r
724 #define TAP_MACOS_FILENAME                      "/dev/tap0"\r
725 \r
726 \r
727 \r
728 \r
729 //////////////////////////////////////////////////////////////////////\r
730 // \r
731 // ライセンスデータベース関係\r
732 // \r
733 //////////////////////////////////////////////////////////////////////\r
734 \r
735 #define LICENSE_MAX_PRODUCT_NAME_LEN    255                             // ライセンス製品名の最大長\r
736 #define LICENSE_KEYSTR_LEN                              41                              // ライセンスキーの長さ\r
737 #define LICENSE_LICENSEID_STR_LEN               33                              // ライセンス ID の長さ\r
738 \r
739 \r
740 // ライセンスされている製品エディション\r
741 #define LICENSE_EDITION_VPN3_NO_LICENSE                                 0               // ライセンス無し\r
742 #define LICENSE_EDITION_UTVPN_GPL                                               201             // UT-VPN (GPL)\r
743 \r
744 // ライセンスステータス\r
745 #define LICENSE_STATUS_OK                               0               // 有効\r
746 #define LICENSE_STATUS_EXPIRED                  1               // 無効 (有効期限切れ)\r
747 #define LICENSE_STATUS_ID_DIFF                  2               // 無効 (システム ID 不一致)\r
748 #define LICENSE_STATUS_DUP                              3               // 無効 (重複)\r
749 #define LICENSE_STATUS_INSUFFICIENT             4               // 無効 (必要な他のライセンスが不足)\r
750 #define LICENSE_STATUS_COMPETITION              5               // 無効 (他のライセンスと競合)\r
751 #define LICENSE_STATUS_NONSENSE                 6               // 無効 (現在のエディションでは無意味)\r
752 #define LICENSE_STATUS_CPU                              7               // 無効 (CPU の種類が不一致)\r
753 \r
754 \r
755 #define BIT_TO_BYTE(x)                                  (((x) + 7) / 8)\r
756 #define BYTE_TO_BIT(x)                                  ((x) * 8)\r
757 \r
758 \r
759 //////////////////////////////////////////////////////////////////////\r
760 // \r
761 // エラーコード\r
762 // \r
763 //////////////////////////////////////////////////////////////////////\r
764 \r
765 #define ERR_NO_ERROR                                    0       // エラー無し\r
766 #define ERR_CONNECT_FAILED                              1       // サーバーへの接続が失敗した\r
767 #define ERR_SERVER_IS_NOT_VPN                   2       // 接続先サーバーは VPN サーバーではない\r
768 #define ERR_DISCONNECTED                                3       // 接続が切断された\r
769 #define ERR_PROTOCOL_ERROR                              4       // プロトコルエラー\r
770 #define ERR_CLIENT_IS_NOT_VPN                   5       // 接続元クライアントは VPN クライアントではない\r
771 #define ERR_USER_CANCEL                                 6       // ユーザーキャンセル\r
772 #define ERR_AUTHTYPE_NOT_SUPPORTED              7       // 指定された認証方法はサポートされていない\r
773 #define ERR_HUB_NOT_FOUND                               8       // HUB が存在しない\r
774 #define ERR_AUTH_FAILED                                 9       // 認証失敗\r
775 #define ERR_HUB_STOPPING                                10      // HUB が停止中\r
776 #define ERR_SESSION_REMOVED                             11      // セッションが削除された\r
777 #define ERR_ACCESS_DENIED                               12      // アクセス拒否\r
778 #define ERR_SESSION_TIMEOUT                             13      // セッションがタイムアウトした\r
779 #define ERR_INVALID_PROTOCOL                    14      // プロトコルが不正\r
780 #define ERR_TOO_MANY_CONNECTION                 15      // コネクション数が多すぎる\r
781 #define ERR_HUB_IS_BUSY                                 16      // HUB のセッション数が多すぎる\r
782 #define ERR_PROXY_CONNECT_FAILED                17      // プロキシサーバーへの接続が失敗した\r
783 #define ERR_PROXY_ERROR                                 18      // プロキシエラーが発生\r
784 #define ERR_PROXY_AUTH_FAILED                   19      // プロキシサーバーでの認証に失敗\r
785 #define ERR_TOO_MANY_USER_SESSION               20      // 同一ユーザーのセッション数が多すぎる\r
786 #define ERR_LICENSE_ERROR                               21      // ライセンスエラー\r
787 #define ERR_DEVICE_DRIVER_ERROR                 22      // デバイスドライバエラー\r
788 #define ERR_INTERNAL_ERROR                              23      // 内部エラー\r
789 #define ERR_SECURE_DEVICE_OPEN_FAILED   24      // セキュアデバイスを開けなかった\r
790 #define ERR_SECURE_PIN_LOGIN_FAILED             25      // PIN コードが違う\r
791 #define ERR_SECURE_NO_CERT                              26      // 指定された証明書が格納されていない\r
792 #define ERR_SECURE_NO_PRIVATE_KEY               27      // 指定された秘密鍵が格納されていない\r
793 #define ERR_SECURE_CANT_WRITE                   28      // 書き込み失敗\r
794 #define ERR_OBJECT_NOT_FOUND                    29      // 指定されたオブジェクトが見つからない\r
795 #define ERR_VLAN_ALREADY_EXISTS                 30      // 指定された名前の仮想 LAN カードは存在する\r
796 #define ERR_VLAN_INSTALL_ERROR                  31      // 指定された仮想 LAN カードを生成できない\r
797 #define ERR_VLAN_INVALID_NAME                   32      // 指定された仮想 LAN カードの名前は不正\r
798 #define ERR_NOT_SUPPORTED                               33      // サポートされていない\r
799 #define ERR_ACCOUNT_ALREADY_EXISTS              34      // アカウントはすでに存在する\r
800 #define ERR_ACCOUNT_ACTIVE                              35      // アカウントは動作中\r
801 #define ERR_ACCOUNT_NOT_FOUND                   36      // 指定されたアカウントは無い\r
802 #define ERR_ACCOUNT_INACTIVE                    37      // アカウントは停止中\r
803 #define ERR_INVALID_PARAMETER                   38      // パラメータが不正\r
804 #define ERR_SECURE_DEVICE_ERROR                 39      // セキュアデバイスの操作でエラーが発生した\r
805 #define ERR_NO_SECURE_DEVICE_SPECIFIED  40      // セキュアデバイスが指定されていない\r
806 #define ERR_VLAN_IS_USED                                41      // 仮想 LAN カードはアカウントによって使用中\r
807 #define ERR_VLAN_FOR_ACCOUNT_NOT_FOUND  42      // アカウントの仮想 LAN カードが見つからない\r
808 #define ERR_VLAN_FOR_ACCOUNT_USED               43      // アカウントの仮想 LAN カードはすでに使用中\r
809 #define ERR_VLAN_FOR_ACCOUNT_DISABLED   44      // アカウントの仮想 LAN カードは無効化されている\r
810 #define ERR_INVALID_VALUE                               45      // 値が不正\r
811 #define ERR_NOT_FARM_CONTROLLER                 46      // ファームコントローラではない\r
812 #define ERR_TRYING_TO_CONNECT                   47      // 接続を試行中\r
813 #define ERR_CONNECT_TO_FARM_CONTROLLER  48      // ファームコントローラへの接続に失敗\r
814 #define ERR_COULD_NOT_HOST_HUB_ON_FARM  49      // ファーム上に仮想 HUB を作成できなかった\r
815 #define ERR_FARM_MEMBER_HUB_ADMIN               50      // ファームメンバで HUB を管理することはできない\r
816 #define ERR_NULL_PASSWORD_LOCAL_ONLY    51      // 空文字のパスワードのためローカル接続のみ受付中\r
817 #define ERR_NOT_ENOUGH_RIGHT                    52      // 権利が不足している\r
818 #define ERR_LISTENER_NOT_FOUND                  53      // リスナーが見つからない\r
819 #define ERR_LISTENER_ALREADY_EXISTS             54      // すでにリスナーが存在している\r
820 #define ERR_NOT_FARM_MEMBER                             55      // ファームメンバではない\r
821 #define ERR_CIPHER_NOT_SUPPORTED                56      // 暗号化アルゴリズムがサポートされていない\r
822 #define ERR_HUB_ALREADY_EXISTS                  57      // HUB はすでに存在する\r
823 #define ERR_TOO_MANY_HUBS                               58      // HUB が多すぎる\r
824 #define ERR_LINK_ALREADY_EXISTS                 59      // リンクはすでに存在する\r
825 #define ERR_LINK_CANT_CREATE_ON_FARM    60      // リンクはサーバーファーム上に作成できない\r
826 #define ERR_LINK_IS_OFFLINE                             61      // リンクはオフラインである\r
827 #define ERR_TOO_MANY_ACCESS_LIST                62      // アクセスリストが多すぎる\r
828 #define ERR_TOO_MANY_USER                               63      // ユーザーが多すぎる\r
829 #define ERR_TOO_MANY_GROUP                              64      // グループが多すぎる\r
830 #define ERR_GROUP_NOT_FOUND                             65      // グループが見つからない\r
831 #define ERR_USER_ALREADY_EXISTS                 66      // ユーザーがすでに存在する\r
832 #define ERR_GROUP_ALREADY_EXISTS                67      // グループがすでに存在する\r
833 #define ERR_USER_AUTHTYPE_NOT_PASSWORD  68      // ユーザーの認証方法はパスワード認証ではない\r
834 #define ERR_OLD_PASSWORD_WRONG                  69      // 古いパスワードが間違っているかユーザーが存在しない\r
835 #define ERR_LINK_CANT_DISCONNECT                73      // カスケード セッションは切断できない\r
836 #define ERR_ACCOUNT_NOT_PRESENT                 74      // VPN サーバーへの接続設定が未完了である\r
837 #define ERR_ALREADY_ONLINE                              75      // すでにオンラインである\r
838 #define ERR_OFFLINE                                             76      // オフラインである\r
839 #define ERR_NOT_RSA_1024                                77      // RSA 1024bit 以外の証明書である\r
840 #define ERR_SNAT_CANT_DISCONNECT                78      // SecureNAT セッションは切断できない\r
841 #define ERR_SNAT_NEED_STANDALONE                79      // SecureNAT はスタンドアロン HUB でしか動作しない\r
842 #define ERR_SNAT_NOT_RUNNING                    80      // SecureNAT 機能が動作していない\r
843 #define ERR_SE_VPN_BLOCK                                81      // システム管理者向けブロックツールで停止された (廃止)\r
844 #define ERR_BRIDGE_CANT_DISCONNECT              82      // Bridge セッションは切断できない\r
845 #define ERR_LOCAL_BRIDGE_STOPPING               83      // Bridge 機能は停止している\r
846 #define ERR_LOCAL_BRIDGE_UNSUPPORTED    84      // Bridge 機能がサポートされていない\r
847 #define ERR_CERT_NOT_TRUSTED                    85      // 接続先サーバーの証明書が信頼できない\r
848 #define ERR_PRODUCT_CODE_INVALID                86      // 製品コードが違う\r
849 #define ERR_VERSION_INVALID                             87      // バージョンが違う\r
850 #define ERR_CAPTURE_DEVICE_ADD_ERROR    88      // キャプチャデバイス追加失敗\r
851 #define ERR_VPN_CODE_INVALID                    89      // VPN コードが違う\r
852 #define ERR_CAPTURE_NOT_FOUND                   90      // キャプチャデバイスが見つからない\r
853 #define ERR_LAYER3_CANT_DISCONNECT              91      // Layer-3 セッションは切断できない\r
854 #define ERR_LAYER3_SW_EXISTS                    92      // すでに同一の L3 スイッチが存在する\r
855 #define ERR_LAYER3_SW_NOT_FOUND                 93      // Layer-3 スイッチが見つからない\r
856 #define ERR_INVALID_NAME                                94      // 名前が不正\r
857 #define ERR_LAYER3_IF_ADD_FAILED                95      // インターフェイスの追加に失敗した\r
858 #define ERR_LAYER3_IF_DEL_FAILED                96      // インターフェイスの削除に失敗した\r
859 #define ERR_LAYER3_IF_EXISTS                    97      // 指定したインターフェイスはすでに存在する\r
860 #define ERR_LAYER3_TABLE_ADD_FAILED             98      // ルーティングテーブルの追加に失敗した\r
861 #define ERR_LAYER3_TABLE_DEL_FAILED             99      // ルーティングテーブルの削除に失敗した\r
862 #define ERR_LAYER3_TABLE_EXISTS                 100     // 指定したルーティングテーブルはすでに存在する\r
863 #define ERR_BAD_CLOCK                                   101     // 時刻がおかしい\r
864 #define ERR_LAYER3_CANT_START_SWITCH    102     // 仮想レイヤ 3 スイッチを開始できない\r
865 #define ERR_CLIENT_LICENSE_NOT_ENOUGH   103     // クライアント接続ライセンス数不足\r
866 #define ERR_BRIDGE_LICENSE_NOT_ENOUGH   104 // ブリッジ接続ライセンス数不足\r
867 #define ERR_SERVER_CANT_ACCEPT                  105     // 技術的な問題で Accept していない\r
868 #define ERR_SERVER_CERT_EXPIRES                 106     // 接続先 VPN サーバーの有効期限が切れている\r
869 #define ERR_MONITOR_MODE_DENIED                 107     // モニタポートモードは拒否された\r
870 #define ERR_BRIDGE_MODE_DENIED                  108     // ブリッジまたはルーティングモードは拒否された\r
871 #define ERR_IP_ADDRESS_DENIED                   109     // クライアント IP アドレスが拒否された\r
872 #define ERR_TOO_MANT_ITEMS                              110     // 項目数が多すぎる\r
873 #define ERR_MEMORY_NOT_ENOUGH                   111     // メモリ不足\r
874 #define ERR_OBJECT_EXISTS                               112     // オブジェクトはすでに存在している\r
875 #define ERR_FATAL                                               113     // 致命的なエラーが発生した\r
876 #define ERR_SERVER_LICENSE_FAILED               114     // サーバー側でライセンス違反が発生した\r
877 #define ERR_SERVER_INTERNET_FAILED              115     // サーバー側がインターネットに接続されていない\r
878 #define ERR_CLIENT_LICENSE_FAILED               116     // クライアント側でライセンス違反が発生した\r
879 #define ERR_BAD_COMMAND_OR_PARAM                117     // コマンドまたはパラメータが不正\r
880 #define ERR_INVALID_LICENSE_KEY                 118     // ライセンスキー不正\r
881 #define ERR_NO_VPN_SERVER_LICENSE               119     // VPN Server の有効なライセンスが無い\r
882 #define ERR_NO_VPN_CLUSTER_LICENSE              120     // クラスタライセンスが無い\r
883 #define ERR_NOT_ADMINPACK_SERVER                121     // Administrator Pack ライセンスを持ったサーバーに接続しようとしていない\r
884 #define ERR_NOT_ADMINPACK_SERVER_NET    122     // Administrator Pack ライセンスを持ったサーバーに接続しようとしていない (.NET 用)\r
885 #define ERR_BETA_EXPIRES                                123     // 接続先 VPN Server のベータ版の有効期限が切れている\r
886 #define ERR_BRANDED_C_TO_S                              124 // 接続制限用のブランド化文字列が異なる(サーバ側での認証用)\r
887 #define ERR_BRANDED_C_FROM_S                    125     // 接続制限用のブランド化文字列が異なる(クライアント側での認証用)\r
888 #define ERR_AUTO_DISCONNECTED                   126     // 一定時間が経過したため VPN セッションが切断された\r
889 #define ERR_CLIENT_ID_REQUIRED                  127     // クライアント ID が一致していない\r
890 #define ERR_TOO_MANY_USERS_CREATED              128     // 作成されているユーザー数が多すぎる\r
891 #define ERR_SUBSCRIPTION_IS_OLDER               129     // サブスクリプションの期限が VPN Server のビルド日時よりも前である\r
892 #define ERR_UTVPN_NOT_SUPPORT_THIS_AUTH 130     // UT-VPN はこの認証方法を実装していない\r
893 #define ERR_UTVPN_NOT_SUPPORT_THIS_FUNC 131     // UT-VPN はこの機能を実装していない\r
894 \r
895 \r
896 ////////////////////////////\r
897 // 全般的に使用される構造体\r
898 \r
899 // ネットワーク サービス\r
900 typedef struct NETSVC\r
901 {\r
902         bool Udp;                                               // false=TCP, true=UDP\r
903         UINT Port;                                              // ポート番号\r
904         char *Name;                                             // 名称\r
905 } NETSVC;\r
906 \r
907 // トラフィックデータエントリ\r
908 typedef struct TRAFFIC_ENTRY\r
909 {\r
910         UINT64 BroadcastCount;                  // ブロードキャストパケット数\r
911         UINT64 BroadcastBytes;                  // ブロードキャストバイト数\r
912         UINT64 UnicastCount;                    // ユニキャストカウント数\r
913         UINT64 UnicastBytes;                    // ユニキャストバイト数\r
914 } TRAFFIC_ENTRY;\r
915 \r
916 // トラフィックデータ\r
917 typedef struct TRAFFIC\r
918 {\r
919         TRAFFIC_ENTRY Send;                             // 送信データ\r
920         TRAFFIC_ENTRY Recv;                             // 受信データ\r
921 } TRAFFIC;\r
922 \r
923 // 非 SSL 接続元\r
924 typedef struct NON_SSL\r
925 {\r
926         IP IpAddress;                                   // IP アドレス\r
927         UINT64 EntryExpires;                    // エントリの有効期限\r
928         UINT Count;                                             // 接続回数\r
929 } NON_SSL;\r
930 \r
931 // 簡易ログ保存\r
932 typedef struct TINY_LOG\r
933 {\r
934         char FileName[MAX_PATH];                // ファイル名\r
935         IO *io;                                                 // ファイル\r
936         LOCK *Lock;                                             // ロック\r
937 } TINY_LOG;\r
938 \r
939 // CEDAR 構造体\r
940 typedef struct CEDAR\r
941 {\r
942         LOCK *lock;                                             // ロック\r
943         REF *ref;                                               // 参照カウンタ\r
944         COUNTER *AcceptingSockets;              // Accept 中のソケット数\r
945         UINT Type;                                              // 種類\r
946         LIST *ListenerList;                             // リスナーリスト\r
947         LIST *HubList;                                  // HUB リスト\r
948         LIST *ConnectionList;                   // ネゴシエーション中のコネクションリスト\r
949         LIST *CaList;                                   // CA のリスト\r
950         volatile bool Halt;                             // 停止フラグ\r
951         COUNTER *ConnectionIncrement;   // コネクションインクリメントカウンタ\r
952         X *ServerX;                                             // サーバー証明書\r
953         K *ServerK;                                             // サーバー証明書の秘密鍵\r
954         char *CipherList;                               // 暗号化アルゴリズムのリスト\r
955         UINT Version;                                   // バージョン情報\r
956         UINT Build;                                             // ビルド番号\r
957         char *ServerStr;                                // サーバー文字列\r
958         char *MachineName;                              // コンピュータ名\r
959         char *HttpUserAgent;                    // HTTP ユーザーエージェント\r
960         char *HttpAccept;                               // HTTP Accept\r
961         char *HttpAcceptLanguage;               // HTTP Accept Language\r
962         char *HttpAcceptEncoding;               // HTTP Accept Encoding\r
963         TRAFFIC *Traffic;                               // トラフィック情報\r
964         LOCK *TrafficLock;                              // トラフィック情報ロック\r
965         LIST *UDPEntryList;                             // UDP エントリリスト\r
966         COUNTER *CurrentSessions;               // 現在のセッション数\r
967         COUNTER *CurrentTcpConnections; // 現在の TCP コネクション数\r
968         LIST *NetSvcList;                               // ネットワークサービスリスト\r
969         char *VerString;                                // バージョン文字列\r
970         char *BuildInfo;                                // ビルド情報\r
971         struct CLIENT *Client;                  // クライアント\r
972         struct SERVER *Server;                  // サーバー\r
973         UINT64 CreatedTick;                             // 生成日時\r
974         bool CheckExpires;                              // 有効期限をチェックする\r
975         LIST *TrafficDiffList;                  // トラフィック差分リスト\r
976         struct LOG *DebugLog;                   // デバッグログ\r
977         UCHAR UniqueId[16];                             // ユニーク ID\r
978         LIST *LocalBridgeList;                  // ローカルブリッジリスト\r
979         bool Bridge;                                    // ブリッジ版\r
980         LIST *L3SwList;                                 // Layer-3 スイッチリスト\r
981         COUNTER *AssignedClientLicense; // 割り当て済みクライアントライセンス数\r
982         COUNTER *AssignedBridgeLicense; // 割り当て済みブリッジライセンス数\r
983         UINT64 LicenseViolationTick;    // ライセンス違反発生\r
984         LIST *NonSslList;                               // 非 SSL 接続リスト\r
985         struct WEBUI *WebUI;                    // WebUI サービス用データ\r
986         UINT Beta;                                              // ベータ番号\r
987         LOCK *CedarSuperLock;                   // シーダー スーパー ロック!\r
988         bool DisableIPv6Listener;               // IPv6 リスナーを無効にする\r
989         UINT ClientId;                                  // クライアント ID\r
990         UINT64 BuiltDate;                               // ビルドされた日付\r
991 } CEDAR;\r
992 \r
993 // CEDAR の種類\r
994 #define CEDAR_CLIENT                            0       // クライアント\r
995 #define CEDAR_STANDALONE_SERVER         1       // スタンドアロンサーバー\r
996 #define CEDAR_FARM_CONTROLLER           2       // サーバーファーム コントローラ\r
997 #define CEDAR_FARM_MEMBER                       3       // サーバーファーム メンバー\r
998 \r
999 \r
1000 ////////////////////////////\r
1001 // ヘッダファイルの読み込み\r
1002 \r
1003 // 型\r
1004 #include <Cedar/CedarType.h>\r
1005 // アカウントマネージャ\r
1006 #include <Cedar/Account.h>\r
1007 // リスナー モジュール\r
1008 #include <Cedar/Listener.h>\r
1009 // TCP/IP\r
1010 #include <Cedar/TcpIp.h>\r
1011 // ログ保存モジュール\r
1012 #include <Cedar/Logging.h>\r
1013 // コネクション管理\r
1014 #include <Cedar/Connection.h>\r
1015 // セッション管理\r
1016 #include <Cedar/Session.h>\r
1017 // RPC\r
1018 #include <Cedar/Remote.h>\r
1019 // HUB 管理\r
1020 #include <Cedar/Hub.h>\r
1021 // セキュリティアカウントマネージャ\r
1022 #include <Cedar/Sam.h>\r
1023 // プロトコル\r
1024 #include <Cedar/Protocol.h>\r
1025 // HUB 間リンク\r
1026 #include <Cedar/Link.h>\r
1027 // ユーザーモード仮想ホスト\r
1028 #include <Cedar/Virtual.h>\r
1029 // SecureNAT\r
1030 #include <Cedar/SecureNAT.h>\r
1031 // コンソール サービス\r
1032 #include <Cedar/Console.h>\r
1033 // vpncmd ユーティリティ\r
1034 #include <Cedar/Command.h>\r
1035 \r
1036 #ifdef  OS_WIN32\r
1037 // Sen デバイスドライバ\r
1038 #include <Sen/Sen.h>\r
1039 #endif  // OS_WIN32\r
1040 \r
1041 // Sen デバイスドライバ操作用ライブラリ\r
1042 #include <Cedar/VLan.h>\r
1043 // ブリッジ\r
1044 #include <Cedar/Bridge.h>\r
1045 // Layer-3 スイッチ\r
1046 #include <Cedar/Layer3.h>\r
1047 // テスト用仮想 LAN カード\r
1048 #include <Cedar/NullLan.h>\r
1049 // クライアント\r
1050 #include <Cedar/Client.h>\r
1051 /// サーバー\r
1052 #include <Cedar/Server.h>\r
1053 // ライセンスデータベース\r
1054 #include <Cedar/Database.h>\r
1055 // 管理 RPC\r
1056 #include <Cedar/Admin.h>\r
1057 // User-mode Router\r
1058 #include <Cedar/Nat.h>\r
1059 \r
1060 #ifdef  OS_WIN32\r
1061 \r
1062 // Win32 ユーザーインターフェイス\r
1063 #include <Cedar/WinUi.h>\r
1064 // Win32 クライアント接続マネージャ\r
1065 #include <Cedar/CM.h>\r
1066 // Win32 Server Manager\r
1067 #include <Cedar/SM.h>\r
1068 // Win32 User-mode Router Manager\r
1069 #include <Cedar/NM.h>\r
1070 // Win32 Network Utility\r
1071 #include <Cedar/UT.h>\r
1072 // Win32 HTML 表示モジュール\r
1073 #include <Cedar/Win32Html.h>\r
1074 \r
1075 #endif\r
1076 \r
1077 \r
1078 \r
1079 \r
1080 ////////////////////////////\r
1081 // 関数プロトタイプ\r
1082 \r
1083 TRAFFIC *NewTraffic();\r
1084 void FreeTraffic(TRAFFIC *t);\r
1085 CEDAR *NewCedar(X *server_x, K *server_k);\r
1086 void SetCedarVpnBridge(CEDAR *c);\r
1087 void SetCedarCert(CEDAR *c, X *server_x, K *server_k);\r
1088 void ReleaseCedar(CEDAR *c);\r
1089 void CleanupCedar(CEDAR *c);\r
1090 void StopCedar(CEDAR *c);\r
1091 void AddListener(CEDAR *c, LISTENER *r);\r
1092 void StopAllListener(CEDAR *c);\r
1093 void AddTraffic(TRAFFIC *dst, TRAFFIC *diff);\r
1094 void AddHub(CEDAR *c, HUB *h);\r
1095 void DelHub(CEDAR *c, HUB *h);\r
1096 void DelHubEx(CEDAR *c, HUB *h, bool no_lock);\r
1097 void StopAllHub(CEDAR *c);\r
1098 void StopAllConnection(CEDAR *c);\r
1099 void AddConnection(CEDAR *cedar, CONNECTION *c);\r
1100 UINT GetUnestablishedConnections(CEDAR *cedar);\r
1101 void DelConnection(CEDAR *cedar, CONNECTION *c);\r
1102 void SetCedarCipherList(CEDAR *cedar, char *name);\r
1103 void InitCedar();\r
1104 void FreeCedar();\r
1105 void AddCa(CEDAR *cedar, X *x);\r
1106 bool DeleteCa(CEDAR *cedar, UINT ptr);\r
1107 bool CheckSignatureByCa(CEDAR *cedar, X *x);\r
1108 bool CheckSignatureByCaLinkMode(SESSION *s, X *x);\r
1109 X *FindCaSignedX(LIST *o, X *x);\r
1110 void InitNetSvcList(CEDAR *cedar);\r
1111 void FreeNetSvcList(CEDAR *cedar);\r
1112 int CompareNetSvc(void *p1, void *p2);\r
1113 char *GetSvcName(CEDAR *cedar, bool udp, UINT port);\r
1114 void InitHiddenPassword(char *str, UINT size);\r
1115 bool IsHiddenPasswordChanged(char *str);\r
1116 UINT64 GetTrafficPacketSize(TRAFFIC *t);\r
1117 UINT64 GetTrafficPacketNum(TRAFFIC *t);\r
1118 void EnableDebugLog(CEDAR *c);\r
1119 void StartCedarLog();\r
1120 void StopCedarLog();\r
1121 void CedarLog(char *str);\r
1122 int CompareNoSslList(void *p1, void *p2);\r
1123 void InitNoSslList(CEDAR *c);\r
1124 void FreeNoSslList(CEDAR *c);\r
1125 bool AddNoSsl(CEDAR *c, IP *ip);\r
1126 void DecrementNoSsl(CEDAR *c, IP *ip, UINT num_dec);\r
1127 void DeleteOldNoSsl(CEDAR *c);\r
1128 NON_SSL *SearchNoSslList(CEDAR *c, IP *ip);\r
1129 bool IsInNoSsl(CEDAR *c, IP *ip);\r
1130 void FreeTinyLog(TINY_LOG *t);\r
1131 void WriteTinyLog(TINY_LOG *t, char *str);\r
1132 TINY_LOG *NewTinyLog();\r
1133 void GetWinVer(RPC_WINVER *v);\r
1134 bool IsSupportedWinVer(RPC_WINVER *v);\r
1135 bool IsLaterBuild(CEDAR *c, UINT64 t);\r
1136 \r
1137 \r
1138 #endif  // CEDAR_H\r
1139 \r