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

trunk
Last change on this file since 072e48b 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: 11.3 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// Nat.h
79// Nat.c のヘッダ
80
81#ifndef NAT_H
82#define NAT_H
83
84// 定数
85#define NAT_CONFIG_FILE_NAME            "@vpn_router.config"    // NAT 設定ファイル
86#define DEFAULT_NAT_ADMIN_PORT          2828        // デフォルトの管理用ポート番号
87#define NAT_ADMIN_PORT_LISTEN_INTERVAL  1000        // 管理用ポートを開こうとする間隔
88#define NAT_FILE_SAVE_INTERVAL          (30 * 1000) // 保存間隔
89
90
91// NAT オブジェクト
92struct NAT
93{
94    LOCK *lock;                         // ロック
95    UCHAR HashedPassword[SHA1_SIZE];    // 管理用パスワード
96    VH_OPTION Option;                   // オプション
97    CEDAR *Cedar;                       // Cedar
98    UINT AdminPort;                     // 管理用ポート番号
99    bool Online;                        // オンライン フラグ
100    VH *Virtual;                        // 仮想ホストオブジェクト
101    CLIENT_OPTION *ClientOption;        // クライアントオプション
102    CLIENT_AUTH *ClientAuth;            // クライアント認証データ
103    CFG_RW *CfgRw;                      // Config ファイル R/W
104    THREAD *AdminAcceptThread;          // 管理用コネクション受付スレッド
105    SOCK *AdminListenSock;              // 管理ポートソケット
106    EVENT *HaltEvent;                   // 停止イベント
107    volatile bool Halt;                 // 停止フラグ
108    LIST *AdminList;                    // 管理スレッドリスト
109    X *AdminX;                          // 管理用サーバー証明書
110    K *AdminK;                          // 管理用サーバー秘密鍵
111    SNAT *SecureNAT;                    // SecureNAT オブジェクト
112};
113
114// NAT 管理コネクション
115struct NAT_ADMIN
116{
117    NAT *Nat;                           // NAT
118    SOCK *Sock;                         // ソケット
119    THREAD *Thread;                     // スレッド
120};
121
122// RPC_DUMMY
123struct RPC_DUMMY
124{
125    UINT DummyValue;
126};
127
128// RPC_NAT_STATUS
129struct RPC_NAT_STATUS
130{
131    char HubName[MAX_HUBNAME_LEN + 1];          // HUB 名
132    UINT NumTcpSessions;                        // TCP セッション数
133    UINT NumUdpSessions;                        // UDP セッション数
134    UINT NumDhcpClients;                        // DHCP クライアント数
135};
136
137// RPC_NAT_INFO *
138struct RPC_NAT_INFO
139{
140    char NatProductName[128];                   // サーバー製品名
141    char NatVersionString[128];                 // サーバーバージョン文字列
142    char NatBuildInfoString[128];               // サーバービルド情報文字列
143    UINT NatVerInt;                             // サーバーバージョン整数値
144    UINT NatBuildInt;                           // サーバービルド番号整数値
145    char NatHostName[MAX_HOST_NAME_LEN + 1];    // サーバーホスト名
146    OS_INFO OsInfo;                             // OS 情報
147    MEMINFO MemInfo;                            // メモリ情報
148};
149
150// RPC_ENUM_NAT_ITEM
151struct RPC_ENUM_NAT_ITEM
152{
153    UINT Id;                                    // ID
154    UINT Protocol;                              // プロトコル
155    UINT SrcIp;                                 // 接続元 IP アドレス
156    char SrcHost[MAX_HOST_NAME_LEN + 1];        // 接続元ホスト名
157    UINT SrcPort;                               // 接続元ポート番号
158    UINT DestIp;                                // 接続先 IP アドレス
159    char DestHost[MAX_HOST_NAME_LEN + 1];       // 接続先ホスト名
160    UINT DestPort;                              // 接続先ポート番号
161    UINT64 CreatedTime;                         // 接続時刻
162    UINT64 LastCommTime;                        // 最終通信時刻
163    UINT64 SendSize;                            // 送信サイズ
164    UINT64 RecvSize;                            // 受信サイズ
165    UINT TcpStatus;                             // TCP 状態
166};
167
168// RPC_ENUM_NAT *
169struct RPC_ENUM_NAT
170{
171    char HubName[MAX_HUBNAME_LEN + 1];          // HUB 名
172    UINT NumItem;                               // アイテム数
173    RPC_ENUM_NAT_ITEM *Items;                   // アイテム
174};
175
176// RPC_ENUM_DHCP_ITEM
177struct RPC_ENUM_DHCP_ITEM
178{
179    UINT Id;                                    // ID
180    UINT64 LeasedTime;                          // リース時刻
181    UINT64 ExpireTime;                          // 有効期限
182    UCHAR MacAddress[6];                        // MAC アドレス
183    UCHAR Padding[2];                           // パディング
184    UINT IpAddress;                             // IP アドレス
185    UINT Mask;                                  // サブネットマスク
186    char Hostname[MAX_HOST_NAME_LEN + 1];       // ホスト名
187};
188
189// RPC_ENUM_DHCP *
190struct RPC_ENUM_DHCP
191{
192    char HubName[MAX_HUBNAME_LEN + 1];          // HUB 名
193    UINT NumItem;                               // アイテム数
194    RPC_ENUM_DHCP_ITEM *Items;                  // アイテム
195};
196
197
198// 関数プロトタイプ
199NAT *NiNewNat();
200NAT *NiNewNatEx(SNAT *snat, VH_OPTION *o);
201void NiFreeNat(NAT *n);
202void NiInitConfig(NAT *n);
203void NiFreeConfig(NAT *n);
204void NiInitDefaultConfig(NAT *n);
205void NiSetDefaultVhOption(NAT *n, VH_OPTION *o);
206void NiClearUnsupportedVhOptionForDynamicHub(VH_OPTION *o, bool initial);
207void NiWriteConfig(NAT *n);
208void NiWriteVhOption(NAT *n, FOLDER *root);
209void NiWriteVhOptionEx(VH_OPTION *o, FOLDER *root);
210void NiWriteClientData(NAT *n, FOLDER *root);
211void NiLoadVhOption(NAT *n, FOLDER *root);
212void NiLoadVhOptionEx(VH_OPTION *o, FOLDER *root);
213bool NiLoadConfig(NAT *n, FOLDER *root);
214void NiLoadClientData(NAT *n, FOLDER *root);
215void NiInitAdminAccept(NAT *n);
216void NiFreeAdminAccept(NAT *n);
217void NiListenThread(THREAD *thread, void *param);
218void NiAdminThread(THREAD *thread, void *param);
219void NiAdminMain(NAT *n, SOCK *s);
220PACK *NiRpcServer(RPC *r, char *name, PACK *p);
221
222RPC *NatAdminConnect(CEDAR *cedar, char *hostname, UINT port, void *hashed_password, UINT *err);
223void NatAdminDisconnect(RPC *r);
224
225void NtStartNat();
226void NtStopNat();
227void NtInit();
228void NtFree();
229
230
231UINT NtOnline(NAT *n, RPC_DUMMY *t);
232UINT NtOffline(NAT *n, RPC_DUMMY *t);
233UINT NtSetHostOption(NAT *n, VH_OPTION *t);
234UINT NtGetHostOption(NAT *n, VH_OPTION *t);
235UINT NtSetClientConfig(NAT *n, RPC_CREATE_LINK *t);
236UINT NtGetClientConfig(NAT *n, RPC_CREATE_LINK *t);
237UINT NtGetStatus(NAT *n, RPC_NAT_STATUS *t);
238UINT NtGetInfo(NAT *n, RPC_NAT_INFO *t);
239UINT NtEnumNatList(NAT *n, RPC_ENUM_NAT *t);
240UINT NtEnumDhcpList(NAT *n, RPC_ENUM_DHCP *t);
241UINT NtSetPassword(NAT *n, RPC_SET_PASSWORD *t);
242
243
244UINT NcOnline(RPC *r, RPC_DUMMY *t);
245UINT NcOffline(RPC *r, RPC_DUMMY *t);
246UINT NcSetHostOption(RPC *r, VH_OPTION *t);
247UINT NcGetHostOption(RPC *r, VH_OPTION *t);
248UINT NcSetClientConfig(RPC *r, RPC_CREATE_LINK *t);
249UINT NcGetClientConfig(RPC *r, RPC_CREATE_LINK *t);
250UINT NcGetStatus(RPC *r, RPC_NAT_STATUS *t);
251UINT NcGetInfo(RPC *r, RPC_NAT_INFO *t);
252UINT NcEnumNatList(RPC *r, RPC_ENUM_NAT *t);
253UINT NcEnumDhcpList(RPC *r, RPC_ENUM_DHCP *t);
254UINT NcSetPassword(RPC *r, RPC_SET_PASSWORD *t);
255
256
257
258
259void InRpcEnumDhcp(RPC_ENUM_DHCP *t, PACK *p);
260void OutRpcEnumDhcp(PACK *p, RPC_ENUM_DHCP *t);
261void FreeRpcEnumDhcp(RPC_ENUM_DHCP *t);
262void InRpcEnumNat(RPC_ENUM_NAT *t, PACK *p);
263void OutRpcEnumNat(PACK *p, RPC_ENUM_NAT *t);
264void FreeRpcEnumNat(RPC_ENUM_NAT *t);
265void InRpcNatInfo(RPC_NAT_INFO *t, PACK *p);
266void OutRpcNatInfo(PACK *p, RPC_NAT_INFO *t);
267void FreeRpcNatInfo(RPC_NAT_INFO *t);
268void InRpcNatStatus(RPC_NAT_STATUS *t, PACK *p);
269void OutRpcNatStatus(PACK *p, RPC_NAT_STATUS *t);
270void FreeRpcNatStatus(RPC_NAT_STATUS *t);
271void InVhOption(VH_OPTION *t, PACK *p);
272void OutVhOption(PACK *p, VH_OPTION *t);
273void InRpcDummy(RPC_DUMMY *t, PACK *p);
274void OutRpcDummy(PACK *p, RPC_DUMMY *t);
275
276
277
278
279#endif  // NAT_H
280
281
Note: See TracBrowser for help on using the repository browser.