Changeset 315 for rubycfg_asp/trunk/asp_dcre/tinet/netinet/udpn_usrreq.c
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/tinet/netinet/udpn_usrreq.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r313 r315 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 36 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 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 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 83 71 84 72 /* 85 * udp_send_data -- ãã±ããéä¿¡ã®ä¸»è¦é¨73 * udp_send_data -- パケット送信の主要部 86 74 */ 87 75 … … 101 89 NET_COUNT_UDP(net_count_udp.out_packets, 1); 102 90 103 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/91 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 104 92 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 105 93 syscall(get_tim(&before)); 106 94 107 /* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/95 /* IP データグラムを割り当てる。*/ 108 96 if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0, 109 97 &p_dstaddr->ipaddr, … … 113 101 goto err_ret; 114 102 115 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/103 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 116 104 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 117 105 syscall(get_tim(&after)); … … 124 112 } 125 113 126 /* UDP ãããã«æ 127 å ±ãè¨å®ããã*/ 114 /* UDP ヘッダに情報を設定する。*/ 128 115 udph = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET(output)); 129 116 udph->sport = htons(cep->myaddr.portno); … … 132 119 udph->sum = 0; 133 120 134 /* ãã¼ã¿ãã³ãã¼ããã*/121 /* データをコピーする。*/ 135 122 memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET(output)), data, (size_t)len); 136 123 … … 139 126 sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET(output), (uint_t)(UDP_HDR_SIZE + len)); 140 127 141 /* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå 142 ¥ããã*/ 128 /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/ 143 129 if (sum == 0) 144 130 sum = 0xffff; … … 147 133 #endif /* of #ifdef UDP_CFG_OUT_CHECKSUM */ 148 134 149 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/135 /* ネットワークバッファ長を調整する。*/ 150 136 output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE(output) + len); 151 137 152 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/138 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 153 139 if ((error = IP_OUTPUT(output, tmout)) == E_OK) { 154 140 NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1); … … 166 152 167 153 /* 168 * udp_cancel_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çããã£ã³ã»ã«ããã169 * 170 * udp_can_cep ããå¼åºãããã¡ã¤ã³é¢æ°154 * udp_cancel_cep -- ペンディングしている処理をキャンセルする。 155 * 156 * udp_can_cep から呼出されるメイン関数 171 157 */ 172 158 … … 178 164 ER error = E_OK, snd_err, rcv_err; 179 165 180 /* UDP é信端ç¹ããã§ãã¯ããã*/166 /* UDP 通信端点をチェックする。*/ 181 167 if (!VALID_UDP_CEP(cep)) 182 168 return E_NOEXS; 183 169 184 /* API æ©è½ã³ã¼ãããã§ãã¯ããã*/170 /* API 機能コードをチェックする。*/ 185 171 if (!VALID_TFN_UDP_CAN(fncd)) 186 172 return E_PAR; 187 173 188 /* é信端ç¹ãããã¯ããã*/174 /* 通信端点をロックする。*/ 189 175 syscall(wai_sem(cep->semid_lock)); 190 176 191 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL ã®å¦ç*/177 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL の処理 */ 192 178 193 179 snd_err = UDP_CAN_SND(cep, E_RLWAI); … … 195 181 196 182 /* 197 * snd_err 㨠rcv_err ã®ã©ã¡ããEV_NOPND198 * ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼183 * snd_err と rcv_err のどちらも EV_NOPND 184 * なら、ペンディングしていないのでエラー 199 185 */ 200 186 if (snd_err == EV_NOPND && rcv_err == EV_NOPND) … … 212 198 } 213 199 } 214 else if (fncd == TFN_UDP_SND_DAT) { /* éä¿¡å¦çã®ãã£ã³ã»ã«*/200 else if (fncd == TFN_UDP_SND_DAT) { /* 送信処理のキャンセル */ 215 201 if ((error = UDP_CAN_SND(cep, E_RLWAI)) == EV_NOPND) 216 202 error = E_OBJ; 217 203 } 218 else if (fncd == TFN_UDP_RCV_DAT) { /* åä¿¡å¦çã®ãã£ã³ã»ã«*/204 else if (fncd == TFN_UDP_RCV_DAT) { /* 受信処理のキャンセル */ 219 205 if ((error = UDP_CAN_RCV(cep, E_RLWAI)) == EV_NOPND) 220 206 error = E_OBJ; … … 223 209 error = E_PAR; 224 210 225 /* é信端ç¹ãããã¯ã解é¤ããã*/211 /* 通信端点をロックを解除する。*/ 226 212 syscall(sig_sem(cep->semid_lock)); 227 213 … … 236 222 237 223 /* 238 * udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã224 * udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 239 225 */ 240 226 … … 246 232 T_UDP_CEP *cep; 247 233 248 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/234 /* UDP 通信端点 ID をチェックする。*/ 249 235 if (!VALID_UDP_CEPID(cepid)) 250 236 return E_ID; 251 237 252 /* UDP é信端ç¹ãå¾ãã*/238 /* UDP 通信端点を得る。*/ 253 239 cep = GET_UDP_CEP(cepid); 254 240 255 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/241 /* メイン関数を呼び出す。*/ 256 242 return UDP_CANCEL_CEP(cep, fncd); 257 243 } … … 264 250 265 251 /* 266 * udp_cre_cep -- UDP é信端ç¹ã®çæãæ¡å¼µæ©è½ã252 * udp_cre_cep -- UDP 通信端点の生成【拡張機能】 267 253 */ 268 254 … … 275 261 ER error; 276 262 277 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/263 /* UDP 通信端点 ID をチェックする。*/ 278 264 if (!VALID_UDP_CEPID(cepid)) 279 265 return E_ID; 280 266 281 /* pk_ccep ã NULL ãªãã¨ã©ã¼*/267 /* pk_ccep が NULL ならエラー */ 282 268 if (pk_ccep == NULL) 283 269 return E_PAR; … … 286 272 287 273 /* 288 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã289 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼274 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 275 * IPv4 射影アドレスが指定されたらエラー 290 276 */ 291 277 if (in6_is_addr_ipv4mapped(&pk_ccep->myaddr.ipaddr)) … … 294 280 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 295 281 296 /* UDP é信端ç¹ãå¾ãã*/282 /* UDP 通信端点を得る。*/ 297 283 cep = GET_UDP_CEP(cepid); 298 284 299 /* UDP é信端ç¹ããã§ãã¯ããã*/285 /* UDP 通信端点をチェックする。*/ 300 286 if (VALID_UDP_CEP(cep)) 301 287 return E_OBJ; 302 288 303 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/289 /* UDP 通信端点が、動的生成用でなければエラー */ 304 290 if (!DYNAMIC_UDP_CEP(cep)) 305 291 return E_ID; 306 292 307 /* é信端ç¹ãããã¯ããã*/293 /* 通信端点をロックする。*/ 308 294 syscall(wai_sem(cep->semid_lock)); 309 295 310 296 /* 311 * UDP é信端ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼297 * UDP 通信端点をチェックする。生成済みであればエラー 312 298 */ 313 299 if (VALID_UDP_CEP(cep)) … … 316 302 317 303 /* 318 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã304 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 319 305 */ 320 306 if (pk_ccep->myaddr.portno == UDP_PORTANY) … … 325 311 if (error == E_OK) { 326 312 327 /* UDP é信端ç¹çææ 328 å ±ãã³ãã¼ããã*/ 329 cep->cepatr = pk_ccep->cepatr; /* é信端ç¹å±æ§ */ 330 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* èªåã®ã¢ãã¬ã¹ */ 331 cep->callback = (void*)pk_ccep->callback; /* ã³ã¼ã«ãã㯠*/ 332 333 /* UDP é信端ç¹ãçææ¸ã¿ã«ããã*/ 313 /* UDP 通信端点生成情報をコピーする。*/ 314 cep->cepatr = pk_ccep->cepatr; /* 通信端点属性 */ 315 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* 自分のアドレス */ 316 cep->callback = (void*)pk_ccep->callback; /* コールバック */ 317 318 /* UDP 通信端点を生成済みにする。*/ 334 319 cep->flags |= UDP_CEP_FLG_VALID; 335 320 } 336 321 } 337 322 338 /* é信端ç¹ã®ããã¯ã解é¤ããã*/323 /* 通信端点のロックを解除する。*/ 339 324 syscall(sig_sem(cep->semid_lock)); 340 325 … … 347 332 348 333 /* 349 * udp_delete_cep -- UDP é信端ç¹ãåé¤ããã350 * 351 * udp_del_cep ããå¼åºãããã¡ã¤ã³é¢æ°334 * udp_delete_cep -- UDP 通信端点を削除する。 335 * 336 * udp_del_cep から呼出されるメイン関数 352 337 */ 353 338 … … 357 342 ER error; 358 343 359 /* UDP é信端ç¹ããã§ãã¯ããã*/344 /* UDP 通信端点をチェックする。*/ 360 345 if (!VALID_UDP_CEP(cep)) 361 346 return E_NOEXS; 362 347 363 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/348 /* UDP 通信端点が、動的生成用でなければエラー */ 364 349 if (!DYNAMIC_UDP_CEP(cep)) 365 350 return E_ID; 366 351 367 /* é信端ç¹ãããã¯ããã*/352 /* 通信端点をロックする。*/ 368 353 syscall(wai_sem(cep->semid_lock)); 369 354 370 355 /* 371 * UDP é信端ç¹ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼372 * ã»æªçæã356 * UDP 通信端点をチェックする。未生成の場合はエラー 357 * ・未生成。 373 358 */ 374 359 if (!VALID_UDP_CEP(cep)) … … 378 363 UDP_CAN_RCV(cep, E_DLT); 379 364 380 /* UDP é信端ç¹ãæªçæã«ããã*/365 /* UDP 通信端点を未生成にする。*/ 381 366 cep->flags &= ~UDP_CEP_FLG_VALID; 382 367 error = E_OK; 383 368 } 384 369 385 /* é信端ç¹ã®ããã¯ã解é¤ããã*/370 /* 通信端点のロックを解除する。*/ 386 371 syscall(sig_sem(cep->semid_lock)); 387 372 … … 390 375 391 376 /* 392 * udp_del_cep -- UDP é信端ç¹ã®åé¤ãæ¡å¼µæ©è½ã377 * udp_del_cep -- UDP 通信端点の削除【拡張機能】 393 378 */ 394 379 … … 398 383 T_UDP_CEP *cep; 399 384 400 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/385 /* UDP 通信端点 ID をチェックする。*/ 401 386 if (!VALID_UDP_CEPID(cepid)) 402 387 return E_ID; 403 388 404 /* UDP é信端ç¹ãå¾ãã*/389 /* UDP 通信端点を得る。*/ 405 390 cep = GET_UDP_CEP(cepid); 406 391 407 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/392 /* メイン関数を呼び出す。*/ 408 393 return UDP_DELETE_CEP(cep); 409 394 } … … 414 399 415 400 /* 416 * udp_set_option -- UDP é信端ç¹ãªãã·ã§ã³ãè¨å®ããã417 * 418 * udp_set_opt ããå¼åºãããã¡ã¤ã³é¢æ°401 * udp_set_option -- UDP 通信端点オプションを設定する。 402 * 403 * udp_set_opt から呼出されるメイン関数 419 404 */ 420 405 … … 422 407 UDP_SET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen) 423 408 { 424 /* UDP é信端ç¹ããã§ãã¯ããã*/409 /* UDP 通信端点をチェックする。*/ 425 410 if (!VALID_UDP_CEP(cep)) 426 411 return E_NOEXS; … … 430 415 431 416 /* 432 * udp_set_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã433 * 434 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã417 * udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】 418 * 419 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 435 420 */ 436 421 … … 440 425 T_UDP_CEP *cep; 441 426 442 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/427 /* UDP 通信端点 ID をチェックする。*/ 443 428 if (!VALID_UDP_CEPID(cepid)) 444 429 return E_ID; 445 430 446 /* UDP é信端ç¹ãå¾ãã*/431 /* UDP 通信端点を得る。*/ 447 432 cep = GET_UDP_CEP(cepid); 448 433 449 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/434 /* メイン関数を呼び出す。*/ 450 435 return UDP_SET_OPTION(cep, optname, optval, optlen); 451 436 } … … 456 441 457 442 /* 458 * udp_get_option -- UDP é信端ç¹ãªãã·ã§ã³ãç²å¾ããã459 * 460 * udp_get_opt ããå¼åºãããã¡ã¤ã³é¢æ°443 * udp_get_option -- UDP 通信端点オプションを獲得する。 444 * 445 * udp_get_opt から呼出されるメイン関数 461 446 */ 462 447 … … 464 449 UDP_GET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen) 465 450 { 466 /* UDP é信端ç¹ããã§ãã¯ããã*/451 /* UDP 通信端点をチェックする。*/ 467 452 if (!VALID_UDP_CEP(cep)) 468 453 return E_NOEXS; … … 472 457 473 458 /* 474 * udp_get_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®ç²å¾ãæ¡å¼µæ©è½ã475 * 476 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã459 * udp_get_opt -- UDP 通信端点オプションの獲得【拡張機能】 460 * 461 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 477 462 */ 478 463 … … 482 467 T_UDP_CEP *cep; 483 468 484 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/469 /* UDP 通信端点 ID をチェックする。*/ 485 470 if (!VALID_UDP_CEPID(cepid)) 486 471 return E_ID; 487 472 488 /* UDP é信端ç¹ãå¾ãã*/473 /* UDP 通信端点を得る。*/ 489 474 cep = GET_UDP_CEP(cepid); 490 475 491 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/476 /* メイン関数を呼び出す。*/ 492 477 return UDP_GET_OPTION(cep, optname, optval, optlen); 493 478 } … … 504 489 505 490 /* 506 * udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«491 * udp_can_snd -- ペンディングしている送信のキャンセル 507 492 */ 508 493 … … 510 495 UDP_CAN_SND (T_UDP_CEP *cep, ER error) 511 496 { 512 if (cep->snd_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/497 if (cep->snd_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 513 498 514 499 #ifdef UDP_CFG_EXTENTIONS 515 500 516 /* å¾ 517 ã¡ä¸ã«çºçããã¨ã©ã¼æ 518 å ±ãè¨å®ããã*/ 501 /* 待ち中に発生したエラー情報を設定する。*/ 519 502 cep->error = error; 520 503 … … 524 507 cep->snd_tskid = TA_NULL; 525 508 } 526 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/509 else /* どちらでもないならペンディングしていない */ 527 510 error = EV_NOPND; 528 511 … … 535 518 536 519 /* 537 * udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«520 * udp_can_rcv -- ペンディングしている受信のキャンセル 538 521 */ 539 522 … … 541 524 UDP_CAN_RCV (T_UDP_CEP *cep, ER error) 542 525 { 543 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/526 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 544 527 545 528 #ifdef UDP_CFG_EXTENTIONS 546 529 547 /* å¾ 548 ã¡ä¸ã«çºçããã¨ã©ã¼æ 549 å ±ãè¨å®ããã*/ 530 /* 待ち中に発生したエラー情報を設定する。*/ 550 531 cep->error = error; 551 532 … … 555 536 cep->rcv_tskid = TA_NULL; 556 537 } 557 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/538 else /* どちらでもないならペンディングしていない */ 558 539 error = EV_NOPND; 559 540 … … 566 547 567 548 /* 568 * udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã549 * udp_snd_dat -- パケットの送信【標準機能】 569 550 */ 570 551 … … 575 556 ER error; 576 557 577 /* p_dstaddr ã¾ã㯠data ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/558 /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */ 578 559 if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK) 579 560 return E_PAR; 580 561 581 /* ãã¼ã¿é·ããã§ãã¯ããã*/562 /* データ長をチェックする。*/ 582 563 if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU) 583 564 return E_PAR; … … 586 567 587 568 /* 588 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã589 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼569 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 570 * IPv4 射影アドレスが指定されたらエラー 590 571 */ 591 572 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 594 575 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 595 576 596 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/577 /* UDP 通信端点 ID をチェックする。*/ 597 578 if (!VALID_UDP_CEPID(cepid)) 598 579 return E_ID; 599 580 600 /* UDP é信端ç¹ãå¾ãã*/581 /* UDP 通信端点を得る。*/ 601 582 cep = GET_UDP_CEP(cepid); 602 583 603 /* UDP é信端ç¹ããã§ãã¯ããã*/584 /* UDP 通信端点をチェックする。*/ 604 585 if (!VALID_UDP_CEP(cep)) 605 586 return E_NOEXS; 606 587 607 588 /* 608 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã589 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 609 590 */ 610 591 if (cep->myaddr.portno == UDP_PORTANY) { … … 613 594 } 614 595 615 /* é信端ç¹ãããã¯ããã*/596 /* 通信端点をロックする。*/ 616 597 syscall(wai_sem(cep->semid_lock)); 617 598 618 599 if (cep->snd_tskid != TA_NULL) { 619 600 620 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/601 /* 非ノンブロッキングコールでペンディング中 */ 621 602 error = E_QOVR; 622 603 623 /* é信端ç¹ãããã¯ã解é¤ããã*/604 /* 通信端点をロックを解除する。*/ 624 605 syscall(sig_sem(cep->semid_lock)); 625 606 } 626 607 else { 627 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/608 /* 現在のタスク識別子を記録する。*/ 628 609 get_tid(&(cep->snd_tskid)); 629 610 630 611 #ifdef UDP_CFG_EXTENTIONS 631 612 632 /* å¾ 633 ã¡ä¸ã«çºçããã¨ã©ã¼æ 634 å ±ããªã»ããããã*/ 613 /* 待ち中に発生したエラー情報をリセットする。*/ 635 614 cep->error = E_OK; 636 615 637 616 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 638 617 639 /* é信端ç¹ãããã¯ã解é¤ããã*/618 /* 通信端点をロックを解除する。*/ 640 619 syscall(sig_sem(cep->semid_lock)); 641 620 642 /* ãã±ãããéä¿¡ããã*/621 /* パケットを送信する。*/ 643 622 error = UDP_SEND_DATA(cep, p_dstaddr, data, len, tmout); 644 623 645 624 #ifdef UDP_CFG_EXTENTIONS 646 625 647 /* å¾ 648 ã¡ä¸ã«çºçããã¨ã©ã¼æ 649 å ±ãè¿ãã*/ 626 /* 待ち中に発生したエラー情報を返す。*/ 650 627 if (error == E_RLWAI) 651 628 error = cep->error; … … 662 639 663 640 /* 664 * udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã641 * udp_rcv_dat -- パケットの受信【標準機能】 665 642 */ 666 643 … … 674 651 uint_t ulen, uhoff; 675 652 676 /* p_dstaddr ã¾ã㯠data ã NULL ãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/653 /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */ 677 654 if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK) 678 655 return E_PAR; 679 656 680 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/657 /* UDP 通信端点 ID をチェックする。*/ 681 658 if (!VALID_UDP_CEPID(cepid)) 682 659 return E_ID; 683 660 684 /* UDP é信端ç¹ãå¾ãã*/661 /* UDP 通信端点を得る。*/ 685 662 cep = GET_UDP_CEP(cepid); 686 663 687 /* UDP é信端ç¹ããã§ãã¯ããã*/664 /* UDP 通信端点をチェックする。*/ 688 665 if (!VALID_UDP_CEP(cep)) 689 666 return E_NOEXS; 690 667 691 /* é信端ç¹ãããã¯ããã*/668 /* 通信端点をロックする。*/ 692 669 syscall(wai_sem(cep->semid_lock)); 693 670 694 671 if (cep->rcv_tskid != TA_NULL) { 695 672 696 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/673 /* 非ノンブロッキングコールでペンディング中 */ 697 674 error = E_QOVR; 698 675 699 /* é信端ç¹ãããã¯ã解é¤ããã*/676 /* 通信端点をロックを解除する。*/ 700 677 syscall(sig_sem(cep->semid_lock)); 701 678 } 702 679 else { 703 680 704 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/681 /* 現在のタスク識別子を記録する。*/ 705 682 get_tid(&(cep->rcv_tskid)); 706 683 707 684 #ifdef UDP_CFG_EXTENTIONS 708 685 709 /* å¾ 710 ã¡ä¸ã«çºçããã¨ã©ã¼æ 711 å ±ããªã»ããããã*/ 686 /* 待ち中に発生したエラー情報をリセットする。*/ 712 687 cep->error = E_OK; 713 688 714 689 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 715 690 716 /* é信端ç¹ãããã¯ã解é¤ããã*/691 /* 通信端点をロックを解除する。*/ 717 692 syscall(sig_sem(cep->semid_lock)); 718 693 719 /* å 720 ¥åãããã¾ã§å¾ 721 ã¤ã*/ 694 /* 入力があるまで待つ。*/ 722 695 if (cep->cb_netbuf != NULL) { 723 696 724 697 /* 725 * ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸ãã 726 * udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã 727 * ãã§ã«å 728 ¥åæ¸ã¿ã§ããã 698 * ここにくる場合は、コールバック関数の中から 699 * udp_rcv_dat を呼び出していることになり、 700 * すでに入力済みである。 729 701 */ 730 702 input = cep->cb_netbuf; … … 735 707 #ifdef UDP_CFG_EXTENTIONS 736 708 737 /* å¾ 738 ã¡ä¸ã«çºçããã¨ã©ã¼æ 739 å ±ãè¿ãã*/ 709 /* 待ち中に発生したエラー情報を返す。*/ 740 710 if (error == E_RLWAI) 741 711 error = cep->error; … … 747 717 } 748 718 749 /* p_dstaddr ãè¨å®ããã*/719 /* p_dstaddr を設定する。*/ 750 720 uhoff = (uint_t)GET_UDP_HDR_OFFSET(input); 751 721 udph = GET_UDP_HDR(input, uhoff); … … 753 723 IN_COPY_TO_HOST(&p_dstaddr->ipaddr, input); 754 724 755 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/725 /* データをバッファに移す。*/ 756 726 ulen = ntohs(udph->ulen); 757 727 if (ulen - UDP_HDR_SIZE > len) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.