source: lab.git/Dev/utvpn/utvpn-unix-v101-7101-public/src/Cedar/Cedar.h @ a1bae3e

trunk
Last change on this file since a1bae3e was a1bae3e, checked in by mitty <mitty@…>, 12 years ago
  • copy vendor drop to trunk

git-svn-id: https://lab.mitty.jp/svn/lab/trunk@147 7d2118f6-f56c-43e7-95a2-4bb3031d96e7

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