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