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

trunk
Last change on this file since 86521dd 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: 9.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// Layer3.h
79// Layer3.c のヘッダ
80
81#ifndef LAYER3_H
82#define LAYER3_H
83
84// 定数
85#define L3_USERNAME                 "L3SW_"
86
87
88// L3 ARP テーブルエントリ
89struct L3ARPENTRY
90{
91    UINT IpAddress;                 // IP アドレス
92    UCHAR MacAddress[6];            // MAC アドレス
93    UCHAR Padding[2];
94    UINT64 Expire;                  // 有効期限
95};
96
97// L3 ARP 解決待ちリストエントリ
98struct L3ARPWAIT
99{
100    UINT IpAddress;                 // IP アドレス
101    UINT64 LastSentTime;            // 最後に ARP を送信した時刻
102    UINT64 Expire;                  // 有効期限
103};
104
105// L3 IP パケットテーブル
106struct L3PACKET
107{
108    PKT *Packet;                    // パケットデータ本体
109    UINT64 Expire;                  // 有効期限
110    UINT NextHopIp;                 // ローカル配信宛先 IP アドレス
111};
112
113// L3 ルーティングテーブル定義
114struct L3TABLE
115{
116    UINT NetworkAddress;            // ネットワークアドレス
117    UINT SubnetMask;                // サブネットマスク
118    UINT GatewayAddress;            // ゲートウェイアドレス
119    UINT Metric;                    // メトリック
120};
121
122// L3 インターフェイス定義
123struct L3IF
124{
125    L3SW *Switch;                   // Layer-3 スイッチ
126    char HubName[MAX_HUBNAME_LEN + 1];  // 仮想 HUB 名
127    UINT IpAddress;                 // IP アドレス
128    UINT SubnetMask;                // サブネットマスク
129
130    HUB *Hub;                       // 仮想 HUB
131    SESSION *Session;               // セッション
132    LIST *ArpTable;                 // ARP テーブル
133    LIST *ArpWaitTable;             // ARP 待機テーブル
134    QUEUE *IpPacketQueue;           // IP パケットキュー (他のインターフェイスからの受信用)
135    LIST *IpWaitList;               // IP 待機リスト
136    QUEUE *SendQueue;               // 送信キュー
137    UCHAR MacAddress[6];            // MAC アドレス
138    UCHAR Padding[2];
139    UINT64 LastDeleteOldArpTable;   // 古い ARP テーブルを清掃した時刻
140    LIST *CancelList;               // キャンセルリスト
141    UINT64 LastBeaconSent;          // 最後にビーコンを送信した時刻
142};
143
144// L3 スイッチ定義
145struct L3SW
146{
147    char Name[MAX_HUBNAME_LEN + 1]; // 名前
148    LOCK *lock;                     // ロック
149    REF *ref;                       // 参照カウンタ
150    CEDAR *Cedar;                   // Cedar
151    bool Active;                    // 動作中フラグ
152    bool Online;                    // オンラインフラグ
153    volatile bool Halt;             // 停止フラグ
154    LIST *IfList;                   // インターフェイスリスト
155    LIST *TableList;                // ルーティングテーブルリスト
156    THREAD *Thread;                 // スレッド
157};
158
159
160
161// 関数プロトタイプ
162int CmpL3Sw(void *p1, void *p2);
163int CmpL3ArpEntry(void *p1, void *p2);
164int CmpL3ArpWaitTable(void *p1, void *p2);
165int CmpL3Table(void *p1, void *p2);
166int CmpL3If(void *p1, void *p2);
167void InitCedarLayer3(CEDAR *c);
168void FreeCedarLayer3(CEDAR *c);
169L3SW *NewL3Sw(CEDAR *c, char *name);
170void ReleaseL3Sw(L3SW *s);
171void CleanupL3Sw(L3SW *s);
172bool L3AddIf(L3SW *s, char *hubname, UINT ip, UINT subnet);
173bool L3DelIf(L3SW *s, char *hubname);
174bool L3AddTable(L3SW *s, L3TABLE *tbl);
175bool L3DelTable(L3SW *s, L3TABLE *tbl);
176L3IF *L3SearchIf(L3SW *s, char *hubname);
177L3SW *L3GetSw(CEDAR *c, char *name);
178L3SW *L3AddSw(CEDAR *c, char *name);
179bool L3DelSw(CEDAR *c, char *name);
180void L3FreeAllSw(CEDAR *c);
181void L3SwStart(L3SW *s);
182void L3SwStop(L3SW *s);
183void L3SwThread(THREAD *t, void *param);
184void L3Test(SERVER *s);
185void L3InitAllInterfaces(L3SW *s);
186void L3FreeAllInterfaces(L3SW *s);
187void L3IfThread(THREAD *t, void *param);
188void L3InitInterface(L3IF *f);
189void L3FreeInterface(L3IF *f);
190L3IF *L3GetNextIf(L3SW *s, UINT ip, UINT *next_hop);
191L3TABLE *L3GetBestRoute(L3SW *s, UINT ip);
192UINT L3GetNextPacket(L3IF *f, void **data);
193void L3Polling(L3IF *f);
194void L3PollingBeacon(L3IF *f);
195void L3DeleteOldArpTable(L3IF *f);
196void L3DeleteOldIpWaitList(L3IF *f);
197void L3PollingArpWaitTable(L3IF *f);
198void L3SendL2Now(L3IF *f, UCHAR *dest_mac, UCHAR *src_mac, USHORT protocol, void *data, UINT size);
199void L3SendArpRequestNow(L3IF *f, UINT dest_ip);
200void L3SendArpResponseNow(L3IF *f, UCHAR *dest_mac, UINT dest_ip, UINT src_ip);
201void L3GenerateMacAddress(L3IF *f);
202L3ARPENTRY *L3SearchArpTable(L3IF *f, UINT ip);
203void L3SendIpNow(L3IF *f, L3ARPENTRY *a, L3PACKET *p);
204void L3SendIp(L3IF *f, L3PACKET *p);
205void L3RecvArp(L3IF *f, PKT *p);
206void L3RecvArpRequest(L3IF *f, PKT *p);
207void L3RecvArpResponse(L3IF *f, PKT *p);
208void L3KnownArp(L3IF *f, UINT ip, UCHAR *mac);
209void L3SendArp(L3IF *f, UINT ip);
210void L3InsertArpTable(L3IF *f, UINT ip, UCHAR *mac);
211void L3SendWaitingIp(L3IF *f, UCHAR *mac, UINT ip, L3ARPENTRY *a);
212void L3PutPacket(L3IF *f, void *data, UINT size); 
213void L3RecvL2(L3IF *f, PKT *p);
214void L3StoreIpPacketToIf(L3IF *src_if, L3IF *dst_if, L3PACKET *p);
215void L3RecvIp(L3IF *f, PKT *p, bool self);
216void L3PollingIpQueue(L3IF *f);
217
218
219#endif  // LAYER3_H
220
221
222
Note: See TracBrowser for help on using the repository browser.