source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netapp/netappn_subr.c@ 352

Last change on this file since 352 was 352, checked in by coas-nagasima, 6 years ago

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 5.4 KB
Line 
1/*
2 * TINET (TCP/IP Protocol Stack)
3 *
4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering
5 * Tomakomai National College of Technology, JAPAN
6 *
7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
8 * によって公表されている GNU General Public License の Version 2 に記
9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
11 * 利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次の条件を満たすこと.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 *
26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
30 *
31 * @(#) $Id$
32 */
33
34/*
35 * ネットワーク応用プログラムサポートルーチン
36 */
37
38#ifdef USE_TCP_EXTENTIONS
39
40/*
41 * alloc_tcp_rep -- TCP 受付口を獲得する。
42 */
43
44ER
45ALLOC_TCP_REP (ID *repid, ID tskid, T_TCPN_CREP *crep)
46{
47 int_t ix;
48
49 *repid = TCP_REP_NONE;
50 syscall(wai_sem(SEM_ALLOC_TCP_REP_LOCK));
51 for (ix = NUM_VRID_TCP_REPS; ix -- > 0; ) {
52 if (TSKID_TCP_REP[ix] == TSK_NONE) {
53 *repid = VRID_TCP_REP[ix];
54 TSKID_TCP_REP[ix] = tskid;
55 break;
56 }
57 }
58 syscall(sig_sem(SEM_ALLOC_TCP_REP_LOCK));
59
60 if (*repid == TCP_REP_NONE)
61 return E_NOEXS;
62 else
63 return TCP_CRE_REP(*repid, crep);
64 }
65
66/*
67 * free_tcp_rep -- TCP 受付口を解放する。
68 */
69
70ER
71FREE_TCP_REP (ID repid, bool_t call_tcp_del_rep)
72{
73 int_t ix;
74
75 syscall(wai_sem(SEM_ALLOC_TCP_REP_LOCK));
76 for (ix = NUM_VRID_TCP_REPS; ix -- > 0; ) {
77 if (repid == VRID_TCP_REP[ix]) {
78 TSKID_TCP_REP[ix] = TSK_NONE;
79 break;
80 }
81 }
82 syscall(sig_sem(SEM_ALLOC_TCP_REP_LOCK));
83
84 if (call_tcp_del_rep)
85 return tcp_del_rep(repid);
86 else
87 return E_OK;
88 }
89
90/*
91 * tcpn_is_cepid -- TCP 通信端点が指定されたネットワーク層なら true を返す。
92 */
93
94bool_t
95TCP_IS_CEPID (ID cepid)
96{
97 int_t ix;
98
99 for (ix = NUM_VRID_TCP_CEPS; ix -- > 0; ) {
100 if (cepid == VRID_TCP_CEP[ix])
101 return true;
102 }
103 return false;
104 }
105
106/*
107 * alloc_tcp_cep -- TCP 通信端点を獲得する。
108 */
109
110ER
111ALLOC_TCP_CEP (ID *cepid, ID tskid, T_TCP_CCEP *ccep)
112{
113 int_t ix;
114
115 *cepid = TCP_CEP_NONE;
116 syscall(wai_sem(SEM_ALLOC_TCP_CEP_LOCK));
117 for (ix = NUM_VRID_TCP_CEPS; ix -- > 0; ) {
118 if (TSKID_TCP_CEP[ix] == TSK_NONE) {
119 *cepid = VRID_TCP_CEP[ix];
120 TSKID_TCP_CEP[ix] = tskid;
121 break;
122 }
123 }
124 syscall(sig_sem(SEM_ALLOC_TCP_CEP_LOCK));
125
126 if (*cepid == TCP_CEP_NONE)
127 return E_NOEXS;
128 else
129 return tcp_cre_cep(*cepid, ccep);
130 }
131
132/*
133 * free_tcp_cep -- TCP 通信端点を解放する。
134 */
135
136ER
137FREE_TCP_CEP (ID cepid)
138{
139 int_t ix;
140
141 syscall(wai_sem(SEM_ALLOC_TCP_CEP_LOCK));
142 for (ix = NUM_VRID_TCP_CEPS; ix -- > 0; ) {
143 if (cepid == VRID_TCP_CEP[ix]) {
144 TSKID_TCP_CEP[ix] = TSK_NONE;
145 break;
146 }
147 }
148 syscall(sig_sem(SEM_ALLOC_TCP_CEP_LOCK));
149
150 return tcp_del_cep(cepid);
151 }
152
153#endif /* of #ifdef USE_TCP_EXTENTIONS */
154
155#ifdef USE_UDP_EXTENTIONS
156
157/*
158 * alloc_udp_cep -- UDP 通信端点を獲得する。
159 */
160
161ER
162ALLOC_UDP_CEP (ID *cepid, ID tskid, T_UDPN_CCEP *ccep)
163{
164 int_t ix;
165
166 *cepid = UDP_CEP_NONE;
167 syscall(wai_sem(SEM_ALLOC_UDP_CEP_LOCK));
168 for (ix = NUM_VRID_UDP_CEPS; ix -- > 0; ) {
169 if (TSKID_UDP_CEP[ix] == TSK_NONE) {
170 *cepid = VRID_UDP_CEP[ix];
171 TSKID_UDP_CEP[ix] = tskid;
172 break;
173 }
174 }
175 syscall(sig_sem(SEM_ALLOC_UDP_CEP_LOCK));
176
177 if (*cepid == UDP_CEP_NONE)
178 return E_NOEXS;
179 else
180 return UDP_CRE_CEP(*cepid, ccep);
181 }
182
183/*
184 * free_udp_cep -- UDP 通信端点を解放する。
185 */
186
187ER
188FREE_UDP_CEP (ID cepid, bool_t call_udp_del_cep)
189{
190 int_t ix;
191
192 syscall(wai_sem(SEM_ALLOC_UDP_CEP_LOCK));
193 for (ix = NUM_VRID_UDP_CEPS; ix -- > 0; ) {
194 if (cepid == VRID_UDP_CEP[ix]) {
195 TSKID_UDP_CEP[ix] = TSK_NONE;
196 break;
197 }
198 }
199 syscall(sig_sem(SEM_ALLOC_UDP_CEP_LOCK));
200
201 if (call_udp_del_cep)
202 return UDP_DEL_CEP(cepid);
203 else
204 return E_OK;
205 }
206
207#endif /* of #ifdef USE_UDP_EXTENTIONS */
Note: See TracBrowser for help on using the repository browser.