* tar xzf utvpn-src-unix-v101-7101-public-2010.06.27.tar.gz
[lab.git] / utvpn / utvpn-unix-v101-7101-public / src / Cedar / Hub.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 // Hub.h\r
79 // Hub.c のヘッダ\r
80 \r
81 #ifndef HUB_H\r
82 #define HUB_H\r
83 \r
84 \r
85 \r
86 // SoftEther リンク制御パケット\r
87 struct SE_LINK\r
88 {\r
89         UCHAR DestMacAddress[6];                        // 宛先 MAC アドレス\r
90         UCHAR SrcMacAddress[6];                         // 送信元 MAC アドレス\r
91         UCHAR SignatureS;                                       // 'S'\r
92         UCHAR SignatureE;                                       // 'E'\r
93         UCHAR Padding[2];                                       // パディング\r
94         UINT Type;                                                      // 種類\r
95         UCHAR HubSignature[16];                         // HUB シグネチャ\r
96         UINT TransactionId;                                     // トランザクション ID\r
97         UINT Data;                                                      // データ\r
98         UCHAR Dummy[20];                                        // ダミー\r
99         UCHAR Checksum[SHA1_SIZE];                      // チェックサム\r
100 };\r
101 \r
102 \r
103 // テストパケット受信記録\r
104 struct TEST_HISTORY\r
105 {\r
106         SESSION *s1;\r
107         SESSION *s2;\r
108 };\r
109 \r
110 // リンクテスト用状態マシン\r
111 struct SE_TEST\r
112 {\r
113         LOCK *lock;                                                     // ロック\r
114         UINT64 LastTestPacketSentTime;          // 最後にテストパケットを送信した時刻\r
115         UINT NextTestPacketSendInterval;        // 次のテストパケット送信間隔\r
116         bool CurrentTesting;                            // 現在テストパケットを送信してテスト中\r
117         UINT TransactionId;                                     // トランザクション ID\r
118         LIST *TestHistory;                                      // 受信履歴\r
119 };\r
120 \r
121 // マクロ\r
122 #define NO_ACCOUNT_DB(h)                ((h)->FarmMember)\r
123 \r
124 // スタンドアロンまたはファームマスタ HUB の場合のデータベース\r
125 struct HUBDB\r
126 {\r
127         LIST *UserList;                                         // ユーザーリスト\r
128         LIST *GroupList;                                        // グループリスト\r
129         LIST *RootCertList;                                     // 信頼する証明書リスト\r
130         LIST *CrlList;                                          // CRL リスト\r
131 };\r
132 \r
133 // トラフィック リミッタ\r
134 struct TRAFFIC_LIMITER\r
135 {\r
136         UINT64 LastTime;                                        // 最後に測定した時刻\r
137         UINT64 Value;                                           // 現在の値\r
138 };\r
139 \r
140 // エンドポイントごとのブロードキャスト数記録\r
141 struct STORM\r
142 {\r
143         UCHAR MacAddress[6];                            // MAC アドレス\r
144         UCHAR Padding[2];                                       // パディング\r
145         IP SrcIp;                                                       // 送信元 IP アドレス\r
146         IP DestIp;                                                      // 宛先 IP アドレス\r
147         UINT64 CheckStartTick;                          // チェックを開始した時刻\r
148         UINT CurrentBroadcastNum;                       // 現在のブロードキャスト個数\r
149         UINT DiscardValue;                                      // ブロードキャストパケットを破棄する割合\r
150 };\r
151 \r
152 // HUB 用パケットアダプタ情報構造体\r
153 struct HUB_PA\r
154 {\r
155         CANCEL *Cancel;                                         // キャンセルオブジェクト\r
156         QUEUE *PacketQueue;                                     // パケットキュー\r
157         bool MonitorPort;                                       // モニタポート\r
158         UINT64 Now;                                                     // 現在時刻\r
159         TRAFFIC_LIMITER UploadLimiter;          // アップロード帯域幅制限\r
160         TRAFFIC_LIMITER DownloadLimiter;        // ダウンロード帯域幅制限\r
161         SESSION *Session;                                       // セッション\r
162         LIST *StormList;                                        // ブロードキャスト嵐記録用リスト\r
163         UINT UsernameHash;                                      // ユーザー名ハッシュ\r
164         UINT GroupnameHash;                                     // グループ名ハッシュ\r
165 };\r
166 \r
167 // HUB オプション\r
168 struct HUB_OPTION\r
169 {\r
170         // 標準オプション\r
171         UINT MaxSession;                                        // 最大同時接続数\r
172         bool NoEnum;                                            // 列挙の対象外\r
173         // 拡張オプション\r
174         bool NoArpPolling;                                      // ARP ポーリングしない\r
175         bool NoIPv6AddrPolling;                         // IPv6 アドレスポーリングしない\r
176         bool NoIpTable;                                         // IP アドレステーブルを生成しない\r
177         bool NoMacAddressLog;                           // MAC アドレスの登録ログを書き込まない\r
178         bool ManageOnlyPrivateIP;                       // プライベート IP のみを管理対象にする\r
179         bool ManageOnlyLocalUnicastIPv6;        // ローカルユニキャスト IPv6 アドレスのみを管理対象にする\r
180         bool DisableIPParsing;                          // IP 解釈を禁止する\r
181         bool YieldAfterStorePacket;                     // パケットをストアした後イールドする\r
182         bool NoSpinLockForPacketDelay;          // スピンロックを使用しない\r
183         UINT BroadcastStormDetectionThreshold;  // ブロードキャスト数制限閾値\r
184         bool FilterPPPoE;                                       // PPPoE をフィルタリングする (0x8863, 0x8864)\r
185         bool FilterOSPF;                                        // OSPF をフィルタリングする (ip_proto=89)\r
186         bool FilterIPv4;                                        // IPv4 パケットをフィルタリングする\r
187         bool FilterIPv6;                                        // IPv6 パケットをフィルタリングする\r
188         bool FilterNonIP;                                       // 非 IP パケットをすべてフィルタリング\r
189         bool FilterBPDU;                                        // BPDU パケットをフィルタリングする\r
190         UINT ClientMinimumRequiredBuild;        // クライアントのビルド番号が一定以下であれば拒否\r
191         bool NoIPv6DefaultRouterInRAWhenIPv6;   // IPv6 ルータ広告からデフォルトルータ指定を削除 (IPv6 物理接続時のみ)\r
192         bool NoIPv4PacketLog;                           // IPv4 パケットのパケットログを保存しない\r
193         bool NoIPv6PacketLog;                           // IPv6 パケットのパケットログを保存しない\r
194         bool NoLookBPDUBridgeId;                        // スイッチングのために BPDU ブリッジ ID を見ない\r
195         bool NoManageVlanId;                            // VLAN ID を管理しない\r
196         UINT VlanTypeId;                                        // VLAN パケットの Type ID (通常は 0x8100)\r
197         bool FixForDLinkBPDU;                           // D-Link の変な挙動をする BPDU のための fix を適用する\r
198         UINT RequiredClientId;                          // クライアント ID\r
199 };\r
200 \r
201 // MAC テーブルエントリ\r
202 struct MAC_TABLE_ENTRY\r
203 {\r
204         UCHAR MacAddress[6];                            // MAC アドレス\r
205         UCHAR Padding[2];\r
206         UINT VlanId;                                            // VLAN ID\r
207         SESSION *Session;                                       // セッション\r
208         HUB_PA *HubPa;                                          // HUB パケットアダプタ\r
209         UINT64 CreatedTime;                                     // 作成日時\r
210         UINT64 UpdatedTime;                                     // 更新日時\r
211 };\r
212 \r
213 // IP テーブルエントリ\r
214 struct IP_TABLE_ENTRY\r
215 {\r
216         IP Ip;                                                          // IP アドレス\r
217         SESSION *Session;                                       // セッション\r
218         bool DhcpAllocated;                                     // DHCP によって割り当て済み\r
219         UINT64 CreatedTime;                                     // 作成日時\r
220         UINT64 UpdatedTime;                                     // 更新日時\r
221         UCHAR MacAddress[6];                            // MAC アドレス\r
222 };\r
223 \r
224 // ループリスト\r
225 struct LOOP_LIST\r
226 {\r
227         UINT NumSessions;\r
228         SESSION **Session;\r
229 };\r
230 \r
231 // アクセスリスト\r
232 struct ACCESS\r
233 {\r
234         // IPv4\r
235         UINT Id;                                                        // ID\r
236         wchar_t Note[MAX_ACCESSLIST_NOTE_LEN + 1];      // メモ\r
237         bool Active;                                            // 有効フラグ\r
238         UINT Priority;                                          // 優先順位\r
239         bool Discard;                                           // 破棄フラグ\r
240         UINT SrcIpAddress;                                      // 送信元 IP アドレス\r
241         UINT SrcSubnetMask;                                     // 送信元サブネットマスク\r
242         UINT DestIpAddress;                                     // 宛先 IP アドレス\r
243         UINT DestSubnetMask;                            // 宛先サブネットマスク\r
244         UINT Protocol;                                          // プロトコル\r
245         UINT SrcPortStart;                                      // 送信元ポート番号開始点\r
246         UINT SrcPortEnd;                                        // 送信元ポート番号終了点\r
247         UINT DestPortStart;                                     // 宛先ポート番号開始点\r
248         UINT DestPortEnd;                                       // 宛先ポート番号終了点\r
249         UINT SrcUsernameHash;                           // 送信元ユーザー名ハッシュ\r
250         char SrcUsername[MAX_USERNAME_LEN + 1];\r
251         UINT DestUsernameHash;                          // 宛先ユーザー名ハッシュ\r
252         char DestUsername[MAX_USERNAME_LEN + 1];\r
253         bool CheckSrcMac;                                       // 送信元 MAC アドレスの設定の有無\r
254         UCHAR SrcMacAddress[6];                         // 送信元 MAC アドレス\r
255         UCHAR SrcMacMask[6];                            // 送信元 MAC アドレスマスク\r
256         bool CheckDstMac;                                       // 宛先 MAC アドレスの設定の有無\r
257         UCHAR DstMacAddress[6];                         // 宛先 MAC アドレス\r
258         UCHAR DstMacMask[6];                            // 宛先 MAC アドレスマスク\r
259         bool CheckTcpState;                                     // TCP コネクションの状態\r
260         bool Established;                                       // Establieshed(TCP)\r
261         UINT Delay;                                                     // 遅延\r
262         UINT Jitter;                                            // ジッタ\r
263         UINT Loss;                                                      // パケットロス\r
264 \r
265         // IPv6\r
266         bool IsIPv6;                                            // IPv6 かどうか\r
267         IPV6_ADDR SrcIpAddress6;                        // 送信元 IP アドレス (IPv6)\r
268         IPV6_ADDR SrcSubnetMask6;                       // 送信元サブネットマスク (IPv6)\r
269         IPV6_ADDR DestIpAddress6;                       // 宛先 IP アドレス (IPv6)\r
270         IPV6_ADDR DestSubnetMask6;                      // 宛先サブネットマスク (IPv6)\r
271 };\r
272 \r
273 // チケット\r
274 struct TICKET\r
275 {\r
276         UINT64 CreatedTick;                                             // 作成日時\r
277         UCHAR Ticket[SHA1_SIZE];                                // チケット\r
278         char Username[MAX_USERNAME_LEN + 1];    // ユーザー名\r
279         char UsernameReal[MAX_USERNAME_LEN + 1];        // 本当のユーザー名\r
280         char GroupName[MAX_USERNAME_LEN + 1];   // グループ名\r
281         char SessionName[MAX_SESSION_NAME_LEN + 1];     // セッション名\r
282         POLICY Policy;                                                  // ポリシー\r
283 };\r
284 \r
285 // トラフィック差分\r
286 struct TRAFFIC_DIFF\r
287 {\r
288         UINT Type;                                                      // 種別\r
289         TRAFFIC Traffic;                                        // トラフィック\r
290         char *HubName;                                          // HUB 名\r
291         char *Name;                                                     // 名前\r
292 };\r
293 \r
294 // 管理オプション\r
295 struct ADMIN_OPTION\r
296 {\r
297         char Name[MAX_ADMIN_OPTION_NAME_LEN + 1];       // 名前\r
298         UINT Value;                                                                     // データ\r
299 };\r
300 \r
301 // 証明書無効エントリ\r
302 struct CRL\r
303 {\r
304         X_SERIAL *Serial;                                       // シリアル番号\r
305         NAME *Name;                                                     // 名前情報\r
306         UCHAR DigestMD5[MD5_SIZE];                      // MD5 ハッシュ\r
307         UCHAR DigestSHA1[SHA1_SIZE];            // SHA-1 ハッシュ\r
308 };\r
309 \r
310 // アクセスコントロール\r
311 struct AC\r
312 {\r
313         UINT Id;                                                        // ID\r
314         UINT Priority;                                          // 優先順位\r
315         bool Deny;                                                      // アクセスを拒否\r
316         bool Masked;                                            // マスクされているかどうか\r
317         IP IpAddress;                                           // IP アドレス\r
318         IP SubnetMask;                                          // サブネットマスク\r
319 };\r
320 \r
321 // HUB 構造体\r
322 struct HUB\r
323 {\r
324         LOCK *lock;                                                     // ロック\r
325         LOCK *lock_online;                                      // オンライン用ロック\r
326         REF *ref;                                                       // 参照カウンタ\r
327         CEDAR *Cedar;                                           // Cedar\r
328         UINT Type;                                                      // 種類\r
329         HUBDB *HubDb;                                           // データベース\r
330         char *Name;                                                     // HUB の名前\r
331         LOCK *RadiusOptionLock;                         // Radius オプション用ロック\r
332         char *RadiusServerName;                         // Radius サーバー名\r
333         UINT RadiusServerPort;                          // Radius サーバーポート番号\r
334         UINT RadiusRetryInterval;                       // Radius 再試行間隔\r
335         BUF *RadiusSecret;                                      // Radius 共有鍵\r
336         volatile bool Halt;                                     // 停止フラグ\r
337         bool Offline;                                           // オフライン\r
338         bool BeingOffline;                                      // オフライン化中\r
339         LIST *SessionList;                                      // セッションリスト\r
340         COUNTER *SessionCounter;                        // セッション番号生成カウンタ\r
341         TRAFFIC *Traffic;                                       // トラフィック情報\r
342         TRAFFIC *OldTraffic;                            // 古いトラフィック情報\r
343         LOCK *TrafficLock;                                      // トラフィックロック\r
344         COUNTER *NumSessions;                           // 現在のセッション数\r
345         COUNTER *NumSessionsClient;                     // 現在のセッション数 (クライアント)\r
346         COUNTER *NumSessionsBridge;                     // 現在のセッション数 (ブリッジ)\r
347         HUB_OPTION *Option;                                     // HUB オプション\r
348         LIST *MacTable;                                         // MAC アドレステーブル\r
349         LIST *IpTable;                                          // IP アドレステーブル\r
350         LIST *MonitorList;                                      // モニタポートセッションリスト\r
351         LIST *LinkList;                                         // リンクリスト\r
352         UCHAR HubSignature[16];                         // HUB シグネチャ\r
353         UCHAR HubMacAddr[6];                            // HUB の MAC アドレス\r
354         IP HubIp;                                                       // HUB の IP アドレス (IPv4)\r
355         IPV6_ADDR HubIpV6;                                      // HUB の IP アドレス (IPv6)\r
356         UINT HubIP6Id;                                          // HUB の IPv6 パケット ID\r
357         UCHAR Padding[2];                                       // パディング\r
358         LOCK *LoopListLock;                                     // ループリスト用ロック\r
359         UINT NumLoopList;                                       // ループリスト数\r
360         LOOP_LIST **LoopLists;                          // ループリスト\r
361         LIST *AccessList;                                       // アクセスリスト\r
362         HUB_LOG LogSetting;                                     // ログ設定\r
363         LOG *PacketLogger;                                      // パケットロガー\r
364         LOG *SecurityLogger;                            // セキュリティロガー\r
365         UCHAR HashedPassword[SHA1_SIZE];        // パスワード\r
366         UCHAR SecurePassword[SHA1_SIZE];        // セキュアパスワード\r
367         LIST *TicketList;                                       // チケットリスト\r
368         bool FarmMember;                                        // ファームメンバー\r
369         UINT64 LastIncrementTraffic;            // トラフィック報告時刻\r
370         UINT64 LastSendArpTick;                         // 最後の ARP 送信時刻\r
371         SNAT *SecureNAT;                                        // SecureNAT\r
372         bool EnableSecureNAT;                           // SecureNAT 有効/無効フラグ\r
373         VH_OPTION *SecureNATOption;                     // SecureNAT のオプション\r
374         THREAD *WatchDogThread;                         // 番犬スレッド\r
375         EVENT *WatchDogEvent;                           // 番犬イベント\r
376         bool WatchDogStarted;                           // 番犬スレッドが使用されているかどうか\r
377         volatile bool HaltWatchDog;                     // 番犬スレッドの停止\r
378         LIST *AdminOptionList;                          // 管理オプションリスト\r
379         UINT64 CreatedTime;                                     // 作成日時\r
380         UINT64 LastCommTime;                            // 最終通信日時\r
381         UINT64 LastLoginTime;                           // 最終ログイン日時\r
382         UINT NumLogin;                                          // ログイン回数\r
383         bool HubIsOnlineButHalting;                     // 仮想 HUB は本当はオンラインだが停止のためにオフライン化してある\r
384         UINT FarmMember_MaxSessionClient;       // クラスタメンバ用 最大クライアント接続セッション数\r
385         UINT FarmMember_MaxSessionBridge;       // クラスタメンバ用 最大ブリッジ接続セッション数\r
386         bool FarmMember_MaxSessionClientBridgeApply;    // FarmMember_MaxSession* を適用する\r
387         UINT CurrentVersion;                            // 現在のバージョン\r
388         UINT LastVersion;                                       // 最後に更新通知を発行したときのバージョン\r
389         wchar_t *Msg;                                           // クライアントが接続してきたときに表示するメッセージ\r
390 };\r
391 \r
392 \r
393 // グローバル変数\r
394 extern ADMIN_OPTION admin_options[];\r
395 extern UINT num_admin_options;\r
396 \r
397 \r
398 // 関数プロトタイプ\r
399 HUBDB *NewHubDb();\r
400 void DeleteHubDb(HUBDB *d);\r
401 HUB *NewHub(CEDAR *cedar, char *HubName, HUB_OPTION *option);\r
402 void SetHubMsg(HUB *h, wchar_t *msg);\r
403 wchar_t *GetHubMsg(HUB *h);\r
404 void GenHubMacAddress(UCHAR *mac, char *name);\r
405 void GenHubIpAddress(IP *ip, char *name);\r
406 bool IsHubIpAddress(IP *ip);\r
407 bool IsHubIpAddress32(UINT ip32);\r
408 bool IsHubIpAddress64(IPV6_ADDR *addr);\r
409 bool IsHubMacAddress(UCHAR *mac);\r
410 void ReleaseHub(HUB *h);\r
411 void CleanupHub(HUB *h);\r
412 int CompareHub(void *p1, void *p2);\r
413 void LockHubList(CEDAR *cedar);\r
414 void UnlockHubList(CEDAR *cedar);\r
415 HUB *GetHub(CEDAR *cedar, char *name);\r
416 bool IsHub(CEDAR *cedar, char *name);\r
417 void StopHub(HUB *h);\r
418 void AddSession(HUB *h, SESSION *s);\r
419 void DelSession(HUB *h, SESSION *s);\r
420 void StopAllSession(HUB *h);\r
421 bool HubPaInit(SESSION *s);\r
422 void HubPaFree(SESSION *s);\r
423 CANCEL *HubPaGetCancel(SESSION *s);\r
424 UINT HubPaGetNextPacket(SESSION *s, void **data);\r
425 bool HubPaPutPacket(SESSION *s, void *data, UINT size);\r
426 PACKET_ADAPTER *GetHubPacketAdapter();\r
427 int CompareMacTable(void *p1, void *p2);\r
428 void StorePacket(HUB *hub, SESSION *s, PKT *packet);\r
429 bool StorePacketFilter(SESSION *s, PKT *packet);\r
430 void StorePacketToHubPa(HUB_PA *dest, SESSION *src, void *data, UINT size, PKT *packet);\r
431 void SetHubOnline(HUB *h);\r
432 void SetHubOffline(HUB *h);\r
433 SESSION *GetSessionByPtr(HUB *hub, void *ptr);\r
434 SESSION *GetSessionByName(HUB *hub, char *name);\r
435 int CompareIpTable(void *p1, void *p2);\r
436 bool StorePacketFilterByPolicy(SESSION *s, PKT *p);\r
437 bool DeleteIPv6DefaultRouterInRA(PKT *p);\r
438 bool StorePacketFilterByTrafficLimiter(SESSION *s, PKT *p);\r
439 void IntoTrafficLimiter(TRAFFIC_LIMITER *tr, PKT *p);\r
440 bool IsMostHighestPriorityPacket(SESSION *s, PKT *p);\r
441 bool IsPriorityPacketForQoS(PKT *p);\r
442 int CompareStormList(void *p1, void *p2);\r
443 STORM *SearchStormList(HUB_PA *pa, UCHAR *mac_address, IP *src_ip, IP *dest_ip);\r
444 STORM *AddStormList(HUB_PA *pa, UCHAR *mac_address, IP *src_ip, IP *dest_ip);\r
445 bool CheckBroadcastStorm(SESSION *s, PKT *p);\r
446 void AddRootCert(HUB *hub, X *x);\r
447 int CmpAccessList(void *p1, void *p2);\r
448 void InitAccessList(HUB *hub);\r
449 void FreeAccessList(HUB *hub);\r
450 void AddAccessList(HUB *hub, ACCESS *a);\r
451 UINT UsernameToInt(char *name);\r
452 bool ApplyAccessListToStoredPacket(HUB *hub, SESSION *s, PKT *p);\r
453 bool ApplyAccessListToForwardPacket(HUB *hub, SESSION *src_session, SESSION *dest_session, PKT *p);\r
454 bool IsPacketMaskedByAccessList(SESSION *s, PKT *p, ACCESS *a, UINT dest_username, UINT dest_groupname);\r
455 void GetAccessListStr(char *str, UINT size, ACCESS *a);\r
456 void DeleteOldIpTableEntry(LIST *o);\r
457 void SetRadiusServer(HUB *hub, char *name, UINT port, char *secret);\r
458 void SetRadiusServerEx(HUB *hub, char *name, UINT port, char *secret, UINT interval);\r
459 bool GetRadiusServer(HUB *hub, char *name, UINT size, UINT *port, char *secret, UINT secret_size);\r
460 bool GetRadiusServerEx(HUB *hub, char *name, UINT size, UINT *port, char *secret, UINT secret_size, UINT *interval);\r
461 int CompareCert(void *p1, void *p2);\r
462 void GetHubLogSetting(HUB *h, HUB_LOG *setting);\r
463 void SetHubLogSetting(HUB *h, HUB_LOG *setting);\r
464 void SetHubLogSettingEx(HUB *h, HUB_LOG *setting, bool no_change_switch_type);\r
465 void DeleteExpiredIpTableEntry(LIST *o);\r
466 void DeleteExpiredMacTableEntry(LIST *o);\r
467 void AddTrafficDiff(HUB *h, char *name, UINT type, TRAFFIC *traffic);\r
468 void IncrementHubTraffic(HUB *h);\r
469 void EnableSecureNAT(HUB *h, bool enable);\r
470 void EnableSecureNATEx(HUB *h, bool enable, bool no_change);\r
471 void StartHubWatchDog(HUB *h);\r
472 void StopHubWatchDog(HUB *h);\r
473 void HubWatchDogThread(THREAD *t, void *param);\r
474 int CompareAdminOption(void *p1, void *p2);\r
475 UINT GetHubAdminOptionEx(HUB *h, char *name, UINT default_value);\r
476 UINT GetHubAdminOption(HUB *h, char *name);\r
477 void DeleteAllHubAdminOption(HUB *h, bool lock);\r
478 void AddHubAdminOptionsDefaults(HUB *h, bool lock);\r
479 bool IsCertMatchCrl(X *x, CRL *crl);\r
480 bool IsCertMatchCrlList(X *x, LIST *o);\r
481 wchar_t *GenerateCrlStr(CRL *crl);\r
482 bool IsValidCertInHub(HUB *h, X *x);\r
483 void FreeCrl(CRL *crl);\r
484 CRL *CopyCrl(CRL *crl);\r
485 int CmpAc(void *p1, void *p2);\r
486 LIST *NewAcList();\r
487 void AddAc(LIST *o, AC *ac);\r
488 bool DelAc(LIST *o, UINT id);\r
489 AC *GetAc(LIST *o, UINT id);\r
490 void SetAc(LIST *o, UINT id, AC *ac);\r
491 void DelAllAc(LIST *o);\r
492 void SetAcList(LIST *o, LIST *src);\r
493 void NormalizeAcList(LIST *o);\r
494 char *GenerateAcStr(AC *ac);\r
495 void FreeAcList(LIST *o);\r
496 LIST *CloneAcList(LIST *o);\r
497 bool IsIPPrivate(IP *ip);\r
498 bool IsIPManagementTargetForHUB(IP *ip, HUB *hub);\r
499 wchar_t *GetHubAdminOptionHelpString(char *name);\r
500 void HubOptionStructToData(RPC_ADMIN_OPTION *ao, HUB_OPTION *o, char *hub_name);\r
501 ADMIN_OPTION *NewAdminOption(char *name, UINT value);\r
502 void DataToHubOptionStruct(HUB_OPTION *o, RPC_ADMIN_OPTION *ao);\r
503 UINT GetHubAdminOptionData(RPC_ADMIN_OPTION *ao, char *name);\r
504 void GetHubAdminOptionDataAndSet(RPC_ADMIN_OPTION *ao, char *name, UINT *dest);\r
505 bool IsURLMsg(wchar_t *str, char *url, UINT url_size);\r
506 \r
507 \r
508 #endif  // HUB_H\r
509 \r
510 \r