Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- Location:
- EcnlProtoTool/trunk/asp3_dcre/tinet/netinet
- Files:
-
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/icmp6.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 117 105 118 106 /* 119 * ICMPv6 ããã107 * ICMPv6 ヘッダ 120 108 */ 121 109 122 110 typedef struct t_icmp6_hdr { 123 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/124 uint8_t code; /* ãµãå*/125 uint16_t sum; /* ãã§ãã¯ãµã*/111 uint8_t type; /* メッセージの型 */ 112 uint8_t code; /* サブ型 */ 113 uint16_t sum; /* チェックサム */ 126 114 union { 127 115 uint32_t data32; … … 134 122 #define icmp6_data16 data.data16 135 123 #define icmp6_data8 data.data8 136 #define icmp6_pptr data.data32 /* ãã©ã¡ã¼ã¿ç°å¸¸*/137 #define icmp6_mtu data.data32 /* ãã©ã¡ã¼ã¿ç°å¸¸*/138 #define icmp6_id data.data16[0] /* ã¨ã³ã¼è¦æ±ã¨å¿ç*/139 #define icmp6_seq data.data16[1] /* ã¨ã³ã¼è¦æ±ã¨å¿ç*/124 #define icmp6_pptr data.data32 /* パラメータ異常 */ 125 #define icmp6_mtu data.data32 /* パラメータ異常 */ 126 #define icmp6_id data.data16[0] /* エコー要求と応答 */ 127 #define icmp6_seq data.data16[1] /* エコー要求と応答 */ 140 128 141 129 #define ICMP6_HDR_SIZE (sizeof(T_ICMP6_HDR)) … … 149 137 150 138 /* 151 * ICMP6 ã¿ã¤ã 152 */ 153 154 #define ICMP6_DST_UNREACH UINT_C(1) /* å®å 155 å°éä¸å¯è½ */ 156 #define ICMP6_PACKET_TOO_BIG UINT_C(2) /* ãã±ããã大ããããã */ 157 #define ICMP6_TIME_EXCEEDED UINT_C(3) /* TTL ãè¶ 158 éããã */ 159 #define ICMP6_PARAM_PROB UINT_C(4) /* IPv6 ããããä¸æ£ã */ 160 161 #define ICMP6_ECHO_REQUEST UINT_C(128) /* ã¨ã³ã¼è¦æ± */ 162 #define ICMP6_ECHO_REPLY UINT_C(129) /* ã¨ã³ã¼å¿ç */ 163 164 #define ICMP6_MEMBERSHIP_QUERY UINT_C(130) /* ã°ã«ã¼ãã¡ã³ãç 165 §ä¼ */ 166 #define ICMP6_MEMBERSHIP_REPORT UINT_C(131) /* ã°ã«ã¼ãã¡ã³ãå ±å */ 167 #define ICMP6_MEMBERSHIP_REDUCTION UINT_C(132) /* ã°ã«ã¼ãã¡ã³ãçµäº */ 168 169 #define MLD_LISTENER_QUERY UINT_C(130) /* ãã«ããã£ã¹ãåä¿¡è 170 ç 171 §ä¼ */ 172 #define MLD_LISTENER_REPORT UINT_C(131) /* ãã«ããã£ã¹ãåä¿¡è 173 å ±å */ 174 #define MLD_LISTENER_DONE UINT_C(132) /* ãã«ããã£ã¹ãåä¿¡è 175 çµäº */ 176 177 #define ND_ROUTER_SOLICIT UINT_C(133) /* ã«ã¼ã¿è¦è« */ 178 #define ND_ROUTER_ADVERT UINT_C(134) /* ã«ã¼ã¿éç¥ */ 179 #define ND_NEIGHBOR_SOLICIT UINT_C(135) /* è¿é£è¦è« */ 180 #define ND_NEIGHBOR_ADVERT UINT_C(136) /* è¿é£éç¥ */ 181 #define ND_REDIRECT UINT_C(137) /* åãç´ã */ 182 183 #define ICMP6_ROUTER_RENUMBERING UINT_C(138) /* ã«ã¼ã¿çªå·åè¨å® */ 184 185 #define ICMP6_WRU_REQUEST UINT_C(139) /* è¦æ±ãã¼ãæ¢ç´¢ */ 186 #define ICMP6_WRU_REPLY UINT_C(140) /* å¿çãã¼ãæ¢ç´¢ */ 187 188 #define ICMP6_FQDN_QUERY UINT_C(139) /* FQDN ç 189 §ä¼ */ 190 #define ICMP6_FQDN_REPLY UINT_C(140) /* FQDN å¿ç */ 191 192 #define ICMP6_NI_QUERY UINT_C(139) /* ãã¼ãæ 193 å ±ç 194 §ä¼ */ 195 #define ICMP6_NI_REPLY UINT_C(140) /* ãã¼ãæ 196 å ±å¿ç */ 197 198 #define ICMP6_MAX_TYPE UINT_C(203) /* ICMP6 ã¿ã¤ãã®æå¤§å¤ */ 199 200 /* 201 * ICMP6 ã³ã¼ã 202 */ 203 204 /* å®å 205 å°éä¸å¯è½ */ 206 207 #define ICMP6_DST_UNREACH_NOROUTE UINT_C(0) /* å°éã«ã¼ããªãã */ 208 #define ICMP6_DST_UNREACH_ADMIN UINT_C(1) /* 管çè 209 ã«ããç¡å¹åä¸ã */ 210 #define ICMP6_DST_UNREACH_NOTEIGHBOR UINT_C(2) /* è¿é£è 211 ã§ã¯ãªããªã£ãã */ 212 #define ICMP6_DST_UNREACH_BEYOND_SCOPE UINT_C(2) /* ã¹ã³ã¼ããè¶ 213 ãã¦ããã */ 214 #define ICMP6_DST_UNREACH_ADDR UINT_C(3) /* å®å 215 ã¢ãã¬ã¹ã«å°éä¸å¯è½ã */ 216 #define ICMP6_DST_UNREACH_NOPORT UINT_C(4) /* å®å 217 ãã¼ãã«å°éä¸å¯è½ã */ 218 219 /* TTL è¶ 220 é */ 221 222 #define ICMP6_TIME_EXCEED_TRANSIT UINT_C(0) /* 転éæã« TTL==0 ã«ãªã£ãã */ 223 #define ICMP6_TIME_EXCEED_REASSEMBLY UINT_C(1) /* IP åæ§æã§ã¿ã¤ã ã¢ã¦ãããã*/ 224 225 /* ãããä¸æ£ */ 226 227 #define ICMP6_PARAMPROB_HEADER UINT_C(0) /* ãããã«ä¸æ£ããã£ãã */ 228 #define ICMP6_PARAMPROB_NEXT_HEADER UINT_C(1) /* 次ããããèªèã§ããªãã */ 229 #define ICMP6_PARAMPROB_OPTION UINT_C(2) /* ãªãã·ã§ã³ãèªèã§ããªãã */ 230 231 /* å 232 é¨ä½¿ç¨ */ 233 #define ND_REDIRECT_ONLINK UINT_C(0) /* ãªã³ãªã³ã¯ã¸ã®åãç´ã */ 234 #define ND_REDIRECT_ROUTER UINT_C(1) /* ã«ã¼ã¿ã¸ã®åãç´ã */ 235 236 /* 237 * å¶éå¤ 238 */ 239 240 /* ICMPv6 ã®æ大ãã¤ãã¼ãé· */ 139 * ICMP6 タイプ 140 */ 141 142 #define ICMP6_DST_UNREACH UINT_C(1) /* 宛先到達不可能 */ 143 #define ICMP6_PACKET_TOO_BIG UINT_C(2) /* パケットが大きすぎる。 */ 144 #define ICMP6_TIME_EXCEEDED UINT_C(3) /* TTL を超過した。 */ 145 #define ICMP6_PARAM_PROB UINT_C(4) /* IPv6 ヘッダが不正。 */ 146 147 #define ICMP6_ECHO_REQUEST UINT_C(128) /* エコー要求 */ 148 #define ICMP6_ECHO_REPLY UINT_C(129) /* エコー応答 */ 149 150 #define ICMP6_MEMBERSHIP_QUERY UINT_C(130) /* グループメンバ照会 */ 151 #define ICMP6_MEMBERSHIP_REPORT UINT_C(131) /* グループメンバ報告 */ 152 #define ICMP6_MEMBERSHIP_REDUCTION UINT_C(132) /* グループメンバ終了 */ 153 154 #define MLD_LISTENER_QUERY UINT_C(130) /* マルチキャスト受信者照会 */ 155 #define MLD_LISTENER_REPORT UINT_C(131) /* マルチキャスト受信者報告 */ 156 #define MLD_LISTENER_DONE UINT_C(132) /* マルチキャスト受信者終了 */ 157 158 #define ND_ROUTER_SOLICIT UINT_C(133) /* ルータ要請 */ 159 #define ND_ROUTER_ADVERT UINT_C(134) /* ルータ通知 */ 160 #define ND_NEIGHBOR_SOLICIT UINT_C(135) /* 近隣要請 */ 161 #define ND_NEIGHBOR_ADVERT UINT_C(136) /* 近隣通知 */ 162 #define ND_REDIRECT UINT_C(137) /* 向け直し */ 163 164 #define ICMP6_ROUTER_RENUMBERING UINT_C(138) /* ルータ番号再設定 */ 165 166 #define ICMP6_WRU_REQUEST UINT_C(139) /* 要求ノード探索 */ 167 #define ICMP6_WRU_REPLY UINT_C(140) /* 応答ノード探索 */ 168 169 #define ICMP6_FQDN_QUERY UINT_C(139) /* FQDN 照会 */ 170 #define ICMP6_FQDN_REPLY UINT_C(140) /* FQDN 応答 */ 171 172 #define ICMP6_NI_QUERY UINT_C(139) /* ノード情報照会 */ 173 #define ICMP6_NI_REPLY UINT_C(140) /* ノード情報応答 */ 174 175 #define ICMP6_MAX_TYPE UINT_C(203) /* ICMP6 タイプの最大値 */ 176 177 /* 178 * ICMP6 コード 179 */ 180 181 /* 宛先到達不可能 */ 182 183 #define ICMP6_DST_UNREACH_NOROUTE UINT_C(0) /* 到達ルートなし。 */ 184 #define ICMP6_DST_UNREACH_ADMIN UINT_C(1) /* 管理者により無効化中。 */ 185 #define ICMP6_DST_UNREACH_NOTEIGHBOR UINT_C(2) /* 近隣者ではなくなった。 */ 186 #define ICMP6_DST_UNREACH_BEYOND_SCOPE UINT_C(2) /* スコープを超えている。 */ 187 #define ICMP6_DST_UNREACH_ADDR UINT_C(3) /* 宛先アドレスに到達不可能。 */ 188 #define ICMP6_DST_UNREACH_NOPORT UINT_C(4) /* 宛先ポートに到達不可能。 */ 189 190 /* TTL 超過 */ 191 192 #define ICMP6_TIME_EXCEED_TRANSIT UINT_C(0) /* 転送時に TTL==0 になった。 */ 193 #define ICMP6_TIME_EXCEED_REASSEMBLY UINT_C(1) /* IP 再構成でタイムアウトした。*/ 194 195 /* ヘッダ不正 */ 196 197 #define ICMP6_PARAMPROB_HEADER UINT_C(0) /* ヘッダに不正があった。 */ 198 #define ICMP6_PARAMPROB_NEXT_HEADER UINT_C(1) /* 次ヘッダが認識できない。 */ 199 #define ICMP6_PARAMPROB_OPTION UINT_C(2) /* オプションが認識できない。 */ 200 201 /* 内部使用 */ 202 #define ND_REDIRECT_ONLINK UINT_C(0) /* オンリンクへの向け直し */ 203 #define ND_REDIRECT_ROUTER UINT_C(1) /* ルータへの向け直し */ 204 205 /* 206 * 制限値 207 */ 208 209 /* ICMPv6 の最大ペイロード長 */ 241 210 #define ICMPV6_PAYLOAD_MAXLEN (IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE)) 242 211 243 212 /* 244 * è¿é£è¦è«213 * 近隣要請 245 214 */ 246 215 … … 248 217 T_ICMP6_HDR hdr; 249 218 T_IN6_ADDR target; 250 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/219 /* この後にオプションが続く */ 251 220 } __attribute__((packed, aligned(2)))T_NEIGHBOR_SOLICIT_HDR; 252 221 … … 266 235 267 236 /* 268 * è¿é£éç¥237 * 近隣通知 269 238 */ 270 239 … … 272 241 T_ICMP6_HDR hdr; 273 242 T_IN6_ADDR target; 274 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/243 /* この後にオプションが続く */ 275 244 } __attribute__((packed, aligned(2)))T_NEIGHBOR_ADVERT_HDR; 276 245 277 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/246 /* ICMP6 ヘッダのデータ部の定義 */ 278 247 279 248 #define nd_na_flags_reserved hdr.data.data32 … … 297 266 298 267 /* 299 * è¿é£éç¥ãã©ã°ãnd_na_flags_reserved (hdr.data32) ã«è¨å®ããã268 * 近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。 300 269 */ 301 270 302 271 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN 303 272 304 #define ND_NA_FLG_OVERRIDE ULONG_C(0x20000000) /* è¿é£ãã£ãã·ã¥ä¸æ¸ã*/305 #define ND_NA_FLG_SOLICITED ULONG_C(0x40000000) /* è¿é£è¦è«ã¸ã®å¿ç*/306 #define ND_NA_FLG_ROUTER ULONG_C(0x80000000) /* ã«ã¼ã¿éç¥*/273 #define ND_NA_FLG_OVERRIDE ULONG_C(0x20000000) /* 近隣キャッシュ上書き */ 274 #define ND_NA_FLG_SOLICITED ULONG_C(0x40000000) /* 近隣要請への応答 */ 275 #define ND_NA_FLG_ROUTER ULONG_C(0x80000000) /* ルータ通知 */ 307 276 308 277 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN 309 278 310 #define ND_NA_FLG_OVERRIDE ULONG_C(0x00000020) /* è¿é£ãã£ãã·ã¥ä¸æ¸ã*/311 #define ND_NA_FLG_SOLICITED ULONG_C(0x00000040) /* è¿é£è¦è«ã¸ã®å¿ç*/312 #define ND_NA_FLG_ROUTER ULONG_C(0x00000080) /* ã«ã¼ã¿éç¥*/279 #define ND_NA_FLG_OVERRIDE ULONG_C(0x00000020) /* 近隣キャッシュ上書き */ 280 #define ND_NA_FLG_SOLICITED ULONG_C(0x00000040) /* 近隣要請への応答 */ 281 #define ND_NA_FLG_ROUTER ULONG_C(0x00000080) /* ルータ通知 */ 313 282 314 283 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */ 315 284 316 285 /* 317 * ã«ã¼ã¿éç¥286 * ルータ通知 318 287 */ 319 288 320 289 typedef struct t_router_advert_hdr { 321 290 T_ICMP6_HDR hdr; 322 uint32_t reachable; /* [ms] å°éå¯è½æé*/323 uint32_t retransmit; /* [ms] è¿é£è¦è«éä¿¡éé*/324 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/291 uint32_t reachable; /* [ms] 到達可能時間 */ 292 uint32_t retransmit; /* [ms] 近隣要請送信間隔 */ 293 /* この後にオプションが続く */ 325 294 } __attribute__((packed, aligned(2)))T_ROUTER_ADVERT_HDR; 326 295 327 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/296 /* ICMP6 ヘッダのデータ部の定義 */ 328 297 329 298 #define nd_ra_current_hoplimit hdr.data.data8[0] 330 299 #define nd_ra_flags hdr.data.data8[1] 331 #define nd_ra_router_lifetime hdr.data.data16[1] /* [s] ã«ã¼ã¿æå¹æé*/300 #define nd_ra_router_lifetime hdr.data.data16[1] /* [s] ルータ有効時間 */ 332 301 333 302 #define ROUTER_ADVERT_HDR_SIZE (sizeof(T_ROUTER_ADVERT_HDR)) … … 347 316 348 317 /* 349 * ã«ã¼ã¿éç¥ãããã®ãã©ã°318 * ルータ通知ヘッダのフラグ 350 319 */ 351 320 … … 355 324 356 325 /* 357 * ã«ã¼ã¿è¦è«326 * ルータ要請 358 327 */ 359 328 … … 362 331 } __attribute__((packed, aligned(2)))T_ROUTER_SOLICIT_HDR; 363 332 364 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/333 /* ICMP6 ヘッダのデータ部の定義 */ 365 334 366 335 #define nd_rs_reserved hdr.data.data32 … … 383 352 384 353 /* 385 * è¿é£æ¢ç´¢ãªãã·ã§ã³386 */ 387 388 /* è¿é£æ¢ç´¢ããã*/354 * 近隣探索オプション 355 */ 356 357 /* 近隣探索ヘッダ */ 389 358 390 359 typedef struct t_neighbor_hdr { … … 393 362 } __attribute__((packed, aligned(2)))T_NEIGHBOR_HDR; 394 363 395 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ããã*/364 /* 近隣探索オプションヘッダ */ 396 365 397 366 typedef struct t_nd_opt_hdr { 398 uint8_t type; /* ãªãã·ã§ã³ã¿ã¤ã*/399 uint8_t len; /* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã*/367 uint8_t type; /* オプションタイプ */ 368 uint8_t len; /* オプション長、単位は 8 バイト */ 400 369 } __attribute__((packed, aligned(2)))T_ND_OPT_HDR; 401 370 402 371 #define ND_OPT_HDR_SIZE (sizeof(T_ND_OPT_HDR)) 403 372 404 #define ND_OPT_SOURCE_LINKADDR UINT_C(1) /* éä¿¡å 405 ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ */ 406 #define ND_OPT_TARGET_LINKADDR UINT_C(2) /* 対象ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ */ 407 #define ND_OPT_PREFIX_INFORMATION UINT_C(3) /* ãã¬ãã£ãã¯ã¹æ 408 å ± */ 409 #define ND_OPT_REDIRECTED_HEADER UINT_C(4) /* ãªãã¤ã¬ã¯ãã»ããã */ 373 #define ND_OPT_SOURCE_LINKADDR UINT_C(1) /* 送信先ネットワークインタフェースのアドレス */ 374 #define ND_OPT_TARGET_LINKADDR UINT_C(2) /* 対象ネットワークインタフェースのアドレス */ 375 #define ND_OPT_PREFIX_INFORMATION UINT_C(3) /* プレフィックス情報 */ 376 #define ND_OPT_REDIRECTED_HEADER UINT_C(4) /* リダイレクト・ヘッダ */ 410 377 #define ND_OPT_MTU UINT_C(5) /* MTU */ 411 378 412 #define ND_OPT_PREFIX_INFO_COUNT UINT_C(6) /* ãã¬ãã£ãã¯ã¹æ 413 å ±ã®åæ° */ 414 #define ND_OPT_OFF_ARRAY_SIZE UINT_C(7) /* ND ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããé 415 åãµã¤ãº*/ 416 417 #define ND_OPT_OFF_ARRAY_IX(t) ((t)-1) /* ãªãã»ããé 418 åã®ã¤ã³ããã¯ã¹ */ 419 420 /* ãã¬ãã£ãã¯ã¹ãªãã·ã§ã³ */ 379 #define ND_OPT_PREFIX_INFO_COUNT UINT_C(6) /* プレフィックス情報の個数 */ 380 #define ND_OPT_OFF_ARRAY_SIZE UINT_C(7) /* ND オプションのオフセットを記録する配列サイズ*/ 381 382 #define ND_OPT_OFF_ARRAY_IX(t) ((t)-1) /* オフセット配列のインデックス */ 383 384 /* プレフィックスオプション */ 421 385 422 386 typedef struct t_nd_opt_prefix_info { 423 uint8_t type; /* è¿é£æ¢ç´¢ãªãã·ã§ã³ã¿ã¤ã= 3 */424 uint8_t len; /* ãªãã·ã§ã³é· = 8Ã4=32 */425 uint8_t prefix_len; /* ãã¬ãã£ãã¯ã¹é·*/426 uint8_t flags; /* ãã©ã°*/427 uint32_t valid; /* [s] æå¹æé*/428 uint32_t preferred; /* [s] æ¨å¥¨æå¹æé*/387 uint8_t type; /* 近隣探索オプションタイプ = 3 */ 388 uint8_t len; /* オプション長 = 8×4=32 */ 389 uint8_t prefix_len; /* プレフィックス長 */ 390 uint8_t flags; /* フラグ */ 391 uint32_t valid; /* [s] 有効時間 */ 392 uint32_t preferred; /* [s] 推奨有効時間 */ 429 393 uint32_t reserved; 430 T_IN6_ADDR prefix; /* ãã¬ãã£ãã¯ã¹*/394 T_IN6_ADDR prefix; /* プレフィックス */ 431 395 } __attribute__((packed, aligned(2)))T_ND_OPT_PREFIX_INFO; 432 396 433 #define ND_OPT_PI_FLAG_ONLINK UINT_C(0x80) /* ãªã³ãªã³ã¯ãã¬ãã£ãã¯ã¹*/434 #define ND_OPT_PI_FLAG_AUTO UINT_C(0x40) /* ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®*/435 436 /* MTU ãªãã·ã§ã³ããã*/397 #define ND_OPT_PI_FLAG_ONLINK UINT_C(0x80) /* オンリンクプレフィックス */ 398 #define ND_OPT_PI_FLAG_AUTO UINT_C(0x40) /* ステートレス・アドレス自動設定*/ 399 400 /* MTU オプションヘッダ */ 437 401 438 402 typedef struct t_nd_opt_mtu_hdr { 439 uint8_t type; /* ãªãã·ã§ã³ã¿ã¤ã*/440 uint8_t len; /* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã*/403 uint8_t type; /* オプションタイプ */ 404 uint8_t len; /* オプション長、単位は 8 バイト*/ 441 405 uint16_t reserved; 442 406 uint32_t mtu; /* MTU */ … … 444 408 445 409 /* 446 * åãç´ã410 * 向け直し 447 411 */ 448 412 449 413 typedef struct t_nd_redirect_hdr { 450 414 T_ICMP6_HDR hdr; 451 T_IN6_ADDR target; /* ã«ã¼ã¿ã®ã¢ãã¬ã¹*/452 T_IN6_ADDR dst; /* åãç´ãã®çµç¹ã¢ãã¬ã¹*/453 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/415 T_IN6_ADDR target; /* ルータのアドレス */ 416 T_IN6_ADDR dst; /* 向け直しの終点アドレス */ 417 /* この後にオプションが続く */ 454 418 } __attribute__((packed, aligned(2)))T_ND_REDIRECT_HDR; 455 419 … … 459 423 460 424 /* 461 * SNMP 㮠管çæ 462 å ±ãã¼ã¹ (MIB) 425 * SNMP の 管理情報ベース (MIB) 463 426 */ 464 427 … … 505 468 506 469 /* 507 * é¢æ°470 * 関数 508 471 */ 509 472 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/icmp_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 86 74 87 75 /* 88 * SNMP 㮠管çæ 89 å ±ãã¼ã¹ (MIB) 76 * SNMP の 管理情報ベース (MIB) 90 77 */ 91 78 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 121 109 122 110 /* 123 * ARP ãã£ãã·ã¥ã¨ã³ããª111 * ARP キャッシュエントリ 124 112 */ 125 113 … … 127 115 128 116 /* 129 * é¢æ°117 * 関数 130 118 */ 131 119 … … 135 123 136 124 /* 137 * arp_lookup -- ARP ãã£ãã·ã¥ã®æ¢ç´¢ã¨ç»é² 138 * 139 * 注æ: SEM_ARP_CACHE_LOCK ãç²å¾ããç¶æ 140 ã§å¼åºãã㨠125 * arp_lookup -- ARP キャッシュの探索と登録 126 * 127 * 注意: SEM_ARP_CACHE_LOCK を獲得した状態で呼出すこと 141 128 */ 142 129 … … 152 139 } 153 140 154 /* create ãçãªããæ°ããªã¨ã³ããªãç»é²ããã*/141 /* create が真なら、新たなエントリを登録する。*/ 155 142 if (create) { 156 143 157 /* ã¾ãã空ããããã°ããã®ç©ºããå©ç¨ããã*/144 /* まず、空きがあれば、その空きを利用する。*/ 158 145 for (ix = NUM_ARP_ENTRY; ix -- > 0; ) { 159 146 if (arp_cache[ix].expire == 0) { … … 164 151 165 152 /* 166 * 空ãããªããã°ãã¿ã¤ã ã¢ã¦ãã¾ã§æéãæçã®167 * ã¨ã³ããªã¼ãç ´æ£ãã¦å©ç¨ããã153 * 空きがなければ、タイムアウトまで時間が最短の 154 * エントリーを破棄して利用する。 168 155 */ 169 156 syslog(LOG_NOTICE, "[ARP] cache busy, size=%d", NUM_ARP_ENTRY); … … 183 170 184 171 /* 185 * in_arpinput -- TCP/IP ç¨ ARP ã®å 186 ¥åé¢æ° 172 * in_arpinput -- TCP/IP 用 ARP の入力関数 187 173 */ 188 174 … … 200 186 et_arph = GET_ETHER_ARP_HDR(input); 201 187 202 ntoahl(saddr, et_arph->sproto); /* éä¿¡å 203 IP ã¢ãã¬ã¹ */ 204 ntoahl(taddr, et_arph->tproto); /* 解決対象 IP ã¢ãã¬ã¹ */ 205 206 /* 207 * 以ä¸ã®å ´åã¯ã¨ã©ã¼ 208 * ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ãèªå 209 * ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ãããã¼ããã£ã¹ã 188 ntoahl(saddr, et_arph->sproto); /* 送信元 IP アドレス */ 189 ntoahl(taddr, et_arph->tproto); /* 解決対象 IP アドレス */ 190 191 /* 192 * 以下の場合はエラー 193 * ・送信ホストの物理アドレスが自分 194 * ・送信ホストの物理アドレスがブロードキャスト 210 195 */ 211 196 if (memcmp(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN) == 0 || … … 214 199 215 200 /* 216 * éä¿¡ãã¹ãã® IP ã¢ãã¬ã¹ãèªåã®å ´åã¯ãéè¤ãã¦ããã®ã§217 * ç¸æã«ãç¥ãããã201 * 送信ホストの IP アドレスが自分の場合は、重複しているので 202 * 相手にも知らせる。 218 203 */ 219 204 if (saddr == ifp->in_ifaddr.addr) { … … 240 225 241 226 /* 242 * 以ä¸ã®å ´åã¯ä½ãããªãã 243 * ã»è§£æ±ºå¯¾è±¡ IP ã¢ãã¬ã¹ãèªåã§ã¯ãªãã注: å 244 ã® FreeBSD ã® 245 * å®è£ 246 ã§ã¯ãARP PROXY çã®ãããèªå以å¤ã® IP ã¢ãã¬ã¹ã® 247 * 解決ãè¡ã£ã¦ããããæ¬å®è£ 248 ã§ã¯ãèªå以å¤ã® IP 249 * ã¢ãã¬ã¹ã®è§£æ±ºã¯è¡ããªãã 227 * 以下の場合は何もしない。 228 * ・解決対象 IP アドレスが自分ではない、注: 元の FreeBSD の 229 * 実装では、ARP PROXY 等のため、自分以外の IP アドレスの 230 * 解決も行っているが、本実装では、自分以外の IP 231 * アドレスの解決は行わない。 250 232 */ 251 233 if (taddr != ifp->in_ifaddr.addr) … … 253 235 254 236 /* 255 * éä¿¡å 256 IP ã¢ãã¬ã¹ã ARP ãã£ãã·ã¥ã«ããã調ã¹ãã 257 * ãã£ãã·ã¥ã«ãªããã°ãæ°ãã«ã¨ã³ããªãç»é²ããã 237 * 送信元 IP アドレスが ARP キャッシュにあるか調べる。 238 * キャッシュになければ、新たにエントリを登録する。 258 239 */ 259 240 syscall(wai_sem(SEM_ARP_CACHE_LOCK)); … … 264 245 265 246 /* 266 * éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°éä¿¡ããã247 * 送信がペンデングされているフレームがあれば送信する。 267 248 */ 268 249 if (ent->hold) { 269 250 270 /* ãã¬ã¼ã ã® Ethernet ããããè¨å®ããã*/251 /* フレームの Ethernet ヘッダを設定する。*/ 271 252 memcpy(GET_ETHER_HDR(ent->hold)->dhost, ent->mac_addr, ETHER_ADDR_LEN); 272 253 … … 275 256 syscall(sig_sem(SEM_ARP_CACHE_LOCK)); 276 257 277 /* ãã³ãã£ã³ã°ããã¦ãããã¬ã¼ã ãéä¿¡ããã*/258 /* ペンディングされているフレームを送信する。*/ 278 259 IF_RAW_OUTPUT(pending, TMO_FEVR); 279 260 … … 286 267 arph = GET_ARP_HDR(input); 287 268 288 /* ã¢ãã¬ã¹è§£æ±ºè¦æ±ã§ãªããã°çµäº*/269 /* アドレス解決要求でなければ終了 */ 289 270 if (ntohs(arph->opcode) != ARPOP_REQUEST) 290 271 goto buf_rel; 291 272 292 /* Ethernet ARP ããããè¨å®ããã*/273 /* Ethernet ARP ヘッダを設定する。*/ 293 274 memcpy(et_arph->thost, et_arph->shost, ETHER_ADDR_LEN); 294 275 memcpy(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN); … … 296 277 ahtonl(et_arph->sproto, taddr); 297 278 298 /* Ethernet ARP ããããè¨å®ããã*/279 /* Ethernet ARP ヘッダを設定する。*/ 299 280 arph->opcode = htons(ARPOP_REPLY); 300 281 301 /* Ethernet ããããè¨å®ããã*/282 /* Ethernet ヘッダを設定する。*/ 302 283 eth = GET_ETHER_HDR(input); 303 284 memcpy(eth->dhost, eth->shost, ETHER_ADDR_LEN); 304 285 memcpy(eth->shost, ifaddr->lladdr, ETHER_ADDR_LEN); 305 286 306 /* ARP å¿çãéä¿¡ããã*/287 /* ARP 応答を送信する。*/ 307 288 IF_RAW_OUTPUT(input, TMO_FEVR); 308 289 return; … … 315 296 316 297 /* 317 * arp_timer -- ARP ãã£ãã·ã¥ã®æ´æ°298 * arp_timer -- ARP キャッシュの更新 318 299 */ 319 300 … … 329 310 arp_cache[ix].expire -= ARP_TIMER_TMO; 330 311 if (arp_cache[ix].expire == 0) { 331 /* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/312 /* 送信がペンデングされているフレームがあれば捨てる。*/ 332 313 if (arp_cache[ix].hold) { 333 314 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 344 325 345 326 /* 346 * arp_request -- MAC ã¢ãã¬ã¹è§£æ±ºè¦æ±327 * arp_request -- MAC アドレス解決要求 347 328 */ 348 329 … … 362 343 if ((error = tget_net_buf(&arp_req, IF_ARP_ETHER_HDR_SIZE, TMO_ARP_GET_NET_BUF)) == E_OK) { 363 344 364 /* ã¤ã¼ãµãããããããè¨å®ããã*/345 /* イーサネットヘッダを設定する。*/ 365 346 eth = GET_ETHER_HDR(arp_req); 366 347 memcpy(eth->dhost, ether_broad_cast_addr, ETHER_ADDR_LEN); … … 368 349 eth->type = htons(ETHER_TYPE_ARP); 369 350 370 /* ARP ããããè¨å®ããã*/351 /* ARP ヘッダを設定する。*/ 371 352 arph = GET_ARP_HDR(arp_req); 372 353 arph->hrd_addr = htons(ARPHRD_ETHER); … … 376 357 arph->opcode = htons(ARPOP_REQUEST); 377 358 378 /* ã¤ã¼ãµããã ARP ããããè¨å®ããã*/359 /* イーサネット ARP ヘッダを設定する。*/ 379 360 et_arph = GET_ETHER_ARP_HDR(arp_req); 380 361 src = IF_GET_IFNET()->in_ifaddr.addr; … … 384 365 ahtonl(et_arph->tproto, dst); 385 366 386 /* éä¿¡ããã*/367 /* 送信する。*/ 387 368 error = IF_RAW_OUTPUT(arp_req, TMO_ARP_OUTPUT); 388 369 } … … 393 374 394 375 /* 395 * arp_get_cache -- ARP ãã£ãã·ã¥ãç²å¾ããã376 * arp_get_cache -- ARP キャッシュを獲得する。 396 377 */ 397 378 … … 403 384 404 385 /* 405 * arp_input -- ARP ã®å 406 ¥åé¢æ° 386 * arp_input -- ARP の入力関数 407 387 */ 408 388 … … 415 395 NET_COUNT_ARP(net_count_arp.in_packets, 1); 416 396 417 /* ARP ãããã®é·ãããã§ãã¯ããã*/397 /* ARP ヘッダの長さをチェックする。*/ 418 398 if (input->len < IF_ARP_HDR_SIZE) 419 399 goto buf_rel; … … 422 402 423 403 /* 424 * ç©çã¢ãã¬ã¹ãã©ã¼ãããã Ehternet 以å¤425 * ã¾ãã¯ããããã³ã«ã IP 以å¤ã¯ã¨ã©ã¼ã404 * 物理アドレスフォーマットが Ehternet 以外 405 * または、プロトコルが IP 以外はエラー。 426 406 */ 427 407 if (ntohs(arph->hrd_addr) != ARPHRD_ETHER || … … 429 409 goto buf_rel; 430 410 431 /* ARP ããã + Ether ARP ãããã®é·ãããã§ãã¯ããã*/411 /* ARP ヘッダ + Ether ARP ヘッダの長さをチェックする。*/ 432 412 if (input->len < IF_ARP_ETHER_HDR_SIZE) 433 413 goto buf_rel; … … 442 422 443 423 /* 444 * arp_resolve -- MAC ã¢ãã¬ã¹è§£æ±º445 * 446 * ã¢ãã¬ã¹è§£æ±ºãã§ããã°ãæ»ãå¤ã¯ true ãè¿ããã§ããªããã°447 * éä¿¡ããã³ãã£ã³ã°ãã¦ãæ»ãå¤ã¯ false ãè¿ãã424 * arp_resolve -- MAC アドレス解決 425 * 426 * アドレス解決ができれば、戻り値は true を返し、できなければ 427 * 送信をペンディングして、戻り値は false を返す。 448 428 */ 449 429 … … 458 438 459 439 /* 460 * 次ã®å ´åã¯ãã¤ã¼ãµãããã®ããã¼ããã£ã¹ãã¢ãã¬ã¹ãè¿ãã440 * 次の場合は、イーサネットのブロードキャストアドレスを返す。 461 441 * 462 * ã»å 463 ¨ãããã 1 464 * ã»ãã¹ãé¨ã®å 465 ¨ãããã 1 ã§ããããã¯ã¼ã¯é¨ããã¼ã«ã«ã¢ãã¬ã¹ 442 * ・全ビットが 1 443 * ・ホスト部の全ビットが 1 で、ネットワーク部がローカルアドレス 466 444 */ 467 445 if (gw == IPV4_ADDR_BROADCAST || … … 471 449 } 472 450 473 /* éä¿¡å 474 GW ã® IP ã¢ãã¬ã¹ã ARP ãã£ãã·ã¥ã«ããã調ã¹ãã*/ 451 /* 送信先 GW の IP アドレスが ARP キャッシュにあるか調べる。*/ 475 452 syscall(wai_sem(SEM_ARP_CACHE_LOCK)); 476 453 ent = arp_lookup(gw, true); … … 481 458 } 482 459 else { 483 /* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/460 /* 送信がペンデングされているフレームがあれば捨てる。*/ 484 461 if (ent->hold) { 485 462 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 488 465 489 466 /* 490 * éä¿¡ããã³ãã£ã³ã°ããã491 * IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ãè¨å®ããã¦ããã¨ãã¯ã492 * éä¿¡ããã³ãã£ã³ã°ããªãã467 * 送信をペンディングする。 468 * IF でネットワークバッファを開放しないフラグが設定されているときは、 469 * 送信をペンディングしない。 493 470 */ 494 471 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) … … 500 477 syscall(sig_sem(SEM_ARP_CACHE_LOCK)); 501 478 502 /* ã¢ãã¬ã¹è§£æ±ºè¦æ±ãéä¿¡ããã*/479 /* アドレス解決要求を送信する。*/ 503 480 arp_request(ifaddr, gw); 504 481 return false; … … 507 484 508 485 /* 509 * arp_init -- ARP åæå486 * arp_init -- ARP 初期化 510 487 */ 511 488 … … 518 495 #ifdef ETHER_CFG_MULTICAST 519 496 /* 520 * ether_map_ipv4_multicast -- IPv4 ãã«ããã£ã¹ãã¢ãã¬ã¹ããã¤ã¼ãµãããã»ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ497 * ether_map_ipv4_multicast -- IPv4 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換 521 498 */ 522 499 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 45 33 46 34 /* 47 * Ethernet ARP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«35 * Ethernet ARP コンフィギュレーションファイル 48 36 */ 49 37 50 38 #ifdef SUPPORT_ETHER 51 39 52 /* ARP ãã£ãã·ã¥æ´æ°ç¨ã»ããã©*/40 /* ARP キャッシュ更新用セマフォ */ 53 41 54 42 CRE_SEM(SEM_ARP_CACHE_LOCK, { TA_TPRI, 1, 1 }); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 88 76 * Ethernet Address Resolution Protocol. 89 77 * 90 * RFC 826 åç 91 § 78 * RFC 826 参照 92 79 */ 93 80 94 81 typedef struct t_ether_arp_hdr { 95 uint8_t shost[ETHER_ADDR_LEN]; /* éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹*/96 uint8_t sproto[IPV4_ADDR_LEN]; /* éä¿¡ãã¹ãã® IP ã¢ãã¬ã¹*/97 uint8_t thost[ETHER_ADDR_LEN]; /* 解決対象ç©çã¢ãã¬ã¹*/98 uint8_t tproto[IPV4_ADDR_LEN]; /* 解決対象 IP ã¢ãã¬ã¹*/82 uint8_t shost[ETHER_ADDR_LEN]; /* 送信ホストの物理アドレス */ 83 uint8_t sproto[IPV4_ADDR_LEN]; /* 送信ホストの IP アドレス */ 84 uint8_t thost[ETHER_ADDR_LEN]; /* 解決対象物理アドレス */ 85 uint8_t tproto[IPV4_ADDR_LEN]; /* 解決対象 IP アドレス */ 99 86 } __attribute__((packed, aligned(2)))T_ETHER_ARP_HDR; 100 87 … … 105 92 106 93 /* 107 * ARP ãã£ãã·ã¥ã¨ã³ããª94 * ARP キャッシュエントリ 108 95 */ 109 96 110 97 typedef struct arp_entry { 111 T_NET_BUF *hold; /* ARP ã®è§£æ±ºå¾ 112 ã¡åºåãã¬ã¼ã */ 113 T_IN4_ADDR ip_addr; /* IP ã¢ãã¬ã¹ */ 114 uint16_t expire; /* ç ´æ£ã¾ã§ã®æéã0 ãªãæªä½¿ç¨ */ 115 uint8_t mac_addr[ETHER_ADDR_LEN]; /* MAC ã¢ãã¬ã¹ */ 98 T_NET_BUF *hold; /* ARP の解決待ち出力フレーム */ 99 T_IN4_ADDR ip_addr; /* IP アドレス */ 100 uint16_t expire; /* 破棄までの時間、0 なら未使用 */ 101 uint8_t mac_addr[ETHER_ADDR_LEN]; /* MAC アドレス */ 116 102 } __attribute__((packed, aligned(2)))T_ARP_ENTRY; 117 103 118 104 /* 119 * é¢æ°105 * 関数 120 106 */ 121 107 … … 131 117 132 118 /* 133 * TINET ç¬èªAPI119 * TINET 独自 API 134 120 */ 135 121 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 88 76 89 77 /* 90 * TINET ã®ãã¼ã¸ã§ã³æ 91 å ± 92 */ 93 94 #define TINET_PRVER UINT_C(0x1054) /* TINET ã®ãã¼ã¸ã§ã³çªå· */ 95 96 /* 97 * ã¤ã³ã¿ã¼ãããã·ã¹ãã ã®å®ç¾©ãRFC790 åç 98 § 99 */ 100 101 /* 102 * ãããã³ã« (RFC1700) 103 */ 104 105 #define IPPROTO_IP UINT_C(0) /* IP ã®ããã¼ */ 106 #define IPPROTO_HOPOPTS UINT_C(0) /* IPv6 ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ */ 78 * TINET のバージョン情報 79 */ 80 81 #define TINET_PRVER UINT_C(0x1054) /* TINET のバージョン番号 */ 82 83 /* 84 * インターネットシステムの定義、RFC790 参照 85 */ 86 87 /* 88 * プロトコル (RFC1700) 89 */ 90 91 #define IPPROTO_IP UINT_C(0) /* IP のダミー */ 92 #define IPPROTO_HOPOPTS UINT_C(0) /* IPv6 中継点 (Hop-by-Hop) オプション */ 107 93 #define IPPROTO_ICMP UINT_C(1) /* ICMP */ 108 94 #define IPPROTO_TCP UINT_C(6) /* TCP */ 109 95 #define IPPROTO_UDP UINT_C(17) /* UDP */ 110 96 #define IPPROTO_IPV6 UINT_C(41) /* IPv6 */ 111 #define IPPROTO_ROUTING UINT_C(43) /* çµè·¯å¶å¾¡ãªãã·ã§ã³*/112 #define IPPROTO_FRAGMENT UINT_C(44) /* æçåãªãã·ã§ã³*/97 #define IPPROTO_ROUTING UINT_C(43) /* 経路制御オプション */ 98 #define IPPROTO_FRAGMENT UINT_C(44) /* 断片化オプション */ 113 99 #define IPPROTO_RSVP UINT_C(46) /* RSVP */ 114 #define IPPROTO_ESP UINT_C(50) /* IPv6 æå·åãªãã·ã§ã³*/115 #define IPPROTO_AH UINT_C(51) /* IPv6 èªè¨¼ãªãã·ã§ã³*/100 #define IPPROTO_ESP UINT_C(50) /* IPv6 暗号化オプション */ 101 #define IPPROTO_AH UINT_C(51) /* IPv6 認証オプション */ 116 102 #define IPPROTO_ICMPV6 UINT_C(58) /* ICMPv6 */ 117 #define IPPROTO_NONE UINT_C(59) /* IPv6 次ãããç¡ã */ 118 #define IPPROTO_DSTOPTS UINT_C(60) /* IPv6 çµç¹ãªãã·ã§ã³ */ 119 #define IPPROTO_IPCOMP UINT_C(108) /* ãã¤ãã¼ãå§ç¸® */ 120 #define IPPROTO_DONE UINT_C(257) /* IPv6 ã§ä¸ä½ãããã³ã«å 121 ¥åçµäº */ 122 123 /* 124 * IPv4 ã¢ãã¬ã¹ 125 */ 126 127 /* åæ¹åç 128 § */ 103 #define IPPROTO_NONE UINT_C(59) /* IPv6 次ヘッダ無し */ 104 #define IPPROTO_DSTOPTS UINT_C(60) /* IPv6 終点オプション */ 105 #define IPPROTO_IPCOMP UINT_C(108) /* ペイロード圧縮 */ 106 #define IPPROTO_DONE UINT_C(257) /* IPv6 で上位プロトコル入力終了 */ 107 108 /* 109 * IPv4 アドレス 110 */ 111 112 /* 前方参照 */ 129 113 130 114 #ifndef T_IN4_ADDR_DEFINED … … 137 121 138 122 /* 139 * ITRON TCP/IPv4 ã¢ãã¬ã¹/ãã¼ãçªå·ã®å®ç¾©123 * ITRON TCP/IPv4 アドレス/ポート番号の定義 140 124 */ 141 125 142 126 typedef struct t_ipv4ep { 143 uint32_t ipaddr; /* IPv4 ã¢ãã¬ã¹*/144 uint16_t portno; /* ãã¼ãçªå·*/127 uint32_t ipaddr; /* IPv4 アドレス */ 128 uint16_t portno; /* ポート番号 */ 145 129 } T_IPV4EP; 146 130 147 131 /* 148 * ã¢ãã¬ã¹/ãã¼ãã®é·ã132 * アドレス/ポートの長さ 149 133 */ 150 134 … … 153 137 154 138 /* 155 * ãã¼ãçªå·ã®å®ç¾©156 */ 157 158 #define TCP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP æ¨æº*/159 #define UDP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP æ¨æº*/160 161 #define TCP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known çµäºçªå·*/162 #define TCP_PORT_FIRST_AUTO UINT_C(1024) /* èªåå²ãå½ã¦éå§çªå·*/163 #define TCP_PORT_LAST_AUTO UINT_C(4999) /* èªåå²ãå½ã¦çµäºçªå·*/164 165 #define UDP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known çµäºçªå·*/166 #define UDP_PORT_FIRST_AUTO UINT_C(1024) /* èªåå²ãå½ã¦éå§çªå·*/167 #define UDP_PORT_LAST_AUTO UINT_C(4999) /* èªåå²ãå½ã¦çµäºçªå·*/168 169 /* 170 * IP ã¢ãã¬ã¹ã®å®ç¾©171 */ 172 173 #define IPV4_ADDRANY ULONG_C(0x00000000) /* ITRON TCP/IP æ¨æº*/139 * ポート番号の定義 140 */ 141 142 #define TCP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP 標準 */ 143 #define UDP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP 標準 */ 144 145 #define TCP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known 終了番号 */ 146 #define TCP_PORT_FIRST_AUTO UINT_C(1024) /* 自動割り当て開始番号 */ 147 #define TCP_PORT_LAST_AUTO UINT_C(4999) /* 自動割り当て終了番号 */ 148 149 #define UDP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known 終了番号 */ 150 #define UDP_PORT_FIRST_AUTO UINT_C(1024) /* 自動割り当て開始番号 */ 151 #define UDP_PORT_LAST_AUTO UINT_C(4999) /* 自動割り当て終了番号 */ 152 153 /* 154 * IP アドレスの定義 155 */ 156 157 #define IPV4_ADDRANY ULONG_C(0x00000000) /* ITRON TCP/IP 標準 */ 174 158 175 159 #define IPV4_ADDR_LOOPBACK ULONG_C(0x7f000001) … … 209 193 210 194 /* 211 * åççæç¨ TCP é信端ç¹195 * 動的生成用 TCP 通信端点 212 196 */ 213 197 214 198 typedef struct t_tcp_ccep { 215 /* æ¨æº */ 216 ATR cepatr; /* é信端ç¹å±æ§ */ 217 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ */ 218 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 219 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ */ 220 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 221 FP callback; /* ã³ã¼ã«ãã㯠*/ 222 /* å®è£ 223 ä¾å */ 199 /* 標準 */ 200 ATR cepatr; /* 通信端点属性 */ 201 void *sbuf; /* 送信用ウィンドバッファ */ 202 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 203 void *rbuf; /* 受信用ウィンドバッファ */ 204 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 205 FP callback; /* コールバック */ 206 /* 実装依存 */ 224 207 } T_TCP_CCEP; 225 208 226 209 /* 227 * åççæç¨ TCP åä»å£210 * 動的生成用 TCP 受付口 228 211 */ 229 212 … … 231 214 232 215 typedef struct t_tcp_crep { 233 /* æ¨æº */ 234 ATR repatr; /* åä»å£å±æ§ */ 235 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 236 /* å®è£ 237 ä¾å */ 216 /* 標準 */ 217 ATR repatr; /* 受付口属性 */ 218 T_IPV4EP myaddr; /* 自分のアドレス */ 219 /* 実装依存 */ 238 220 } T_TCP_CREP; 239 221 … … 241 223 242 224 /* 243 * åççæç¨ UDP é信端ç¹225 * 動的生成用 UDP 通信端点 244 226 */ 245 227 … … 247 229 248 230 typedef struct t_udp_ccep { 249 /* æ¨æº */ 250 ATR cepatr; /* UDP é信端ç¹å±æ§ */ 251 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 252 FP callback; /* ã³ã¼ã«ããã¯é¢æ° */ 253 /* å®è£ 254 ä¾å */ 231 /* 標準 */ 232 ATR cepatr; /* UDP 通信端点属性 */ 233 T_IPV4EP myaddr; /* 自分のアドレス */ 234 FP callback; /* コールバック関数 */ 235 /* 実装依存 */ 255 236 } T_UDP_CCEP; 256 237 … … 258 239 259 240 /* 260 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã241 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 261 242 */ 262 243 … … 278 259 279 260 /* 280 * TINET ç¬èªAPI261 * TINET 独自 API 281 262 */ 282 263 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_itron.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 48 36 49 37 /* 50 * API æ©è½ã»äºè±¡ã³ã¼ã38 * API 機能・事象コード 51 39 */ 52 40 53 /* TCP é¢ä¿*/41 /* TCP 関係 */ 54 42 55 43 #define TFN_TCP_CRE_REP (-0x201) … … 76 64 #define TEV_TCP_RCV_OOB (-0x201) 77 65 78 /* UDP é¢ä¿*/66 /* UDP 関係 */ 79 67 80 68 #define TFN_UDP_CRE_CEP (-0x221) … … 89 77 #define TEV_UDP_RCV_DAT (-0x221) 90 78 91 /* ä¸è¬*/79 /* 一般 */ 92 80 93 #define NADR ((void*)(-1)) /* ç¡å¹ã¢ãã¬ã¹*/81 #define NADR ((void*)(-1)) /* 無効アドレス */ 94 82 #define IS_PTR_DEFINED(a) ((void*)(a)!=NADR&&(void*)(a)!=NULL) 95 83 #define TCP_REP_NONE UINT_C(0) … … 98 86 99 87 /* 100 * é¢æ°88 * 関数 101 89 */ 102 90 103 /* TCP é¢ä¿*/91 /* TCP 関係 */ 104 92 105 /* ãæ¨æºæ©è½ã*/93 /* 【標準機能】 */ 106 94 107 95 extern ER tcp_acp_cep (ID cepid, ID repid, T_IPV4EP *p_dstaddr, TMO tmout); … … 120 108 extern ER tcp6_con_cep (ID cepid, T_IPV6EP *p_myaddr, T_IPV6EP *p_dstaddr, TMO tmout); 121 109 122 /* ãæ¡å¼µæ©è½ã*/110 /* 【拡張機能】 */ 123 111 124 112 extern ER tcp_del_rep (ID cepid); … … 133 121 extern ER tcp6_cre_rep (ID repid, T_TCP6_CREP *pk_crep); 134 122 135 /* UDP é¢ä¿*/123 /* UDP 関係 */ 136 124 137 /* ãæ¨æºæ©è½ã*/125 /* 【標準機能】 */ 138 126 139 127 extern ER_UINT udp_snd_dat (ID cepid, T_IPV4EP *p_dstaddr, void *data, int_t len, TMO tmout); … … 144 132 extern ER_UINT udp6_rcv_dat (ID cepid, T_IPV6EP *p_dstaddr, void *data, int_t len, TMO tmout); 145 133 146 /* ãæ¡å¼µæ©è½ã*/134 /* 【拡張機能】 */ 147 135 148 136 extern ER udp_del_cep (ID cepid); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_rename.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 48 36 49 37 /* 50 * TCP/IP ãããã³ã«ã¹ã¿ãã¯å 51 é¨åã®ãªãã¼ã 38 * TCP/IP プロトコルスタック内部名のリネーム 52 39 */ 53 40 … … 154 141 #define tmax_tcp_repid _tinet_tmax_tcp_repid 155 142 #define tmax_tcp_cepid _tinet_tmax_tcp_cepid 156 #define tmax_tcp_crepid _tinet_tmax_tcp_repid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/157 #define tmax_tcp_ccepid _tinet_tmax_tcp_cepid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/143 #define tmax_tcp_crepid _tinet_tmax_tcp_repid /* TINET 1.3 との互換性のための定義 */ 144 #define tmax_tcp_ccepid _tinet_tmax_tcp_cepid /* TINET 1.3 との互換性のための定義 */ 158 145 159 146 /* netinet/udp_input.c */ … … 179 166 #define udp_cep _tinet_udp_cep 180 167 #define tmax_udp_cepid _tinet_tmax_udp_cepid 181 #define tmax_udp_ccepid _tinet_tmax_udp_cepid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/168 #define tmax_udp_ccepid _tinet_tmax_udp_cepid /* TINET 1.3 との互換性のための定義 */ 182 169 183 170 /* netinet/ip_icmp.c */ -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 122 110 123 111 /* 124 * in4_get_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨å®ããã¦ããã¢ãã¬ã¹ãè¿ãã112 * in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。 125 113 */ 126 114 … … 134 122 135 123 /* 136 * ip2str -- IPv4 ã¢ãã¬ã¹ãæååã«å¤æããã124 * ip2str -- IPv4 アドレスを文字列に変換する。 137 125 */ 138 126 … … 166 154 167 155 /* 168 * in4_set_header -- IPv4 ããããè¨å®ããã156 * in4_set_header -- IPv4 ヘッダを設定する。 169 157 */ 170 158 … … 176 164 T_IFNET *ifp = IF_GET_IFNET(); 177 165 178 /* IP ããããè¨å®ããã*/166 /* IP ヘッダを設定する。*/ 179 167 ip4h->vhl = IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2); 180 168 ip4h->len = htons(IP4_HDR_SIZE + len); … … 184 172 ip4h->id = ip4h->flg_off = ip4h->sum = 0; 185 173 186 /* IP ã¢ãã¬ã¹ãè¨å®ããã*/174 /* IP アドレスを設定する。*/ 187 175 ip4h->dst = htonl(*dstaddr); 188 176 … … 196 184 197 185 /* 198 * in4_get_datagram -- IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨å®ããã186 * in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。 199 187 */ 200 188 … … 207 195 uint_t align; 208 196 209 /* ãã¼ã¿é·ã 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/197 /* データ長を 4 オクテット境界に調整する。*/ 210 198 align = (len + 3) >> 2 << 2; 211 199 212 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/200 /* ネットワークバッファを獲得する。*/ 213 201 if ((error = tget_net_buf_ex(nbuf, (uint_t)(IF_IP4_HDR_SIZE + align), 214 202 (uint_t)(IF_IP4_HDR_SIZE + maxlen), nbatr, tmout)) != E_OK) … … 216 204 217 205 /* 218 * ãã大ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããå ´åã®ã¿é·ãã調æ´ããã219 * ããå°ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã®ç²å¾ã¯ãéä¿¡ã¦ã£ã³ããããã¡ã®220 * çã³ãã¼æ©è½ã§ä½¿ç¨ãããå®éã«éä¿¡ããã¾ã§ããã¼ã¿ãµã¤ãºã¯æ±ºå®ã§ããªãã206 * より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。 207 * より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの 208 * 省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。 221 209 */ 222 210 if ((nbatr & NBA_SEARCH_ASCENT) != 0) 223 211 (*nbuf)->len = (uint16_t)(IF_IP4_HDR_SIZE + len); 224 212 225 /* IP ããããè¨å®ããã*/213 /* IP ヘッダを設定する。*/ 226 214 if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK) 227 215 return error; 228 216 229 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/217 /* 4 オクテット境界までパディングで埋める。*/ 230 218 if (align > len) 231 219 memset((GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len)); … … 235 223 236 224 /* 237 * in4_cksum -- IPv4 ã®ãã©ã³ã¹ãã¼ã層ãããã®ãã§ãã¯ãµã ãè¨ç®ããã238 * 239 * 注æ: æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã225 * in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。 226 * 227 * 注意: 戻り値はネットワークバイトオーダ 240 228 */ 241 229 … … 246 234 uint_t align; 247 235 248 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/236 /* 4 オクテット境界のデータ長 */ 249 237 align = (len + 3) >> 2 << 2; 250 238 251 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/239 /* 4 オクテット境界までパディングで埋める。*/ 252 240 if (align > len) 253 241 memset((uint8_t*)nbuf->buf + off + len, 0, (size_t)(align - len)); … … 262 250 263 251 /* 264 * in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨265 * 266 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã267 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨268 * ä¾å¤ãçºçããå¯è½æ§ãããã269 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã270 * 271 * æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã252 * in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用 253 * 254 * 注意: data は 4 オクテット単位でパディングすること。 255 * data が 2 オクテット単位にアラインされていないと 256 * 例外が発生する可能性がある。 257 * len は 4 オクテット単位にアラインされていること。 258 * 259 * 戻り値はネットワークバイトオーダ 272 260 */ 273 261 274 262 uint16_t 275 in_cksum (void *data, uint_t len /* ãªã¯ãããåä½*/)263 in_cksum (void *data, uint_t len /*オクテット単位*/) 276 264 { 277 265 uint16_t sum; … … 282 270 283 271 /* 284 * in4_is_dstaddr_accept -- å®å 285 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 286 * 287 * 注æ: dstaddr ã¯ã 288 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 289 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 272 * in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 273 * 274 * 注意: dstaddr は、 275 * TINET-1.2 からネットワークバイトオーダ、 276 * TINET-1.1 までは、ホストバイトオーダ 290 277 */ 291 278 … … 300 287 301 288 /* 302 * in4_ifawithifp -- å®å 303 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 304 ã¢ãã¬ã¹ãã 305 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã 306 * in6_ifawithifp ãã·ãã¥ã¬ã¼ãããã ãã§ã 307 * ã¨ã©ã¼ãè¿ããã¨ã¯ãªãã 289 * in4_ifawithifp -- 宛先アドレスにふさわしい送信元アドレスを、 290 * ネットワークインタフェースから探索する。 291 * in6_ifawithifp をシミュレートするだけで、 292 * エラーを返すことはない。 308 293 */ 309 294 … … 315 300 316 301 /* 317 * in4_add_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã« IPv4 ã¢ãã¬ã¹ãè¨å®ããã302 * in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。 318 303 */ 319 304 … … 331 316 332 317 /* 333 * in4_add_route -- çµè·¯è¡¨ã«ã¨ã³ããªãè¨å®ããã318 * in4_add_route -- 経路表にエントリを設定する。 334 319 */ 335 320 … … 351 336 352 337 /* 353 * in4_rtalloc -- ã«ã¼ãã£ã³ã°è¡¨ãæ¢ç´¢ããã338 * in4_rtalloc -- ルーティング表を探索する。 354 339 */ 355 340 … … 374 359 375 360 /* 376 * in4_rtredirect -- ã«ã¼ãã£ã³ã°è¡¨ã«ã¨ã³ããªãç»é²ããã377 * 378 * 注æ: å¼æ° tmo ã®åä½ã¯ [ms]ã361 * in4_rtredirect -- ルーティング表にエントリを登録する。 362 * 363 * 注意: 引数 tmo の単位は [ms]。 379 364 */ 380 365 … … 393 378 394 379 /* 395 * in4_timer -- IPv4 å 396 ±éã¿ã¤ãã¼ 397 * 398 * 1ç§å¨æã§èµ·åãããã 380 * in4_timer -- IPv4 共通タイマー 381 * 382 * 1秒周期で起動される。 399 383 */ 400 384 … … 418 402 419 403 /* 420 * in4_init -- IPv4 å 421 ±éæ©è½ãåæåããã 404 * in4_init -- IPv4 共通機能を初期化する。 422 405 */ 423 406 … … 439 422 440 423 /* 441 * in_rtinit -- ã«ã¼ãã£ã³ã°è¡¨ãåæåããã424 * in_rtinit -- ルーティング表を初期化する。 442 425 */ 443 426 … … 455 438 456 439 /* 457 * in_rtnewentry -- æ°ããã¨ã³ããªãç²å¾ããã440 * in_rtnewentry -- 新しいエントリを獲得する。 458 441 */ 459 442 … … 465 448 int_t ix; 466 449 467 /* 空ãã¨ã³ããªãæ¢ãã*/450 /* 空きエントリを探す。*/ 468 451 for (ix = NUM_STATIC_ROUTE_ENTRY; ix < NUM_ROUTE_ENTRY; ix ++) { 469 452 rt = &routing_tbl[ix]; … … 474 457 } 475 458 476 /* expire ã®åä½ã¯ [s]ã*/459 /* expire の単位は [s]。*/ 477 460 syscall(get_tim(&now)); 478 461 now /= SYSTIM_HZ; 479 462 480 463 if (frt == NULL) { 481 /* 空ãããªããã°ãæå¹æéããã£ã¨ãçãã¨ã³ããªã空ãã«ããã*/464 /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/ 482 465 T_IN_RTENTRY *srt = NULL; 483 466 int_t diff, sdiff = INT_MAX; … … 488 471 diff = (int_t)(rt->expire - now); 489 472 if (diff <= 0) { /* rt->expire <= now */ 490 /* æ¢ã«ãæå¹æéãéãã¦ããã*/473 /* 既に、有効時間が過ぎている。*/ 491 474 frt = rt; 492 475 break; … … 509 492 510 493 /* 511 * in_rttimer -- ã«ã¼ãã£ã³ã°è¡¨ã®ç®¡çã¿ã¤ãã¼494 * in_rttimer -- ルーティング表の管理タイマー 512 495 */ 513 496 … … 518 501 int_t ix; 519 502 520 /* expire ã®åä½ã¯ [s]ã*/503 /* expire の単位は [s]。*/ 521 504 syscall(get_tim(&now)); 522 505 now /= SYSTIM_HZ; … … 533 516 534 517 /* 535 * in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°536 * 537 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã538 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨539 * ä¾å¤ãçºçããå¯è½æ§ãããã540 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã541 * 542 * æ»ãå¤ã¯ãã¹ããã¤ããªã¼ã518 * in_cksum_sum -- チェックサムの合計計算関数 519 * 520 * 注意: data は 4 オクテット単位でパディングすること。 521 * data が 2 オクテット単位にアラインされていないと 522 * 例外が発生する可能性がある。 523 * len は 4 オクテット単位にアラインされていること。 524 * 525 * 戻り値はホストバイトオーダ 543 526 */ 544 527 545 528 uint32_t 546 in_cksum_sum (void *data, uint_t len /* ãªã¯ãããåä½*/)529 in_cksum_sum (void *data, uint_t len /*オクテット単位*/) 547 530 { 548 531 uint32_t sum = 0; … … 562 545 563 546 /* 564 * in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°565 * 566 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã567 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨568 * ä¾å¤ãçºçããå¯è½æ§ãããã569 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã547 * in_cksum_carry -- チェックサムの桁上げ計算関数 548 * 549 * 注意: data は 4 オクテット単位でパディングすること。 550 * data が 2 オクテット単位にアラインされていないと 551 * 例外が発生する可能性がある。 552 * len は 4 オクテット単位にアラインされていること。 570 553 */ 571 554 … … 584 567 585 568 /* 586 * in_strtfn -- API æ©è½ã³ã¼ãã®æå表ç¾ãè¿ãã569 * in_strtfn -- API 機能コードの文字表現を返す。 587 570 */ 588 571 … … 592 575 switch (fncd) { 593 576 594 /* TCP é¢ä¿*/577 /* TCP 関係 */ 595 578 596 579 case TFN_TCP_CRE_REP: … … 655 638 break; 656 639 657 /* UDP é¢ä¿*/640 /* UDP 関係 */ 658 641 659 642 case TFN_UDP_CRE_CEP: -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 90 78 91 79 /* 92 * ç¬èªã®ã¨ã©ã¼ã³ã¼ã 93 */ 94 95 #define EV_NOPND (-97) /* ãã³ãã£ã³ã°ãã¦ããªã */ 96 97 /* 98 * ãããã¯ã¼ã¯ã¨ã©ã¼ã³ã¼ã 99 */ 100 101 #define EV_MSIZE (-98) /* ãã¼ã¿ã°ã©ã é·è¶ 102 é */ 103 #define EV_NURCH (-99) /* ãããã¯ã¼ã¯å°éä¸è½ */ 104 #define EV_HDOWN (-100) /* ãã¹ããã¦ã³ */ 105 #define EV_HURCH (-101) /* ãã¹ãå°éä¸è½ */ 106 #define EV_CNNRF (-102) /* æ¥ç¶ä¸è½ */ 107 #define EV_CNRST (-103) /* æ¥ç¶ãªã»ãã */ 108 #define EV_REXMTMO (-104) /* åéã¿ã¤ã ã¢ã¦ã */ 109 110 /* 111 * å 112 ±éã¿ã¤ãã®èµ·åå¨æã®å®ç¾© 80 * 独自のエラーコード 81 */ 82 83 #define EV_NOPND (-97) /* ペンディングしていない */ 84 85 /* 86 * ネットワークエラーコード 87 */ 88 89 #define EV_MSIZE (-98) /* データグラム長超過 */ 90 #define EV_NURCH (-99) /* ネットワーク到達不能 */ 91 #define EV_HDOWN (-100) /* ホストダウン */ 92 #define EV_HURCH (-101) /* ホスト到達不能 */ 93 #define EV_CNNRF (-102) /* 接続不能 */ 94 #define EV_CNRST (-103) /* 接続リセット */ 95 #define EV_REXMTMO (-104) /* 再送タイムアウト */ 96 97 /* 98 * 共通タイマの起動周期の定義 113 99 */ 114 100 … … 116 102 117 103 /* 118 * ã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ§é ä½104 * インタフェースアドレス構造体 119 105 */ 120 106 121 107 typedef struct t_in4_ifaddr { 122 T_IN4_ADDR addr; /* IPv4 ã¢ãã¬ã¹*/123 T_IN4_ADDR mask; /* ãµãããããã¹ã¯*/108 T_IN4_ADDR addr; /* IPv4 アドレス */ 109 T_IN4_ADDR mask; /* サブネットマスク */ 124 110 } T_IN4_IFADDR; 125 111 126 112 /* 127 * ã«ã¼ãã£ã³ã°è¡¨ã¨ã³ããªæ§é ä½113 * ルーティング表エントリ構造体 128 114 */ 129 115 130 116 typedef struct t_in4_rtentry { 131 T_IN4_ADDR target; /* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹*/132 T_IN4_ADDR mask; /* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹ã®ãµãããããã¹ã¯*/133 T_IN4_ADDR gateway; /* ã²ã¼ãã¦ã§ã¤ã® IP ã¢ãã¬ã¹*/134 uint32_t expire; /* æå¹æéãåããæå»[s] */135 uint8_t flags; /* ãã©ã°*/117 T_IN4_ADDR target; /* 目標ネットワークアドレス */ 118 T_IN4_ADDR mask; /* 目標ネットワークアドレスのサブネットマスク */ 119 T_IN4_ADDR gateway; /* ゲートウェイの IP アドレス */ 120 uint32_t expire; /* 有効時間が切れる時刻 [s] */ 121 uint8_t flags; /* フラグ */ 136 122 } T_IN4_RTENTRY; 137 123 138 124 /* 139 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©125 * TINET 1.1 との互換性のための定義 140 126 */ 141 127 … … 150 136 #define NUM_ROUTE_ENTRY \ 151 137 (NUM_STATIC_ROUTE_ENTRY + NUM_REDIRECT_ROUTE_ENTRY) 152 /* ã«ã¼ãã£ã³ã°è¡¨ã®ã¨ã³ããªæ°*/138 /* ルーティング表のエントリ数 */ 153 139 154 140 #endif /* of #ifdef NUM_ROUTE_ENTRY */ 155 141 156 142 /* 157 * ã«ã¼ãã£ã³ã°ã¨ã³ããªç¶æ 158 ãã©ã° 159 */ 160 161 #define IN_RTF_DEFINED UINT_C(0x01) /* å®ç¾©æ¸ã¿ */ 162 #define IN_RTF_REDIRECT UINT_C(0x10) /* åãç´ãã«ããèªåè¨å®ããã */ 163 164 /* 165 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã 143 * ルーティングエントリ状態フラグ 144 */ 145 146 #define IN_RTF_DEFINED UINT_C(0x01) /* 定義済み */ 147 #define IN_RTF_REDIRECT UINT_C(0x10) /* 向け直しにより自動設定された */ 148 149 /* 150 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 166 151 */ 167 152 … … 182 167 183 168 /* 184 * ã«ã¼ãã£ã³ã°è¡¨169 * ルーティング表 185 170 */ 186 171 … … 188 173 189 174 /* 190 * åæ¹åç 191 § 175 * 前方参照 192 176 */ 193 177 … … 203 187 204 188 /* 205 * é¢æ°189 * 関数 206 190 */ 207 191 … … 223 207 224 208 /* 225 * in4_is_dstaddr_accept -- å®å 226 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 227 * 228 * 注æ: dstaddr ã¯ã 229 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 230 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 209 * in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 210 * 211 * 注意: dstaddr は、 212 * TINET-1.2 からネットワークバイトオーダ、 213 * TINET-1.1 までは、ホストバイトオーダ 231 214 */ 232 215 extern bool_t in4_is_dstaddr_accept (T_IN4_ADDR *myaddr, T_IN4_ADDR *dstaddr); 233 216 234 217 /* 235 * in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨236 * 237 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã238 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨239 * ä¾å¤ãçºçããå¯è½æ§ãããã240 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã241 */ 242 extern uint16_t in_cksum(void *data, uint_t len /* ãªã¯ãããåä½*/);243 244 /* 245 * in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°246 * 247 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã248 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨249 * ä¾å¤ãçºçããå¯è½æ§ãããã250 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã251 */ 252 extern uint32_t in_cksum_sum (void *data, uint_t len /* ãªã¯ãããåä½*/);253 254 /* 255 * in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°256 * 257 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã258 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨259 * ä¾å¤ãçºçããå¯è½æ§ãããã260 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã218 * in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用 219 * 220 * 注意: data は 4 オクテット単位でパディングすること。 221 * data が 2 オクテット単位にアラインされていないと 222 * 例外が発生する可能性がある。 223 * len は 4 オクテット単位にアラインされていること。 224 */ 225 extern uint16_t in_cksum(void *data, uint_t len /*オクテット単位*/); 226 227 /* 228 * in_cksum_sum -- チェックサムの合計計算関数 229 * 230 * 注意: data は 4 オクテット単位でパディングすること。 231 * data が 2 オクテット単位にアラインされていないと 232 * 例外が発生する可能性がある。 233 * len は 4 オクテット単位にアラインされていること。 234 */ 235 extern uint32_t in_cksum_sum (void *data, uint_t len /*オクテット単位*/); 236 237 /* 238 * in_cksum_carry -- チェックサムの桁上げ計算関数 239 * 240 * 注意: data は 4 オクテット単位でパディングすること。 241 * data が 2 オクテット単位にアラインされていないと 242 * 例外が発生する可能性がある。 243 * len は 4 オクテット単位にアラインされていること。 261 244 */ 262 245 extern uint32_t in_cksum_carry (uint32_t sum); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 45 33 46 34 /* 47 * IPv4 ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã35 * IPv4 で使用するカーネルオブジェクト 48 36 */ 49 37 … … 52 40 #ifdef IP4_CFG_FRAGMENT 53 41 54 /* ãã¼ã¿ã°ã©ã ã®åå²ã»åæ§æ*/42 /* データグラムの分割・再構成 */ 55 43 56 44 CRE_SEM(SEM_IP4_FRAG_QUEUE, { TA_TPRI, 1, 1 }); … … 60 48 #if NUM_REDIRECT_ROUTE_ENTRY > 0 61 49 62 /* ã«ã¼ãã£ã³ã°è¡¨ï¼åãç´ãï¼*/50 /* ルーティング表(向け直し)*/ 63 51 64 52 CRE_SEM(SEM_IN_ROUTING_TBL, { TA_TPRI, 1, 1 }); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * IPv4 ã®å®ç¾©ãRFC791 åç 87 § 74 * IPv4 の定義、RFC791 参照 88 75 */ 89 76 … … 91 78 92 79 /* 93 * IPv4 ãããã®å®ç¾©80 * IPv4 ヘッダの定義 94 81 */ 95 82 96 83 typedef struct t_ip4_hdr { 97 84 uint8_t vhl; /* version << 4 | header length >> 2 */ 98 /* length 㯠4 octets åä½*/85 /* length は 4 octets 単位 */ 99 86 uint8_t type; /* type of services */ 100 87 uint16_t len; /* total length */ … … 114 101 115 102 /* 116 * IPv4 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã103 * IPv4 ヘッダ構造体メンバアクセスマクロ 117 104 */ 118 105 … … 126 113 127 114 /* 128 * IPv4 ãããã®ãã£ã¼ã«ãã®å¤ã®å®ç¾©115 * IPv4 ヘッダのフィールドの値の定義 129 116 */ 130 117 131 #define IP4_VHL_BORING UINT_C(0x45) /* ãªãã·ã§ã³ããªã VHL å¤*/132 #define IP4_RF UINT_C(0x8000) /* off: äºç´*/133 #define IP4_DF UINT_C(0x4000) /* off: åå²ç¦æ¢*/134 #define IP4_MF UINT_C(0x2000) /* off: åå²ãã*/135 #define IP4_OFFMASK UINT_C(0x1fff) /* ãªãã»ããé¨ã®ãã¹ã¯å¤*/118 #define IP4_VHL_BORING UINT_C(0x45) /* オプションがない VHL 値 */ 119 #define IP4_RF UINT_C(0x8000) /* off: 予約 */ 120 #define IP4_DF UINT_C(0x4000) /* off: 分割禁止 */ 121 #define IP4_MF UINT_C(0x2000) /* off: 分割あり */ 122 #define IP4_OFFMASK UINT_C(0x1fff) /* オフセット部のマスク値 */ 136 123 137 124 /* 138 * å¶éå¤125 * 制限値 139 126 */ 140 127 141 #define IP4_MAXPACKET UINT_C(65535) /* æ大ãã±ãããµã¤ãº*/142 #define IP4_MAXTTL UINT_C(255) /* TTL æ大å¤*/143 #define IP4_DEFTTL UINT_C(64) /* TTL è¦å®å¤(RFC1340) */144 #define IP4_FRAGTTL UINT_C(60) /* åå²ããããã¼ã¿ã°ã©ã ã®çåæéï¼ç§ï¼*/145 #define IP4_MSS UINT_C(576) /* æ大ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤*/128 #define IP4_MAXPACKET UINT_C(65535) /* 最大パケットサイズ */ 129 #define IP4_MAXTTL UINT_C(255) /* TTL 最大値 */ 130 #define IP4_DEFTTL UINT_C(64) /* TTL 規定値 (RFC1340) */ 131 #define IP4_FRAGTTL UINT_C(60) /* 分割されたデータグラムの生存時間(秒)*/ 132 #define IP4_MSS UINT_C(576) /* 最大セグメントサイズの規定値 */ 146 133 147 /* IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã*/134 /* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */ 148 135 149 136 #if defined(SUPPORT_INET4) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip6.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 117 105 118 106 /* 119 * IPv6 ã®å®ç¾©ãRFC2460 åç 120 § 107 * IPv6 の定義、RFC2460 参照 121 108 */ 122 109 … … 124 111 125 112 /* 126 * IPv6 ãããã®å®ç¾©113 * IPv6 ヘッダの定義 127 114 */ 128 115 … … 141 128 142 129 /* 143 * IPv6 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã130 * IPv6 ヘッダ構造体メンバアクセスマクロ 144 131 */ 145 132 … … 151 138 152 139 /* 153 * æ¡å¼µããã140 * 拡張ヘッダ 154 141 */ 155 142 156 143 typedef struct t_ip6_ext_hdr { 157 144 uint8_t next; /* Next Header */ 158 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ã*/145 uint8_t len; /* 8 オクテット単位の長さ */ 159 146 } __attribute__((packed, aligned(2)))T_IP6_EXT_HDR; 160 147 161 148 /* 162 * ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ããã149 * 中継点 (Hop-by-Hop) オプションヘッダ 163 150 */ 164 151 165 152 typedef struct t_ip6_hbh_hdr { 166 153 uint8_t next; /* Next Header */ 167 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 168 * ãã®ãªãã·ã§ã³ãããå 169 ¨ä½ã®ãªã¯ãããæ°ã 170 * 8 ã§å²ã£ãå¤ã® - 1 ãå 171 ¥ãã 154 uint8_t len; /* 8 オクテット単位の長さ。ただし、 155 * このオプションヘッダ全体のオクテット数を 156 * 8 で割った値の - 1 が入る。 172 157 */ 173 158 } __attribute__((packed, aligned(2)))T_IP6_HBH_HDR; 174 159 175 160 /* 176 * çµç¹ (Destination) ãªãã·ã§ã³ããã161 * 終点 (Destination) オプションヘッダ 177 162 */ 178 163 179 164 typedef struct t_ip6_dest_hdr { 180 165 uint8_t next; /* Next Header */ 181 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 182 * ãã®ãªãã·ã§ã³ãããå 183 ¨ä½ã®ãªã¯ãããæ°ã 184 * 8 ã§å²ã£ãå¤ã® - 1 ãå 185 ¥ãã 166 uint8_t len; /* 8 オクテット単位の長さ。ただし、 167 * このオプションヘッダ全体のオクテット数を 168 * 8 で割った値の - 1 が入る。 186 169 */ 187 170 } __attribute__((packed, aligned(2)))T_IP6_DEST_HDR; 188 171 189 /* ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³*/172 /* 中継点 (Hop-by-Hop) オプション */ 190 173 191 174 #define IP6OPT_PAD1 UINT_C(0x00) /* 00 0 00000 */ … … 196 179 #define IP6OPT_RTR_ALERT UINT_C(0x05) /* 00 0 00101 */ 197 180 198 #define IP6OPT_MINLEN 2 /* ãªãã·ã§ã³ã®æçé·*/199 200 /* æªç¥ã®ãªãã·ã§ã³ã®å¦çã®æå®*/201 202 #define IP6OPT_TYPE_SKIP UINT_C(0x00) /* ç¡è¦ããã*/203 #define IP6OPT_TYPE_DISCARD UINT_C(0x40) /* ãã¼ã¿ã°ã©ã ãç ´æ£ããã*/204 #define IP6OPT_TYPE_FORCEICMP UINT_C(0x80) /* ç ´æ£ãã¦ãICMP ãè¿éããã*/181 #define IP6OPT_MINLEN 2 /* オプションの最短長 */ 182 183 /* 未知のオプションの処理の指定 */ 184 185 #define IP6OPT_TYPE_SKIP UINT_C(0x00) /* 無視する。 */ 186 #define IP6OPT_TYPE_DISCARD UINT_C(0x40) /* データグラムを破棄する。 */ 187 #define IP6OPT_TYPE_FORCEICMP UINT_C(0x80) /* 破棄して、ICMP を返送する。 */ 205 188 #define IP6OPT_TYPE_ICMP UINT_C(0xc0) 206 /* ç ´æ£ãã¦ããã«ããã£ã¹ãã§ãªããã° ICMP ãè¿éããã*/189 /* 破棄して、マルチキャストでなければ ICMP を返送する。 */ 207 190 208 191 #define IP6OPT_TYPE(o) ((o)&UINT_C(0xc0)) 209 192 210 193 /* 211 * çµè·¯å¶å¾¡ããã194 * 経路制御ヘッダ 212 195 */ 213 196 214 197 typedef struct t_ip6_rt_hdr { 215 198 uint8_t next; /* Next Header */ 216 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 217 * ãã®ãªãã·ã§ã³ãããå 218 ¨ä½ã®ãªã¯ãããæ°ã 219 * 8 ã§å²ã£ãå¤ã® - 1 ãå 220 ¥ãã 221 */ 222 uint8_t type; /* çµè·¯å¶å¾¡ã¿ã¤ã */ 223 uint8_t segleft; /* ã»ã°ã¡ã³ãã®æ®ã */ 199 uint8_t len; /* 8 オクテット単位の長さ。ただし、 200 * このオプションヘッダ全体のオクテット数を 201 * 8 で割った値の - 1 が入る。 202 */ 203 uint8_t type; /* 経路制御タイプ */ 204 uint8_t segleft; /* セグメントの残り */ 224 205 } __attribute__((packed, aligned(2)))T_IP6_RT_HDR; 225 206 226 207 /* 227 * ã¿ã¤ã 0 çµè·¯å¶å¾¡ããã208 * タイプ 0 経路制御ヘッダ 228 209 */ 229 210 230 211 typedef struct t_ip6_rt0_hdr { 231 212 uint8_t next; /* Next Header */ 232 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 233 * ãã®ãªãã·ã§ã³ãããå 234 ¨ä½ã®ãªã¯ãããæ°ã 235 * 8 ã§å²ã£ãå¤ã® - 1 ãå 236 ¥ãã 237 */ 238 uint8_t type; /* çµè·¯å¶å¾¡ã¿ã¤ã */ 239 uint8_t segleft; /* ã»ã°ã¡ã³ãã®æ®ã */ 240 uint32_t reserved; /* äºç´ */ 213 uint8_t len; /* 8 オクテット単位の長さ。ただし、 214 * このオプションヘッダ全体のオクテット数を 215 * 8 で割った値の - 1 が入る。 216 */ 217 uint8_t type; /* 経路制御タイプ */ 218 uint8_t segleft; /* セグメントの残り */ 219 uint32_t reserved; /* 予約 */ 241 220 } __attribute__((packed, aligned(2)))T_IP6_RT0_HDR; 242 221 243 222 /* 244 * æçããã223 * 断片ヘッダ 245 224 */ 246 225 … … 248 227 uint8_t next; /* Next Header */ 249 228 uint8_t reserved; 250 uint16_t off_flag; /* ãªãã»ããã¨ãã©ã°*/251 uint32_t ident; /* åå²èå¥å*/229 uint16_t off_flag; /* オフセットとフラグ */ 230 uint32_t ident; /* 分割識別子 */ 252 231 } __attribute__((packed, aligned(2)))T_IP6_FRAG_HDR; 253 232 254 /* æçãããã®ãªãã»ããã¨ãã©ã°*/233 /* 断片ヘッダのオフセットとフラグ */ 255 234 256 235 #ifdef _NET_CFG_BYTE_ORDER … … 258 237 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN 259 238 260 #define IP6F_OFF_MASK UINT_C(0xfff8) /* ãªãã»ãããååºããã¹ã¯*/261 #define IP6F_RESERVED_MASK UINT_C(0x0006) /* äºç´ãååºããã¹ã¯*/262 #define IP6F_MORE_FRAG UINT_C(0x0001) /* ä¸éãã©ã°ã¡ã³ã*/239 #define IP6F_OFF_MASK UINT_C(0xfff8) /* オフセットを取出すマスク */ 240 #define IP6F_RESERVED_MASK UINT_C(0x0006) /* 予約を取出すマスク */ 241 #define IP6F_MORE_FRAG UINT_C(0x0001) /* 中間フラグメント */ 263 242 264 243 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN 265 244 266 #define IP6F_OFF_MASK UINT_C(0xf8ff) /* ãªãã»ãããååºããã¹ã¯*/267 #define IP6F_RESERVED_MASK UINT_C(0x0600) /* äºç´ãååºããã¹ã¯*/268 #define IP6F_MORE_FRAG UINT_C(0x0100) /* ä¸éãã©ã°ã¡ã³ã*/245 #define IP6F_OFF_MASK UINT_C(0xf8ff) /* オフセットを取出すマスク */ 246 #define IP6F_RESERVED_MASK UINT_C(0x0600) /* 予約を取出すマスク */ 247 #define IP6F_MORE_FRAG UINT_C(0x0100) /* 中間フラグメント */ 269 248 270 249 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */ … … 273 252 274 253 /* 275 * å¶éå¤276 */ 277 278 #define IPV6_MAXHLIM UINT_C(255) /* ããããªãããã®æ大å¤*/279 #define IPV6_DEFHLIM UINT_C(64) /* ããããªãããã®è¦å®å¤*/280 #define IPV6_FRAGTTL UINT_C(60) /* åå²ããããã¼ã¿ã°ã©ã ã®çåæéï¼ç§ï¼*/281 #define IPV6_MMTU UINT_C(1280) /* æå° MTUããã¤ãã¼ã (1024) + ããã(256) */282 #define IPV6_MAXPACKET UINT_C(65535) /* ã¸ã£ã³ããã¤ãã¼ããé¤ãæ大ãã±ãããµã¤ãº*/283 284 /* 285 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã286 */ 287 288 /* 289 * ããããªãããã®è¦å®å¤ã¯ãã«ã¼ã¿éç¥ã«ããå¤æ´ããããã¨ããã254 * 制限値 255 */ 256 257 #define IPV6_MAXHLIM UINT_C(255) /* ホップリミットの最大値 */ 258 #define IPV6_DEFHLIM UINT_C(64) /* ホップリミットの規定値 */ 259 #define IPV6_FRAGTTL UINT_C(60) /* 分割されたデータグラムの生存時間(秒) */ 260 #define IPV6_MMTU UINT_C(1280) /* 最小 MTU。ペイロード (1024) + ヘッダ (256) */ 261 #define IPV6_MAXPACKET UINT_C(65535) /* ジャンボペイロードを除く最大パケットサイズ */ 262 263 /* 264 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 265 */ 266 267 /* 268 * ホップリミットの規定値は、ルータ通知により変更されることがある 290 269 */ 291 270 292 271 #if NUM_ND6_DEF_RTR_ENTRY > 0 293 272 294 /* ã«ã¼ã¿éç¥ãåä¿¡ããå ´åã¯ãéç¥ãããå¤*/273 /* ルータ通知を受信する場合は、通知された値 */ 295 274 296 275 #define IP_DEFTTL ip6_defhlim … … 298 277 #else /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */ 299 278 300 /* ã«ã¼ã¿éç¥ãåä¿¡ããªãå ´åã®å¤ã¯æ¢å®å¤*/279 /* ルータ通知を受信しない場合の値は既定値 */ 301 280 302 281 #define IP_DEFTTL IPV6_DEFHLIM -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_icmp.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 122 110 123 111 /* 124 * å¤æ°112 * 変数 125 113 */ 126 114 … … 128 116 129 117 /* 130 * SNMP 㮠管çæ 131 å ±ãã¼ã¹ (MIB) 118 * SNMP の 管理情報ベース (MIB) 132 119 */ 133 120 … … 137 124 138 125 /* 139 * é¢æ°126 * 関数 140 127 */ 141 128 … … 150 137 151 138 /* 152 * icmp_echo -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç153 * 154 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã139 * icmp_echo -- エコー要求を受信したときの処理 140 * 141 * input には IF ヘッダと IP ヘッダも含まれている。 155 142 */ 156 143 … … 164 151 NET_COUNT_MIB(icmp_stats.icmpInEchos, 1); 165 152 166 /* ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (8) ãã ã¨ã³ã¼å¿ç (0) ã«*/167 /* å¤æ´ãã¦éãè¿ãã*/153 /* メッセージの型をエコー要求 (8) から エコー応答 (0) に */ 154 /* 変更して送り返す。 */ 168 155 169 156 icmp4h = GET_ICMP4_HDR(input, ihoff); 170 157 icmp4h->type = ICMP4_ECHO_REPLY; 171 158 172 /* IP ãããã®å®å 173 ã¨çºä¿¡å 174 ã交æããã*/ 159 /* IP ヘッダの宛先と発信元を交換する。*/ 175 160 ip4h = GET_IP4_HDR(input); 176 161 addr = ip4h->src; … … 178 163 ip4h->dst = addr; 179 164 180 /* ãã§ãã¯ãµã ãè¨ç®ããã*/165 /* チェックサムを計算する。*/ 181 166 icmp4h->sum = 0; 182 167 icmp4h->sum = in_cksum(icmp4h, 183 168 (uint_t)(((input->len - GET_IF_IP4_HDR_SIZE(input)) + 3) >> 2 << 2)); 184 169 185 /* éä¿¡ããã*/170 /* 送信する。*/ 186 171 NET_COUNT_ICMP4(net_count_icmp4.out_octets, 187 172 input->len - GET_IF_IP4_HDR_SIZE(input)); … … 193 178 194 179 /* 195 * icmp_unreach -- ICMP4_UNREACH ãåä¿¡ããã¨ãã®å¦ç180 * icmp_unreach -- ICMP4_UNREACH を受信したときの処理 196 181 */ 197 182 … … 245 230 246 231 /* 247 * icmp_redirect -- åãç´ãã¡ãã»ã¼ã¸ãåä¿¡ããã¨ãã®å¦ç248 * 249 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã232 * icmp_redirect -- 向け直しメッセージを受信したときの処理 233 * 234 * input には IF ヘッダと IP ヘッダも含まれている。 250 235 */ 251 236 … … 261 246 262 247 /* 263 * å 264 容ãã§ãã¯ã以ä¸ã®å ´åã¯ã¨ã©ã¼ 248 * 内容チェック、以下の場合はエラー 265 249 * 266 * ã»ICMP ã³ã¼ãããICMP4_REDIRECT_PORT_AND_HOST (3) 以ä¸267 * ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æå°é·ããçã (IP ããã + ICMP ããã + IP ããã+ 8)268 * ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æ大é·ããçã269 * ã»250 * ・ICMP コードが、ICMP4_REDIRECT_PORT_AND_HOST (3) 以上 251 * ・データグラム長が、ICMP の最小長より短い (IP ヘッダ + ICMP ヘッダ + IP ヘッダ + 8) 252 * ・データグラム長が、ICMP の最大長より短い 253 * ・ 270 254 */ 271 255 if (icmp4h->code > ICMP4_REDIRECT_PORT_AND_HOST || … … 282 266 283 267 /* 284 * icmp_input -- ICMP ã®å 285 ¥åé¢æ° 286 * 287 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã 268 * icmp_input -- ICMP の入力関数 269 * 270 * input には IF ヘッダと IP ヘッダも含まれている。 288 271 */ 289 272 … … 300 283 NET_COUNT_ICMP4(net_count_icmp4.in_packets, 1); 301 284 302 /* ICMP ãããã®é·ãããã§ãã¯ããã*/285 /* ICMP ヘッダの長さをチェックする。*/ 303 286 if (input->len < IF_IP4_ICMP4_HDR_SIZE) { 304 287 NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1); … … 309 292 icmp4h = (T_ICMP4_HDR *)(input->buf + *offp); 310 293 311 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/294 /* 4 オクテット境界のデータ長 */ 312 295 len = input->len - *offp; 313 296 align = (len + 3) >> 2 << 2; 314 297 315 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/298 /* 4 オクテット境界までパディングで埋める。*/ 316 299 if (align > len) 317 300 memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len)); 318 301 319 /* ãã§ãã¯ãµã ãè¨ç®ããã*/302 /* チェックサムを計算する。*/ 320 303 if (in_cksum(icmp4h, align) != 0) { 321 304 NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1); … … 323 306 } 324 307 325 /* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/308 /* メッセージの型により分岐する。*/ 326 309 switch (icmp4h->type) { 327 310 case ICMP4_ECHO_REQUEST: … … 371 354 372 355 /* 373 * icmp_error -- ICMP ã¨ã©ã¼éä¿¡é¢æ°ã374 * 375 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã376 * icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ã377 * å¼åºãå´ã§ãéæ¾ãã¦ããçµäºããã356 * icmp_error -- ICMP エラー送信関数。 357 * 358 * input には IF ヘッダと IP ヘッダも含まれている。 359 * icmp_error では、ネットワークバッファ input を返却しないので、 360 * 呼出し側で、開放してから終了する。 378 361 */ 379 362 … … 390 373 ip4hl = GET_IP4_HDR_SIZE(ip4h); 391 374 392 /* éä¿¡ç¨ã® IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/375 /* 送信用の IP データグラムを獲得する。*/ 393 376 if (input->len - ip4hl < 8) 394 377 len = input->len - ip4hl; … … 402 385 return; 403 386 404 /* ICMP ããããè¨å®ããã*/387 /* ICMP ヘッダを設定する。*/ 405 388 icmp4h = GET_ICMP4_HDR(output, IF_IP4_ICMP4_HDR_OFFSET); 406 389 icmp4h->type = ICMP4_UNREACH; … … 408 391 icmp4h->data.addr= 0; 409 392 410 /* ã¨ã©ã¼ãçºçãã IP ããã㨠ãã¼ã¿ 8 ãªã¯ããããã³ãã¼ããã*/393 /* エラーが発生した IP ヘッダと データ 8 オクテットをコピーする。*/ 411 394 memcpy(GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET), 412 395 GET_IP4_HDR(input), (size_t)(ip4hl + len)); 413 396 414 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/397 /* 4 オクテット境界のデータ長 */ 415 398 align = (len + 3) >> 2 << 2; 416 399 417 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/400 /* 4 オクテット境界までパディングで埋める。*/ 418 401 if (align > len) 419 402 memset((uint8_t*)GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET) + ip4hl + len, 420 403 0, (size_t)(align - len)); 421 404 422 /* ãã§ãã¯ãµã ãè¨ç®ããã*/405 /* チェックサムを計算する。*/ 423 406 icmp4h->sum = 0; 424 407 icmp4h->sum = in_cksum(icmp4h, (uint_t)(ICMP4_HDR_SIZE + ip4hl + align)); 425 408 426 /* éä¿¡ããã*/409 /* 送信する。*/ 427 410 NET_COUNT_ICMP4(net_count_icmp4.out_octets, 428 411 output->len - GET_IF_IP4_HDR_SIZE(output)); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_icmp.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * ICMP ãããã®å®ç¾©ãRFC 79274 * ICMP ヘッダの定義、RFC 792 87 75 */ 88 76 89 77 typedef struct t_icmp_hdr { 90 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/91 uint8_t code; /* ãµãå*/92 uint16_t sum; /* ãã§ãã¯ãµã*/78 uint8_t type; /* メッセージの型 */ 79 uint8_t code; /* サブ型 */ 80 uint16_t sum; /* チェックサム */ 93 81 union { 94 82 struct id_seq { … … 114 102 115 103 /* 116 * ã¡ãã»ã¼ã¸ã®å104 * メッセージの型 117 105 */ 118 106 119 #define ICMP4_ECHO_REPLY UINT_C(0) /* ã¨ã³ã¼å¿ç*/120 #define ICMP4_UNREACH UINT_C(3) /* ã¨ã©ã¼*/121 #define ICMP4_SOURCE_QUENCH UINT_C(4) /* çºä¿¡å¶é*/122 #define ICMP4_REDIRECT UINT_C(5) /* æ¹åå¤æ´*/123 #define ICMP4_ECHO_REQUEST UINT_C(8) /* ã¨ã³ã¼è¦æ±*/124 #define ICMP4_TIME_EXCEEDED UINT_C(11) /* çºä¿¡å¶é*/125 #define ICMP4_PARAMETER UINT_C(12) /* ãã©ã¡ã¼ã¿ç°å¸¸*/126 #define ICMP4_TIME_REQUEST UINT_C(13) /* ã¿ã¤ã ã¹ã¿ã³ãè¦æ±*/127 #define ICMP4_TIME_REPLY UINT_C(14) /* ã¿ã¤ã ã¹ã¿ã³ãå¿ç*/128 #define ICMP4_MASK_REQUEST UINT_C(17) /* ã¢ãã¬ã¹ãã¹ã¯è¦æ±*/129 #define ICMP4_MASK_REPLY UINT_C(18) /* ã¢ãã¬ã¹ãã¹ã¯å¿ç*/107 #define ICMP4_ECHO_REPLY UINT_C(0) /* エコー応答 */ 108 #define ICMP4_UNREACH UINT_C(3) /* エラー */ 109 #define ICMP4_SOURCE_QUENCH UINT_C(4) /* 発信制限 */ 110 #define ICMP4_REDIRECT UINT_C(5) /* 方向変更 */ 111 #define ICMP4_ECHO_REQUEST UINT_C(8) /* エコー要求 */ 112 #define ICMP4_TIME_EXCEEDED UINT_C(11) /* 発信制限 */ 113 #define ICMP4_PARAMETER UINT_C(12) /* パラメータ異常 */ 114 #define ICMP4_TIME_REQUEST UINT_C(13) /* タイムスタンプ要求 */ 115 #define ICMP4_TIME_REPLY UINT_C(14) /* タイムスタンプ応答 */ 116 #define ICMP4_MASK_REQUEST UINT_C(17) /* アドレスマスク要求 */ 117 #define ICMP4_MASK_REPLY UINT_C(18) /* アドレスマスク応答 */ 130 118 131 119 /* 132 * ãµãå120 * サブ型 133 121 */ 134 122 135 123 /* ICMP4_UNREACH (3) */ 136 124 137 #define ICMP4_UNREACH_NET UINT_C(0) /* ãããã¯ã¼ã¯*/138 #define ICMP4_UNREACH_HOST UINT_C(1) /* ãã¹ã*/139 #define ICMP4_UNREACH_PROTOCOL UINT_C(2) /* ãããã³ã«*/140 #define ICMP4_UNREACH_PORT UINT_C(3) /* ãã¼ã*/141 #define ICMP4_UNREACH_FLAG UINT_C(4) /* åå²*/142 #define ICMP4_UNREACH_SRC_FAIL UINT_C(5) /* ã½ã¼ã¹çµè·¯*/143 #define ICMP4_UNREACH_NET_UNKNOWN UINT_C(6) /* ãããã¯ã¼ã¯ä¸æ*/144 #define ICMP4_UNREACH_HOST_UNKNOWN UINT_C(7) /* ãã¹ãä¸æ*/145 #define ICMP4_UNREACH_ISOLATED UINT_C(8) /* åé¢*/125 #define ICMP4_UNREACH_NET UINT_C(0) /* ネットワーク */ 126 #define ICMP4_UNREACH_HOST UINT_C(1) /* ホスト */ 127 #define ICMP4_UNREACH_PROTOCOL UINT_C(2) /* プロトコル */ 128 #define ICMP4_UNREACH_PORT UINT_C(3) /* ポート */ 129 #define ICMP4_UNREACH_FLAG UINT_C(4) /* 分割 */ 130 #define ICMP4_UNREACH_SRC_FAIL UINT_C(5) /* ソース経路 */ 131 #define ICMP4_UNREACH_NET_UNKNOWN UINT_C(6) /* ネットワーク不明 */ 132 #define ICMP4_UNREACH_HOST_UNKNOWN UINT_C(7) /* ホスト不明 */ 133 #define ICMP4_UNREACH_ISOLATED UINT_C(8) /* 分離 */ 146 134 #define ICMP4_UNREACH_NET_PROHIB UINT_C(9) /* */ 147 135 #define ICMP4_UNREACH_HOST_PROHIB UINT_C(10) /* */ 148 #define ICMP4_UNREACH_TOS_NET UINT_C(11) /* ãããã¯ã¼ã¯ã¸ã®ä¸æ£TOS*/149 #define ICMP4_UNREACH_TOS_HOST UINT_C(12) /* ãã¹ãã¸ã®ä¸æ£TOS */136 #define ICMP4_UNREACH_TOS_NET UINT_C(11) /* ネットワークへの不正TOS*/ 137 #define ICMP4_UNREACH_TOS_HOST UINT_C(12) /* ホストへの不正TOS */ 150 138 #define ICMP4_UNREACH_FILTER_PROHIB UINT_C(13) /* */ 151 139 #define ICMP4_UNREACH_HOST_PRECEDENCE UINT_C(14) /* */ … … 154 142 /* ICMP4_REDIRECT (5) */ 155 143 156 #define ICMP4_REDIRECT_NET UINT_C(0) /* ãããã¯ã¼ã¯*/157 #define ICMP4_REDIRECT_HOST UINT_C(1) /* ãã¹ã*/158 #define ICMP4_REDIRECT_PORT_AND_NET UINT_C(2) /* ãã¼ãçªå·ã¨ããã*/159 #define ICMP4_REDIRECT_PORT_AND_HOST UINT_C(3) /* ãã¼ãçªå·ã¨ãã¹ã*/144 #define ICMP4_REDIRECT_NET UINT_C(0) /* ネットワーク */ 145 #define ICMP4_REDIRECT_HOST UINT_C(1) /* ホスト */ 146 #define ICMP4_REDIRECT_PORT_AND_NET UINT_C(2) /* ポート番号とネット */ 147 #define ICMP4_REDIRECT_PORT_AND_HOST UINT_C(3) /* ポート番号とホスト */ 160 148 161 149 /* 162 * å 163 ¨åå¤æ° 150 * 全域変数 164 151 */ 165 152 166 153 /* 167 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã154 * 関数シミュレーションマクロ 168 155 */ 169 156 … … 175 162 176 163 /* 177 * é¢æ°164 * 関数 178 165 */ 179 166 … … 187 174 188 175 /* 189 * TINET ç¬èªAPI176 * TINET 独自 API 190 177 */ 191 178 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 136 124 137 125 /* 138 * å¤æ°126 * 変数 139 127 */ 140 128 … … 142 130 143 131 /* 144 * SNMP 㮠管çæ 145 å ±ãã¼ã¹ (MIB) 132 * SNMP の 管理情報ベース (MIB) 146 133 */ 147 134 … … 153 140 154 141 /* 155 * ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼142 * データグラム再構成キュー 156 143 */ 157 144 … … 160 147 161 148 /* 162 * é¢æ°149 * 関数 163 150 */ 164 151 … … 167 154 168 155 /* 169 * ip_get_frag_queue -- ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼ãç²å¾ããã156 * ip_get_frag_queue -- データグラム再構成キューを獲得する。 170 157 */ 171 158 … … 177 164 178 165 /* 179 * ip_freef -- ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼ã解æ¾ããã166 * ip_freef -- データグラム再構成キューを解放する。 180 167 */ 181 168 … … 195 182 196 183 /* 197 * ip_frag_timer -- ãã¼ã¿ã°ã©ã åæ§æ管çã¿ã¤ã184 * ip_frag_timer -- データグラム再構成管理タイマ 198 185 */ 199 186 … … 218 205 219 206 /* 220 * ip_reass -- ãã¼ã¿ã°ã©ã ãåæ§æããã207 * ip_reass -- データグラムを再構成する。 221 208 */ 222 209 … … 242 229 243 230 /* 244 * ID ãIPã¢ãã¬ã¹ãä¸ä½ãããã³ã«ãç°ãªããã©ã°ã¡ã³ãããã¥ã¼ã«æãã°ç ´æ£ããã231 * ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。 245 232 */ 246 233 frag = ip_frag_queue[ix]; … … 259 246 NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN], 1); 260 247 261 /* æ°è¦ã® ID ãªããå®å 262 ã¢ãã¬ã¹ãä¿åãã¦ããã¥ã¼ã«ã¤ãªãã*/ 248 /* 新規の ID なら、宛先アドレスを保存して、キューにつなぐ。*/ 263 249 frag_dst [ix] = dst; 264 250 ip_frag_queue[ix] = input; … … 266 252 input = NULL; 267 253 268 /* åæ§æã¿ã¤ã ã¢ã¦ããè¨å®ããã*/254 /* 再構成タイムアウトを設定する。*/ 269 255 ip4h->ttl = IP4_FRAGTTL; 270 256 } 271 257 else { 272 258 273 /* æ£ããä½ç½®ã«æ¿å 274 ¥ããã*/ 259 /* 正しい位置に挿入する。*/ 275 260 prev = NULL; 276 261 while (frag != NULL && … … 289 274 input = NULL; 290 275 291 /* å 292 ¨ã¦ã®ãã©ã°ã¡ã³ããæã£ã¦ããã調ã¹ãã*/ 276 /* 全てのフラグメントが揃っているか調べる。*/ 293 277 off = 0; 294 278 for (frag = ip_frag_queue[ix]; frag != NULL; frag = GET_QIP4_HDR(frag)->next) { 295 279 if ((IP4_FLGOFF_OFF(GET_QIP4_HDR(frag)->flg_off) << 3) != off) { 296 /* éä¸ãæãã¦ãããçµäºããã*/280 /* 途中が抜けていたら終了する。*/ 297 281 syscall(sig_sem(SEM_IP4_FRAG_QUEUE)); 298 282 return NULL; … … 302 286 } 303 287 304 /* å 305 ¨ã¦ã®ãã©ã°ã¡ã³ããæã£ããåæ§æããã*/ 288 /* 全てのフラグメントが揃ったら再構成する。*/ 306 289 if ((GET_QIP4_HDR(prev)->flg_off & IP4_MF) == 0) { 307 290 308 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/291 /* ネットワークバッファを獲得する。*/ 309 292 if (tget_net_buf(&input, IF_IP4_HDR_SIZE + off, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) { 310 293 NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN_OK], 1); 311 294 NET_COUNT_MIB(ip_stats.ipReasmOKs, 1); 312 295 313 /* IPv4 ããããè¨å®ããã*/296 /* IPv4 ヘッダを設定する。*/ 314 297 frag = ip_frag_queue[ix]; 315 298 ip4h = GET_IP4_HDR(input); … … 321 304 ip4h->flg_off = ip4h->id = 0; 322 305 323 /* ãã¼ã¿ã°ã©ã ãåæ§æããã*/306 /* データグラムを再構成する。*/ 324 307 off = IP4_HDR_SIZE; 325 308 while (frag != NULL) { … … 335 318 NET_COUNT_MIB(ip_stats.ipReasmFails, 1); 336 319 } 337 /* ãã¥ã¼ã空ã«ããã*/320 /* キューを空にする。*/ 338 321 ip_freef(ix); 339 322 } … … 346 329 347 330 /* 348 * ip_init -- IP ã®åæå331 * ip_init -- IP の初期化 349 332 */ 350 333 … … 356 339 357 340 /* 358 * ip_remove_options -- IPv4 ãããã®ãªãã·ã§ã³ãåé¤ãã以éãåã«è©°ããã341 * ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。 359 342 */ 360 343 … … 378 361 379 362 /* 380 * ip_input -- IP ã®å 381 ¥åé¢æ° 363 * ip_input -- IP の入力関数 382 364 */ 383 365 384 366 #if defined(SUPPORT_IPSEC) 385 367 /* 386 * TODO: IPsec SPãæ¤ç´¢ãããã±ããããªã¸ã§ã¯ããããã©ããå¤å®ããå¦çãå®è£ 387 ãã 368 * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実装する 388 369 */ 389 370 #endif /* of defined(SUPPORT_IPSEC) */ … … 401 382 NET_COUNT_MIB(ip_stats.ipInReceives, 1); 402 383 403 /* IP ãããã®é·ãããã§ãã¯ããã*/384 /* IP ヘッダの長さをチェックする。*/ 404 385 if (input->len < IF_IP4_HDR_SIZE) { 405 386 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1); … … 411 392 hlen = GET_IP4_HDR_SIZE(ip4h); 412 393 413 /* ãã¼ã¸ã§ã³ããã§ãã¯ããã*/394 /* バージョンをチェックする。*/ 414 395 if (IP4_VHL_V(ip4h->vhl) != IPV4_VERSION) { 415 396 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_VER], 1); … … 418 399 } 419 400 420 /* IP ãããã®é·ãããã§ãã¯ãããªãã·ã§ã³ã解æããã*/401 /* IP ヘッダの長さをチェックし、オプションを解析する。*/ 421 402 if (hlen > IP4_HDR_SIZE) { 422 403 NET_COUNT_IP4(net_count_ip4[NC_IP4_OPTS], 1); 423 /* %%% ãªãã·ã§ã³ã®è§£æ%%% */424 } 425 426 /* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ããã*/404 /* %%% オプションの解析 %%% */ 405 } 406 407 /* データグラム長をチェックする。*/ 427 408 if (ntohs(ip4h->len) > input->len - IF_HDR_SIZE) { 428 409 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1); … … 431 412 } 432 413 433 /* ãããã¯ã¼ã¯ãããã¡ã®é·ãããã¼ã¿ã°ã©ã é·ã«èª¿æ´ããã*/414 /* ネットワークバッファの長さをデータグラム長に調整する。*/ 434 415 input->len = (uint16_t)(ntohs(ip4h->len) + IF_HDR_SIZE); 435 416 436 /* ãã§ãã¯ãµã ããã§ãã¯ããã*/417 /* チェックサムをチェックする。*/ 437 418 if (in_cksum(ip4h, hlen) != 0) { 438 419 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_CKSUM], 1); … … 441 422 } 442 423 443 /* IP ãããã®é·ãããã§ãã¯ããä¸ä½ã ICMP 以å¤ã¯ãªãã·ã§ã³ãæ¶å»ããã*/424 /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/ 444 425 if (hlen > IP4_HDR_SIZE && ip4h->proto != IPPROTO_ICMP) { 445 426 memset((uint8_t*)ip4h + IP4_HDR_SIZE, 0, hlen - IP4_HDR_SIZE); 446 427 } 447 428 448 /* éä¿¡å 449 ã¢ãã¬ã¹ããã§ãã¯ããã*/ 429 /* 送信元アドレスをチェックする。*/ 450 430 src = ntohl(ip4h->src); 451 431 bc = (ifp->in_ifaddr.addr & ifp->in_ifaddr.mask) | ~ifp->in_ifaddr.mask; … … 469 449 #endif /* of #ifdef SUPPORT_LOOP */ 470 450 471 /* ãã¦å 472 ã¢ãã¬ã¹ããã§ãã¯ããã*/ 451 /* あて先アドレスをチェックする。*/ 473 452 dst = ntohl(ip4h->dst); 474 453 … … 476 455 477 456 /* 478 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ããã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©ã®479 * å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã457 * DHCP_CFG が定義されているときは、ローカルアドレスが未定義の 458 * 場合もデータグラムを受信する。 480 459 */ 481 460 … … 511 490 #ifdef IP4_CFG_FRAGMENT 512 491 513 /* åå²ããã¦ããããã§ãã¯ããã*/492 /* 分割されているかチェックする。*/ 514 493 if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) { 515 494 if ((input = ip_reass(ip4h, input)) == NULL) … … 519 498 #else /* of #ifdef IP4_CFG_FRAGMENT */ 520 499 521 /* åå²ããã¦ããããã§ãã¯ããã*/500 /* 分割されているかチェックする。*/ 522 501 if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) { 523 502 T_IN4_ADDR src; … … 537 516 538 517 #if defined(SUPPORT_IPSEC) 539 /* ããã§ipsec4_in_rejectãå®è¡ãã*/518 /* ここでipsec4_in_rejectを実行する */ 540 519 if ((ip4h->proto != IPPROTO_ESP) && ipsec4_in_reject (input)) { 541 520 goto buf_rel; … … 543 522 #endif /* of #if defined(SUPPORT_IPSEC) */ 544 523 545 /* ãããã³ã«ãé¸æãã*/524 /* プロトコルを選択する */ 546 525 switch (ip4h->proto) { 547 526 … … 580 559 NET_COUNT_MIB(ip_stats.ipInUnknownProtos, 1); 581 560 582 /* ãã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/561 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 583 562 if (dst == ifp->in_ifaddr.addr) { 584 563 T_IN4_ADDR src; … … 589 568 } 590 569 /* 591 * icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§592 * éæ¾ãã¦ããçµäºããã570 * icmp_error では、ネットワークバッファ input を返却しないので 571 * 開放してから終了する。 593 572 */ 594 573 break; -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_output.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 120 108 121 109 /* 122 * IP output -- IP ã®åºåé¢æ°123 * 124 * 注æ: ãã¼ã¸ã§ã³ã¨ãããé·ã¯ä¸ä½å±¤ã§è¨å®ããã110 * IP output -- IP の出力関数 111 * 112 * 注意: バージョンとヘッダ長は上位層で設定する。 125 113 */ 126 114 … … 141 129 142 130 #ifdef SUPPORT_IPSEC 143 /* XXX: IPsec ã®å¦çã¯ãã±ããæçåã®åã«è¡ããã*/144 145 /* SPD ãåå¾ãã*/131 /* XXX: IPsecの処理はパケット断片化の前に行われる */ 132 133 /* SPDを取得する */ 146 134 sp = ipsec4_getpolicybyaddr(output, IPSEC_DIR_OUTBOUND, &ipsec_error); 147 135 if (sp==NULL) { … … 150 138 } 151 139 152 /* ããªã·ããã§ãã¯ãã*/140 /* ポリシをチェックする*/ 153 141 #if 0 154 142 switch (sp->policy) { … … 162 150 163 151 case IPSEC_POLICY_IPSEC: 164 /* XXX: SH2 ã§ã¯ããã§illegal Instructionãçºçãããã³ã³ãã¤ã©ã®ãã°? */152 /* XXX: SH2ではここでillegal Instructionが発生する。コンパイラのバグ? */ 165 153 if (sp->req == NULL) { 166 /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã*/154 /* 鍵交換デーモンに対してSAの取得を要求する */ 167 155 goto bad; 168 156 } … … 170 158 171 159 default: 172 /* ä¸æ£ãªããªã·*/160 /* 不正なポリシ */ 173 161 goto bad; 174 162 break; 175 163 } 176 164 #else /* 0 */ 177 /* XXX: ã³ã³ãã¤ã©ã®ä¸å 178 ·ååé¿ã®ãã switchãããifæã§æ¸ãç´ãã */ 165 /* XXX: コンパイラの不具合回避のため switchをやめif文で書き直した */ 179 166 policy = sp->spinitb->policy; 180 167 … … 185 172 else if (policy == IPSEC_POLICY_IPSEC) { 186 173 if (sp->req == NULL) 187 /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã*/174 /* 鍵交換デーモンに対してSAの取得を要求する */ 188 175 goto bad; 189 176 } else … … 196 183 197 184 state.m = output; 198 /* XXX: ipsec4_output()å 199 ã§ã¯ãip->{len,off}ããããã¯ã¼ã¯ãã¤ããªã¼ãã¨ãã */ 185 /* XXX: ipsec4_output()内では、ip->{len,off}をネットワークバイトオーダとする */ 200 186 error = ipsec4_output (&state, sp, 0 /* flags */ ); 201 187 output = state.m; 202 188 203 189 if (error) { 204 /* net_buf ã¯ipsec4_outputã«ãã£ã¦æ¢ã«è§£æ¾ããã¦ãã*/190 /* net_buf はipsec4_outputによって既に解放されている */ 205 191 switch (error) { 206 192 default: … … 210 196 } 211 197 212 /* ipsec4_outputã«å½±é¿ãåããå¤ãæ´æ°ãã */ 213 /* XXX: å¿ 214 è¦ã? */ 198 /* ipsec4_outputに影響を受けた値を更新する */ 199 /* XXX: 必要か? */ 215 200 216 201 skip_ipsec: … … 224 209 225 210 /* 226 * ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶ 227 ãã¦ããã°ã 228 * åå²ãã¦éä¿¡ããã 211 * データグラムサイズがネットワークの MTU を超えていれば、 212 * 分割して送信する。 229 213 */ 230 214 if (ntohs(ip4h->len) > IF_MTU) { … … 244 228 flen = len - off; 245 229 246 /* ãã¼ã¿é·ã¯ 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/230 /* データ長は 4 オクテット境界に調整する。 */ 247 231 align = (flen + 3) >> 2 << 2; 248 232 249 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/233 /* ネットワークバッファを獲得する。*/ 250 234 if (tget_net_buf(&frag, align + IF_IP4_HDR_SIZE, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) { 251 235 252 /* ãã©ã°ã¡ã³ããã³ãã¼ããã*/236 /* フラグメントをコピーする。*/ 253 237 memcpy(GET_IP4_SDU(frag), (uint8_t *)ip4h + off, flen); 254 238 255 /* ããããåããã*/239 /* ヘッダを埋める。*/ 256 240 fip4h = GET_IP4_HDR(frag); 257 241 *fip4h = *ip4h; … … 276 260 } 277 261 else { 278 /* ç²å¾ã§ããªããã°ãéä¿¡ããããããã*/262 /* 獲得できなければ、送信をあきらめる。*/ 279 263 syscall(rel_net_buf(output)); 280 264 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 291 275 else { 292 276 293 /* ããããåããã*/277 /* ヘッダを埋める。*/ 294 278 ip4h->id = htons(frag_id); 295 279 frag_id ++; … … 309 293 ip4h = GET_IP4_HDR(output); 310 294 311 /* ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶ 312 ãã¦ããã°ã¨ã©ã¼ */ 295 /* データグラムサイズがネットワークの MTU を超えていればエラー */ 313 296 if (ntohs(ip4h->len) > IF_MTU) 314 297 return E_PAR; 315 298 316 /* ããããåããã*/299 /* ヘッダを埋める。*/ 317 300 ip4h->id = htons(frag_id); 318 301 frag_id ++; … … 324 307 325 308 #ifdef ETHER_CFG_MULTICAST 326 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯IPã¢ãã¬ã¹ã¯ãã®ã¾ã¾*/309 /* マルチキャストアドレスの場合はIPアドレスはそのまま */ 327 310 gw = ntohl(ip4h->dst); 328 311 if(!IN4_IS_ADDR_MULTICAST(gw)) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 84 72 85 73 /* 86 * IPv4 ãããã»ãã¤ãã¼ãã¢ã¯ã»ã¹ãã¯ã74 * IPv4 ヘッダ・ペイロードアクセスマクロ 87 75 */ 88 76 … … 99 87 100 88 /* 101 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã89 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 102 90 */ 103 91 … … 124 112 125 113 /* 126 * IP ã® MSS ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡114 * IP の MSS サイズのネットワークバッファ 127 115 */ 128 116 129 117 typedef struct t_net_buf_ip_mss { 130 uint16_t len; /* ãã¼ã¿ã®é·ã*/131 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/132 uint8_t flags; /* ãã©ã°*/118 uint16_t len; /* データの長さ */ 119 uint8_t idix; /* mpfid のインデックス */ 120 uint8_t flags; /* フラグ */ 133 121 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 134 122 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 138 126 #endif 139 127 uint8_t buf[IF_HDR_SIZE + IP4_MSS]; 140 /* ãããã¡æ¬ä½*/128 /* バッファ本体 */ 141 129 } T_NET_BUF_IP_MSS; 142 130 143 131 /* 144 * 65536 ãªã¯ããããµã¤ãºã®ãããã¯ã¼ã¯ãããã¡132 * 65536 オクテットサイズのネットワークバッファ 145 133 */ 146 134 147 135 typedef struct t_net_buf4_65536 { 148 uint16_t len; /* ãã¼ã¿ã®é·ã*/149 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/150 uint8_t flags; /* ãã©ã°*/136 uint16_t len; /* データの長さ */ 137 uint8_t idix; /* mpfid のインデックス */ 138 uint8_t flags; /* フラグ */ 151 139 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 152 140 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 156 144 #endif 157 145 uint8_t buf[IF_IP4_HDR_SIZE + 65536]; 158 /* ãããã¡æ¬ä½*/146 /* バッファ本体 */ 159 147 #if defined(IF_PDU_HDR_PADDING) 160 148 uint8_t padding[IF_PDU_HDR_PADDING]; 161 #endif /* ãããã®ä½å*/149 #endif /* ヘッダの余分 */ 162 150 } T_NET_BUF4_65536; 163 151 … … 165 153 166 154 /* 167 * åæ§æãã¥ã¼ç¨ IPv4 ãããã®å®ç¾©155 * 再構成キュー用 IPv4 ヘッダの定義 168 156 */ 169 157 170 158 typedef struct t_qip4_hdr { 171 159 uint8_t vhl; /* version << 4 | header length >> 2 */ 172 /* length 㯠4 octets åä½*/160 /* length は 4 octets 単位 */ 173 161 uint8_t type; /* type of services */ 174 162 uint16_t len; /* total length */ … … 183 171 uint32_t src; /* source address */ 184 172 185 T_NET_BUF *next; /* 次㮠IPv4 ãã©ã°ã¡ã³ã*/173 T_NET_BUF *next; /* 次の IPv4 フラグメント */ 186 174 } __attribute__((packed, aligned(2)))T_QIP4_HDR; 187 175 … … 196 184 197 185 /* 198 * ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡186 * データグラム再構成用ネットワークバッファ 199 187 */ 200 188 201 189 typedef struct t_net_buf4_reassm { 202 uint16_t len; /* ãã¼ã¿ã®é·ã*/203 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/204 uint8_t flags; /* ãã©ã°*/190 uint16_t len; /* データの長さ */ 191 uint8_t idix; /* mpfid のインデックス */ 192 uint8_t flags; /* フラグ */ 205 193 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 206 194 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 210 198 #endif 211 199 uint8_t buf[IP4_CFG_FRAG_REASSM_SIZE]; 212 /* ãããã¡æ¬ä½*/200 /* バッファ本体 */ 213 201 } T_NET_BUF4_REASSM; 214 202 … … 216 204 217 205 /* 218 * TCP ã®åæ§æãã¥ã¼ã«ããã IPv4 ãããã®å®ç¾©206 * TCP の再構成キューにおける IPv4 ヘッダの定義 219 207 */ 220 208 221 209 typedef struct t_tcp_ip4_q_hdr { 222 210 uint8_t vhl; /* version << 4 | header length >> 2 */ 223 /* length 㯠4 octets åä½*/211 /* length は 4 octets 単位 */ 224 212 uint8_t type; /* type of services */ 225 213 uint16_t len; /* total length */ … … 230 218 uint8_t ttl; /* time to live */ 231 219 uint8_t proto; /* protocol */ 232 uint16_t thoff; /* TCP ãããã®ãªãã»ãã*/220 uint16_t thoff; /* TCP ヘッダのオフセット */ 233 221 234 222 T_IN4_ADDR src; /* source address */ … … 239 227 240 228 /* 241 * SNMP 㮠管çæ 242 å ±ãã¼ã¹ (MIB) 229 * SNMP の 管理情報ベース (MIB) 243 230 */ 244 231 … … 282 269 283 270 /* 284 * é¢æ°271 * 関数 285 272 */ 286 273 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 45 33 46 34 /* 47 * TCP ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã35 * TCP で使用するカーネルオブジェクト 48 36 */ 49 37 50 38 #ifdef SUPPORT_TCP 51 39 52 /* åºåã¿ã¹ã¯*/40 /* 出力タスク */ 53 41 54 42 CRE_TSK(TCP_OUTPUT_TASK, { … … 61 49 }); 62 50 63 /* ã»ããã©*/51 /* セマフォ */ 64 52 65 53 CRE_SEM(SEM_TCP_POST_OUTPUT, { TA_TPRI, 0, 1 }); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * TCP ããããRFC 793 åç 87 § 74 * TCP ヘッダ、RFC 793 参照 88 75 */ 89 76 90 77 typedef struct t_tcp_hdr { 91 uint16_t sport; /* éä¿¡å 92 ãã¼ãçªå· */ 93 uint16_t dport; /* å®å 94 ãã¼ãçªå· */ 78 uint16_t sport; /* 送信元ポート番号 */ 79 uint16_t dport; /* 宛先ポート番号 */ 95 80 96 uint32_t seq; /* SEQ çªå·*/81 uint32_t seq; /* SEQ 番号 */ 97 82 98 uint32_t ack; /* ACK çªå·*/83 uint32_t ack; /* ACK 番号 */ 99 84 100 uint8_t doff; /* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã) */101 uint8_t flags; /* ãã©ã°(ä¸ä½6ããã) */102 uint16_t win; /* ã¦ã£ã³ããµã¤ãº*/85 uint8_t doff; /* データオフセット(上位4ビット) */ 86 uint8_t flags; /* フラグ(下位6ビット) */ 87 uint16_t win; /* ウィンドサイズ */ 103 88 104 uint16_t sum; /* ãã§ãã¯ãµã*/105 uint16_t urp; /* ç·æ¥ãã¤ã³ã¿*/89 uint16_t sum; /* チェックサム */ 90 uint16_t urp; /* 緊急ポインタ */ 106 91 } __attribute__((packed, aligned(2)))T_TCP_HDR; 107 92 … … 109 94 110 95 /* 111 * TCP ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã96 * TCP ヘッダ構造体メンバアクセスマクロ 112 97 */ 113 98 … … 117 102 118 103 /* 119 * TCP ãããã®ãã©ã°ãã£ã¼ã«ãã®å¤ã®å®ç¾©104 * TCP ヘッダのフラグフィールドの値の定義 120 105 */ 121 106 122 #define TCP_FLG_FIN UINT_C(0x01) /* FIN: æçµ */ 123 #define TCP_FLG_SYN UINT_C(0x02) /* SYN: åæ */ 124 #define TCP_FLG_RST UINT_C(0x04) /* RST: ã³ãã¯ã·ã§ã³ã®ãªã»ãã */ 125 #define TCP_FLG_PUSH UINT_C(0x08) /* PUSH:ããã·ã¥æ©è½ */ 126 #define TCP_FLG_ACK UINT_C(0x10) /* ACK: è¯å®å¿ç */ 127 #define TCP_FLG_URG UINT_C(0x20) /* URG: ç·æ¥æ 128 å ± */ 107 #define TCP_FLG_FIN UINT_C(0x01) /* FIN: 最終 */ 108 #define TCP_FLG_SYN UINT_C(0x02) /* SYN: 同期 */ 109 #define TCP_FLG_RST UINT_C(0x04) /* RST: コネクションのリセット */ 110 #define TCP_FLG_PUSH UINT_C(0x08) /* PUSH:プッシュ機能 */ 111 #define TCP_FLG_ACK UINT_C(0x10) /* ACK: 肯定応答 */ 112 #define TCP_FLG_URG UINT_C(0x20) /* URG: 緊急情報 */ 129 113 130 114 /* 131 * TCP ãªãã·ã§ã³ã®å®ç¾©115 * TCP オプションの定義 132 116 */ 133 117 134 /* ãªãã·ã§ã³ã®å*/118 /* オプションの型 */ 135 119 136 #define TCP_OPT_EOL UINT_C(0) /* æçµ*/137 #define TCP_OPT_NOP UINT_C(1) /* ä½ãããªã*/138 #define TCP_OPT_MAXSEG UINT_C(2) /* æ大ã»ã°ã¡ã³ãé·*/139 #define TCP_OPT_WINDOW UINT_C(3) /* ã¦ã£ã³ãã¹ã±ã¼ãªã³ã°*/140 #define TCP_OPT_SACK_PERM UINT_C(4) /* é¸æ ACK 許å¯*/141 #define TCP_OPT_SACK UINT_C(5) /* é¸æACK */142 #define TCP_OPT_TIMESTAMP UINT_C(8) /* ã¿ã¤ã ã¹ã¿ã³ã*/143 #define TCP_OPT_CC UINT_C(11) /* æ¥ç¶ã«ã¦ã³ã*/144 #define TCP_OPT_CCNEW UINT_C(12) /* æ¥ç¶ã«ã¦ã³ã*/145 #define TCP_OPT_CCECHO UINT_C(13) /* æ¥ç¶ã«ã¦ã³ã*/120 #define TCP_OPT_EOL UINT_C(0) /* 最終 */ 121 #define TCP_OPT_NOP UINT_C(1) /* 何もしない */ 122 #define TCP_OPT_MAXSEG UINT_C(2) /* 最大セグメント長 */ 123 #define TCP_OPT_WINDOW UINT_C(3) /* ウィンドスケーリング */ 124 #define TCP_OPT_SACK_PERM UINT_C(4) /* 選択 ACK 許可 */ 125 #define TCP_OPT_SACK UINT_C(5) /* 選択 ACK */ 126 #define TCP_OPT_TIMESTAMP UINT_C(8) /* タイムスタンプ */ 127 #define TCP_OPT_CC UINT_C(11) /* 接続カウント */ 128 #define TCP_OPT_CCNEW UINT_C(12) /* 接続カウント */ 129 #define TCP_OPT_CCECHO UINT_C(13) /* 接続カウント */ 146 130 147 /* ãªãã·ã§ã³ã®é·ã*/131 /* オプションの長さ */ 148 132 149 #define TCP_OPT_LEN_MAXSEG 4 /* æ大ã»ã°ã¡ã³ãé·*/150 #define TCP_OPT_LEN_WINDOW 3 /* ã¦ã£ã³ãã¹ã±ã¼ãªã³ã°*/151 #define TCP_OPT_LEN_SACK_PERM 4 /* é¸æ ACK 許å¯*/152 #define TCP_OPT_LEN_SACK 5 /* é¸æACK */153 #define TCP_OPT_LEN_TIMESTAMP 10 /* ã¿ã¤ã ã¹ã¿ã³ã*/154 #define TCP_OPT_LEN_CC 6 /* æ¥ç¶ã«ã¦ã³ã*/155 #define TCP_OPT_LEN_CCNEW 6 /* æ¥ç¶ã«ã¦ã³ã*/156 #define TCP_OPT_LEN_CCECHO 6 /* æ¥ç¶ã«ã¦ã³ã*/133 #define TCP_OPT_LEN_MAXSEG 4 /* 最大セグメント長 */ 134 #define TCP_OPT_LEN_WINDOW 3 /* ウィンドスケーリング */ 135 #define TCP_OPT_LEN_SACK_PERM 4 /* 選択 ACK 許可 */ 136 #define TCP_OPT_LEN_SACK 5 /* 選択 ACK */ 137 #define TCP_OPT_LEN_TIMESTAMP 10 /* タイムスタンプ */ 138 #define TCP_OPT_LEN_CC 6 /* 接続カウント */ 139 #define TCP_OPT_LEN_CCNEW 6 /* 接続カウント */ 140 #define TCP_OPT_LEN_CCECHO 6 /* 接続カウント */ 157 141 158 142 /* 159 * TCP æ大ã»ã°ã¡ã³ããµã¤ãº143 * TCP 最大セグメントサイズ 160 144 */ 161 145 162 146 /* 163 * IPv4 ã® TCP æ大ã»ã°ã¡ã³ããµã¤ãº164 * IP4_MSS 㯠576 ã§ãæ¨æºã® IPv4 ãããé· (20) ã¨165 * TCP ãããé· (20) ãå¼ããå¤ 536 ã§ãããã512 ãæ¨æºã¨ããã147 * IPv4 の TCP 最大セグメントサイズ 148 * IP4_MSS は 576 で、標準の IPv4 ヘッダ長 (20) と 149 * TCP ヘッダ長 (20) を引いた値 536 であるが、512 を標準とする。 166 150 */ 167 151 … … 169 153 170 154 /* 171 * IPv6 ã® TCP æ大ã»ã°ã¡ã³ããµã¤ãº172 * IPV6_MMTU 㯠1280 ã§ãæ¨æºã® IPv6 ãããé· (40) ã¨173 * TCP ãããé· (20) ãå¼ããå¤ 1220 ã§ãããã1024 ãæ¨æºã¨ããã155 * IPv6 の TCP 最大セグメントサイズ 156 * IPV6_MMTU は 1280 で、標準の IPv6 ヘッダ長 (40) と 157 * TCP ヘッダ長 (20) を引いた値 1220 であるが、1024 を標準とする。 174 158 */ 175 159 … … 177 161 178 162 /* 179 * TCP æå°ã»ã°ã¡ã³ããµã¤ãº163 * TCP 最小セグメントサイズ 180 164 * 181 * 256 ï¼æå°ãªã³ã¯ MTUï¼- 40 = 216165 * 256(最小リンク MTU)- 40 = 216 182 166 */ 183 167 … … 185 169 186 170 /* 187 * TCP æ大ã¦ã£ã³ãã¦ãµã¤ãº171 * TCP 最大ウィンドウサイズ 188 172 */ 189 173 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_fsm.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * TCP FSM ç¶æ 87 ã®å®ç¾©ãRFC 793 åç 88 § 74 * TCP FSM 状態の定義、RFC 793 参照 89 75 */ 90 76 91 #define TCP_FSM_CLOSED 0 /* ã¯ãã¼ãº */ 92 #define TCP_FSM_LISTEN 1 /* ååãªã¼ãã³ */ 93 #define TCP_FSM_SYN_SENT 2 /* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿ */ 94 #define TCP_FSM_SYN_RECVD 3 /* ååãªã¼ãã³ãSYN åä¿¡æ¸ã¿ */ 95 #define TCP_FSM_ESTABLISHED 4 /* ã³ãã¯ã·ã§ã³éè¨å®äº */ 96 #define TCP_FSM_CLOSE_WAIT 5 /* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾ 97 ã¡ */ 98 #define TCP_FSM_FIN_WAIT_1 6 /* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾ 99 ã¡ */ 100 #define TCP_FSM_CLOSING 7 /* åæã¯ãã¼ãºãFIN 交ææ¸ã¿ãACK å¾ 101 ã¡ */ 102 #define TCP_FSM_LAST_ACK 8 /* APP ãçµäºãACK å¾ 103 ã¡ */ 104 #define TCP_FSM_FIN_WAIT_2 9 /* ç¸æããã® FIN å¾ 105 ã¡ */ 106 #define TCP_FSM_TIME_WAIT 10 /* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾ 107 ã¡ */ 77 #define TCP_FSM_CLOSED 0 /* クローズ */ 78 #define TCP_FSM_LISTEN 1 /* 受動オープン */ 79 #define TCP_FSM_SYN_SENT 2 /* 能動オープン、SYN 送信済み */ 80 #define TCP_FSM_SYN_RECVD 3 /* 受動オープン、SYN 受信済み */ 81 #define TCP_FSM_ESTABLISHED 4 /* コネクション開設完了 */ 82 #define TCP_FSM_CLOSE_WAIT 5 /* 相手から FIN 受信、APP の終了待ち */ 83 #define TCP_FSM_FIN_WAIT_1 6 /* APP が終了、FIN 送信済み、ACK 待ち */ 84 #define TCP_FSM_CLOSING 7 /* 同時クローズ、FIN 交換済み、ACK 待ち */ 85 #define TCP_FSM_LAST_ACK 8 /* APP が終了、ACK 待ち */ 86 #define TCP_FSM_FIN_WAIT_2 9 /* 相手からの FIN 待ち */ 87 #define TCP_FSM_TIME_WAIT 10 /* 相手からの FIN 受信済み、時間待ち */ 108 88 109 89 /* 110 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã90 * 関数シミュレーションマクロ 111 91 */ 112 92 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 132 120 133 121 /* 134 * æ»ãå¤122 * 戻り値 135 123 * 136 * RET_OK æ£å¸¸137 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã138 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã124 * RET_OK 正常 125 * RET_DROP エラー、セグメントを破棄する。 126 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 139 127 */ 140 128 … … 146 134 147 135 /* 148 * é¢æ°136 * 関数 149 137 */ 150 138 … … 165 153 166 154 /* 167 * ã¿ã¹ã¯ããã® Time Wait ç¶æ 168 CEP åé¢æ©è½ 169 */ 170 171 /* 172 * é¢æ° 155 * タスクからの Time Wait 状態 CEP 分離機能 156 */ 157 158 /* 159 * 関数 173 160 */ 174 161 … … 177 164 178 165 /* 179 * å¤æ°166 * 変数 180 167 */ 181 168 … … 183 170 184 171 /* 185 * tcp_find_twcep -- ãã¼ãçªå·ãã Time Wait ç¨ TCP é信端ç¹ãå¾ãã172 * tcp_find_twcep -- ポート番号から Time Wait 用 TCP 通信端点を得る。 186 173 * 187 * 注æ: dstaddr ã¯ããããã¯ã¼ã¯ãã¤ããªã¼ã174 * 注意: dstaddr は、ネットワークバイトオーダ 188 175 */ 189 176 … … 194 181 195 182 /* 196 * ç¶æ 197 ã TIME WAIT ã§ã 198 * IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããé信端ç¹ãæ¢ç´¢ããã 183 * 状態が TIME WAIT で、 184 * IP アドレスとポート番号が一致する通信端点を探索する。 199 185 */ 200 186 for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) { … … 211 197 212 198 /* 213 * å¿ 214 è¦ãªæ 215 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 216 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 199 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 200 * 標準の TCP 通信端点を開放する。 217 201 */ 218 202 … … 222 206 T_TCP_TWCEP* twcep; 223 207 224 /* 空ãã® Time Wait ç¨ TCP é信端ç¹ãæ¢ç´¢ããã*/208 /* 空きの Time Wait 用 TCP 通信端点を探索する。*/ 225 209 for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) { 226 210 if (twcep->fsm_state != TCP_FSM_TIME_WAIT) { 227 211 228 212 /* 229 * é信端ç¹ãããã¯ãã 230 * å¿ 231 è¦ãªæ 232 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã 213 * 通信端点をロックし、 214 * 必要な情報を Time Wait 用 TCP 通信端点に移す。 233 215 */ 234 216 syscall(wai_sem(cep->semid_lock)); … … 242 224 twcep->timer_2msl = cep->timer[TCP_TIM_2MSL]; 243 225 244 /* é信端ç¹ãããã¯ã解é¤ããã*/226 /* 通信端点をロックを解除する。*/ 245 227 syscall(sig_sem(cep->semid_lock)); 246 228 247 /* æ¨æº TCP é信端ç¹ãéæ¾ããã*/229 /* 標準 TCP 通信端点を開放する。*/ 248 230 tcp_close(cep); 249 231 … … 256 238 257 239 /* 258 * parse_option -- TCP ãããã®ãªãã·ã§ã³ã解æããã240 * parse_option -- TCP ヘッダのオプションを解析する。 259 241 */ 260 242 … … 311 293 312 294 /* 313 * set_rexmt_timer -- æ°ããå¾å¾©æéãåéããåéã¿ã¤ããæ´æ°ããã295 * set_rexmt_timer -- 新しい往復時間を収集し、再送タイマを更新する。 314 296 */ 315 297 … … 322 304 if (cep->srtt != 0) { 323 305 /* 324 * srtt: å¹³æ»åãããRTT306 * srtt: 平滑化された RTT 325 307 * 326 * è¨æ¸¬ããã RTT (rtt) ã¨ç¾å¨ã®å¹³æ»åããã RTT (srtt) ã®å·® (delta) ãæ±ããã308 * 計測された RTT (rtt) と現在の平滑化された RTT (srtt) の差 (delta) を求める。 327 309 * 328 * delta 㯠2 ãããå·¦ã·ãã ( 4 å) ããå¤ã§ä¿æããã329 * srtt 㯠5 ãããå·¦ã·ãã (32 å) ããå¤ã§ä¿æããã¦ããã310 * delta は 2 ビット左シフト ( 4 倍) した値で保持する。 311 * srtt は 5 ビット左シフト (32 倍) した値で保持されている。 330 312 * 331 313 * delta = rtt / 8 - srtt / 8 332 314 * 333 * æ°ãã srtt ã¯315 * 新しい srtt は 334 316 * 335 317 * srtt = rtt / 8 + srtt * 7 / 8 336 318 * = srtt + (rtt / 8 - srtt / 8) 337 319 * 338 * ã§è¨ç®ããã339 * ãã®ãããrtt ã 2 ãããå·¦ã·ããããsrtt ã (5 - 2) ãããå³ã·ããã㦠delta ãæ±ããã320 * で計算する。 321 * このため、rtt を 2 ビット左シフトし、srtt を (5 - 2) ビット右シフトして delta を求める。 340 322 */ 341 323 delta = ((rtt - 1) << TCP_DELTA_SHIFT) - (cep->srtt >> (TCP_SRTT_SHIFT - TCP_DELTA_SHIFT)); … … 345 327 346 328 /* 347 * delta ã®çµ¶å¯¾å¤ | delta | ãæ±ããã329 * delta の絶対値 | delta | を求める。 348 330 */ 349 331 if (delta < 0) … … 351 333 352 334 /* 353 * rttvar: å¹³æ»åãããåæ£335 * rttvar: 平滑化された分散 354 336 * 355 * rttvar 㯠4 ãããå·¦ã·ãã (16 å) ããå¤ã§ä¿æããã¦ããã337 * rttvar は 4 ビット左シフト (16 倍) した値で保持されている。 356 338 * 357 339 * delta = |delta| / 4 - rttvar / 4 358 340 * 359 * æ°ãã rttvar ã¯341 * 新しい rttvar は 360 342 * 361 343 * rttvar = |delta|/ 4 + rttvar * 3 /4 362 344 * = rttvar + (|delta| / 4 - rttvar / 4) 363 345 * 364 * ã§è¨ç®ããã346 * で計算する。 365 347 */ 366 348 delta -= cep->rttvar >> (TCP_RTTVAR_SHIFT - TCP_DELTA_SHIFT); … … 371 353 else { 372 354 /* 373 * ã¾ã srtt ã®è¨å®ãè¡ããã¦ããªãã¨ãã¯ãä»åè¨æ¸¬ããã RTT ã使ç¨ããã374 * å¹³æ»åããã RTT (srtt) ã«ã¯ãRTT ã 5 ãããå·¦ã·ãã (32å) ããå¤ã375 * å¹³æ»åãããåæ£ (rttvar) ã«ã¯ãRTT ã® 1/2 ã 4 ãããå·¦ã·ãã (16å) ããå¤ã355 * まだ srtt の設定が行われていないときは、今回計測された RTT を使用する。 356 * 平滑化された RTT (srtt) には、RTT を 5 ビット左シフト (32倍) した値。 357 * 平滑化された分散 (rttvar) には、RTT の 1/2 を 4 ビット左シフト (16倍) した値。 376 358 */ 377 359 cep->srtt = rtt << TCP_SRTT_SHIFT; … … 380 362 381 363 /* 382 * rtt ã®æ¸¬å®ãçµäºããåéåæ°ããªã»ããããã364 * rtt の測定を終了し、再送回数をリセットする。 383 365 */ 384 366 cep->rtt = cep->rxtshift = 0; 385 367 386 368 /* 387 * RTT ã«è¨±ãããæå°å¤ 㨠rtt + 2 ã®å¤§ããªå¤ã®æ¹ãåéã¿ã¤ã ã¢ã¦ãã®æå°å¤ã«ããã369 * RTT に許される最小値 と rtt + 2 の大きな値の方を再送タイムアウトの最小値にする。 388 370 */ 389 371 if (rtt + 2 < TCP_TVAL_MIN) … … 398 380 399 381 /* 400 * reassemble -- åä¿¡ã»ã°ã¡ã³ããåæ§æãããé çªéãã«åä¿¡ããã¨ãã®å¦ç382 * reassemble -- 受信セグメントを再構成する。順番通りに受信したときの処理 401 383 */ 402 384 … … 410 392 if (tcph->sum > cep->rbufsz - cep->rwbuf_count) { 411 393 /* 412 * åä¿¡ã¦ã£ã³ããããã¡ã«ç©ºãããªãã¨ãã¯ç ´æ£ããã394 * 受信ウィンドバッファに空きがないときは破棄する。 413 395 */ 414 396 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DROP_SEGS], 1); … … 421 403 cep->fsm_state == TCP_FSM_ESTABLISHED) { 422 404 /* 423 * é çªéãã«ã»ã°ã¡ã³ããåä¿¡ããæã®å¦ç424 * åä¿¡ã»ã°ã¡ã³ãã®ä¸¦ã¹æ¿ãã¯ä¸è¦ãªã®ã§425 * ãã®ã¾ã¾åä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã405 * 順番通りにセグメントを受信した時の処理 406 * 受信セグメントの並べ替えは不要なので 407 * そのまま受信ウィンドバッファに書き込む。 426 408 */ 427 409 … … 438 420 qhdr = GET_TCP_Q_HDR(input, thoff); 439 421 440 /* TCP ãããã®ä½ç½®ãä¿åããã*/422 /* TCP ヘッダの位置を保存する。*/ 441 423 GET_TCP_IP_Q_HDR(input)->thoff = thoff; 442 424 443 /* SDU ã®ãªãã»ããï¼å 444 ã¯ã¦ã£ã³ããµã¤ãºï¼ããªã»ããããã*/ 425 /* SDU のオフセット(元はウィンドサイズ)をリセットする。*/ 445 426 qhdr->soff = 0; 446 427 447 /* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/428 /* データを受信ウィンドバッファに書き込む。*/ 448 429 TCP_WRITE_RWBUF(cep, input, thoff); 449 430 } … … 456 437 457 438 /* 458 * listening -- ååãªã¼ãã³ãã¦ï¼ç¶æ 459 ã LISTEN ã®å¦ç 439 * listening -- 受動オープンして,状態が LISTEN の処理 460 440 * 461 * æ»ãå¤:462 * RET_OK æ£å¸¸463 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã464 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã441 * 戻り値: 442 * RET_OK 正常 443 * RET_DROP エラー、セグメントを破棄する。 444 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 465 445 */ 466 446 … … 475 455 476 456 /* 477 * ãã©ã°ã« RST ãã»ããããã¦ããã°ç ´æ£ããã457 * フラグに RST がセットされていれば破棄する。 478 458 */ 479 459 if (tcph->flags & TCP_FLG_RST) … … 481 461 482 462 /* 483 * ãã©ã°ã« ACK ãã»ãããã¦ãããã°ã484 * ãªã»ãããéã£ã¦ç ´æ£ããã463 * フラグに ACK がセットさてれいれば、 464 * リセットを送って破棄する。 485 465 */ 486 466 if (tcph->flags & TCP_FLG_ACK) … … 488 468 489 469 /* 490 * ãã©ã°ã« SYN ãã»ããããã¦ããªããã°ãã°ç ´æ£ããã470 * フラグに SYN がセットされていなければれば破棄する。 491 471 */ 492 472 if ((tcph->flags & TCP_FLG_SYN) == 0) … … 498 478 499 479 /* 500 * 次ã®ã¨ãã¯ç ´æ£ããã501 * ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã502 * ãã ãããã¼ã«ã«ã«ã¼ããã㯠(127.0.0.1) ãªãè¯ãã503 * ã»ãã«ããã£ã¹ãã¢ãã¬ã¹480 * 次のときは破棄する。 481 * ・ポート番号が同一で、送受信 IP アドレス が同一。 482 * ただし、ローカルループバック (127.0.0.1) なら良い。 483 * ・マルチキャストアドレス 504 484 */ 505 485 … … 511 491 512 492 /* 513 * 次ã®ã¨ãã¯ç ´æ£ããã514 * ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã515 * ã»ãã«ããã£ã¹ãã¢ãã¬ã¹493 * 次のときは破棄する。 494 * ・ポート番号が同一で、送受信 IP アドレス が同一。 495 * ・マルチキャストアドレス 516 496 */ 517 497 … … 526 506 527 507 /* 528 * 次ã®ã¨ãã¯ç ´æ£ããã529 * ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã530 * ã»ãã«ããã£ã¹ãã¢ãã¬ã¹508 * 次のときは破棄する。 509 * ・ポート番号が同一で、送受信 IP アドレス が同一。 510 * ・マルチキャストアドレス 531 511 */ 532 512 … … 539 519 return RET_DROP; 540 520 541 /* ç¸æã®ã¢ãã¬ã¹ãè¨é²ããã*/521 /* 相手のアドレスを記録する。*/ 542 522 IN_COPY_TO_HOST(&cep->dstaddr.ipaddr, &iph->src); 543 523 cep->dstaddr.portno = tcph->sport; 544 524 545 /* ãªãã·ã§ã³ãå¦çããã*/525 /* オプションを処理する。*/ 546 526 parse_option(tcph, cep); 547 527 548 /* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/528 /* シーケンス番号を初期化する。*/ 549 529 if (tcp_iss == 0) 550 530 tcp_init_iss(); 551 531 552 /* èªåã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/532 /* 自分のシーケンス番号の初期値を記録する。*/ 553 533 if (iss != 0) 554 534 cep->iss = iss; … … 558 538 tcp_iss += TCP_ISS_INCR() / 4; 559 539 560 /* ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/540 /* 相手のシーケンス番号の初期値を記録する。*/ 561 541 cep->irs = tcph->seq; 562 542 563 /* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/543 /* 送受信シーケンス番号を初期化する。*/ 564 544 init_send_seq(cep); 565 545 init_receive_seq(cep); 566 546 567 /* éä¿¡ã¦ã¤ã³ããµã¤ãºãè¨å®ããã*/547 /* 送信ウインドサイズを設定する。*/ 568 548 cep->snd_wnd = tcph->win; 569 549 570 /* æçµè¨å®*/550 /* 最終設定 */ 571 551 cep->flags |= TCP_CEP_FLG_ACK_NOW; 572 552 cep->fsm_state = TCP_FSM_SYN_RECVD; … … 577 557 578 558 /* 579 * syn_sent -- è½åãªã¼ãã³ãã¦ãç¶æ 580 ã SYN éä¿¡æ¸ã®å¦ç 559 * syn_sent -- 能動オープンして、状態が SYN 送信済の処理 581 560 * 582 * æ»ãå¤:583 * RET_OK æ£å¸¸584 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã585 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã561 * 戻り値: 562 * RET_OK 正常 563 * RET_DROP エラー、セグメントを破棄する。 564 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 586 565 */ 587 566 … … 592 571 593 572 /* 594 * ç¸æããå信確èªãéããã¦æ¥ã¦ãã573 * 相手から受信確認が送られて来ても、 595 574 * 596 * ACK <= iss && éä¿¡ããæ大SEQ (snd_max) < ACK575 * ACK <= iss && 送信した最大 SEQ (snd_max) < ACK 597 576 * 598 * ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã577 * なら、リセットを送ってセグメントを破棄する。 599 578 */ 600 579 if ((tcph->flags & TCP_FLG_ACK) && … … 603 582 604 583 /* 605 * RST/ACK ãã©ã°ã®å¿çãããã°ããã¼ããéãã¦ããªã606 * ãã¨ãæå³ãã¦ããã584 * RST/ACK フラグの応答があれば、ポートが開いていない 585 * ことを意味している。 607 586 */ 608 587 if (tcph->flags & TCP_FLG_RST) { … … 615 594 616 595 /* 617 * SYN ãã©ã°ããªããã°ã»ã°ã¡ã³ããç ´æ£ããã596 * SYN フラグがなければセグメントを破棄する。 618 597 */ 619 598 if ((tcph->flags & TCP_FLG_SYN) == 0) 620 599 return RET_DROP; 621 600 622 cep->snd_wnd = tcph->win; /* snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº*/623 cep->irs = tcph->seq; /* irs: ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤*/624 init_receive_seq(cep); /* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/601 cep->snd_wnd = tcph->win; /* snd_wnd: 相手の受信可能ウィンドサイズ */ 602 cep->irs = tcph->seq; /* irs: 相手のシーケンス番号の初期値 */ 603 init_receive_seq(cep); /* 送受信シーケンス番号を初期化する。 */ 625 604 626 605 if (tcph->flags & TCP_FLG_ACK) { 627 606 /* 628 * ACK ãã©ã°ãããã¨ãã®å¦ç607 * ACK フラグがあるときの処理 629 608 * 630 * åä¿¡ãæå¾ 631 ãã¦ããæ大㮠SEQ (rcv_adv) ã 632 * åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº (rcv_wnd) åé²ããã 633 */ 634 cep->rcv_adv += cep->rcv_wnd; /* rcv_adv: åä¿¡ãæå¾ 635 ãã¦ããæ大㮠SEQ */ 636 /* rcv_wnd: åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 637 638 /* æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã SYN å (1 ãªã¯ããã) é²ããã*/ 609 * 受信を期待している最大の SEQ (rcv_adv) を 610 * 受信可能なウィンドサイズ (rcv_wnd) 分進める。 611 */ 612 cep->rcv_adv += cep->rcv_wnd; /* rcv_adv: 受信を期待している最大の SEQ */ 613 /* rcv_wnd: 受信可能なウィンドサイズ */ 614 615 /* 未確認の最小送信 SEQ (snd_una) を SYN 分 (1 オクテット) 進める。*/ 639 616 cep->snd_una ++; 640 617 641 618 #ifdef TCP_CFG_DELAY_ACK 642 619 643 if (tcph->sum != 0) /* tcph->sum 㯠SDU é·*/620 if (tcph->sum != 0) /* tcph->sum は SDU 長 */ 644 621 cep->flags |= TCP_CEP_FLG_DEL_ACK; 645 622 else … … 654 631 if (cep->flags & TCP_CEP_FLG_NEED_FIN) { 655 632 /* 656 * CEP 㧠FIN éä¿¡ãè¦æ±ããã¦ããã°ã 657 * åæå¦çãéå§ãã 658 * CEP ã®ç¶æ 659 ã FIN Wait 1 ã«ããã 633 * CEP で FIN 送信が要求されていれば、 634 * 切断処理を開始し、 635 * CEP の状態を FIN Wait 1 にする。 660 636 */ 661 637 cep->fsm_state = TCP_FSM_FIN_WAIT_1; … … 665 641 else { 666 642 /* 667 * ç¸æãã ACK ãå¿çãããã®ã§ã 668 * CEP ã®ç¶æ 669 ã ã³ãã¯ã·ã§ã³éè¨å®äºç¶æ 670 ã«ããã 643 * 相手から ACK が応答されたので、 644 * CEP の状態を コネクション開設完了状態にする。 671 645 */ 672 646 cep->timer[TCP_TIM_KEEP] = TCP_TVAL_KEEP_IDLE; … … 679 653 if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) { 680 654 681 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/655 /* 相手のアドレスをコピーする。*/ 682 656 *cep->p_dstaddr = cep->dstaddr; 683 657 … … 715 689 } 716 690 else { 717 /* ACK ãã©ã°ããªãã¨ãã¯ãACK ãéã£ã¦ãCEP ã®ç¶æ 718 ã SYN åä¿¡æ¸ã¿ã«ããã*/ 691 /* ACK フラグがないときは、ACK を送って、CEP の状態を SYN 受信済みにする。*/ 719 692 cep->flags |= TCP_CEP_FLG_ACK_NOW; 720 693 cep->timer[TCP_TIM_REXMT] = 0; … … 726 699 727 700 /* 728 * trim_length -- åä¿¡ãã SDU é·ã調æ´ããã701 * trim_length -- 受信した SDU 長を調整する。 729 702 */ 730 703 … … 733 706 { 734 707 tcph->seq ++; 735 if (tcph->sum > cep->rcv_wnd) { /* 注æ: tcph->sum 㯠SDU é·*/736 /* 737 * SDU é·ãåä¿¡ã¦ã£ã³ããµã¤ãºãã大ããã¨ãã¯ãåä¿¡ã¦ã£ã³ããµã¤ãºä»¥éã¯738 * ç ´æ£ããFIN ã«å¿çããªããã¨ã§ãç ´æ£ãããã¼ã¿ãåéãããã708 if (tcph->sum > cep->rcv_wnd) { /* 注意: tcph->sum は SDU 長 */ 709 /* 710 * SDU 長が受信ウィンドサイズより大きいときは、受信ウィンドサイズ以降は 711 * 破棄し、FIN に応答しないことで、破棄したデータを再送させる。 739 712 */ 740 713 tcph->sum = (uint16_t)cep->rcv_wnd; 741 714 tcph->flags &= ~TCP_FLG_FIN; 742 715 } 743 cep->snd_wl1 = tcph->seq - 1; /* cep->snd_wl1: ã¦ã£ã³ãæ´æ° SEQ çªå·*/716 cep->snd_wl1 = tcph->seq - 1; /* cep->snd_wl1: ウィンド更新 SEQ 番号 */ 744 717 745 718 #ifdef TCP_CFG_EXTENTIONS 746 cep->rcv_up = tcph->seq; /* cep->rcv_up : åä¿¡ããç·æ¥ãã¤ã³ã¿*/719 cep->rcv_up = tcph->seq; /* cep->rcv_up : 受信した緊急ポインタ */ 747 720 #endif 748 721 } 749 722 750 723 /* 751 * proc_ack2 -- ACK ã®å¦ç(2)724 * proc_ack2 -- ACK の処理 (2) 752 725 * 753 * æ»ãå¤726 * 戻り値 754 727 * 755 * RET_OK æ£å¸¸756 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã757 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã758 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã728 * RET_OK 正常 729 * RET_RETURN 正常、リターンする。 730 * RET_DROP エラー、セグメントを破棄する。 731 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 759 732 */ 760 733 … … 770 743 771 744 /* 772 * ç¸æã«å信確èªããã ACK ãããã¾ã 確èªããã¦ããªã773 * æå°éä¿¡ SEQ (snd_una) ãå¼ãã¨ãéä¿¡ã¦ã£ã³ããããã¡ãã774 * åé¤ãã¦ãããªã¯ãããæ° (acked) ã«ãªãã745 * 相手に受信確認された ACK から、まだ確認されていない 746 * 最小送信 SEQ (snd_una) を引くと、送信ウィンドバッファから 747 * 削除してよいオクテット数 (acked) になる。 775 748 */ 776 749 acked = tcph->ack - cep->snd_una; … … 778 751 779 752 /* 780 * å¾å¾©æéè¨æ¸¬ (rtt) ãè¨å®ããã¦ãã¦ãè¨æ¸¬éå§ SEQ ãã781 * å¾ã® ACK ãåä¿¡ããããã¿ã¤ãããã¯ãªãããã£ã³ã»ã«ãã782 * åéã¿ã¤ããåè¨å®ããã753 * 往復時間計測 (rtt) が設定されていて、計測開始 SEQ より 754 * 後の ACK を受信したら、タイマバックオフをキャンセルし、 755 * 再送タイマを再設定する。 783 756 */ 784 757 if (cep->rtt && SEQ_GT(tcph->ack, cep->rtseq)) { … … 787 760 788 761 /* 789 * å 790 ¨ã¦ã®æªç¢ºèªãã¼ã¿ã ACK ãããããåéã¿ã¤ããåæ¢ãã 791 * åéãè¨æ¶ãã (ããã«åºåãæç¶)ã 792 * ãããACK ãã¹ããããã«å¤ãã®ãã¼ã¿ããããªããåéã¿ã¤ãã« 793 * ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ããè¨å®ããã 794 */ 795 if (tcph->ack == cep->snd_max) { /* cep->snd_max: éä¿¡ããæ大 SEQ */ 762 * 全ての未確認データが ACK されたら、再送タイマを停止し、 763 * 再開を記憶する (さらに出力か持続)。 764 * もし、ACK すべき、さらに多くのデータがあるなら、再送タイマに 765 * 現在の再送タイムアウトを設定する。 766 */ 767 if (tcph->ack == cep->snd_max) { /* cep->snd_max: 送信した最大 SEQ */ 796 768 797 769 #ifdef TCP_CFG_SWBUF_CSAVE 798 770 799 771 /* 800 * éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã¯ã801 * éä¿¡æ¸ã¿ã§ãACKãå®äºããã¾ã§åéã¿ã¤ããå¤æ´ããªãã772 * 送信ウィンドバッファの省コピー機能が有効の場合は、 773 * 送信済みで、ACKが完了するまで再送タイマを変更しない。 802 774 */ 803 775 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_ACKED) … … 813 785 } 814 786 else if (cep->timer[TCP_TIM_PERSIST] == 0) { 815 cep->timer[TCP_TIM_REXMT] = cep->rxtcur; /* cep->rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã*/816 } 817 818 /* ç¸æãå信確èªãããã¼ã¿ãããã¨ãã®å¦ç*/787 cep->timer[TCP_TIM_REXMT] = cep->rxtcur; /* cep->rxtcur: 現在の再送タイムアウト */ 788 } 789 790 /* 相手が受信確認したデータがあるときの処理 */ 819 791 if (acked) { 820 uint32_t cw = cep->snd_cwnd; /* cep->snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº*/821 uint32_t incr = cep->maxseg; /* cep->maxseg: æ大ã»ã°ã¡ã³ããµã¤ãº*/822 823 /* 824 * æ°ãã«ç¸æãå信確èªãããã¼ã¿ããã£ãã¨ãã¯ã825 * 輻輳ã¦ã£ã³ããµã¤ãºã大ããããã826 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã827 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ãã大ããã¨ãã¯828 * 輻輳åé¿å¶å¾¡ãè¡ãã792 uint32_t cw = cep->snd_cwnd; /* cep->snd_cwnd: 輻輳ウィンドサイズ */ 793 uint32_t incr = cep->maxseg; /* cep->maxseg: 最大セグメントサイズ */ 794 795 /* 796 * 新たに相手が受信確認したデータがあったときは、 797 * 輻輳ウィンドサイズを大きくする。 798 * 輻輳ウィンドサイズ (snd_cwnd) が 799 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) より大きいときは 800 * 輻輳回避制御を行い。 829 801 * 830 802 * snd_cwnd = snd_cwnd + maxseg * maxseg / snd_cwnd; 831 803 * 832 * çãããå°ããã¨ãã¯ãã¹ãã¼ã¹ã¿ã¼ãå¶å¾¡ãè¡ãã804 * 等しいか小さいときは、スロースタート制御を行う。 833 805 * 834 806 * snd_cwnd = snd_cwnd + maxseg … … 836 808 */ 837 809 if (cw > cep->snd_ssthresh) 838 /* 輻輳åé¿å¶å¾¡*/810 /* 輻輳回避制御 */ 839 811 incr = incr * incr / cw; 840 812 … … 845 817 846 818 /* 847 * éä¿¡ã¦ã£ã³ããããã¡ãããç¸æãå信確èªãããã¼ã¿æ° (acked) ã®ãã¼ã¿ãåé¤ããã819 * 送信ウィンドバッファから、相手が受信確認したデータ数 (acked) のデータを削除する。 848 820 */ 849 821 if (acked > cep->swbuf_count) { … … 858 830 } 859 831 860 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/832 /* 送信ウィンドバッファに空きができたことを知らせる。*/ 861 833 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 862 834 863 835 /* 864 * éé確èªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ã865 * ä»åéé確èªããã ACK ã¾ã§é²ãã866 * 次ã®éä¿¡ãã¼ã¿ã® SEQ (snd_nxt) ããæ°ãã867 * éé確èªããã¦ããªãæå°éä¿¡SEQ (snd_una)868 * ã¾ã§é²ããã836 * 送達確認されていない最小送信 SEQ (snd_una) を 837 * 今回送達確認された ACK まで進め、 838 * 次の送信データの SEQ (snd_nxt) も、新しい 839 * 送達確認されていない最小送信 SEQ (snd_una) 840 * まで進める。 869 841 */ 870 842 cep->snd_una += acked; … … 873 845 874 846 /* 875 * ç¶æ 876 ã«ããåå² 847 * 状態により分岐 877 848 */ 878 849 switch (cep->fsm_state) { 879 case TCP_FSM_FIN_WAIT_1: /* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾ 880 ã¡ */ 850 case TCP_FSM_FIN_WAIT_1: /* APP が終了、FIN 送信済み、ACK 待ち */ 881 851 if (ourfinisacked) { 882 852 cep->fsm_state = TCP_FSM_FIN_WAIT_2; … … 884 854 } 885 855 break; 886 case TCP_FSM_CLOSING: /* åæã¯ãã¼ãºãFIN 交ææ¸ã¿ãACK å¾ 887 ã¡ */ 856 case TCP_FSM_CLOSING: /* 同時クローズ、FIN 交換済み、ACK 待ち */ 888 857 if (ourfinisacked) { 889 858 /* 890 * éä¿¡ãã FIN ã確èªããã¦ããã°ç¶æ 891 ãå¤æ´ãã 892 * ãã¹ã¦ã®ã¿ã¤ãããªã»ããããå¾ã2MSL ã¿ã¤ããè¨å®ããã 859 * 送信した FIN が確認されていれば状態を変更し、 860 * すべてのタイマをリセットした後、2MSL タイマを設定する。 893 861 */ 894 862 cep->fsm_state = TCP_FSM_TIME_WAIT; … … 897 865 } 898 866 break; 899 case TCP_FSM_LAST_ACK: /* APP ãçµäºãACK å¾ 900 ã¡ */ 867 case TCP_FSM_LAST_ACK: /* APP が終了、ACK 待ち */ 901 868 if (ourfinisacked) { 902 869 /* 903 * éä¿¡ãã FIN ã確èªããã¦ããã°ãcep ãã¯ãã¼ãºãã904 * ã»ã°ã¡ã³ããç ´æ£ããã870 * 送信した FIN が確認されていれば、cep をクローズし、 871 * セグメントを破棄する。 905 872 */ 906 873 cep = tcp_close(cep); … … 908 875 } 909 876 break; 910 case TCP_FSM_TIME_WAIT: /* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾ 911 ã¡ */ 877 case TCP_FSM_TIME_WAIT: /* 相手からの FIN 受信済み、時間待ち */ 912 878 /* 913 * ç¸æãã FIN ãåéããããããä¸åº¦2MSL ã¿ã¤ããè¨å®ãã914 * ACK éä¿¡å¾ãã»ã°ã¡ã³ããç ´æ£ããã879 * 相手から FIN が再送された。もう一度2MSL タイマを設定し、 880 * ACK 送信後、セグメントを破棄する。 915 881 */ 916 882 cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL; … … 923 889 924 890 /* 925 * proc_ack1 -- ACK ã®å¦ç(1)891 * proc_ack1 -- ACK の処理 (1) 926 892 * 927 * æ»ãå¤:928 * RET_OK æ£å¸¸929 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã930 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã931 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã893 * 戻り値: 894 * RET_OK 正常 895 * RET_RETURN 正常、リターンする。 896 * RET_DROP エラー、セグメントを破棄する。 897 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 932 898 * 933 899 */ … … 939 905 940 906 switch (cep->fsm_state) { 941 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿ */ 942 943 /* ç¶æ 944 ãå¤æ´ããã*/ 907 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 908 909 /* 状態を変更する。*/ 945 910 if (cep->flags & TCP_CEP_FLG_NEED_FIN) { 946 911 cep->fsm_state = TCP_FSM_FIN_WAIT_1; … … 951 916 cep->fsm_state = TCP_FSM_ESTABLISHED; 952 917 953 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/918 /* TCP 通信端点からTCP 受付口を解放する。*/ 954 919 cep->rep = NULL; 955 920 … … 960 925 if (cep->rcv_nblk_tfn == TFN_TCP_ACP_CEP) { 961 926 962 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/927 /* 相手のアドレスをコピーする。*/ 963 928 *cep->p_dstaddr = cep->dstaddr; 964 929 … … 996 961 if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) { 997 962 998 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/963 /* 相手のアドレスをコピーする。*/ 999 964 *cep->p_dstaddr = cep->dstaddr; 1000 965 … … 1044 1009 1045 1010 /* 1046 * SDU ããªã FIN ãã¤ãã¦ããªããã°ãtcp_move_ra2rw() ãå¼åºãã1047 */ 1048 if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0) /* tcph->sum 㯠SDU é·*/1011 * SDU がなく FIN がついていなければ、tcp_move_ra2rw() を呼出す。 1012 */ 1013 if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0) /* tcph->sum は SDU 長 */ 1049 1014 tcph->flags = tcp_move_ra2rw(cep, tcph->flags); 1050 1015 1051 cep->snd_wl1 = tcph->seq - 1; /* snd_wl1: ã¦ã£ã³ãæ´æ°SEQ */1052 1053 /* break; ä¸ã«è½ã¡ãã*/1016 cep->snd_wl1 = tcph->seq - 1; /* snd_wl1: ウィンド更新 SEQ */ 1017 1018 /* break; 下に落ちる。*/ 1054 1019 1055 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº */ 1056 case TCP_FSM_FIN_WAIT_1: /* çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 1057 case TCP_FSM_FIN_WAIT_2: /* çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 1058 ã¡*/ 1059 case TCP_FSM_CLOSE_WAIT: /* FIN åä¿¡ãã¯ãã¼ãºå¾ 1060 ã¡ */ 1061 case TCP_FSM_CLOSING: /* çµäºãFIN 交ææ¸ã¿ãACK å¾ 1062 ã¡ */ 1063 case TCP_FSM_LAST_ACK: /* FIN åä¿¡ãçµäºãACK å¾ 1064 ã¡ */ 1065 case TCP_FSM_TIME_WAIT: /* çµäºãæéå¾ 1066 ã¡ */ 1020 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 1021 case TCP_FSM_FIN_WAIT_1: /* 終了して、FIN 送信済み */ 1022 case TCP_FSM_FIN_WAIT_2: /* 終了、FIN 伝達確認受信、FIN待ち*/ 1023 case TCP_FSM_CLOSE_WAIT: /* FIN 受信、クローズ待ち */ 1024 case TCP_FSM_CLOSING: /* 終了、FIN 交換済み、ACK 待ち */ 1025 case TCP_FSM_LAST_ACK: /* FIN 受信、終了、ACK 待ち */ 1026 case TCP_FSM_TIME_WAIT: /* 終了、時間待ち */ 1067 1027 1068 1028 if (SEQ_LE(tcph->ack, cep->snd_una)) { 1069 1029 1070 1030 /* 1071 * åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã¨åãã以åã®ã¨ãã®å¦ç1072 * ã¤ã¾ããå¤éã« ACK ãåä¿¡ãããã¨ãæå³ãã¦ããã1031 * 受信確認 ACK が 未確認の最小送信 SEQ (snd_una) と同じか以前のときの処理 1032 * つまり、多重に ACK を受信したことを意味している。 1073 1033 */ 1074 1034 1075 if (tcph->sum == 0 && tcph->win == cep->snd_wnd) { /* tcph->sum 㯠SDU é·*/1035 if (tcph->sum == 0 && tcph->win == cep->snd_wnd) { /* tcph->sum は SDU 長 */ 1076 1036 1077 1037 /* 1078 * SDU ããªããç¸æã®ã¦ã£ã³ããµã¤ãºãå¤æ´ããã¦ããªããã°ã1079 * ãã§ã«éä¿¡ããã»ã°ã¡ã³ãã®ä¸ã§ãACK (tcph->ack) ã¨1080 * åã SEQ ããå§ã¾ãã»ã°ã¡ã³ãããéä¸ã§æ¶å¤±ããå¯è½æ§ãããã1081 * ãã®å ´åã¯ãé«éå転éã¨é«éãªã«ããªãè¡ãã1038 * SDU がなく、相手のウィンドサイズが変更されていなければ、 1039 * すでに送信したセグメントの中で、ACK (tcph->ack) と 1040 * 同じ SEQ から始まるセグメントが、途中で消失した可能性がある。 1041 * この場合は、高速再転送と高速リカバリを行う。 1082 1042 */ 1083 1043 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DUP_ACKS], 1); … … 1086 1046 1087 1047 /* 1088 * åéã¿ã¤ããã»ããããã¦ããªãã¨ãã1089 * ã¾ãã¯ãACK (tcph->ack) ã¨æªç¢ºèªã®æå°éä¿¡ SEQã1090 * ä¸è´ããªãã¨ãã¯ãå¤é ACK æ°ã 0 ã«ããã1048 * 再送タイマがセットされていないとき、 1049 * または、ACK (tcph->ack) と未確認の最小送信 SEQが 1050 * 一致しないときは、多重 ACK 数を 0 にする。 1091 1051 */ 1092 1052 cep->dupacks = 0; … … 1096 1056 1097 1057 /* 1098 * å¤é ACK æ°ããããå¤ (æ¨æº 3) ã«ãªã£ãã1099 * é«éå転éå¦çãéå§ããã1058 * 多重 ACK 数がしきい値 (標準 3) になったら 1059 * 高速再転送処理を開始する。 1100 1060 */ 1101 1061 uint_t win; 1102 1062 1103 1063 /* 1104 * 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã®ãããå¤ãè¨å®ããã1064 * 輻輳ウィンドサイズ(snd_cwnd)のしきい値を設定する。 1105 1065 * 1106 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã1107 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã® 1/2ã1108 * ãã ãã2 * maxseg 以ä¸ã1066 * 相手の受信可能ウィンドサイズ (snd_wnd) か 1067 * 輻輳ウィンドサイズ (snd_cwnd) の 1/2。 1068 * ただし、2 * maxseg 以上。 1109 1069 * 1110 1070 */ … … 1117 1077 cep->snd_ssthresh = win * cep->maxseg; 1118 1078 1119 /* åéã¿ã¤ãã¨å¾å¾©æéããªã»ããããã*/1079 /* 再送タイマと往復時間をリセットする。*/ 1120 1080 cep->timer[TCP_TIM_REXMT] = 0; 1121 1081 cep->rtt = 0; 1122 1082 1123 /* æ¶å¤±ããã»ã°ã¡ã³ããéä¿¡ããã*/1083 /* 消失したセグメントを送信する。*/ 1124 1084 cep->snd_old_nxt = cep->snd_nxt; 1125 1085 cep->snd_nxt = tcph->ack; … … 1127 1087 1128 1088 /* 1129 * snd_nxt ãå 1130 ã«æ»ãããã«è¨å®ã㦠1131 * éä¿¡ãæ示ããã 1089 * snd_nxt を元に戻すように設定して 1090 * 送信を指示する。 1132 1091 */ 1133 1092 cep->flags |= TCP_CEP_FLG_POST_OUTPUT | … … 1137 1096 sig_sem(SEM_TCP_POST_OUTPUT); 1138 1097 1139 /* 輻輳ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/1098 /* 輻輳ウィンドサイズを更新する。*/ 1140 1099 cep->snd_cwnd = (uint16_t)(cep->snd_ssthresh 1141 1100 + cep->maxseg * cep->dupacks); … … 1147 1106 1148 1107 /* 1149 * å¤é ACK æ°ããããå¤ (æ¨æº 3) ãè¶ 1150 ããã 1151 * 輻輳ã¦ã£ã³ããµã¤ãºãå¢å ããªããåéããã 1108 * 多重 ACK 数がしきい値 (標準 3) を超えたら 1109 * 輻輳ウィンドサイズを増加しながら再送する。 1152 1110 */ 1153 1111 cep->snd_cwnd += cep->maxseg; 1154 1112 1155 /* éä¿¡ãæ示ããã*/1113 /* 送信を指示する。*/ 1156 1114 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1157 1115 sig_sem(SEM_TCP_POST_OUTPUT); … … 1166 1124 1167 1125 /* 1168 * åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) 以éã®ã¨ãã®å¦ç1126 * 受信確認 ACK が 未確認の最小送信 SEQ (snd_una) 以降のときの処理 1169 1127 */ 1170 1128 if (cep->dupacks >= MAX_TCP_REXMT_THRESH && cep->snd_cwnd > cep->snd_ssthresh) 1171 1129 /* 1172 * é«éå転éãè¡ã£ã¦ããã¨ãã¯ã輻輳ã¦ã£ã³ããµã¤ãºããããå¤ã¾ã§æ»ãã1130 * 高速再転送を行っていたときは、輻輳ウィンドサイズをしきい値まで戻す。 1173 1131 */ 1174 1132 cep->snd_cwnd = (uint16_t)cep->snd_ssthresh; … … 1178 1136 if (SEQ_GT(tcph->ack, cep->snd_max)) 1179 1137 /* 1180 * åä¿¡ãã ACK ãéä¿¡ããæ大 SEQ ãè¶ 1181 ãã¦ããã¨ãã®å¦ç 1138 * 受信した ACK が送信した最大 SEQ を超えていたときの処理 1182 1139 */ 1183 1140 return drop_after_ack(input, cep, thoff); … … 1185 1142 if (cep->flags & TCP_CEP_FLG_NEED_SYN) { 1186 1143 /* 1187 * SYN éä¿¡è¦æ±ãåãæ¶ãã¦ãæªç¢ºèªã®æå°éä¿¡ SEQ ãé²ããã1144 * SYN 送信要求を取り消して、未確認の最小送信 SEQ を進める。 1188 1145 */ 1189 1146 cep->flags &= ~TCP_CEP_FLG_NEED_SYN; … … 1198 1155 1199 1156 /* 1200 * update_wnd -- ã¦ã£ã³ããµã¤ãºãæ´æ°ããã1157 * update_wnd -- ウィンドサイズを更新する。 1201 1158 * 1202 * æ»ãå¤: éä¿¡ãå¿ 1203 è¦ãªã true ãè¿ãã 1159 * 戻り値: 送信が必要なら true を返す。 1204 1160 */ 1205 1161 … … 1209 1165 1210 1166 /* 1211 * æ´æ°æ¡ä»¶1167 * 更新条件 1212 1168 * 1213 * ACK ãã©ã°ãã»ããããã¦ãã&&1214 * ( ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ããå||1215 * ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ã¨åã&&1216 * ( ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ããå||1217 * ( ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ã¨åã&&1218 * WIN ãç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã大ãã1169 * ACK フラグがセットされている && 1170 * (前回ウィンドを更新した SEQ (snd_wl1) が SEQ より前 || 1171 * 前回ウィンドを更新した SEQ (snd_wl1) が SEQ と同じ && 1172 * (前回ウィンドを更新した ACK (snd_wl2) が ACK より前 || 1173 * (前回ウィンドを更新した ACK (snd_wl2) が ACK と同じ && 1174 * WIN が相手の受信可能ウィンドサイズ (snd_wnd) より大きい 1219 1175 * ) 1220 1176 * ) … … 1232 1188 1233 1189 if (cep->snd_wnd > cep->max_sndwnd) 1234 /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/1190 /* 今までの最大送信ウィンドサイズを更新する。*/ 1235 1191 cep->max_sndwnd = cep->snd_wnd; 1236 1192 … … 1240 1196 1241 1197 /* 1242 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ä¸ã§ã 1243 * ç¸æã®åä¿¡ã¦ã£ã³ãã空ãã®ãå¾ 1244 ã£ã¦ããã¨ãã®å¦ç 1198 * 送信ウィンドバッファ用のネットワークバッファ割り当て中で、 1199 * 相手の受信ウィンドが空くのを待っているときの処理 1245 1200 */ 1246 1201 if (cep->snd_wnd > 0) { 1247 1202 1248 1203 /* 1249 * ç¸æã®åä¿¡ã¦ã£ã³ãã空ããã¨ãã¯ã1250 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ãåéããã1204 * 相手の受信ウィンドが空いたときは、 1205 * 送信ウィンドバッファ用のネットワークバッファ割り当てを再開する。 1251 1206 */ 1252 1207 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) … … 1265 1220 1266 1221 /* 1267 * proc_urg -- ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç1222 * proc_urg -- 緊急データつきのセグメントの処理 1268 1223 */ 1269 1224 … … 1276 1231 TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) { 1277 1232 1278 /* ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç*/1233 /* 緊急データつきのセグメントの処理 */ 1279 1234 1280 1235 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_URG_SEGS], 1); … … 1282 1237 1283 1238 /* 1284 * ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ãåä¿¡ã¦ã£ã³ããããã¡ã® 1285 * ç¯å²ãè¶ 1286 ããã¨ãã¯ä½ãããªãã 1239 * 緊急ポインタの位置が受信ウィンドバッファの 1240 * 範囲を超えるときは何もしない。 1287 1241 */ 1288 1242 tcph->urp = 0; … … 1291 1245 1292 1246 if (SEQ_GT(tcph->seq + tcph->urp, cep->rcv_up)) 1293 /* ç·æ¥ãã¤ã³ã¿ãæ´æ°ãããã¨ãã®å¦ç*/1247 /* 緊急ポインタが更新されたときの処理 */ 1294 1248 cep->rcv_up = tcph->seq + tcph->urp; 1295 1249 1296 if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1250 if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1297 1251 1298 1252 /* 1299 * ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ããä»ååä¿¡ããã»ã°ã¡ã³ãå 1300 ã®å ´åã¯ã 1301 * ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã 1253 * 緊急ポインタの位置が、今回受信したセグメント内の場合は、 1254 * コールバック関数を呼び出す。 1302 1255 */ 1303 1256 cep->urg_tcph = tcph; … … 1322 1275 1323 1276 if (cep->urg_tcph != NULL) { 1324 /* ã³ã¼ã«ããã¯é¢æ°å 1325 㧠tcp_rcv_oob() ãå¼åºããªãã£ãã*/ 1277 /* コールバック関数内で tcp_rcv_oob() を呼出さなかった。*/ 1326 1278 cep->urg_tcph = NULL; 1327 1279 tcph->urp = 0; … … 1329 1281 else { 1330 1282 /* 1331 * ã³ã¼ã«ããã¯é¢æ°å 1332 㧠tcp_rcv_oob() ãå¼åºããæã¯ã 1333 * SDU é·ã®è£æ£å¤ãè¨å®ããã 1283 * コールバック関数内で tcp_rcv_oob() を呼出した時は、 1284 * SDU 長の補正値を設定する。 1334 1285 */ 1335 1286 tcph->urp = 1; … … 1358 1309 1359 1310 /* 1360 * drop_after_ack -- åä¿¡ã»ã°ã¡ã³ããç ´æ£ããå¾ãACK ãè¿ã (注æ: ååã¨ã¯åã£ã¦ããªã)ã1311 * drop_after_ack -- 受信セグメントを破棄した後、ACK を返す (注意: 名前とは合っていない)。 1361 1312 * 1362 * æ»ãå¤:1363 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã1364 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã1313 * 戻り値: 1314 * RET_RETURN 正常、リターンする。 1315 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 1365 1316 */ 1366 1317 … … 1371 1322 1372 1323 /* 1373 * SYN åä¿¡ç¶æ 1374 ã§ãACK ãéé確èªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ãã 1375 * åã®å¤ããéä¿¡ãããæ大 SEQ (snd_max) ããå¾ã®å¤ã®å ´åã¯ãç¸æã« RST ã 1376 * éã£ã¦çµäºãããããã¯ã"LAND" DoS æ»æã¸ã®é²å¾¡ã§ãããå½é ããã SYN 1377 * ã»ã°ã¡ã³ããéä¿¡ãã¤ã¥ãããã¼ãéã§ã® ACK ã¹ãã¼ã ãé²ãã 1324 * SYN 受信状態で、ACK が送達確認されていない最小送信 SEQ (snd_una) より 1325 * 前の値か、送信された最大 SEQ (snd_max) より後の値の場合は、相手に RST を 1326 * 送って終了する。これは、"LAND" DoS 攻撃への防御であり、偽造された SYN 1327 * セグメントを送信しつづけるポート間での ACK ストームを防ぐ。 1378 1328 */ 1379 1329 if (cep->fsm_state == TCP_FSM_SYN_RECVD && (tcph->flags & TCP_FLG_ACK) && … … 1384 1334 syscall(rel_net_buf(input)); 1385 1335 1386 /* éä¿¡ãæ示ããã*/1336 /* 送信を指示する。*/ 1387 1337 cep->flags |= TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_POST_OUTPUT; 1388 1338 sig_sem(SEM_TCP_POST_OUTPUT); … … 1391 1341 1392 1342 /* 1393 * close_connection -- ã³ãã¯ã·ã§ã³éæ¾å¦çãç¸æãã FIN ãåä¿¡ããã1343 * close_connection -- コネクション開放処理、相手から FIN を受信した。 1394 1344 */ 1395 1345 … … 1416 1366 1417 1367 switch (cep->fsm_state) { 1418 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/1419 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº*/1368 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 1369 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 1420 1370 cep->fsm_state = TCP_FSM_CLOSE_WAIT; 1421 1371 break; 1422 1372 1423 case TCP_FSM_FIN_WAIT_1: /* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾ 1424 ã¡ */ 1373 case TCP_FSM_FIN_WAIT_1: /* APP が終了、FIN 送信済み、ACK 待ち */ 1425 1374 cep->fsm_state = TCP_FSM_CLOSING; 1426 1375 break; 1427 1376 1428 case TCP_FSM_FIN_WAIT_2: /* ç¸æããã® FIN å¾ 1429 ã¡ */ 1377 case TCP_FSM_FIN_WAIT_2: /* 相手からの FIN 待ち */ 1430 1378 cep->fsm_state = TCP_FSM_TIME_WAIT; 1431 1379 tcp_cancel_timers(cep); … … 1433 1381 1434 1382 /* 1435 * FIN WAIT 2 ç¶æ 1436 ã§ã¯ã 1437 * åä¿¡ã¯å¯è½ã§ãããããã§ã«éä¿¡ã¯çµäºãã¦ããã 1438 * ç¸æã®éä¿¡ãçµäºããã®ã§ãå 1439 ¥åã¿ã¹ã¯ã®ã¿èµ·åºããã 1383 * FIN WAIT 2 状態では、 1384 * 受信は可能であるが、すでに送信は終了している。 1385 * 相手の送信も終了したので、入力タスクのみ起床する。 1440 1386 */ 1441 1387 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 1443 1389 #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 1444 1390 1445 /* ç¸æããã® FIN ã«å¯¾ãã¦å¿çãè¿ãã*/1391 /* 相手からの FIN に対して応答を返す。*/ 1446 1392 tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una, 1447 1393 cep->rbufsz - cep->rwbuf_count, TCP_FLG_ACK); … … 1450 1396 1451 1397 /* 1452 * å¿ 1453 è¦ãªæ 1454 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 1455 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 1398 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 1399 * 標準の TCP 通信端点を開放する。 1456 1400 */ 1457 1401 tcp_move_twcep(cep); … … 1461 1405 break; 1462 1406 1463 case TCP_FSM_TIME_WAIT: /* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾ 1464 ã¡ */ 1407 case TCP_FSM_TIME_WAIT: /* 相手からの FIN 受信済み、時間待ち */ 1465 1408 cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL; 1466 1409 break; … … 1469 1412 1470 1413 /* 1471 * tcp_input -- TCP ã®å 1472 ¥åé¢æ° 1414 * tcp_input -- TCP の入力関数 1473 1415 * 1474 * 注æ: input ã«ã¯ IF ããã㨠IP ããããå 1475 é ã«ããã 1416 * 注意: input には IF ヘッダと IP ヘッダが先頭にある。 1476 1417 */ 1477 1418 … … 1500 1441 NET_COUNT_MIB(tcp_stats.tcpInSegs, 1); 1501 1442 1502 /* ãããé·ããã§ãã¯ããã*/1443 /* ヘッダ長をチェックする。*/ 1503 1444 if (input->len < IF_IP_TCP_HDR_SIZE) { 1504 1445 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1); … … 1509 1450 tcph = GET_TCP_HDR(input, *offp); 1510 1451 1511 seglen = input->len - *offp; /* TCP ã®ã»ã°ã¡ã³ãé·*/1452 seglen = input->len - *offp; /* TCP のセグメント長 */ 1512 1453 1513 1454 if (IN_CKSUM(input, IPPROTO_TCP, *offp, (uint_t)seglen) != 0) { … … 1516 1457 } 1517 1458 1518 /* TCP ãããé·ããã§ãã¯ããã*/1459 /* TCP ヘッダ長をチェックする。*/ 1519 1460 if (TCP_HDR_LEN(tcph->doff) < TCP_HDR_SIZE || TCP_HDR_LEN(tcph->doff) > seglen) { 1520 1461 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1); 1521 1462 goto drop; 1522 1463 } 1523 tcph->sum = seglen - TCP_HDR_LEN(tcph->doff); /* ãããã tcph->sum 㯠TCP ã® SDU é·*/1524 1525 /* 1526 * SYN 㨠FIN ã®ä¸¡ããããã»ããããã¦ããã°ç ´æ£ãããnmap çã®å¯¾ç1527 * ãã ããRFC1644 T/TCP æ¡å¼µæ©è½ã¨ç«¶åããã1464 tcph->sum = seglen - TCP_HDR_LEN(tcph->doff); /* ここから tcph->sum は TCP の SDU 長 */ 1465 1466 /* 1467 * SYN と FIN の両ビットがセットされていれば破棄する。nmap 等の対策 1468 * ただし、RFC1644 T/TCP 拡張機能と競合する。 1528 1469 */ 1529 1470 if ((tcph->flags & (TCP_FLG_SYN | TCP_FLG_FIN)) == (TCP_FLG_SYN | TCP_FLG_FIN)) 1530 1471 goto drop; 1531 1472 1532 /* ãããã¯ã¼ã¯ãªã¼ãã¼ãããã¹ããªã¼ãã¼ã«å¤æããã*/1473 /* ネットワークオーダーからホストオーダーに変換する。*/ 1533 1474 1534 1475 NTOHL(tcph->seq); … … 1544 1485 1545 1486 /* 1546 * ç¶æ 1547 ã Time Wait ä¸ã® CEP ãæ¢ç´¢ããã 1487 * 状態が Time Wait 中の CEP を探索する。 1548 1488 */ 1549 1489 twcep = tcp_find_twcep(&iph->dst, tcph->dport, &iph->src, tcph->sport); 1550 1490 if (twcep != NULL) { 1551 1491 1552 if (tcph->flags & TCP_FLG_RST) /* RST ãã©ã°ãåä¿¡ããã¨ãã¯ç¡è¦ããã*/1492 if (tcph->flags & TCP_FLG_RST) /* RST フラグを受信したときは無視する。*/ 1553 1493 goto drop; 1554 1494 else { 1555 1495 1556 1496 /* 1557 * TCP é信端ç¹ã Time Wait ã®æãç¸æãã¹ãããã»ã°ã¡ã³ããæ¥ãã¨ãã¯ã1558 * ç¸æãã¹ãã® FIN ã«å¯¾ããèªãã¹ãã® ACK ã»ã°ã¡ã³ããéä¸ã§1559 * æ失ãããã¨ãæå³ãã¦ããã®ã§ãACK ã»ã°ã¡ã³ããåéããã1497 * TCP 通信端点が Time Wait の時、相手ホストからセグメントが来たときは、 1498 * 相手ホストの FIN に対する自ホストの ACK セグメントが途中で 1499 * 損失したことを意味しているので、ACK セグメントを再送する。 1560 1500 */ 1561 1501 1562 /* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/1502 /* ホストオーダーからネットワークオーダーに戻す。*/ 1563 1503 HTONS(tcph->sport); 1564 1504 HTONS(tcph->dport); … … 1569 1509 } 1570 1510 else 1571 /* æ¨æºã® TCP é信端ç¹ãå¾ãã*/1511 /* 標準の TCP 通信端点を得る。*/ 1572 1512 cep = tcp_find_cep(&iph->dst, tcph->dport, &iph->src, tcph->sport); 1573 1513 1574 1514 #else /* of #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 */ 1575 1515 1576 /* TCP é信端ç¹ãå¾ãã*/1516 /* TCP 通信端点を得る。*/ 1577 1517 cep = tcp_find_cep(&iph->dst, tcph->dport, &iph->src, tcph->sport); 1578 1518 … … 1580 1520 1581 1521 /* 1582 * TCP é信端ç¹ããªãå ´å㨠CEP ã®ç¶æ 1583 ãã¯ãã¼ãºãªãç ´æ£ããã 1522 * TCP 通信端点がない場合と CEP の状態がクローズなら破棄する。 1584 1523 */ 1585 1524 if (cep == NULL) { … … 1599 1538 1600 1539 /* 1601 * ã³ãã¯ã·ã§ã³éè¨æ¸ã¿ã§ã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã1602 * ã¢ã¤ãã«æéã¨çå確èªã¿ã¤ãããªã»ããããã1540 * コネクション開設済みでセグメントを受信したときは、 1541 * アイドル時間と生存確認タイマをリセットする。 1603 1542 */ 1604 1543 cep->idle = 0; … … 1607 1546 } 1608 1547 1609 /* CEP ã®ç¶æ 1610 ã LISTEN 以å¤ã®æã¯ããªãã·ã§ã³ãå¦çããã*/ 1548 /* CEP の状態が LISTEN 以外の時は、オプションを処理する。*/ 1611 1549 if (cep->fsm_state != TCP_FSM_LISTEN) 1612 1550 parse_option(tcph, cep); 1613 1551 1614 1552 /* 1615 * åä¿¡å¯è½ã¦ã£ã³ããµã¤ãºãè¨ç®ããã1553 * 受信可能ウィンドサイズを計算する。 1616 1554 * 1617 * rcv_nxt: åä¿¡ãæå¾ 1618 ãã¦ããæå°ã® SEQï¼ãã以åã¯åä¿¡æ¸ã¿ï¼ 1619 * rcv_adv: åä¿¡ãæå¾ 1620 ãã¦ããæ大㮠SEQ 1621 * rbufsz: åä¿¡ã¦ã£ã³ããããã¡ãµã¤ãº 1622 * rwbuf_count: åä¿¡ã¦ã£ã³ããããã¡ã«ãããã¼ã¿é 1623 * tcph->sum: ä»ååä¿¡ãã SDU ãµã¤ãº 1555 * rcv_nxt: 受信を期待している最小の SEQ(これ以前は受信済み) 1556 * rcv_adv: 受信を期待している最大の SEQ 1557 * rbufsz: 受信ウィンドバッファサイズ 1558 * rwbuf_count: 受信ウィンドバッファにあるデータ量 1559 * tcph->sum: 今回受信した SDU サイズ 1624 1560 * 1625 * ä»ååä¿¡ããã»ã°ã¡ã³ããé åºæ´åãã¥ã¼ã«é£çµãã 1626 * å¯è½æ§ãããã®ã§ tcph->sum ãèæ 1627 ®ããã 1561 * 今回受信したセグメントを順序整列キューに連結する 1562 * 可能性があるので tcph->sum を考慮する。 1628 1563 * 1629 1564 */ … … 1636 1571 cep->rcv_wnd = cep->rcv_adv - cep->rcv_nxt; 1637 1572 1638 /* CEP ã®ç¶æ 1639 ã«ããå¦çãè¡ãã*/ 1640 1641 if (cep->fsm_state == TCP_FSM_LISTEN) { /* ååãªã¼ãã³ (LISTEN) ã®å¦çã*/ 1573 /* CEP の状態により処理を行う。*/ 1574 1575 if (cep->fsm_state == TCP_FSM_LISTEN) { /* 受動オープン (LISTEN) の処理。*/ 1642 1576 if ((ret = listening(input, cep, *offp, iss)) == RET_RST_DROP) 1643 1577 goto reset_drop; 1644 1578 else if (ret == RET_DROP) 1645 1579 goto drop; 1646 trim_length(tcph, cep); /* åä¿¡ãã SDU é·ã調æ´ããã*/1647 1648 if (tcph->flags & TCP_FLG_ACK) { /* ACK ãã©ã°ã®å¦ç*/1580 trim_length(tcph, cep); /* 受信した SDU 長を調整する。*/ 1581 1582 if (tcph->flags & TCP_FLG_ACK) { /* ACK フラグの処理 */ 1649 1583 if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP) 1650 1584 goto drop; … … 1655 1589 } 1656 1590 } 1657 else if (cep->fsm_state == TCP_FSM_SYN_SENT) { /* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿*/1591 else if (cep->fsm_state == TCP_FSM_SYN_SENT) { /* 能動オープン、SYN 送信済み */ 1658 1592 if ((ret = syn_sent(tcph, cep)) == RET_RST_DROP) 1659 1593 goto reset_drop; 1660 1594 else if (ret == RET_DROP) 1661 1595 goto drop; 1662 trim_length(tcph, cep); /* åä¿¡ãã SDU é·ã調æ´ããã*/1663 1664 if (tcph->flags & TCP_FLG_ACK) { /* ACK ãã©ã°ã®å¦ç*/1596 trim_length(tcph, cep); /* 受信した SDU 長を調整する。*/ 1597 1598 if (tcph->flags & TCP_FLG_ACK) { /* ACK フラグの処理 */ 1665 1599 if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP) 1666 1600 goto drop; … … 1672 1606 } 1673 1607 else { 1674 if (cep->fsm_state == TCP_FSM_SYN_RECVD) { /* SYN ãåä¿¡ãSYN éä¿¡æ¸ã¿*/1608 if (cep->fsm_state == TCP_FSM_SYN_RECVD) { /* SYN を受信、SYN 送信済み */ 1675 1609 /* 1676 * ç¸æããå信確èªãéããã¦æ¥ã¦ãã1610 * 相手から受信確認が送られて来ても、 1677 1611 * 1678 * ACK <= æªç¢ºèªã®æå°éä¿¡SEQ (snd_una) &&1679 * éä¿¡ããæ大SEQ (snd_max) < ACK1612 * ACK <= 未確認の最小送信 SEQ (snd_una) && 1613 * 送信した最大 SEQ (snd_max) < ACK 1680 1614 * 1681 * ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã1615 * なら、リセットを送ってセグメントを破棄する。 1682 1616 */ 1683 1617 if ((tcph->flags & TCP_FLG_ACK) && … … 1688 1622 1689 1623 /* 1690 * RST ãã©ã°ãåä¿¡ããã¨ãã®å¦ç (ç°å¸¸åæ)1624 * RST フラグを受信したときの処理 (異常切断) 1691 1625 */ 1692 1626 if (tcph->flags & TCP_FLG_RST) { … … 1694 1628 SEQ_LT(tcph->seq, cep->last_ack_sent + cep->rcv_wnd)) { 1695 1629 /* 1696 * åä¿¡ããã»ã°ã¡ã³ãã® SEQ ããæå¾ã«éä¿¡ããACK (last_ack_sent)1697 * ãããåä¿¡ã¦ã¤ã³ãã¦ãµã¤ãºã¾ã§ã®éã®å¦ç1630 * 受信したセグメントの SEQ が、最後に送信した ACK (last_ack_sent) 1631 * から、受信ウインドウサイズまでの間の処理 1698 1632 */ 1699 1633 switch (cep->fsm_state) { 1700 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/1701 1702 cep->net_error = EV_CNNRF; /* æ¥ç¶ä¸è½*/1634 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 1635 1636 cep->net_error = EV_CNNRF; /* 接続不能 */ 1703 1637 cep->error = E_CLS; 1704 1638 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1); … … 1707 1641 break; 1708 1642 1709 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº */ 1710 case TCP_FSM_CLOSE_WAIT: /* FIN åä¿¡ãã¯ãã¼ãºå¾ 1711 ã¡ */ 1643 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 1644 case TCP_FSM_CLOSE_WAIT: /* FIN 受信、クローズ待ち */ 1712 1645 NET_COUNT_MIB(tcp_stats.tcpEstabResets, 1); 1713 1646 /* fallthrough */ 1714 1647 1715 case TCP_FSM_FIN_WAIT_1: /* çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 1716 case TCP_FSM_FIN_WAIT_2: /* çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 1717 ã¡ */ 1718 1719 cep->net_error = EV_CNRST; /* æ¥ç¶ãªã»ãã */ 1648 case TCP_FSM_FIN_WAIT_1: /* 終了して、FIN 送信済み */ 1649 case TCP_FSM_FIN_WAIT_2: /* 終了、FIN 伝達確認受信、FIN待ち */ 1650 1651 cep->net_error = EV_CNRST; /* 接続リセット */ 1720 1652 cep->error = E_CLS; 1721 1653 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1); 1722 1654 /* no break; */ 1723 1655 1724 case TCP_FSM_CLOSING: /* çµäºãFIN 交ææ¸ã¿ãACK å¾ 1725 ã¡ */ 1726 case TCP_FSM_LAST_ACK: /* FIN åä¿¡ãçµäºãACK å¾ 1727 ã¡ */ 1656 case TCP_FSM_CLOSING: /* 終了、FIN 交換済み、ACK 待ち */ 1657 case TCP_FSM_LAST_ACK: /* FIN 受信、終了、ACK 待ち */ 1728 1658 1729 1659 cep = tcp_close(cep); … … 1735 1665 1736 1666 /* 1737 * CEP ã®ç¶æ 1738 ã SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿ã®å ´åã¯ã 1739 * åä¿¡ã¦ã£ã³ãã«åã¾ãããã«ãã¼ã¿ã 1740 * 調æ´ããåã«ããã®æ¥ç¶ã«ãããã±ãããã©ãããæ¤è¨¼ããã 1667 * CEP の状態が SYN を受信し、SYN 送信済みの場合は、 1668 * 受信ウィンドに収まるようにデータを 1669 * 調整する前に、この接続によるパケットかどうかを検証する。 1741 1670 * 1742 * åä¿¡ããç¸æã® SEQ < ç¸æã® SEQ ã®åæå¤(irs)1671 * 受信した相手の SEQ < 相手の SEQ の初期値 (irs) 1743 1672 * 1744 * ããã¯ã"LAND" DoS æ»æã®é²å¾¡ã§ããã1673 * これは、"LAND" DoS 攻撃の防御である。 1745 1674 */ 1746 1675 if (cep->fsm_state == TCP_FSM_SYN_RECVD && SEQ_LT(tcph->seq, cep->irs)) { … … 1749 1678 1750 1679 /* 1751 * åä¿¡ãæå¾ 1752 ãã¦ããæå°ã® SEQ (rcv_nxt) - åä¿¡ããç¸æã® SEQ ã 1753 * æ£ãªããrcv_nxt 以åã®ãã¼ã¿ã¯ãã§ã«åä¿¡ãã¦ããã®ã§ããã®é¨åã 1754 * åé¤ããã 1680 * 受信を期待している最小の SEQ (rcv_nxt) - 受信した相手の SEQ が 1681 * 正なら、rcv_nxt 以前のデータはすでに受信しているので、その部分を 1682 * 削除する。 1755 1683 * <---------- rcv_wnd ---------> 1756 1684 * rcv_nxt rcv_nxt + rcv_wnd … … 1764 1692 * ^ ^ 1765 1693 * seq seq + len 1766 * <---------------> åé¤ããã1694 * <---------------> 削除する。 1767 1695 */ 1768 1696 todrop = cep->rcv_nxt - tcph->seq; … … 1770 1698 1771 1699 /* 1772 * SYN ãã©ã°ãã¤ãã¦ããã¨ãã¯ããã®å (1 ãªã¯ããã)1773 * SEQ ãé²ããç·æ¥ãã¤ã³ã¿ã¨åé¤ããé·ãã調æ´ããã1700 * SYN フラグがついているときは、その分 (1 オクテット) 1701 * SEQ を進め、緊急ポインタと削除する長さを調整する。 1774 1702 */ 1775 1703 if (tcph->flags & TCP_FLG_SYN) { … … 1784 1712 1785 1713 /* 1786 * åé¤ããé·ãã SDU ããé·ããã¤ã¾ããåä¿¡ãæå¾ 1787 ãã¦ãã 1788 * æå°ã® SEQ (rcv_nxt) ã«éãã¦ããªããã 1789 * åé¤ããé·ãã SDU ã¨åãã§ãFIN ãã©ã°ãã¤ãã¦ãªããã° 1790 * å 1791 ¨ã¦åé¤ããã 1714 * 削除する長さが SDU より長い、つまり、受信を期待している 1715 * 最小の SEQ (rcv_nxt) に達していないか、 1716 * 削除する長さが SDU と同じで、FIN フラグがついてなければ 1717 * 全て削除する。 1792 1718 */ 1793 if ( todrop > tcph->sum || /* tcph->sum 㯠TCP ã® SDU é·*/1719 if ( todrop > tcph->sum || /* tcph->sum は TCP の SDU 長 */ 1794 1720 (todrop == tcph->sum && (tcph->flags & TCP_FLG_FIN) == 0)) { 1795 1721 tcph->flags &= ~TCP_FLG_FIN; 1796 1722 cep->flags |= TCP_CEP_FLG_ACK_NOW; 1797 todrop = tcph->sum; /* tcph->sum 㯠TCP ã® SDU é·*/1723 todrop = tcph->sum; /* tcph->sum は TCP の SDU 長 */ 1798 1724 } 1799 1725 1800 1726 /* 1801 * SDU ãåã«è©°ããã1727 * SDU を前に詰める。 1802 1728 */ 1803 if (todrop < tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1729 if (todrop < tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1804 1730 memcpy(GET_TCP_SDU(input, *offp), 1805 1731 GET_TCP_SDU(input, *offp) + todrop, (size_t)(tcph->sum - todrop)); … … 1807 1733 1808 1734 /* 1809 * SEQ 㨠SDU é·ã調æ´ããã1735 * SEQ と SDU 長を調整する。 1810 1736 */ 1811 1737 tcph->seq += todrop; 1812 tcph->sum -= (uint16_t)todrop; /* tcph->sum 㯠TCP ã® SDU é·*/1738 tcph->sum -= (uint16_t)todrop; /* tcph->sum は TCP の SDU 長 */ 1813 1739 1814 1740 /* 1815 * ç·æ¥ãã¤ã³ã¿ã調æ´ããã1741 * 緊急ポインタを調整する。 1816 1742 */ 1817 1743 if (tcph->urp > todrop) … … 1826 1752 1827 1753 /* 1828 * ããã¦ã¼ã¶ã¿ã¹ã¯ãçµäºããå¾ã«ããã¼ã¿ãåä¿¡ãã1829 * å ´åã¯ãRST ãéãã1830 */ 1831 if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) { /* tcph->sum 㯠TCP ã® SDU é·*/1754 * もしユーザタスクが終了した後に、データを受信した 1755 * 場合は、RST を送る。 1756 */ 1757 if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) { /* tcph->sum は TCP の SDU 長 */ 1832 1758 cep = tcp_close(cep); 1833 1759 goto reset_drop; … … 1835 1761 1836 1762 /* 1837 * åä¿¡ã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããè¶ 1838 ããå ´åã¯ã 1839 * è¶ 1840 ããåãåãã 1763 * 受信セグメントが受信ウィンドを超える場合は、 1764 * 超えた分を削る。 1841 1765 * 1842 1766 * <---------- rcv_wnd ---------> … … 1851 1775 * ^ ^ 1852 1776 * seq seq + len 1853 * <-----> åé¤ããã1854 */ 1855 todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd); /* tcph->sum 㯠TCP ã® SDU é·*/1777 * <-----> 削除する。 1778 */ 1779 todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd); /* tcph->sum は TCP の SDU 長 */ 1856 1780 if (todrop > 0) { 1857 if (todrop > tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1781 if (todrop > tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1858 1782 /* 1859 * åä¿¡ãã SDU ã®å 1860 ¨ã¦ãåä¿¡ã¦ã£ã³ããè¶ 1861 ããå ´åã 1783 * 受信した SDU の全てが受信ウィンドを超える場合。 1862 1784 * 1863 * TIME_WAIT ä¸ã«ãæ°ããªæ¥ç¶è¦æ±ãåä¿¡ããã1864 * å¤ãæ¥ç¶ãç ´æ£ããæ°ããªæ¥ç¶ãéå§ããã1865 * ãã ããSEQ ã¯åããé²ãã§ããªããã°ãªããªãã1785 * TIME_WAIT 中に、新たな接続要求を受信したら 1786 * 古い接続を破棄し、新たな接続を開始する。 1787 * ただし、SEQ は前より進んでいなければならない。 1866 1788 */ 1867 1789 if ((tcph->flags & TCP_FLG_SYN) && … … 1875 1797 1876 1798 /* 1877 * åä¿¡ã¦ã£ã³ãã 0 ã§ãåä¿¡ãã SEQ 㨠1878 * åä¿¡ãæå¾ 1879 ãã¦ããæå°ã® SEQ ãä¸è´ããã¨ã㯠1880 * ACK ãè¿ãããã以å¤ã¯ãã¼ã¿ãç ´æ£ããACK ãè¿ãã 1799 * 受信ウィンドが 0 で、受信した SEQ と 1800 * 受信を期待している最小の SEQ が一致したときは 1801 * ACK を返す。それ以外はデータを破棄し、ACK を返す。 1881 1802 */ 1882 1803 if (cep->rcv_wnd == 0 && (tcph->seq == cep->rcv_nxt || tcph->sum == 0)) { … … 1889 1810 } 1890 1811 } 1891 tcph->sum -= (uint16_t)todrop; /* tcph->sum 㯠TCP ã® SDU é·*/1812 tcph->sum -= (uint16_t)todrop; /* tcph->sum は TCP の SDU 長 */ 1892 1813 tcph->flags &= ~(TCP_FLG_PUSH | TCP_FLG_FIN); 1893 1814 } 1894 1815 1895 1816 /* 1896 * ãããSYN ãã»ããããã¦ããã°ã1897 * ã¨ã©ã¼ãªã®ã§ RST ãéããæ¥ç¶ãç ´æ£ããã1817 * もし、SYN がセットされていれば、 1818 * エラーなので RST を送り、接続を破棄する。 1898 1819 */ 1899 1820 if (tcph->flags & TCP_FLG_SYN) { … … 1904 1825 1905 1826 /* 1906 * ãããACK ãã»ããããã¦ããªãå ´åã¯ã 1907 * ç¶æ 1908 ã SYN åä¿¡æ¸ã¿ã 1909 * SYN ãéä¿¡ãããã¨ãã¦ããã°ãå¦çãç¶ãããã 1910 * ãã以å¤ã¯ã»ã°ã¡ã³ããç ´æ£ãã¦çµäºããã 1827 * もし、ACK がセットされていない場合は、 1828 * 状態が SYN 受信済みか 1829 * SYN を送信しようとしていれば、処理を続けるが、 1830 * それ以外はセグメントを破棄して終了する。 1911 1831 */ 1912 1832 if ((tcph->flags & TCP_FLG_ACK) == 0) { … … 1916 1836 else { 1917 1837 /* 1918 * ACK ã®å¦ç1838 * ACK の処理 1919 1839 */ 1920 1840 ret = proc_ack1(input, cep, *offp, &needoutput); … … 1930 1850 /* step 6 */ 1931 1851 1932 /* éä¿¡ã¦ã£ã³ããæ´æ°ããã*/1852 /* 送信ウィンドを更新する。*/ 1933 1853 if (update_wnd(tcph, cep) == true) 1934 1854 needoutput = true; 1935 1855 1936 /* ç·æ¥ãã¼ã¿ãå¦çããã*/1856 /* 緊急データを処理する。*/ 1937 1857 proc_urg(tcph, cep); 1938 1858 … … 1940 1860 1941 1861 /* 1942 * SDU ãããããFIN ãæªåä¿¡ã®ç¶æ 1943 ã§ãæåã« FIN ãåä¿¡ããã¨ãã 1944 * åä¿¡ã»ã°ã¡ã³ããã¥ã¼ã« net_buf ã追å ããã 1945 * ãã以å¤ã®å ´åã¯ãã»ã°ã¡ã³ããç ´æ£ããã 1862 * SDU があるか、FIN を未受信の状態で、最初に FIN を受信したとき、 1863 * 受信セグメントキューに net_buf を追加する。 1864 * それ以外の場合は、セグメントを破棄する。 1946 1865 */ 1947 1866 flags = tcph->flags; 1948 if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) && /* tcph->sum 㯠TCP ã® SDU é·*/1867 if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) && /* tcph->sum は TCP の SDU 長 */ 1949 1868 TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) { 1950 1869 flags = reassemble(input, cep, *offp, flags); … … 1956 1875 1957 1876 /* 1958 * FIN ãåä¿¡ãããã³ãã¯ã·ã§ã³ãã¯ãã¼ãºããã1877 * FIN を受信したらコネクションをクローズする。 1959 1878 */ 1960 1879 if (flags & TCP_FLG_FIN) 1961 1880 close_connection(cep, &needoutput); 1962 1881 1963 /* åºåãè¡ã£ãå¾çµäºããã*/1882 /* 出力を行った後終了する。*/ 1964 1883 if (needoutput == true || (cep->flags & TCP_CEP_FLG_ACK_NOW)) { 1965 /* éä¿¡ãæ示ããã*/1884 /* 送信を指示する。*/ 1966 1885 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1967 1886 sig_sem(SEM_TCP_POST_OUTPUT); … … 1972 1891 reset_drop: 1973 1892 /* 1974 * RST éä¿¡å¦ç1893 * RST 送信処理 1975 1894 */ 1976 1895 … … 1978 1897 goto drop; 1979 1898 1980 /* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/1899 /* ホストオーダーからネットワークオーダーに戻す。*/ 1981 1900 1982 1901 HTONS(tcph->sport); … … 1993 1912 else { 1994 1913 if (tcph->flags & TCP_FLG_SYN) 1995 tcph->sum ++; /* tcph->sum 㯠SDU é·*/1914 tcph->sum ++; /* tcph->sum は SDU 長 */ 1996 1915 tcp_respond(input, cep, tcph->seq + tcph->sum, 0, rbfree, TCP_FLG_RST | TCP_FLG_ACK); 1997 1916 } 1998 1917 1999 /* input 㯠tcp_respoond ã§è¿å´ãããã*/1918 /* input は tcp_respoond で返却される。*/ 2000 1919 NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_RSTS], 1); 2001 1920 NET_COUNT_MIB(tcp_stats.tcpOutRsts, 1); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_output.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 127 115 128 116 /* 129 * é¢æ°117 * 関数 130 118 */ 131 119 … … 134 122 135 123 /* 136 * å¤æ°124 * 変数 137 125 */ 138 126 139 /* åºåæã®ãã©ã°ã FSM ç¶æ 140 ã«ããé¸æããããã®è¡¨ */ 127 /* 出力時のフラグを FSM 状態により選択するための表 */ 141 128 142 129 const static uint8_t tcp_outflags[] = { 143 TCP_FLG_RST | TCP_FLG_ACK, /* 0, ã¯ãã¼ãº */ 144 0, /* 1, ååãªã¼ãã³ */ 145 TCP_FLG_SYN, /* 2, è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿ */ 146 TCP_FLG_SYN | TCP_FLG_ACK, /* 3, SYM ãåä¿¡ããSYN éä¿¡æ¸ã¿ */ 147 TCP_FLG_ACK, /* 4, ã³ãã¯ã·ã§ã³éè¨å®äº */ 148 TCP_FLG_ACK, /* 5, FIN åä¿¡ãã¯ãã¼ãºå¾ 149 ã¡ */ 150 TCP_FLG_FIN | TCP_FLG_ACK, /* 6, çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 151 TCP_FLG_FIN | TCP_FLG_ACK, /* 7, çµäºãFIN 交ææ¸ã¿ãACK å¾ 152 ã¡ */ 153 TCP_FLG_FIN | TCP_FLG_ACK, /* 8, FIN åä¿¡ãçµäºãACK å¾ 154 ã¡ */ 155 TCP_FLG_ACK, /* 9, çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 156 ã¡ */ 157 TCP_FLG_ACK, /* 10, çµäºãæéå¾ 158 ã¡ */ 130 TCP_FLG_RST | TCP_FLG_ACK, /* 0, クローズ */ 131 0, /* 1, 受動オープン */ 132 TCP_FLG_SYN, /* 2, 能動オープン、SYN 送信済み */ 133 TCP_FLG_SYN | TCP_FLG_ACK, /* 3, SYM を受信し、SYN 送信済み */ 134 TCP_FLG_ACK, /* 4, コネクション開設完了 */ 135 TCP_FLG_ACK, /* 5, FIN 受信、クローズ待ち */ 136 TCP_FLG_FIN | TCP_FLG_ACK, /* 6, 終了して、FIN 送信済み */ 137 TCP_FLG_FIN | TCP_FLG_ACK, /* 7, 終了、FIN 交換済み、ACK 待ち */ 138 TCP_FLG_FIN | TCP_FLG_ACK, /* 8, FIN 受信、終了、ACK 待ち */ 139 TCP_FLG_ACK, /* 9, 終了、FIN 伝達確認受信、FIN待ち */ 140 TCP_FLG_ACK, /* 10, 終了、時間待ち */ 159 141 }; 160 142 161 143 /* 162 * send_segment -- TCP åºåå¦ç144 * send_segment -- TCP 出力処理 163 145 */ 164 146 … … 190 172 191 173 /* 192 * ã»ã°ã¡ã³ãé·ããç¸æã®æ大åä¿¡ã»ã°ã¡ã³ãé·ã«èª¿æ´ããã 193 * ãããè¶ 194 ãã¦ããå ´åã¯ãè¶ 195 ããåãå¾ã§éä¿¡ããã 196 * ãã®ãããFIN ããããã¯ãªã¢ããã 174 * セグメント長を、相手の最大受信セグメント長に調整する。 175 * もし、超えている場合は、超えた分を後で送信する。 176 * このため、FIN ビットをクリアする。 197 177 * 198 * ãªãªã¸ãã«ã§ã¯ãt_maxopd ãå¶éé·ã«ãã¦ãããã 199 * æ¬å®è£ 200 ã§ã¯ãç¸æã®æ大åä¿¡ã»ã°ã¡ã³ãã«ããã 178 * オリジナルでは、t_maxopd を制限長にしているが、 179 * 本実装では、相手の最大受信セグメントにする。 201 180 */ 202 181 if (len + optlen > cep->maxseg) { … … 207 186 208 187 /* 209 * éä¿¡ãããã¡ã空ã«ãªãã¨ã㯠PUSH ãã©ã°ãè¨å®ããã188 * 送信バッファが空になるときは PUSH フラグを設定する。 210 189 */ 211 190 if (len && doff + len >= cep->swbuf_count) … … 218 197 219 198 /* 220 * éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã221 * ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã199 * 送信ウインドバッファが開放されないようにして、 200 * ネットワークバッファを出力に移す。 222 201 */ 223 202 cep->swbufq->flags |= NB_FLG_NOREL_IFOUT; … … 227 206 228 207 /* 229 * ACK å®äºç¶æ 230 ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã 231 * ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã 208 * ACK 完了状態で、この関数が呼び出されることもある。 209 * この時は、len を 0 にして、処理を継続する。 232 210 */ 233 211 len = 0; … … 256 234 257 235 /* 258 * éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã259 * ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã236 * 送信ウインドバッファが開放されないようにして、 237 * ネットワークバッファを出力に移す。 260 238 */ 261 239 cep->swbufq->flags |= NB_FLG_NOREL_IFOUT; … … 265 243 266 244 /* 267 * ACK å®äºç¶æ 268 ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã 269 * ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã 245 * ACK 完了状態で、この関数が呼び出されることもある。 246 * この時は、len を 0 にして、処理を継続する。 270 247 */ 271 248 len = 0; … … 292 269 293 270 /* 294 * TCP ãªãã·ã§ã³ã®è¨å®ãè¡ãã 295 * æ¬å®è£ 296 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºã®ã¿è¨å®ããã 271 * TCP オプションの設定を行う。 272 * 本実装では、最大セグメントサイズのみ設定する。 297 273 */ 298 274 if (flags & TCP_FLG_SYN) { … … 310 286 } 311 287 312 /* TCP SDU ã«éä¿¡ãã¼ã¿ãã³ãã¼ããã*/288 /* TCP SDU に送信データをコピーする。*/ 313 289 314 290 if (len > 0) { … … 336 312 337 313 /* 338 * snd_max: éä¿¡ããæ大SEQ339 * snd_nxt: 次ã«éä¿¡ããSEQ314 * snd_max: 送信した最大 SEQ 315 * snd_nxt: 次に送信する SEQ 340 316 * 341 * ç¸æãã FIN ãåä¿¡ããã¾ã FIN ãéä¿¡ãã¦ããªããã342 * éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã343 * ã»ã°ã¡ã³ããéä¿¡ããããSEQ ã¯é²ããªãã317 * 相手から FIN を受信し、まだ FIN を送信していないか、 318 * 送るデータがないときは、FIN を相手に届けるため、 319 * セグメントを送信するが、SEQ は進めない。 344 320 */ 345 321 if ((flags & TCP_FLG_FIN) && (cep->flags & TCP_CEP_FLG_SENT_FIN) && … … 351 327 352 328 /* 353 * SEQ ãACKããã©ã°ã®è¨å®ã329 * SEQ、ACK、フラグの設定。 354 330 */ 355 331 if (len > 0 || (flags & (TCP_FLG_SYN | TCP_FLG_FIN)) || cep->timer[TCP_TIM_PERSIST] != 0) … … 359 335 360 336 /* 361 * rcv_nxt: åä¿¡ãæå¾ 362 ãã¦ããæå°ã® SEQ 337 * rcv_nxt: 受信を期待している最小の SEQ 363 338 */ 364 339 tcph->ack = htonl(cep->rcv_nxt); … … 366 341 367 342 /* 368 * åä¿¡ã¦ã£ã³ãã®è¨ç®343 * 受信ウィンドの計算 369 344 * 370 * rbufsz: åä¿¡ç¨ãããã¡ãµã¤ãº371 * maxseg: ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº345 * rbufsz: 受信用バッファサイズ 346 * maxseg: 相手の最大受信セグメントサイズ 372 347 */ 373 348 if (win < (cep->rbufsz / 4) && win < cep->maxseg) … … 375 350 376 351 /* 377 * rcv_nxt: åä¿¡ãæå¾ 378 ãã¦ããæå°ã® SEQ 379 * rcv_adv: åä¿¡ãæå¾ 380 ãã¦ããæ大㮠SEQ 352 * rcv_nxt: 受信を期待している最小の SEQ 353 * rcv_adv: 受信を期待している最大の SEQ 381 354 */ 382 355 if ((int32_t)win < (int32_t)(cep->rcv_adv - cep->rcv_nxt)) … … 388 361 389 362 /* 390 * ç·æ¥ãã¤ã³ã¿ã®è¨å®363 * 緊急ポインタの設定 391 364 */ 392 365 if (SEQ_GT(cep->snd_up, cep->snd_nxt)) { … … 403 376 404 377 /* 405 * ãã§ãã¯ãµã ãè¨å®ããã378 * チェックサムを設定する。 406 379 */ 407 380 tcph->sum = 0; … … 409 382 GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len); 410 383 411 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/384 /* ネットワークバッファ長を調整する。*/ 412 385 output->len = (uint16_t)(GET_IF_IP_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len); 413 386 414 387 /* 415 * ã¿ã¤ãã®èª¿æ´388 * タイマの調整 416 389 */ 417 390 if ((cep->flags & TCP_CEP_FLG_FORCE) == 0 || cep->timer[TCP_TIM_PERSIST] == 0) { … … 419 392 420 393 /* 421 * 次ã«éä¿¡ãã SEQ (snd_nxt) ãä»åéä¿¡ãããã¼ã¿æ°åé²ããã394 * 次に送信する SEQ (snd_nxt) を今回送信するデータ数分進める。 422 395 */ 423 396 if (flags & TCP_FLG_SYN) … … 431 404 432 405 /* 433 * 次ã«éä¿¡ãã SEQ (snd_nxt) ã434 * éä¿¡ããæ大 SEQ (snd_max) ããé²ãã§ããã°ã435 * éä¿¡ããæ大 SEQ (snd_max) ãæ´æ°ããã406 * 次に送信する SEQ (snd_nxt) が 407 * 送信した最大 SEQ (snd_max) より進んでいれば、 408 * 送信した最大 SEQ (snd_max) を更新する。 436 409 */ 437 410 if (SEQ_GT(cep->snd_nxt, cep->snd_max)) { 438 411 cep->snd_max = cep->snd_nxt; 439 412 /* 440 * ãããå¾å¾©æéè¨æ¸¬ãè¡ã£ã¦ããªããã°ã441 * ãã®éä¿¡ã«æéãåãããã413 * もし、往復時間計測を行っていなければ、 414 * この送信に時間を合わせる。 442 415 */ 443 416 if (cep->rtt == 0) { 444 417 cep->rtt = 1; 445 cep->rtseq = startseq; /* æ´æ°åã®cep->snd_nxt */446 } 447 } 448 449 /* 450 * ããè¨å®ããã¦ããªãããACK ã¾ãã¯ä¿çãçºçãã¦ããªããã°ã451 * åéã¿ã¤ããè¨å®ãããè¨å®ããåæå¤ã¯ã452 * ãæ»ãããªå¾å¾©æé + 2 à å¾å¾©æéå¤åãã§ããã453 * åéæéã®ããã¯ãªãã«ä½¿ãããã·ããã«ã¦ã³ããåæåããã418 cep->rtseq = startseq; /* 更新前の cep->snd_nxt */ 419 } 420 } 421 422 /* 423 * もし設定されていないか、ACK または保留が発生していなければ、 424 * 再送タイマを設定する。設定する初期値は、 425 * 「滑らかな往復時間 + 2 × 往復時間変動」である。 426 * 再送時間のバックオフに使われるシフトカウントも初期化する。 454 427 */ 455 428 if (cep->timer[TCP_TIM_REXMT] == 0 && cep->snd_nxt != cep->snd_una) { … … 463 436 464 437 /* 465 * 次ã«éä¿¡ãã SEQ (snd_nxt) + ä»åéä¿¡ãããã¼ã¿æ° (len) ã466 * éä¿¡ããæ大 SEQ (snd_max) ããé²ãã§ããã°ã467 * éä¿¡ããæ大 SEQ (snd_max) ãæ´æ°ããã438 * 次に送信する SEQ (snd_nxt) + 今回送信するデータ数 (len) が 439 * 送信した最大 SEQ (snd_max) より進んでいれば、 440 * 送信した最大 SEQ (snd_max) を更新する。 468 441 */ 469 442 else if (SEQ_GT(cep->snd_nxt + len, cep->snd_max)) … … 483 456 #endif /* of #ifdef TCP_CFG_TRACE */ 484 457 485 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/458 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 486 459 if ((error = IP_OUTPUT(output, TMO_TCP_OUTPUT)) != E_OK) 487 460 goto err_ret; 488 461 489 462 /* 490 * ç¸æã«ä¼ããã¦ã£ã³ãã¦ãµã¤ãº (win) ã 0 以ä¸ã§ã 491 * åä¿¡ãæå¾ 492 ãã¦ããæå°ã® SEQ (rcv_nxt) + win ã 493 * åä¿¡ãæå¾ 494 ãã¦ããæ大㮠SEQ (rcv_adv) ããé²ãã§ããã° 495 * åä¿¡ãæå¾ 496 ãã¦ããæ大㮠SEQ ãæ´æ°ããã 463 * 相手に伝えたウィンドウサイズ (win) が 0 以上で、 464 * 受信を期待している最小の SEQ (rcv_nxt) + win が 465 * 受信を期待している最大の SEQ (rcv_adv) より進んでいれば 466 * 受信を期待している最大の SEQ を更新する。 497 467 */ 498 468 if (win > 0 && SEQ_GT(cep->rcv_nxt + win, cep->rcv_adv)) { … … 501 471 502 472 /* 503 * æå¾ã«éä¿¡ãã ACK (last_ack_sent) ãæ´æ°ããã473 * 最後に送信した ACK (last_ack_sent) を更新する。 504 474 */ 505 475 cep->last_ack_sent = cep->rcv_nxt; 506 476 507 477 /* 508 * ãã©ã°ã®è¨å®ãè¡ãã478 * フラグの設定を行う。 509 479 */ 510 480 cep->flags &= ~(TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_DEL_ACK); … … 516 486 err_ret: 517 487 /* 518 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã519 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½520 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½488 * 以下に関係しないフラグをクリアーする。 489 * ・送受信ウィンドバッファの省コピー機能 490 * ・動的な通信端点の生成・削除機能 521 491 */ 522 492 cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK | … … 527 497 528 498 /* 529 * tcp_output -- TCP åºåå¦ç499 * tcp_output -- TCP 出力処理 530 500 */ 531 501 … … 540 510 541 511 /* 542 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ543 * snd_max: éä¿¡ããæ大SEQ512 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 513 * snd_max: 送信した最大 SEQ 544 514 */ 545 515 idle = (cep->snd_max == cep->snd_una); 546 516 547 517 /* 548 * idle: ã¢ã¤ãã«æé549 * rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã518 * idle: アイドル時間 519 * rxtcur: 現在の再送タイムアウト 550 520 */ 551 521 if (idle && cep->idle >= cep->rxtcur) 552 522 553 523 /* 554 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº555 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº524 * snd_cwnd: 輻輳ウィンドサイズ 525 * maxseg : 相手の最大受信セグメントサイズ 556 526 * 557 * é·æéã¢ã¤ãã«ã ã£ãã®ã§ã¹ãã¼ã¹ã¿ã¼ãå¶å¾¡ã«è¨å®ããã527 * 長時間アイドルだったのでスロースタート制御に設定する。 558 528 */ 559 529 cep->snd_cwnd = cep->maxseg; … … 563 533 564 534 /* 565 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ566 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæ大éä¿¡SEQ535 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 536 * snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ 567 537 * 568 * doff: éä¿¡ãéå§ãããªãã»ããã569 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)538 * doff: 送信を開始するオフセット。 539 * swbuf_count (送信バッファにあるオクテット数) 570 540 * 0 V 571 541 * +-------------------------------------------+ … … 573 543 * +-------------------------------------------+ 574 544 * ^ ^ 575 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)545 * |<------------->snd_nxt (前回送信した SEQ) 576 546 * | doff 577 * snd_una ( ã¾ã 確èªããã¦ããªã)547 * snd_una (まだ確認されていない) 578 548 */ 579 549 doff = (uint_t)(cep->snd_nxt - cep->snd_una); 580 550 581 551 /* 582 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº583 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº552 * snd_wnd: 相手の受信可能ウィンドサイズ 553 * snd_cwnd: 輻輳ウィンドサイズ 584 554 * 585 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã555 * win: どちらか小さいウィンドサイズに設定する。 586 556 */ 587 557 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; 588 558 589 /* åºåãã©ã°ã®è¨å®*/559 /* 出力フラグの設定 */ 590 560 flags = tcp_outflags[cep->fsm_state]; 591 561 if (cep->flags & TCP_CEP_FLG_NEED_FIN) … … 596 566 597 567 /* 598 * ãããéä¿¡ã¦ã¤ã³ããµã¤ãº (win) ã 0 ãªã 1 ãªã¯ãããéä¿¡ããã599 * ããã§ãªããã°ãæç¶ã¿ã¤ã ã¢ã¦ãããã£ã³ã»ã«ãã600 * åéä¿¡åæ° (rxtshift) ã 0 ã«ããã568 * もし、送信ウインドサイズ (win) が 0 なら 1 オクテット送信する。 569 * そうでなければ、持続タイムアウトをキャンセルし、 570 * 再送信回数 (rxtshift) を 0 にする。 601 571 */ 602 572 if (win == 0) { 603 573 604 574 /* 605 * doff: éä¿¡ãããªã¯ãããæ°ã606 * swbuf_count: éä¿¡ãããã¡ã®ä½¿ç¨ä¸ãµã¤ãº575 * doff: 送信するオクテット数。 576 * swbuf_count: 送信バッファの使用中サイズ 607 577 * 608 * éä¿¡ãããã¡ã«æ®ã£ã¦ãããªã¯ããããããããã609 * éä¿¡ãããã¨ãã¦ãããªã¯ãããæ°ããå¤ããã°610 * FIN ãã©ã°ãã¯ãªã¢ããã578 * 送信バッファに残っているオクテットが、これから 579 * 送信しようとしているオクテット数より多ければ 580 * FIN フラグをクリアする。 611 581 */ 612 582 if (doff < cep->swbuf_count) … … 616 586 else { 617 587 /* 618 * TCP_TIM_PERSIST: æç¶ã¿ã¤ã619 * rxtshift: åéä¿¡åæ°ã®log(2)588 * TCP_TIM_PERSIST: 持続タイマ 589 * rxtshift: 再送信回数の log(2) 620 590 */ 621 591 cep->timer[TCP_TIM_PERSIST] = 0; … … 625 595 626 596 /* 627 * len: ä»åéä¿¡ãããªã¯ãããæ°628 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)597 * len: 今回送信するオクテット数 598 * swbuf_count (送信バッファにあるオクテット数) 629 599 * | 630 600 * 0 V … … 634 604 * ^ ^<-------------> 635 605 * | | len 636 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)606 * |<------------->snd_nxt (前回送信した SEQ) 637 607 * | doff 638 * snd_una ( ã¾ã 確èªããã¦ããªã)608 * snd_una (まだ確認されていない) 639 609 */ 640 610 if (cep->swbuf_count < win) … … 644 614 645 615 /* 646 * ãã§ã«éä¿¡ããã¦ããã°ãSYN ãããããªãããã647 * ãããã以ä¸ã®æ¡ä»¶ã§ã¯éä¿¡ãæ§ããã616 * すでに送信されていれば、SYN ビットをオフする。 617 * しかし、以下の条件では送信を控える。 648 618 * 649 * ã»ç¶æ 650 ã SYN éä¿¡ã 651 * ã»ã»ã°ã¡ã³ãããã¼ã¿ãå«ãã§ããã 619 * ・状態が SYN 送信。 620 * ・セグメントがデータを含んでいる。 652 621 */ 653 622 if ((flags & TCP_FLG_SYN) && SEQ_GT(cep->snd_nxt, cep->snd_una)) { 654 623 flags &= ~TCP_FLG_SYN; 655 doff --; /* -1 㯠SYN ãã©ã°å*/656 len ++; /* +1 㯠SYN ãã©ã°å*/624 doff --; /* -1 は SYN フラグ分 */ 625 len ++; /* +1 は SYN フラグ分 */ 657 626 if (len > 0 && cep->fsm_state == TCP_FSM_SYN_SENT) 658 627 break; … … 667 636 668 637 /* 669 * len ã 0 以ä¸ãªãã0 ã«è¨å®ããã670 * ãããéä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ãªãã671 * åéä¿¡ã¿ã¤ãããã£ã³ã»ã«ãã672 * ååéä¿¡ãã SEQ (snd_nxt) ã673 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã«æ»ãã674 * ããã¦ãæç¶ã¿ã¤ãã¼ãæ¢ã¾ã£ã¦ããã°ãåè¨å®ããã638 * len が 0 以下なら、0 に設定する。 639 * もし、送信ウィンドウサイズが 0 なら、 640 * 再送信タイマをキャンセルし、 641 * 前回送信した SEQ (snd_nxt) を 642 * 確認された最大送信 SEQ (snd_una) に戻す。 643 * そして、持続タイマーが止まっていれば、再設定する。 675 644 */ 676 645 len = 0; … … 686 655 687 656 /* 688 * ä»åéä¿¡ãããªã¯ãããæ° (len) ã¯ã 689 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 690 ããªãããã«ããã 657 * 今回送信するオクテット数 (len) は、 658 * 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。 691 659 */ 692 660 if (len > cep->maxseg) { … … 696 664 697 665 /* 698 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)666 * swbuf_count (送信バッファにあるオクテット数) 699 667 * | 700 668 * 0 V … … 704 672 * ^ ^<-------------> 705 673 * | | len 706 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)674 * |<------------->snd_nxt (前回送信した SEQ) 707 675 * | doff 708 * snd_una ( ã¾ã 確èªããã¦ããªã)676 * snd_una (まだ確認されていない) 709 677 * 710 * ä»åéä¿¡å¾ããéä¿¡ãããã¡ã«ãã¼ã¿ãæ®ã£ã¦ããã°711 * FIN ãã©ã°ãã¯ãªã¢ããã678 * 今回送信後も、送信バッファにデータが残っていれば 679 * FIN フラグをクリアする。 712 680 */ 713 681 if (SEQ_LT(cep->snd_nxt + len, cep->snd_una + cep->swbuf_count)) … … 715 683 716 684 /* 717 * ãããã win ã¯ãåä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã718 * åä¿¡ãããã¡ã®ç©ºã容é685 * ここから win は、受信ウィンドウサイズ。 686 * 受信バッファの空き容量 719 687 */ 720 688 win = cep->rbufsz - cep->rwbuf_count; 721 689 722 690 /* 723 * æããªã¦ã£ã³ãã¦ã»ã·ã³ããã¼ã ã®åé¿å¦ç (éä¿¡å´)691 * 愚かなウィンドウ・シンドロームの回避処理 (送信側) 724 692 * 725 * 以ä¸ã®æ¡ä»¶ã§ãéä¿¡ãè¡ãã693 * 以下の条件で、送信を行う。 726 694 * 727 * ã»ãã«ãµã¤ãº (maxseg) ã®ã»ã°ã¡ã³ããéããã¨ãã§ããã 728 * ã»ç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 ã®ãã¼ã¿ã 729 * éããã¨ãã§ããã 730 * ã»éä¿¡ãããã¡ã空ã«ã§ããã¢ã¤ãã«ãéé 731 延ãªãã·ã§ã³ãæå¹ãªã¨ãã 695 * ・フルサイズ (maxseg) のセグメントを送ることができる。 696 * ・相手の最大の受信ウィンドウサイズの 1/2 のデータを 697 * 送ることができる。 698 * ・送信バッファを空にでき、アイドルか非遅延オプションが有効なとき。 732 699 */ 733 700 if (len) { 734 701 735 702 /* 736 * ä»åéä¿¡ãããªã¯ãããæ° (len) ã737 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã«738 * ä¸è´ããã¨ãã¯éä¿¡ããã703 * 今回送信するオクテット数 (len) が 704 * 相手の最大受信セグメントサイズ (maxseg) に 705 * 一致するときは送信する。 739 706 */ 740 707 if (len == cep->maxseg) { … … 744 711 745 712 /* 746 * ä»åã®éä¿¡ã§ãéä¿¡ãããã¡ã空ã«ã§ãã747 * ã¢ã¤ãã«ãé PUSH ãªãã·ã§ã³ãæå¹ãªã¨ãã713 * 今回の送信で、送信バッファを空にでき、 714 * アイドルか非 PUSH オプションが有効なとき。 748 715 */ 749 716 if ((idle || (cep->flags & TCP_CEP_FLG_NO_DELAY)) && … … 755 722 756 723 /* 757 * max_sndwnd: ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº758 * snd_nxt: 次ã«éä¿¡ããSEQ759 * snd_max: éä¿¡ããæ大SEQ724 * max_sndwnd: 今までの最大送信ウィンドサイズ 725 * snd_nxt: 次に送信する SEQ 726 * snd_max: 送信した最大 SEQ 760 727 * 761 * 次ã®æ¡ä»¶ã§ã¯éä¿¡ãè¡ãã728 * 次の条件では送信を行う。 762 729 * 763 * ã»å¼·å¶éä¿¡ãã©ã°ãã»ããããã¦ããã764 * ã»ãã¼ã¿é·ãç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 以ä¸ã§ã765 * ç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ãã大ããã766 * ã»æ¬¡ã«éä¿¡ãã SEQ ãéä¿¡ããæ大 SEQ ããå°ããã767 * ã¤ã¾ããåéããã¨ãã730 * ・強制送信フラグがセットされている。 731 * ・データ長が相手の最大の受信ウィンドウサイズの 1/2 以上で、 732 * 相手の最大の受信ウィンドウサイズが 0 より大きい。 733 * ・次に送信する SEQ が送信した最大 SEQ より小さい、 734 * つまり、再送するとき。 768 735 */ 769 736 if ((cep->flags & TCP_CEP_FLG_FORCE) || … … 777 744 778 745 /* 779 * æããªã¦ã£ã³ãã¦ã»ã·ã³ããã¼ã ã®åé¿å¦ç (åä¿¡å´)746 * 愚かなウィンドウ・シンドロームの回避処理 (受信側) 780 747 * 781 * ã¦ã£ã³ãã¦ãµã¤ãºããã«ãµã¤ãºã® 2 åã®ã»ã°ã¡ã³ãããããã¯782 * åä¿¡ãããã¡å®¹éã® 1/2 ã®ãããããå°ããã»ãã®783 * ãµã¤ãºã§å¢å ãããå ´åã¯ãã¦ã£ã³ãã¦ãµã¤ãºã®æ´æ°ãè¡ãã748 * ウィンドウサイズがフルサイズの 2 倍のセグメント、あるいは 749 * 受信バッファ容量の 1/2 の、いずれか小さいほうの 750 * サイズで増加される場合は、ウィンドウサイズの更新を行う。 784 751 */ 785 752 if (win > 0) { … … 787 754 788 755 /* 789 * win: åä¿¡ãããã¡ã®ç©ºã容é 790 * MAX_TCP_WIN_SIZE: TCP ãããã® win ãã£ã¼ã«ãã«è¨å®ã§ããæå¤§å¤ 791 * rcv_adv: åä¿¡ãæå¾ 792 ãã¦ããæ大㮠SEQ 793 * rcv_nxt: åä¿¡ãæå¾ 794 ãã¦ããæå°ã® SEQ 756 * win: 受信バッファの空き容量 757 * MAX_TCP_WIN_SIZE: TCP ヘッダの win フィールドに設定できる最大値 758 * rcv_adv: 受信を期待している最大の SEQ 759 * rcv_nxt: 受信を期待している最小の SEQ 795 760 */ 796 761 if (win < MAX_TCP_WIN_SIZE) … … 807 772 808 773 /* 809 * ACK ãéä¿¡ããã774 * ACK を送信する。 810 775 */ 811 776 if (cep->flags & TCP_CEP_FLG_ACK_NOW) { … … 830 795 831 796 /* 832 * snd_nxt: 次ã«éä¿¡ããSEQ833 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæ大éä¿¡SEQ797 * snd_nxt: 次に送信する SEQ 798 * snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ 834 799 * 835 * ç¸æãã FIN ãåä¿¡ããã¾ã FIN ãéä¿¡ãã¦ããªããã836 * éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã837 * ã»ã°ã¡ã³ããéä¿¡ããã800 * 相手から FIN を受信し、まだ FIN を送信していないか、 801 * 送るデータがないときは、FIN を相手に届けるため、 802 * セグメントを送信する。 838 803 */ 839 804 if ((flags & TCP_FLG_FIN) && … … 844 809 845 810 /* 846 * éä¿¡ãã¹ããã¼ã¿ããããåéã¿ã¤ãã¨æç¶ã¿ã¤ããåãã¦ããã¨ãã¯847 * æç¶ã¿ã¤ããè¨å®ããã811 * 送信すべきデータがあり、再送タイマと持続タイマが切れているときは 812 * 持続タイマを設定する。 848 813 */ 849 814 if (cep->swbuf_count && cep->timer[TCP_TIM_REXMT ] == 0 && … … 860 825 861 826 /* 862 * tcptsk_alloc_swbufq -- éä¿¡ã¦ã£ã³ããããã¡å²ãå½ã¦827 * tcptsk_alloc_swbufq -- 送信ウィンドバッファ割り当て 863 828 */ 864 829 … … 870 835 871 836 /* 872 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº873 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº837 * snd_wnd: 相手の受信可能ウィンドサイズ 838 * snd_cwnd: 輻輳ウィンドサイズ 874 839 * 875 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã840 * win: どちらか小さいウィンドサイズに設定する。 876 841 */ 877 842 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; 878 843 879 844 /* 880 * ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾ 881 æ©ããã 845 * 相手の受信ウィンドが閉じている場合は、開くまで待機する。 882 846 */ 883 847 if (win == 0) { … … 888 852 #ifdef TCP_CFG_NON_BLOCKING 889 853 890 /* ãã³ããããã³ã°ã³ã¼ã«*/854 /* ノンブロッキングコール */ 891 855 if (!IS_PTR_DEFINED(cep->callback)) { 892 856 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 893 857 894 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/858 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 895 859 cep->snd_tskid = TA_NULL; 896 860 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 907 871 (GET_TCP_CEPID(cep) & NBA_ID_MASK)), TMO_POL)) != E_OK) { 908 872 909 /* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/873 /* ネットワークバッファを予約する。*/ 910 874 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_PEND; 911 875 } 912 876 else { 913 877 914 /* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/878 /* 送信ウィンドバッファを初期化する。*/ 915 879 tcp_init_swbuf(cep); 916 880 … … 921 885 uint_t len; 922 886 923 /* éä¿¡ã¦ã£ã³ããããã¡ã®æ¸ãè¾¼ã¿ã¢ãã¬ã¹ãè¨å®ããã*/887 /* 送信ウィンドバッファの書き込みアドレスを設定する。*/ 924 888 len = TCP_GET_SWBUF_ADDR(cep, cep->snd_p_buf); 925 889 926 890 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 927 891 928 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/892 /* コールバック関数を呼び出す。*/ 929 893 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len); 930 894 931 895 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 932 896 933 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/897 /* コールバック関数を呼び出す。*/ 934 898 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len); 935 899 … … 937 901 938 902 939 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/903 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 940 904 cep->snd_tskid = TA_NULL; 941 905 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 947 911 uint_t len; 948 912 949 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/913 /* 送信ウィンドバッファにデータを書き込む。*/ 950 914 len = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len); 951 915 952 916 #ifdef TCP_CFG_EXTENTIONS 953 917 954 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/918 /* 送信緊急ポインタを設定する。*/ 955 919 if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB) 956 920 cep->snd_up = cep->snd_una + len; … … 958 922 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 959 923 960 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããå¼·å¶çã«éä¿¡ããã*/924 /* フラグを、送信可能に設定し、強制的に送信する。*/ 961 925 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR | TCP_CEP_FLG_POST_OUTPUT; 962 926 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 963 927 964 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/928 /* コールバック関数を呼び出す。*/ 965 929 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len); 966 930 967 931 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 968 932 969 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/933 /* コールバック関数を呼び出す。*/ 970 934 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len); 971 935 … … 973 937 974 938 975 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/939 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 976 940 cep->snd_tskid = TA_NULL; 977 941 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 985 949 986 950 /* 987 * tcptsk_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡éæ¾951 * tcptsk_free_swbufq -- 送信ウィンドバッファ開放 988 952 */ 989 953 … … 992 956 { 993 957 /* 994 * å信確èªãå®äºãããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããã®995 * åºåãå®äºããã¨ãã¯ãéä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã996 */ 997 998 /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/958 * 受信確認が完了し、ネットワークインタフェースからの 959 * 出力も完了したときは、送信ウィンドバッファキューを解放する。 960 */ 961 962 /* 送信ウィンドバッファの使用中サイズをリセットする。*/ 999 963 cep->swbuf_count = 0; 1000 964 1001 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/965 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 1002 966 syscall(rel_net_buf(cep->swbufq)); 1003 967 cep->swbufq = NULL; 1004 968 1005 /* ãã©ã°ã空ãã«è¨å®ããã*/969 /* フラグを空きに設定する。*/ 1006 970 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_FREE; 1007 971 1008 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/972 /* 送信ウィンドバッファに空きができたことを知らせる。*/ 1009 973 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 1010 974 1011 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾ 1012 ã¡ã®ã¨ãã¯ãTCP åºåã¿ã¹ã¯ãèµ·åããã*/ 975 /* 送信ウィンドバッファの空き待ちのときは、TCP 出力タスクを起動する。*/ 1013 976 if ((cep->flags & TCP_CEP_FLG_WBCS_NBUF_REQ) != 0) { 1014 977 sig_sem(SEM_TCP_POST_OUTPUT); … … 1019 982 1020 983 /* 1021 * TCP åºåã¿ã¹ã¯984 * TCP 出力タスク 1022 985 */ 1023 986 … … 1038 1001 #ifdef SUPPORT_INET6 1039 1002 1040 /* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®ãå®è¡ããã*/1003 /* IPv6 のステートレス・アドレス自動設定を実行する。*/ 1041 1004 in6_if_up(IF_GET_IFNET()); 1042 1005 … … 1045 1008 while (true) { 1046 1009 1047 /* åºåããã¹ããããã¾ã§å¾ 1048 ã¤ã*/ 1010 /* 出力がポストされるまで待つ。*/ 1049 1011 syscall(wai_sem(SEM_TCP_POST_OUTPUT)); 1050 1012 … … 1071 1033 1072 1034 /* 1073 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµãã£ã¦ããªãã¨ãã¯ã1074 * éä¿¡ãäºç´ããã1035 * ネットワークインタフェースから送信が終わっていないときは、 1036 * 送信を予約する。 1075 1037 */ 1076 1038 if (cep->flags & TCP_CEP_FLG_POST_OUTPUT && … … 1087 1049 1088 1050 /* 1089 * éä¿¡äºç´ä¸ã«ããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµäºãããã 1090 * éä¿¡ãéå§ããããã ããå®å 1091 ¨ã«éä¿¡ãçµäºããã¨ãã¯ä½ãããªãã 1051 * 送信予約中に、ネットワークインタフェースから送信が終了したら、 1052 * 送信を開始する。ただし、完全に送信が終了したときは何もしない。 1092 1053 */ 1093 1054 if (cep->flags & TCP_CEP_FLG_RESERVE_OUTPUT) { … … 1112 1073 1113 1074 /* 1114 * tcp_con_cep ã®ãã³ããããã³ã°ã³ã¼ã«ã§ã1115 * æªå²å½ã®ã®å ´åã¯ããã¼ãçªå·ãå²ãå½ã¦ãã1116 * p_myaddr ã NADR (-1) ãã1117 * èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã1075 * tcp_con_cep のノンブロッキングコールで、 1076 * 未割当のの場合は、ポート番号を割り当てる。 1077 * p_myaddr が NADR (-1) か、 1078 * 自ポート番号が TCP_PORTANY なら、自動で割り当てる。 1118 1079 */ 1119 1080 if (cep->p_myaddr == NADR || cep->p_myaddr->portno == TCP_PORTANY) … … 1136 1097 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 1137 1098 1138 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1099 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1139 1100 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; 1140 1101 cep->snd_tskid = TA_NULL; … … 1148 1109 1149 1110 if (cep->flags & TCP_CEP_FLG_CLOSE_AFTER_OUTPUT) { 1150 /* ã³ãã¯ã·ã§ã³ãéããã*/1111 /* コネクションを閉じる。*/ 1151 1112 tcp_close(cep); 1152 1113 cep->flags &= ~TCP_CEP_FLG_CLOSE_AFTER_OUTPUT; … … 1154 1115 1155 1116 if (cep->flags & TCP_CEP_FLG_RESTORE_NEXT_OUTPUT) { 1156 /* snd_nxt ãå 1157 ã«æ»ãã*/ 1117 /* snd_nxt を元に戻す。*/ 1158 1118 if (SEQ_GT(cep->snd_old_nxt, cep->snd_nxt)) 1159 1119 cep->snd_nxt = cep->snd_old_nxt; … … 1168 1128 } while (ix != last_ix); 1169 1129 1170 /* 次åã¯ãå¦çããé信端ç¹ãå¾åãã«ããã*/1130 /* 次回は、処理した通信端点を後回しにする。*/ 1171 1131 last_ix = sel_ix; 1172 1132 } -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_seq.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * SEQ 㨠ACK çªå·ã¯ã32 ããã符å·ä»æ´æ°ã§æ¯è¼ããã74 * SEQ と ACK 番号は、32 ビット符号付整数で比較する。 87 75 */ 88 76 … … 93 81 94 82 /* 95 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã83 * 関数シミュレーションマクロ 96 84 */ 97 85 … … 99 87 100 88 /* 101 * å 102 ¨åå¤æ° 89 * 全域変数 103 90 */ 104 91 105 extern T_TCP_SEQ tcp_iss; /* TCP ã® SEQ ã®åæå¤*/92 extern T_TCP_SEQ tcp_iss; /* TCP の SEQ の初期値 */ 106 93 107 94 /* 108 * ã¤ã³ã©ã¤ã³é¢æ°95 * インライン関数 109 96 */ 110 97 111 98 /* 112 * init_receive_seq -- åä¿¡ SEQ çªå·ãåæåããã99 * init_receive_seq -- 受信 SEQ 番号を初期化する。 113 100 */ 114 101 … … 120 107 121 108 /* 122 * init_send_seq -- éä¿¡ SEQ çªå·ãåæåããã109 * init_send_seq -- 送信 SEQ 番号を初期化する。 123 110 */ 124 111 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 135 123 136 124 /* 137 * å 138 ¨åå¤æ° 139 */ 140 141 /* 142 * TCP ã® SEQ ã®åæå¤ãããã°ã©ã ãèµ·åãã¦ãæåã« TCP ã»ã°ã¡ã³ãã 143 * éåä¿¡ããã¨ãã«ãget_tim() ã«ããåæåããã 125 * 全域変数 126 */ 127 128 /* 129 * TCP の SEQ の初期値、プログラムが起動して、最初に TCP セグメントを 130 * 送受信するときに、get_tim() により初期化する。 144 131 */ 145 132 T_TCP_SEQ tcp_iss = 0; … … 148 135 149 136 /* 150 * SNMP 㮠管çæ 151 å ±ãã¼ã¹ (MIB) 137 * SNMP の 管理情報ベース (MIB) 152 138 */ 153 139 … … 157 143 158 144 /* 159 * å±æå¤æ°160 */ 161 162 static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO; /* èªåå²ãå½ã¦çªå·*/163 164 /* 165 * tcp_free_reassq -- åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã145 * 局所変数 146 */ 147 148 static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO; /* 自動割り当て番号 */ 149 150 /* 151 * tcp_free_reassq -- 受信再構成キューのネットワークバッファを解放する。 166 152 * 167 * 注æ: 168 * å¿ 169 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 170 * æ»ã£ãå¾ã解é¤ããå¿ 171 è¦ãããã 153 * 注意: 154 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 155 * 戻った後、解除する必要がある。 172 156 */ 173 157 … … 186 170 187 171 /* 188 * tcp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨å®ããã172 * tcp_alloc_auto_port -- 自動割り当てポート番号を設定する。 189 173 */ 190 174 … … 245 229 246 230 /* 247 * tcp_alloc_port -- æå®ããããã¼ãçªå·ãè¨å®ããã231 * tcp_alloc_port -- 指定されたポート番号を設定する。 248 232 */ 249 233 … … 265 249 266 250 /* 267 * tcp_init -- TCP ã¢ã¸ã¥ã¼ã«ã®åæå251 * tcp_init -- TCP モジュールの初期化 268 252 */ 269 253 … … 281 265 282 266 /* 283 * tcp_init_iss ã·ã¼ã±ã³ã¹çªå·ãåæåããã267 * tcp_init_iss シーケンス番号を初期化する。 284 268 */ 285 269 … … 311 295 312 296 /* 313 * tcp_close -- ã³ãã¯ã·ã§ã³ãéæ¾ããã297 * tcp_close -- コネクションを開放する。 314 298 */ 315 299 … … 317 301 tcp_close (T_TCP_CEP *cep) 318 302 { 319 /* ã¿ã¤ãã¼ãåæ¢ããã*/303 /* タイマーを停止する。*/ 320 304 tcp_cancel_timers(cep); 321 305 322 306 /* 323 * é信端ç¹ãããã¯ãã324 * åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã307 * 通信端点をロックし、 308 * 受信再構成キューのネットワークバッファを解放する。 325 309 */ 326 310 syscall(wai_sem(cep->semid_lock)); … … 328 312 syscall(sig_sem(cep->semid_lock)); 329 313 330 /* ç¶æ 331 ãæªä½¿ç¨ã«ããã*/ 314 /* 状態を未使用にする。*/ 332 315 cep->fsm_state = TCP_FSM_CLOSED; 333 316 334 317 /* 335 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã336 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½337 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½318 * 以下に関係しないフラグをクリアーする。 319 * ・送受信ウィンドバッファの省コピー機能 320 * ・動的な通信端点の生成・削除機能 338 321 */ 339 322 cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK | … … 343 326 344 327 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF || cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { 345 /* ãã³ããããã³ã°ã³ã¼ã«*/328 /* ノンブロッキングコール */ 346 329 347 330 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 … … 356 339 357 340 case TFN_TCP_ACP_CEP: 358 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/341 /* TCP 通信端点からTCP 受付口を解放する。*/ 359 342 cep->rep = NULL; 360 343 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)E_CLS); … … 363 346 case TFN_TCP_RCV_BUF: 364 347 365 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/348 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 366 349 len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf); 367 350 368 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/351 /* 異常切断等のエラーを設定する。*/ 369 352 if (cep->error == E_TMOUT) 370 353 len = E_CLS; … … 377 360 case TFN_TCP_RCV_DAT: 378 361 379 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/362 /* 受信ウィンドバッファからデータを取り出す。*/ 380 363 len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len); 381 364 382 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/365 /* 異常切断等のエラーを設定する。*/ 383 366 if (cep->error == E_TMOUT) 384 367 len = E_CLS; … … 402 385 } 403 386 404 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/387 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 405 388 cep->rcv_tskid = TA_NULL; 406 389 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 412 395 413 396 case TFN_TCP_CON_CEP: 414 /* TCP é信端ç¹ãã TCP åä»å£ã解æ¾ããã*/397 /* TCP 通信端点から TCP 受付口を解放する。*/ 415 398 cep->rep = NULL; 416 399 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)E_CLS); … … 430 413 } 431 414 432 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/415 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 433 416 cep->snd_tskid = TA_NULL; 434 417 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 448 431 449 432 case TFN_TCP_ACP_CEP: 450 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/433 /* TCP 通信端点からTCP 受付口を解放する。*/ 451 434 cep->rep = NULL; 452 435 len = E_CLS; … … 456 439 case TFN_TCP_RCV_BUF: 457 440 458 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/441 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 459 442 len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf); 460 443 461 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/444 /* 異常切断等のエラーを設定する。*/ 462 445 if (cep->error == E_TMOUT) 463 446 len = E_CLS; … … 470 453 case TFN_TCP_RCV_DAT: 471 454 472 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/455 /* 受信ウィンドバッファからデータを取り出す。*/ 473 456 len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len); 474 457 475 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/458 /* 異常切断等のエラーを設定する。*/ 476 459 if (cep->error == E_TMOUT) 477 460 len = E_CLS; … … 495 478 } 496 479 497 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/480 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 498 481 cep->rcv_tskid = TA_NULL; 499 482 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 506 489 507 490 case TFN_TCP_CON_CEP: 508 /* TCP é信端ç¹ãã TCP åä»å£ã解æ¾ããã*/491 /* TCP 通信端点から TCP 受付口を解放する。*/ 509 492 cep->rep = NULL; 510 493 len = E_CLS; … … 526 509 } 527 510 528 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/511 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 529 512 cep->snd_tskid = TA_NULL; 530 513 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 536 519 537 520 /* 538 * é信端ç¹ãããã¯ãã539 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã521 * 通信端点をロックし、 522 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 540 523 */ 541 524 syscall(wai_sem(cep->semid_lock)); … … 544 527 syscall(sig_sem(cep->semid_lock)); 545 528 546 /* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/529 /* 未使用になったことを知らせる。*/ 547 530 syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED)); 548 531 } 549 else { /* éãã³ããããã³ã°ã³ã¼ã«*/532 else { /* 非ノンブロッキングコール */ 550 533 551 534 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 552 535 553 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/536 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 554 537 cep->snd_tskid = cep->rcv_tskid = TA_NULL; 555 538 cep->snd_tfn = cep->rcv_tfn = TFN_TCP_UNDEF; 556 539 557 540 /* 558 * é信端ç¹ãããã¯ãã559 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã541 * 通信端点をロックし、 542 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 560 543 */ 561 544 syscall(wai_sem(cep->semid_lock)); … … 564 547 syscall(sig_sem(cep->semid_lock)); 565 548 566 /* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/549 /* 未使用になったことを知らせる。*/ 567 550 syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED)); 568 551 569 552 /* 570 * å 571 ¥åºåã¿ã¹ã¯ãèµ·åºãã¦ã 572 * éåä¿¡ä¸å¯ã«ãªã£ããã¨ãç¥ãããã 553 * 入出力タスクを起床して、 554 * 送受信不可になったことを知らせる。 573 555 */ 574 556 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 585 567 586 568 /* 587 * tcp_drop -- TCP æ¥ç¶ãç ´æ£ããã569 * tcp_drop -- TCP 接続を破棄する。 588 570 */ 589 571 … … 603 585 cep->fsm_state = TCP_FSM_CLOSED; 604 586 605 /* éä¿¡ã¨ãéä¿¡å¾ã³ãã¯ã·ã§ã³ã®åæãæ示ããã*/587 /* 送信と、送信後コネクションの切断を指示する。*/ 606 588 cep->flags |= TCP_CEP_FLG_POST_OUTPUT | TCP_CEP_FLG_CLOSE_AFTER_OUTPUT; 607 589 sig_sem(SEM_TCP_POST_OUTPUT); … … 613 595 614 596 /* 615 * tcp_respond -- TCP ã®åä¸ã¡ãã»ã¼ã¸ãéä¿¡ããã597 * tcp_respond -- TCP の単一メッセージを送信する。 616 598 */ 617 599 … … 628 610 629 611 /* 630 * output ã NULL ã§ãªããã°ãããã¯å 631 ¥åããã»ã°ã¡ã³ãã® 632 * net_buf ã§ããã®ã¾ã¾åå©ç¨ããã 612 * output が NULL でなければ、これは入力したセグメントの 613 * net_buf で、そのまま再利用する。 633 614 */ 634 615 if (output != NULL) { … … 637 618 638 619 /* 639 * IPv4 ã§ã¯ãIP ãããã®ãªãã·ã§ã³ãåé¤ããã640 * IPv6 ã§ã¯ãæ¡å¼µããããåé¤ããã620 * IPv4 では、IP ヘッダのオプションを削除する。 621 * IPv6 では、拡張ヘッダを削除する。 641 622 */ 642 623 if (IP_REMOVE_OPTIONS(output) != E_OK) { … … 647 628 iph = GET_IP_HDR(output); 648 629 649 /* IP ã¢ãã¬ã¹ã交æããã*/630 /* IP アドレスを交換する。*/ 650 631 ipaddr = iph->src; 651 632 iph->src = iph->dst; … … 654 635 #if defined(SUPPORT_INET6) 655 636 656 /* ãã©ããã¯ã¯ã©ã¹ã¨ããã¼ã©ãã«ãã¯ãªã¢ããã*/637 /* トラヒッククラスとフローラベルをクリアする。*/ 657 638 iph->vcf = htonl(IP6_MAKE_VCF(IP6_VCF_V(ntohl(iph->vcf)), 0)); 658 639 659 640 #endif /* of #if defined(SUPPORT_INET6) */ 660 641 661 /* TCP SDU é·ã 0 ã«ããã*/642 /* TCP SDU 長を 0 にする。*/ 662 643 SET_IP_SDU_SIZE(iph, TCP_HDR_SIZE); 663 644 664 645 tcph = GET_TCP_HDR(output, IF_IP_TCP_HDR_OFFSET); 665 646 666 /* ãã¼ãçªå·ã交æããã*/647 /* ポート番号を交換する。*/ 667 648 portno = tcph->sport; 668 649 tcph->sport = tcph->dport; 669 650 tcph->dport = portno; 670 651 671 /* TCP ãããã«æ 672 å ±ãè¨å®ããã*/ 652 /* TCP ヘッダに情報を設定する。*/ 673 653 tcph->doff = TCP_MAKE_DATA_OFF(TCP_HDR_SIZE); 674 654 } 675 655 676 /* cep ã NULL ã§ããã°ãä½ãããªãã§çµäºããã*/656 /* cep が NULL であれば、何もしないで終了する。*/ 677 657 else if (cep == NULL) 678 658 return; … … 693 673 694 674 /* 695 * ãã§ãã¯ãµã ãè¨å®ããã675 * チェックサムを設定する。 696 676 */ 697 677 tcph->sum = IN_CKSUM(output, IPPROTO_TCP, IF_IP_TCP_HDR_OFFSET, 698 678 (uint_t)GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET)); 699 679 700 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/680 /* ネットワークバッファ長を調整する。*/ 701 681 output->len = (uint16_t)GET_IF_IP_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET); 702 682 … … 707 687 #endif /* of #ifdef TCP_CFG_TRACE */ 708 688 709 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/689 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 710 690 IP_OUTPUT(output, TMO_TCP_OUTPUT); 711 691 } 712 692 713 693 /* 714 * tcp_set_header -- TCP ããããè¨å®ããã694 * tcp_set_header -- TCP ヘッダを設定する。 715 695 */ 716 696 … … 720 700 T_TCP_HDR *tcph = GET_TCP_HDR(nbuf, thoff); 721 701 722 /* TCP ãããã«æ 723 å ±ãè¨å®ããã*/ 702 /* TCP ヘッダに情報を設定する。*/ 724 703 tcph->sport = htons(cep->myaddr.portno); 725 704 tcph->dport = htons(cep->dstaddr.portno); … … 729 708 730 709 /* 731 * tcp_get_segment -- TCP ã»ã°ã¡ã³ããç²å¾ããããããè¨å®ããã710 * tcp_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。 732 711 * 733 * æ»ãå¤ ã¨ã©ã¼ã³ã¼ã734 * optlen ãªãã·ã§ã³ãµã¤ãºã4 ãªã¯ãããåä½735 * len TCP SDU ãµã¤ãº712 * 戻り値 エラーコード 713 * optlen オプションサイズ、4 オクテット単位 714 * len TCP SDU サイズ 736 715 */ 737 716 … … 742 721 ER error; 743 722 744 /* IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/723 /* IP データグラムを獲得する。*/ 745 724 if ((error = IN_GET_DATAGRAM(nbuf, 746 725 (uint_t)(TCP_HDR_SIZE + optlen + len), … … 754 733 } 755 734 756 /* TCP ãããã«æ 757 å ±ãè¨å®ããã*/ 735 /* TCP ヘッダに情報を設定する。*/ 758 736 tcp_set_header(*nbuf, cep, IF_IP_TCP_HDR_OFFSET, optlen); 759 737 … … 762 740 763 741 /* 764 * tcp_can_send_more -- éä¿¡ã§ããããé信端ç¹ã®ç¶æ 765 ãè¦ãã 742 * tcp_can_send_more -- 送信できるか、通信端点の状態を見る。 766 743 */ 767 744 … … 771 748 ER error; 772 749 773 /* éä¿¡ã§ããããCEP ã® FSM ç¶æ 774 ãè¦ãã*/ 750 /* 送信できるか、CEP の FSM 状態を見る。*/ 775 751 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { 776 752 if ((error = cep->error) == E_OK) … … 779 755 #ifdef TCP_CFG_NON_BLOCKING 780 756 781 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/782 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/757 /* タイムアウトをチェックする。*/ 758 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 783 759 784 760 if (!IS_PTR_DEFINED(cep->callback)) … … 788 764 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 789 765 790 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/766 /* コールバック関数を呼び出す。*/ 791 767 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error); 792 768 793 769 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 794 770 795 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/771 /* コールバック関数を呼び出す。*/ 796 772 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)&error); 797 773 … … 817 793 #ifdef TCP_CFG_NON_BLOCKING 818 794 819 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/820 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/795 /* タイムアウトをチェックする。*/ 796 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 821 797 if (!IS_PTR_DEFINED(cep->callback)) 822 798 error = E_OBJ; … … 825 801 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 826 802 827 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/803 /* コールバック関数を呼び出す。*/ 828 804 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)E_OBJ); 829 805 830 806 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 831 807 832 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/808 /* コールバック関数を呼び出す。*/ 833 809 error = E_OBJ; 834 810 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)&error); … … 856 832 857 833 /* 858 * tcp_can_recv_more -- åä¿¡ã§ããããé信端ç¹ã®ç¶æ 859 ãè¦ãã 834 * tcp_can_recv_more -- 受信できるか、通信端点の状態を見る。 860 835 * 861 * 注æ: æ»ãå¤836 * 注意: 戻り値 862 837 * 863 * E_OK åä¿¡å¯è½864 * E_OBJ ç¸æããåæãããããã¨ã©ã¼ãçºçããã838 * E_OK 受信可能 839 * E_OBJ 相手から切断されたか、エラーが発生した。 865 840 */ 866 841 … … 869 844 { 870 845 /* 871 * åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãå ´åã¯872 * é·ã 0ãã¾ãã¯ã¨ã©ã¼ãè¿ãã846 * 受信できるか、fsm_state を見る。受信できない場合は 847 * 長さ 0、またはエラーを返す。 873 848 */ 874 849 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) && … … 878 853 #ifdef TCP_CFG_NON_BLOCKING 879 854 880 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/881 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/855 /* タイムアウトをチェックする。*/ 856 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 882 857 883 858 if (!IS_PTR_DEFINED(cep->callback)) … … 886 861 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 887 862 888 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/863 /* コールバック関数を呼び出す。*/ 889 864 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error); 890 865 891 866 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 892 867 893 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/868 /* コールバック関数を呼び出す。*/ 894 869 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error); 895 870 … … 903 878 904 879 /* 905 * é信端ç¹ãããã¯ãã¦ã906 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã880 * 通信端点をロックして、 881 * 受信ウィンドバッファキューのネットワークバッファを解放する。 907 882 */ 908 883 syscall(wai_sem(cep->semid_lock)); … … 920 895 #ifdef TCP_CFG_NON_BLOCKING 921 896 922 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/923 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/897 /* タイムアウトをチェックする。*/ 898 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 924 899 if (!IS_PTR_DEFINED(cep->callback)) 925 900 *error = E_OBJ; … … 928 903 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 929 904 930 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/905 /* コールバック関数を呼び出す。*/ 931 906 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)E_OBJ); 932 907 933 908 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 934 909 935 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/910 /* コールバック関数を呼び出す。*/ 936 911 *error = E_OBJ; 937 912 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error); … … 958 933 959 934 /* 960 * tcp_wait_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 961 ¥ãã®ãå¾ 962 ã¤ã 935 * tcp_wait_rwbuf -- 受信ウィンドバッファにデータが入るのを待つ。 963 936 */ 964 937 … … 970 943 971 944 if (cep->rwbuf_count == 0) { 972 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 973 ¥åãããã¾ã§å¾ 974 ã¤ã*/ 945 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 975 946 while (cep->rwbuf_count == 0) { 976 947 if ((error = twai_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY, TWF_ORW, &flag, tmout)) != E_OK) { … … 980 951 981 952 /* 982 * åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãç¶æ 983 ã§ã 984 * åä¿¡ã¦ã£ã³ããããã¡ã«æåããªãå ´åã¯çµäºããã 953 * 受信できるか、fsm_state を見る。受信できない状態で、 954 * 受信ウィンドバッファに文字がない場合は終了する。 985 955 */ 986 956 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) && … … 988 958 989 959 /* 990 * é信端ç¹ãããã¯ãã¦ã991 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã960 * 通信端点をロックして、 961 * 受信ウィンドバッファキューのネットワークバッファを解放する。 992 962 */ 993 963 #ifdef TCP_CFG_RWBUF_CSAVE … … 1008 978 1009 979 /* 1010 * tcp_move_ra2rw -- åä¿¡åæ§æãã¥ã¼ã§åæ§æããã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã980 * tcp_move_ra2rw -- 受信再構成キューで再構成したセグメントを受信ウィンドバッファに書き込む。 1011 981 */ 1012 982 … … 1018 988 1019 989 /* 1020 * åä¿¡ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ã¿ã1021 * rcv_nxt ãå®äºãã SEQ ã ãé²ããã990 * 受信データを受信ウィンドバッファに書き込み、 991 * rcv_nxt を完了した SEQ だけ進める。 1022 992 */ 1023 993 if (TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) { … … 1028 998 break; 1029 999 1030 /* 次ã®ã»ã°ã¡ã³ãã«é²ãã*/1000 /* 次のセグメントに進む。*/ 1031 1001 cep->reassq = qhdr->next; 1032 1002 1033 /* FIN ãã©ã°ã®ã¿æ®ãã*/1003 /* FIN フラグのみ残す。*/ 1034 1004 flags &= TCP_FLG_FIN; 1035 1005 1036 /* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/1006 /* データを受信ウィンドバッファに書き込む。*/ 1037 1007 TCP_WRITE_RWBUF(cep, q, (uint_t)(GET_TCP_IP_Q_HDR(q)->thoff)); 1038 1008 } … … 1046 1016 1047 1017 /* 1048 * tcp_write_raque -- åä¿¡ã»ã°ã¡ã³ããåæ§æãã¦ãåä¿¡åæ§æãã¥ã¼ã«ç¹ãã1018 * tcp_write_raque -- 受信セグメントを再構成して、受信再構成キューに繋ぐ。 1049 1019 */ 1050 1020 … … 1057 1027 int32_t len; 1058 1028 1059 /* TCP ãããã®ä½ç½®ãä¿åããã*/1029 /* TCP ヘッダの位置を保存する。*/ 1060 1030 GET_TCP_IP_Q_HDR(input)->thoff = thoff; 1061 1031 1062 1032 /* 1063 * MAX_TCP_REALLOC_SIZE 以ä¸ã®å ´åã¯ãæ°ãã«ãããã¯ã¼ã¯ãããã¡ã1064 * å²å½ã¦ã¦ããã¼ã¿ãã³ãã¼ããã1065 * ãã®ã¨ããIP ã®ãªãã·ã§ã³ï¼æ¡å¼µãããï¼ã¨ TCP ã®ãªãã·ã§ã³ã¯åé¤ããã1033 * MAX_TCP_REALLOC_SIZE 以下の場合は、新たにネットワークバッファを 1034 * 割当てて、データをコピーする。 1035 * このとき、IP のオプション(拡張ヘッダ)と TCP のオプションは削除する。 1066 1036 */ 1067 1037 len = IF_IP_TCP_HDR_SIZE + inqhdr->slen; … … 1070 1040 1071 1041 /* 1072 * ãããã¯ã¼ã¯ãããã¡ã確ä¿ã§ããªãã¨ãã¯å²å½ã¦ãªãã1042 * ネットワークバッファが確保できないときは割当てない。 1073 1043 */ 1074 1044 if (tget_net_buf(&new, (uint_t)len, TMO_TCP_GET_NET_BUF) != E_OK) … … 1095 1065 1096 1066 /* 1097 * ä»å追å ããã»ã°ã¡ã³ãããå(p)ã¨å¾(q)ã®ã»ã°ã¡ã³ããæ¢ãã1067 * 今回追加するセグメントより前(p)と後(q)のセグメントを探す。 1098 1068 * 1099 1069 * +-------------------------+ … … 1118 1088 1119 1089 /* 1120 * å(p)ã®ã»ã°ã¡ã³ããããã°ãæ¢ã«ãä»åã¨åãã»ã°ã¡ã³ãã 1121 * ãããã¨ãããããã®å ´åã¯ããã®é¨åã¾ãã¯å 1122 ¨ã¦ãç ´æ£ããã 1090 * 前(p)のセグメントがあれば、既に、今回と同じセグメントが 1091 * あることもある。その場合は、その部分または全てを破棄する。 1123 1092 * 1124 1093 * qhdr->seq … … 1142 1111 1143 1112 /* 1144 * len ãæ£ã§ããã°ãå(p) ã®ã»ã°ã¡ã³ãã¨ä»åã®1145 * ã»ã°ã¡ã³ããéãªã£ã¦ããã1113 * len が正であれば、前(p) のセグメントと今回の 1114 * セグメントが重なっている。 1146 1115 */ 1147 1116 if (len >= inqhdr->slen) { 1148 1117 1149 1118 /* 1150 * len ãä»åã®ã»ã°ã¡ã³ãã¨åããªã1151 * ã¾ã£ããåãã»ã°ã¡ã³ããªã®ã§ä½ãããªãã1119 * len が今回のセグメントと同じなら 1120 * まったく同じセグメントなので何もしない。 1152 1121 */ 1153 1122 if (new != NULL) { … … 1160 1129 1161 1130 /* 1162 * 追å ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã1131 * 追加するセグメントの SDU を len 分前に詰める。 1163 1132 */ 1164 1133 inqhdr->seq += len; … … 1169 1138 1170 1139 /* 1171 * ãã¥ã¼ã«ã¤ãªãåã«ãæ°ãããããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ã移ãã1172 * TCP ã®ãªãã·ã§ã³ã¯åé¤ããã1140 * キューにつなぐ前に、新しいネットワークバッファにデータを移す。 1141 * TCP のオプションは削除する。 1173 1142 */ 1174 1143 if (new != NULL) { … … 1183 1152 1184 1153 /* 1185 * éãªãå¾(q)ã®ã»ã°ã¡ã³ãã調æ´ããã1154 * 重なる後(q)のセグメントを調整する。 1186 1155 * 1187 1156 * inqhdr->seq … … 1203 1172 len = inqhdr->seq + inqhdr->slen - qhdr->seq; 1204 1173 if (len <= 0) 1205 /* len ãè² ãªãéãªã£ã¦ããªãã*/1174 /* len が負なら重なっていない。*/ 1206 1175 break; 1207 1176 else if (len < qhdr->slen) { 1208 1177 1209 1178 /* 1210 * å¾ãã§éãªã£ã¦ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã1179 * 後ろで重なっているセグメントの SDU を len 分前に詰める。 1211 1180 * 1212 1181 * inqhdr->seq … … 1252 1221 1253 1222 /* 1254 * tcp_rexmt_val -- åéã¿ã¤ã ã¢ã¦ãå¤ãè¿ãã1223 * tcp_rexmt_val -- 再送タイムアウト値を返す。 1255 1224 */ 1256 1225 … … 1268 1237 1269 1238 /* 1270 * tcp_init_cep -- é信端ç¹ãåæåããã1239 * tcp_init_cep -- 通信端点を初期化する。 1271 1240 */ 1272 1241 … … 1276 1245 #ifdef TCP_CFG_RWBUF_CSAVE 1277 1246 /* 1278 * åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã«ããå ´åã 1279 * åä¿¡ã¦ã£ã³ããããã¡ãå 1280 ¨ã¦è§£æ¾ãããªããã¨ãããã®ã§ã 1281 * ããã§è§£æ¾ããã 1247 * 受信ウィンドバッファの省コピー機能を有効にした場合、 1248 * 受信ウィンドバッファが全て解放されないことがあるので、 1249 * ここで解放する。 1282 1250 */ 1283 1251 if (cep->rwbufq != NULL) { … … 1293 1261 cep->rbuf_rptr = cep->rbuf_wptr = cep->rbuf; 1294 1262 1295 cep->maxseg = DEF_TCP_SND_SEG; /* éä¿¡æ大ã»ã°ã¡ã³ããµã¤ãº*/1296 cep->srtt = TCP_TVAL_SRTT_BASE; /* æ»ãããªç§»åå¹³å*/1263 cep->maxseg = DEF_TCP_SND_SEG; /* 送信最大セグメントサイズ */ 1264 cep->srtt = TCP_TVAL_SRTT_BASE; /* 滑らかな移動平均 */ 1297 1265 cep->rttvar = ((TCP_TVAL_RTO_BASE - TCP_TVAL_SRTT_BASE) << TCP_RTTVAR_SHIFT) / 4; 1298 /* æ»ãããªåæ£*/1299 cep->rxtcur = TCP_TVAL_RTO_BASE; /* ç¾å¨ã®åéå¤*/1300 cep->snd_cwnd = MAX_TCP_WIN_SIZE; /* 輻輳ã¦ã£ã³ããµã¤ãº*/1301 cep->snd_ssthresh= MAX_TCP_WIN_SIZE; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã® å¶éå¤*/1266 /* 滑らかな分散 */ 1267 cep->rxtcur = TCP_TVAL_RTO_BASE; /* 現在の再送値 */ 1268 cep->snd_cwnd = MAX_TCP_WIN_SIZE; /* 輻輳ウィンドサイズ */ 1269 cep->snd_ssthresh= MAX_TCP_WIN_SIZE; /* 輻輳ウィンドサイズ(snd_cwnd)の 制限値 */ 1302 1270 1303 1271 /* 1304 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã1305 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½1306 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½1272 * 以下に関係しないフラグをクリアーする。 1273 * ・送受信ウィンドバッファの省コピー機能 1274 * ・動的な通信端点の生成・削除機能 1307 1275 */ 1308 1276 cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK | 1309 1277 TCP_CEP_FLG_DYNAMIC | TCP_CEP_FLG_VALID); 1310 1278 1311 /* ã»ããã©ãåæåããã*/1279 /* セマフォを初期化する。*/ 1312 1280 sig_sem (cep->semid_lock); 1313 1281 1314 /* ãã©ã°ãåæåããã*/1282 /* フラグを初期化する。*/ 1315 1283 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 1316 1284 syscall(clr_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY)); … … 1318 1286 1319 1287 /* 1320 * tcp_notify -- ICMP ã¨ã©ã¼ã®å¦ç1288 * tcp_notify -- ICMP エラーの処理 1321 1289 */ 1322 1290 … … 1334 1302 1335 1303 /* 1336 * ã³ãã¯ã·ã§ã³éè¨æ¸ã§ããã¹ãå°éä¸è½ã¨ã©ã¼ã®å ´åã¯ã1337 * åéã«ããå¦çããã1304 * コネクション開設済で、ホスト到達不能エラーの場合は、 1305 * 再送により処理する。 1338 1306 */ 1339 1307 if (cep->fsm_state == TCP_FSM_ESTABLISHED && … … 1342 1310 1343 1311 /* 1344 * ã³ãã¯ã·ã§ã³éè¨ä¸ãåãã¨ã©ã¼ãä½åº¦ãåä¿¡ããå ´åã¯ã 1345 * å¾ 1346 ã¡ç¶æ 1347 ã解é¤ãã対å¿ããé¢æ°ã«ã¨ã©ã¼ãè¿ãããã 1312 * コネクション開設中、同じエラーを何度か受信した場合は、 1313 * 待ち状態を解除し、対応する関数にエラーを返させる。 1348 1314 */ 1349 1315 if (cep->fsm_state < TCP_FSM_ESTABLISHED && cep->rxtshift > 3 && cep->net_error != E_OK) { … … 1354 1320 cep->net_error = error; 1355 1321 1356 /* éä¿¡ãæ示ããã*/1322 /* 送信を指示する。*/ 1357 1323 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1358 1324 sig_sem(SEM_TCP_POST_OUTPUT); … … 1362 1328 1363 1329 /* 1364 * tcp_find_cep -- ãã¼ãçªå·ãã TCP é信端ç¹ãå¾ãã1330 * tcp_find_cep -- ポート番号から TCP 通信端点を得る。 1365 1331 * 1366 * 注æ: dstaddr ã¯ã1367 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã1368 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã1332 * 注意: dstaddr は、 1333 * TINET-1.2 からネットワークバイトオーダ、 1334 * TINET-1.1 までは、ホストバイトオーダ 1369 1335 */ 1370 1336 … … 1375 1341 1376 1342 /* 1377 * ç¶æ 1378 ã SYN éä¿¡æ¸ã¿ä»¥å¾ã¯ã 1379 * IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããé信端ç¹ãæ¢ç´¢ããã 1343 * 状態が SYN 送信済み以後は、 1344 * IP アドレスとポート番号が一致する通信端点を探索する。 1380 1345 */ 1381 1346 for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) { … … 1388 1353 } 1389 1354 1390 /* ååãªã¼ãã³ä¸ã®é信端ç¹ãæ¢ç´¢ããã*/1355 /* 受動オープン中の通信端点を探索する。*/ 1391 1356 for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) { 1392 1357 if (cep->fsm_state == TCP_FSM_LISTEN && … … 1400 1365 1401 1366 /* 1402 * tcp_lock_cep -- TCP é信端ç¹ãããã¯ããã1367 * tcp_lock_cep -- TCP 通信端点をロックする。 1403 1368 */ 1404 1369 … … 1411 1376 *p_cep = NULL; 1412 1377 1413 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1378 /* TCP 通信端点 ID をチェックする。*/ 1414 1379 if (!VAID_TCP_CEPID(cepid)) 1415 1380 return E_ID; 1416 1381 1417 /* TCP é信端ç¹ãå¾ãã*/1382 /* TCP 通信端点を得る。*/ 1418 1383 cep = GET_TCP_CEP(cepid); 1419 1384 1420 /* TCP é信端ç¹ãããã¯ããã*/1385 /* TCP 通信端点をロックする。*/ 1421 1386 syscall(wai_sem(cep->semid_lock)); 1422 1387 1423 /* TCP é信端ç¹ããã§ãã¯ããã*/1388 /* TCP 通信端点をチェックする。*/ 1424 1389 if (!VALID_TCP_CEP(cep)) { 1425 1390 syscall(sig_sem(cep->semid_lock)); … … 1428 1393 1429 1394 /* 1430 * API æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1431 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1395 * API 機能コードとタスク識別子を記録する。 1396 * すでに記録されていれば、ペンディング中なのでエラー 1432 1397 */ 1433 1398 if (IS_TFN_TCP_RCV(tfn)) { … … 1451 1416 } 1452 1417 1453 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1418 /* 通信端点のロックを解除する。*/ 1454 1419 syscall(sig_sem(cep->semid_lock)); 1455 1420 … … 1465 1430 1466 1431 /* 1467 * ã³ãã¯ã·ã§ã³ã®ç¶æ 1468 1432 * コネクションの状態 1469 1433 */ 1470 1434 … … 1484 1448 1485 1449 /* 1486 * trace_putchar -- ã·ãªã¢ã«ãã¼ãã¸ã®æååºå1450 * trace_putchar -- シリアルポートへの文字出力 1487 1451 */ 1488 1452 … … 1495 1459 1496 1460 /* 1497 * ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æåååºåã©ã¤ãã©ãª1498 */ 1499 1500 /* 1501 * æ°å¤å¤æã®ããã®å¤æ表1461 * シリアルポートへの書式付文字列出力ライブラリ 1462 */ 1463 1464 /* 1465 * 数値変換のための変換表 1502 1466 */ 1503 1467 … … 1506 1470 1507 1471 /* 1508 * convert -- trace_printf ã®æ°å¤å¤æ1472 * convert -- trace_printf の数値変換 1509 1473 */ 1510 1474 … … 1543 1507 1544 1508 /* 1545 * trace_printf -- ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æåååºå1509 * trace_printf -- シリアルポートへの書式付文字列出力 1546 1510 */ 1547 1511 … … 1556 1520 va_start(ap, fmt); 1557 1521 while ((ch = *fmt ++) != '\0') { 1558 if (ch != '%') { /* æ¸å¼æå®ä»¥å¤*/1522 if (ch != '%') { /* 書式指定以外 */ 1559 1523 trace_putchar(portid, (char)ch); 1560 1524 continue; … … 1563 1527 width = longflag = 0; 1564 1528 padchar = ' '; 1565 if ((ch = *fmt ++) == '0') { /* ä¸ä½æ¡ã®0 */1529 if ((ch = *fmt ++) == '0') { /* 上位桁の 0 */ 1566 1530 padchar = '0'; 1567 1531 ch = *fmt ++; 1568 1532 } 1569 1533 1570 while ('0' <= ch && ch <= '9') { /* åºåå¹ 1571 */ 1534 while ('0' <= ch && ch <= '9') { /* 出力幅 */ 1572 1535 width = width * 10 + ch - '0'; 1573 1536 ch = *fmt ++; 1574 1537 } 1575 1538 1576 while (ch == 'l') { /* long (long) ã®æå®*/1539 while (ch == 'l') { /* long (long) の指定 */ 1577 1540 longflag ++; 1578 1541 ch = *fmt ++; … … 1635 1598 1636 1599 /* 1637 * TCP ãã©ã°æåå1600 * TCP フラグ文字列 1638 1601 */ 1639 1602 … … 1654 1617 1655 1618 /* 1656 * éä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå1619 * 送信 TCP ヘッダのトレース出力 1657 1620 */ 1658 1621 … … 1705 1668 1706 1669 /* 1707 * åä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå1670 * 受信 TCP ヘッダのトレース出力 1708 1671 * 1709 * 注æ: TCP ãããå 1710 ã¯ããã§ã«ãã¹ããã¤ããªã¼ã 1672 * 注意: TCP ヘッダ内は、すでにホストバイトオーダ 1711 1673 */ 1712 1674 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 137 125 138 126 /* 139 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å140 * ãã ããé信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ï¼cep->sbufï¼ã®å¤ã«ããã141 * TCP é信端ç¹æ¯ã«éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã使ç¨ãããã142 * 使ç¨ããªãããåãæ¿ããã143 */ 144 145 /* 146 * tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼é¸æï¼ã127 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合 128 * ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、 129 * TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、 130 * 使用しないかを切り替える。 131 */ 132 133 /* 134 * tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。 147 135 */ 148 136 … … 157 145 158 146 /* 159 * tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼é¸æï¼ã147 * tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。 160 148 */ 161 149 … … 170 158 171 159 /* 172 * tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãï¼é¸æï¼ã160 * tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。 173 161 */ 174 162 … … 181 169 182 170 /* 183 * tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾ 184 ã¤ï¼é¸æï¼ã 171 * tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(選択)。 185 172 */ 186 173 … … 195 182 196 183 /* 197 * tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼é¸æï¼ã184 * tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。 198 185 */ 199 186 … … 208 195 209 196 /* 210 * tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼é¸æï¼ã197 * tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。 211 198 */ 212 199 … … 221 208 222 209 /* 223 * tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®è§£æ¾ãæ示ããï¼é¸æï¼ã210 * tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。 224 211 */ 225 212 … … 232 219 233 220 /* 234 * tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããï¼é¸æï¼ã221 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。 235 222 */ 236 223 … … 243 230 244 231 /* 245 * tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼é¸æï¼ã232 * tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。 246 233 */ 247 234 … … 258 245 259 246 /* 260 * tcp_drop_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼å°ç¨ï¼ã247 * tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。 261 248 */ 262 249 … … 265 252 { 266 253 267 /* éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã*/254 /*送信ウィンドバッファから指定されたオクテット分削除する。*/ 268 255 cep->swbuf_count -= (uint16_t)len; 269 256 270 /* éä¿¡æ¸ã¿ã§ãACKå¾ 271 ã¡ã®æã¯ãACKå®äºã«å¤æ´ããã*/ 257 /* 送信済みで、ACK待ちの時は、ACK完了に変更する。*/ 272 258 if (len > 0 && (cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_SENT) { 273 259 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED; … … 277 263 278 264 /* 279 * tcp_write_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼å°ç¨ï¼ã265 * tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。 280 266 */ 281 267 … … 285 271 ER_UINT error; 286 272 287 /* é信端ç¹ãããã¯ããã*/273 /* 通信端点をロックする。*/ 288 274 syscall(wai_sem(cep->semid_lock)); 289 275 … … 298 284 * <---------------- error ---------------> 299 285 * ^ 300 * net_buf 㧠4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã286 * net_buf で 4 オクテット境界にアラインされている。 301 287 * 302 * tcp_output 㨠ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã 303 * n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã 304 * ãããã£ã³ã°ããããã®åãèæ 305 ®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã® 306 * 空ããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã 288 * tcp_output と ip_output で、チェックサムを計算するとき、 289 * n が 4 オクテット境界になるように SDU の後ろに 0 を 290 * パッディングする。その分を考慮して送信ウィンドバッファの 291 * 空きサイズを 4 オクテット境界に調整する。 307 292 */ 308 293 error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) + IF_IP_TCP_HDR_SIZE); … … 313 298 len = (uint_t)(error - IF_IP_TCP_HDR_SIZE); 314 299 315 /* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºã調æ´ããã*/300 /* 送信ウインドサイズによりサイズを調整する。*/ 316 301 if (len > cep->snd_wnd) 317 302 len = cep->snd_wnd; … … 319 304 len = cep->snd_cwnd; 320 305 321 /* ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 322 ããªãããã«ããã*/ 306 /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/ 323 307 if (len > cep->maxseg) 324 308 len = cep->maxseg; 325 309 326 /* ãã¼ã¿ã移ãã*/310 /* データを移す。*/ 327 311 memcpy(cep->sbuf_wptr, (void*)((uint8_t*)data), (size_t)len); 328 312 cep->sbuf_wptr += len; … … 330 314 error = len; 331 315 332 /* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨å®ããã*/316 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 333 317 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE); 334 318 SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), cep->swbuf_count + TCP_HDR_SIZE); 335 319 336 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããã*/320 /* フラグを、送信可能に設定する。*/ 337 321 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY; 338 322 } 339 323 340 else { /* éä¿¡ã¦ã¤ã³ããããã¡ãä¸æ£*/324 else { /* 送信ウインドバッファが不正 */ 341 325 syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.", 342 326 GET_TCP_CEPID(cep), error, IF_IP_TCP_HDR_SIZE); 343 327 344 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/328 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 345 329 tcp_free_swbufq_cs(cep); 346 330 } 347 331 348 /* é信端ç¹ã®ããã¯ã解é¤ããã*/332 /* 通信端点のロックを解除する。*/ 349 333 syscall(sig_sem(cep->semid_lock)); 350 334 … … 353 337 354 338 /* 355 * tcp_wait_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾ 356 ã¤ï¼å°ç¨ï¼ã 339 * tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(専用)。 357 340 */ 358 341 … … 366 349 367 350 368 /* éä¿¡ã¦ã£ã³ããããã¡ãå²å½ã¦æ¸ã¿ã§ã空ããããã°çµäºããã*/351 /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/ 369 352 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY && 370 353 (cep->swbuf_count + IF_IP_TCP_HDR_SIZE) < net_buf_siz(cep->swbufq)) 371 354 return E_OK; 372 355 373 /* éä¿¡ä¸ã§ããã°ãçµäºããã¾ã§å¾ 374 æ©ããã*/ 356 /* 送信中であれば、終了するまで待機する。*/ 375 357 while ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) { 376 358 377 /* éä¿¡å¾ 378 ã¡ã®æéã tmout ããæ¸ããã*/ 359 /* 送信待ちの時間を tmout から減ずる。*/ 379 360 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 380 361 syscall(get_tim(&before)); … … 385 366 syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY))); 386 367 387 /* éä¿¡å¾ 388 ã¡ã®æéã tmout ããæ¸ããã*/ 368 /* 送信待ちの時間を tmout から減ずる。*/ 389 369 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 390 370 syscall(get_tim(&after)); … … 395 375 396 376 /* 397 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 398 ãè¦ãã 399 * éä¿¡ã¦ã¤ã³ããããã¡ã空ãã¾ã§å¾ 400 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 401 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 377 * 送信できるか、CEP の FSM 状態を見る。 378 * 送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、 379 * コネクションが切断されたことを意味している。 402 380 */ 403 381 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) … … 405 383 } 406 384 407 /* ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾ 408 æ©ããã*/ 385 /* 相手の受信ウィンドが閉じている場合は、開くまで待機する。*/ 409 386 while (true) { 410 387 411 388 /* 412 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº413 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº389 * snd_wnd: 相手の受信可能ウィンドサイズ 390 * snd_cwnd: 輻輳ウィンドサイズ 414 391 * 415 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã392 * win: どちらか小さいウィンドサイズに設定する。 416 393 */ 417 394 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; … … 419 396 break; 420 397 421 /* éãå¾ 422 ã¡ã®æéã tmout ããæ¸ããã*/ 398 /* 開き待ちの時間を tmout から減ずる。*/ 423 399 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 424 400 syscall(get_tim(&before)); … … 429 405 syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY))); 430 406 431 /* éãå¾ 432 ã¡ã®æéã tmout ããæ¸ããã*/ 407 /* 開き待ちの時間を tmout から減ずる。*/ 433 408 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 434 409 syscall(get_tim(&after)); … … 439 414 440 415 /* 441 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 442 ãè¦ãã 443 * éä¿¡ã¦ã¤ã³ããããã¡ã空ãã¾ã§å¾ 444 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 445 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 416 * 送信できるか、CEP の FSM 状態を見る。 417 * 送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、 418 * コネクションが切断されたことを意味している。 446 419 */ 447 420 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) … … 449 422 } 450 423 451 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/424 /* ネットワークバッファを獲得する。*/ 452 425 if ((error = tcp_get_segment(&cep->swbufq, cep, 0, 453 426 TCP_CFG_SWBUF_CSAVE_MIN_SIZE, … … 456 429 return error; 457 430 458 /* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/431 /* 送信ウィンドバッファを初期化する。*/ 459 432 tcp_init_swbuf(cep); 460 433 … … 463 436 464 437 /* 465 * tcp_get_swbuf_addr_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼å°ç¨ï¼ã438 * tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。 466 439 */ 467 440 … … 471 444 ER_UINT error; 472 445 473 /* é信端ç¹ãããã¯ããã*/446 /* 通信端点をロックする。*/ 474 447 syscall(wai_sem(cep->semid_lock)); 475 448 … … 483 456 * <---------------- error ---------------> 484 457 * ^ 485 * net_buf 㧠4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã458 * net_buf で 4 オクテット境界にアラインされている。 486 459 * 487 * tcp_output 㨠ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã 488 * n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã 489 * ãããã£ã³ã°ããããã®åãèæ 490 ®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã® 491 * 空ããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã 460 * tcp_output と ip_output で、チェックサムを計算するとき、 461 * n が 4 オクテット境界になるように SDU の後ろに 0 を 462 * パッディングする。その分を考慮して送信ウィンドバッファの 463 * 空きサイズを 4 オクテット境界に調整する。 492 464 */ 493 465 error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) - cep->swbuf_count); 494 466 495 /* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºã調æ´ããã*/467 /* 送信ウインドサイズによりサイズを調整する。*/ 496 468 if (error > cep->snd_wnd) 497 469 error = cep->snd_wnd; … … 499 471 error = cep->snd_cwnd; 500 472 501 /* ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 502 ããªãããã«ããã*/ 473 /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/ 503 474 if (error > cep->maxseg) 504 475 error = cep->maxseg; 505 476 506 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/477 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/ 507 478 cep->get_buf_len = error; 508 479 509 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å 510 é ãè¨å®ããã*/ 480 /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/ 511 481 *p_buf = cep->sbuf_wptr; 512 482 } 513 483 514 else { /* ãããã¯ã¼ã¯ãããã¡ãä¸æ£*/515 516 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/484 else { /* ネットワークバッファが不正 */ 485 486 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 517 487 tcp_free_swbufq_cs(cep); 518 488 } 519 489 520 /* é信端ç¹ã®ããã¯ã解é¤ããã*/490 /* 通信端点のロックを解除する。*/ 521 491 syscall(sig_sem(cep->semid_lock)); 522 492 … … 525 495 526 496 /* 527 * tcp_send_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼å°ç¨ï¼ã497 * tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。 528 498 */ 529 499 … … 531 501 tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len) 532 502 { 533 /* é信端ç¹ãããã¯ããã*/503 /* 通信端点をロックする。*/ 534 504 syscall(wai_sem(cep->semid_lock)); 535 505 … … 537 507 cep->swbuf_count += len; 538 508 539 /* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨å®ããã*/509 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 540 510 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE); 541 511 SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), len + TCP_HDR_SIZE); 542 512 543 /* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/513 /* tcp_get_buf の割当て長をリセットする。*/ 544 514 cep->get_buf_len = 0; 545 515 546 /* é信端ç¹ã®ããã¯ã解é¤ããã*/516 /* 通信端点のロックを解除する。*/ 547 517 syscall(sig_sem(cep->semid_lock)); 548 518 549 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããå¼·å¶çã«éä¿¡ããã*/519 /* フラグを、送信可能に設定し、強制的に送信する。*/ 550 520 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY 551 521 | TCP_CEP_FLG_FORCE … … 555 525 556 526 /* 557 * tcp_free_swbufq_cs -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®è§£æ¾ãæ示ããï¼å°ç¨ï¼ã527 * tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。 558 528 * 559 * 注æ: 560 * å¿ 561 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 562 * æ»ã£ãå¾ã解é¤ããå¿ 563 è¦ãããã 529 * 注意: 530 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 531 * 戻った後、解除する必要がある。 564 532 */ 565 533 … … 567 535 tcp_free_swbufq_cs (T_TCP_CEP *cep) 568 536 { 569 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾ 570 ã¡ãåãæ¶ãã*/ 537 /* 送信ウィンドバッファの空き待ちを取り消す。*/ 571 538 cep->flags &= ~TCP_CEP_FLG_WBCS_NBUF_REQ; 572 539 573 540 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) { 574 541 /* 575 * éä¿¡ã¦ã£ã³ããããã¡ãåé¤ããããã«ããã©ã°ã ACK å®äºã«è¨å®ãã576 * TCP åºåã¿ã¹ã¯ãèµ·åããã542 * 送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、 543 * TCP 出力タスクを起動する。 577 544 */ 578 545 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED; … … 582 549 583 550 /* 584 * tcp_alloc_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããï¼å°ç¨ï¼ã551 * tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。 585 552 */ 586 553 … … 591 558 592 559 /* 593 * éä¿¡ã¦ã£ã³ããããã¡ãæªä½¿ç¨ã®å ´åã®ã¿ã594 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããã560 * 送信ウィンドバッファが未使用の場合のみ、 561 * 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。 595 562 */ 596 563 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_FREE) … … 599 566 600 567 /* 601 * tcp_is_swbuf_full_cs -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼å°ç¨ï¼ã568 * tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。 602 569 */ 603 570 … … 610 577 611 578 /* 612 * tcp_init_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãåæåããï¼å°ç¨ï¼ã579 * tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。 613 580 * 614 * 注æ: tcp_get_segment ã§ãããã¯ã¼ã¯ãããã¡ãç²å¾ãã615 * ç´å¾ã«å¼ã³åºããã¨ã581 * 注意: tcp_get_segment でネットワークバッファを獲得した 582 * 直後に呼び出すこと。 616 583 */ 617 584 … … 619 586 tcp_init_swbuf (T_TCP_CEP *cep) 620 587 { 621 /* éä¿¡ã¦ã¤ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/588 /* 送信ウインドバッファの使用中サイズをリセットする。*/ 622 589 cep->swbuf_count = 0; 623 590 624 /* éä¿¡ã¦ã¤ã³ããããã¡ã®ã¢ãã¬ã¹ãè¨å®ããã*/591 /* 送信ウインドバッファのアドレスを設定する。*/ 625 592 cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_HDR_OFFSET); 626 593 627 /* ãã©ã°ãããããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿ã«è¨å®ããã*/594 /* フラグを、ネットワークバッファ割当て済みに設定する。*/ 628 595 cep->flags = (cep->flags & ~(TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK)) 629 596 | TCP_CEP_FLG_WBCS_NBUF_READY; … … 631 598 632 599 /* 633 * tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããï¼å°ç¨ï¼ã600 * tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。 634 601 */ 635 602 … … 649 616 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_PEND) { 650 617 651 /* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/618 /* ネットワークバッファを予約する。*/ 652 619 cep->swbufq = nbuf; 653 620 nbuf = NULL; 654 621 655 /* ãã©ã°ãäºç´ã«è¨å®ããã*/622 /* フラグを予約に設定する。*/ 656 623 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_RSVD; 657 624 sel_ix = ix; … … 668 635 669 636 /* 670 * tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãï¼å°ç¨ï¼ã637 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。 671 638 */ 672 639 … … 680 647 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_RSVD) { 681 648 682 /* äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡ãè¿ãã*/649 /* 予約してあるネットワークバッファを返す。*/ 683 650 nbuf = cep->swbufq; 684 651 cep->swbufq = NULL; 685 652 686 /* TCP åºåã¿ã¹ã¯ãèµ·åããã*/653 /* TCP 出力タスクを起動する。*/ 687 654 sig_sem(SEM_TCP_POST_OUTPUT); 688 655 } … … 700 667 701 668 /* 702 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å703 * ãã ããé信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ï¼cep->rbufï¼ã®å¤ã«ããã704 * TCP é信端ç¹æ¯ã«åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã使ç¨ãããã705 * 使ç¨ããªãããåãæ¿ããã706 */ 707 708 /* 709 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã669 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合 670 * ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、 671 * TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、 672 * 使用しないかを切り替える。 673 */ 674 675 /* 676 * tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。 710 677 */ 711 678 … … 720 687 721 688 /* 722 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã689 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 723 690 */ 724 691 … … 733 700 734 701 /* 735 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã702 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 736 703 */ 737 704 … … 746 713 747 714 /* 748 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã715 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 749 716 */ 750 717 … … 757 724 758 725 /* 759 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã726 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 760 727 */ 761 728 … … 772 739 773 740 /* 774 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹775 */ 776 777 /* 778 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã741 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効 742 */ 743 744 /* 745 * tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。 779 746 */ 780 747 … … 789 756 cep->rwbuf_count -= len; 790 757 791 /* ãããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ãç¡ããªã£ãã解æ¾ããã*/758 /* ネットワークバッファにデータが無くなったら解放する。*/ 792 759 if (len == qhdr->slen) { 793 760 T_NET_BUF *next; … … 811 778 812 779 /* 813 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã780 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 814 781 */ 815 782 … … 821 788 uint8_t *buf = (uint8_t*)data; 822 789 823 /* é信端ç¹ãããã¯ããã*/790 /* 通信端点をロックする。*/ 824 791 syscall(wai_sem(cep->semid_lock)); 825 792 826 793 /* 827 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã«ãããã¯ã¼ã¯ãããã¡ãç¡ããªãã828 * len ã 0 ã«ãªãã¾ã§ç¶ããã794 * 受信ウィンドバッファキューにネットワークバッファが無くなるか 795 * len が 0 になるまで続ける。 829 796 */ 830 797 while (cep->rwbufq != NULL && len > 0) { … … 832 799 833 800 /* 834 * len ã¨åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®å 835 é ãããã¯ã¼ã¯ãããã¡ã® 836 * ãã¼ã¿æ°ã®å°ããæ¹ã移ããã¼ã¿æ°ã«ããã 801 * len と受信ウィンドバッファキューの先頭ネットワークバッファの 802 * データ数の小さい方を移すデータ数にする。 837 803 */ 838 804 if (len > qhdr->slen) … … 846 812 847 813 /* 848 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã«849 * ãã¼ã¿ãç¡ããªã£ãã解æ¾ããã814 * 受信ウィンドバッファキューのネットワークバッファに 815 * データが無くなったら解放する。 850 816 */ 851 817 tcp_drop_rwbuf_cs(cep, blen); … … 856 822 } 857 823 858 /* é信端ç¹ã®ããã¯ã解é¤ããã*/824 /* 通信端点のロックを解除する。*/ 859 825 syscall(sig_sem(cep->semid_lock)); 860 826 … … 863 829 864 830 /* 865 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã831 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 866 832 */ 867 833 … … 872 838 uint_t len; 873 839 874 /* é信端ç¹ãããã¯ããã*/840 /* 通信端点をロックする。*/ 875 841 syscall(wai_sem(cep->semid_lock)); 876 842 877 843 if (cep->rwbufq == NULL) { 878 844 879 /* åä¿¡ã¦ã£ã³ããããã¡ãå 880 ¨ã¦éæ¾ããã¦ããã¨ãã*/ 845 /* 受信ウィンドバッファが全て開放されているとき。*/ 881 846 *p_buf = NULL; 882 847 len = 0; … … 884 849 else { 885 850 886 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å 887 é ãè¨å®ããã*/ 851 /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/ 888 852 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff); 889 853 *p_buf = GET_TCP_SDU(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff; 890 854 891 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/855 /* 受信ウィンドバッファのデータ長を計算する。*/ 892 856 len = qhdr->slen; 893 857 } 894 858 895 /* é信端ç¹ã®ããã¯ã解é¤ããã*/859 /* 通信端点のロックを解除する。*/ 896 860 syscall(sig_sem(cep->semid_lock)); 897 861 898 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/862 /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/ 899 863 cep->rcv_buf_len = len; 900 864 return len; … … 902 866 903 867 /* 904 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã868 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 905 869 * 906 * 注æ: 907 * å¿ 908 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 909 * æ»ã£ãå¾ã解é¤ããå¿ 910 è¦ãããã 870 * 注意: 871 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 872 * 戻った後、解除する必要がある。 911 873 */ 912 874 … … 930 892 } 931 893 932 /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/894 /* 受信ウィンドバッファの使用中サイズをリセットする。*/ 933 895 cep->rwbuf_count = 0; 934 896 } … … 936 898 937 899 /* 938 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã900 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 939 901 * 940 * 注æ: 941 * å 942 ¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã 943 * 並ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã 944 * 追å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã 902 * 注意: 903 * 入力 input は、T_TCP_Q_HDR によりリンクされ、 904 * 並べ替えが終了していなければならない。また、 905 * 追加するデータは、受信ウィンドバッファに収まること。 945 906 */ 946 907 … … 952 913 uint_t inlen, last; 953 914 954 /* é信端ç¹ãããã¯ããã*/915 /* 通信端点をロックする。*/ 955 916 syscall(wai_sem(cep->semid_lock)); 956 917 … … 965 926 966 927 /* 967 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã 968 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æ大ã¨ã³ããªæ°ãè¶ 969 ããã¨ãã¯ã 970 * åä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã 971 * ãã ããSDU é·ã 0 ã®ã»ã°ã¡ã³ã㨠FIN ã»ã°ã¡ã³ãã¯ç ´æ£ããªãã 972 * ãªããæ£å¸¸ã«åä¿¡ããã»ã°ã¡ã³ããç ´æ£ãããããåéåæ°ãå¢å ããã 928 * TCP 通信端点の受信ウィンドバッファの省コピー機能の、 929 * 受信ウィンドバッファキューの最大エントリ数を超えるときは、 930 * 受信したセグメントを破棄する。 931 * ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。 932 * なお、正常に受信したセグメントも破棄するため、再送回数が増加する。 973 933 */ 974 934 syscall(rel_net_buf(input)); 975 935 976 /* é信端ç¹ã®ããã¯ã解é¤ããã*/936 /* 通信端点のロックを解除する。*/ 977 937 syscall(sig_sem(cep->semid_lock)); 978 938 return; … … 985 945 qhdr = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff); 986 946 987 /* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/947 /* 受信済みシーケンス番号を更新する。*/ 988 948 cep->rcv_nxt += inlen; 989 949 990 /* ç·æ¥ãã¼ã¿ã® SDU è£æ£ãè¡ãã*/950 /* 緊急データの SDU 補正を行う。*/ 991 951 if (qhdr->urp > 0 && inlen > 0) { 992 952 inlen -= qhdr->urp; … … 997 957 last = cep->rwbuf_count; 998 958 999 /* ãããã¯ã¼ã¯ãããã¡ãåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æå¾ã«é£çµããã*/959 /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/ 1000 960 qhdr->next = NULL; 1001 961 nextp = &cep->rwbufq; … … 1005 965 1006 966 /* 1007 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1008 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1009 * ããªããã¨ãç¥ãããããã§ããã967 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 968 * これは、アプリケーションに、相手からこれ以上データが送られて 969 * こないことを知らせるためである。 1010 970 */ 1011 971 if (inlen > 0) { … … 1015 975 } 1016 976 1017 /* é信端ç¹ã®ããã¯ã解é¤ããã*/977 /* 通信端点のロックを解除する。*/ 1018 978 syscall(sig_sem(cep->semid_lock)); 1019 979 1020 980 #ifdef TCP_CFG_NON_BLOCKING 1021 981 1022 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/982 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ノンブロッキングコール */ 1023 983 1024 984 int_t len; … … 1028 988 1029 989 /* 1030 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1031 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1032 * ããªããã¨ãç¥ãããããã§ããã990 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 991 * これは、アプリケーションに、相手からこれ以上データが送られて 992 * こないことを知らせるためである。 1033 993 */ 1034 994 if (len > 0 || inlen == 0) { 1035 995 1036 /* tcp_rcv_buf ã®å²å½ã¦é·ãè¨å®ããã*/996 /* tcp_rcv_buf の割当て長を設定する。*/ 1037 997 cep->rcv_buf_len = len; 1038 998 1039 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/999 /* 受信ウィンドバッファのアドレスを返す。*/ 1040 1000 *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq, 1041 1001 GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff; … … 1059 1019 1060 1020 /* 1061 * é信端ç¹ãããã¯ãã¦ã1062 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã1021 * 通信端点をロックして、 1022 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1063 1023 */ 1064 1024 syscall(wai_sem(cep->semid_lock)); … … 1068 1028 } 1069 1029 1070 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1030 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1071 1031 cep->rcv_tskid = TA_NULL; 1072 1032 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; 1073 1033 } 1074 1034 1075 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/1035 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ノンブロッキングコール */ 1076 1036 int_t len; 1077 1037 1078 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/1038 /* 受信ウィンドバッファからデータを取り出す。*/ 1079 1039 if ((len = tcp_read_rwbuf_cs(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) { 1080 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/1040 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 1081 1041 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1082 1042 sig_sem(SEM_TCP_POST_OUTPUT); … … 1084 1044 1085 1045 /* 1086 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1087 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1088 * ããªããã¨ãç¥ãããããã§ããã1046 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 1047 * これは、アプリケーションに、相手からこれ以上データが送られて 1048 * こないことを知らせるためである。 1089 1049 */ 1090 1050 if (len > 0 || inlen == 0) { … … 1106 1066 } 1107 1067 1108 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1068 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1109 1069 cep->rcv_tskid = TA_NULL; 1110 1070 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 1116 1076 if (inlen == 0 && cep->rwbuf_count == 0) { 1117 1077 /* 1118 * åä¿¡ã¦ã£ã³ããããã¡å 1119 ã®ãã¼ã¿æ°ã 0 ã§ã 1120 * ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã 1121 * é信端ç¹ãããã¯ãã¦ã 1122 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã 1078 * 受信ウィンドバッファ内のデータ数が 0 で、 1079 * 相手から FIN フラグが付いたセグメントを受信したときは、 1080 * 通信端点をロックして、 1081 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1123 1082 */ 1124 1083 syscall(wai_sem(cep->semid_lock)); … … 1128 1087 1129 1088 /* 1130 * åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 1131 ¥ããã inlen == 0 ã®æãå 1132 ¥åã¿ã¹ã¯ãèµ·åºããã 1133 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã 1134 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéãã㦠1135 * ããªããã¨ãç¥ãããããã§ããã 1089 * 受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。 1090 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 1091 * これは、アプリケーションに、相手からこれ以上データが送られて 1092 * こないことを知らせるためである。 1136 1093 */ 1137 1094 if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) { -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_ncs.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 135 123 136 124 /* 137 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹138 */ 139 140 /* 141 * tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãã125 * TCP 通信端点の送信ウィンドバッファの省コピー機能が無効 126 */ 127 128 /* 129 * tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。 142 130 */ 143 131 … … 147 135 uint8_t *wptr, *rptr; 148 136 149 /* SDU ã®å¤§ããããã§ãã¯ããã*/137 /* SDU の大きさをチェックする。*/ 150 138 if (GET_IP_SDU_SIZE(GET_IP_HDR(output)) < GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len) { 151 139 syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d", … … 156 144 wptr = GET_TCP_SDU(output, IF_IP_TCP_HDR_OFFSET); 157 145 158 /* é信端ç¹ãããã¯ããã*/146 /* 通信端点をロックする。*/ 159 147 syscall(wai_sem(cep->semid_lock)); 160 148 … … 162 150 if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) { 163 151 164 /* 転ééå§ãéä¿¡ã¦ã£ã³ããããã¡ã®çµãããè¶ 165 ããã¨ãã®å¦çã*/ 152 /* 転送開始が送信ウィンドバッファの終わりを超えるときの処理 */ 166 153 rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff); 167 154 } … … 169 156 uint_t sub; 170 157 171 /* 転éç¯å²ãã©ã¦ã³ãããã¨ãã®å¦ç*/158 /* 転送範囲がラウンドするときの処理 */ 172 159 sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf)); 173 160 memcpy((void*)wptr, rptr, (size_t)sub); … … 181 168 NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len); 182 169 183 /* é信端ç¹ã®ããã¯ã解é¤ããã*/170 /* 通信端点のロックを解除する。*/ 184 171 syscall(sig_sem(cep->semid_lock)); 185 172 } 186 173 187 174 /* 188 * tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã175 * tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。 189 176 */ 190 177 … … 194 181 uint_t last; 195 182 196 /* é信端ç¹ãããã¯ããã*/183 /* 通信端点をロックする。*/ 197 184 syscall(wai_sem(cep->semid_lock)); 198 185 … … 200 187 201 188 if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz) 202 /* ã©ã¦ã³ãããã¨ãã®è¨ç®*/189 /* ラウンドするときの計算 */ 203 190 cep->sbuf_rptr -= cep->sbufsz - len; 204 191 else … … 206 193 cep->swbuf_count -= (uint16_t)len; 207 194 208 /* é信端ç¹ã®ããã¯ã解é¤ããã*/195 /* 通信端点のロックを解除する。*/ 209 196 syscall(sig_sem(cep->semid_lock)); 210 197 211 198 #ifdef TCP_CFG_NON_BLOCKING 212 199 213 if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/214 215 /* é信端ç¹ãããã¯ããã*/200 if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) { /* ノンブロッキングコール */ 201 202 /* 通信端点をロックする。*/ 216 203 syscall(wai_sem(cep->semid_lock)); 217 204 218 /* éä¿¡ãã¼ã¿é·ãè¨ç®ããã*/205 /* 送信データ長を計算する。*/ 219 206 if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) 220 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/207 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */ 221 208 len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)); 222 209 else 223 210 len = cep->sbufsz - cep->swbuf_count; 224 211 225 /* é信端ç¹ã®ããã¯ã解é¤ããã*/212 /* 通信端点のロックを解除する。*/ 226 213 syscall(sig_sem(cep->semid_lock)); 227 214 228 215 if (len > 0) { 229 216 230 /* tcp_get_buf ã®å²å½ã¦é·ãè¨å®ããã*/217 /* tcp_get_buf の割当て長を設定する。*/ 231 218 cep->get_buf_len = len; 232 219 233 /* éä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/220 /* 送信ウィンドバッファのアドレスを返す。*/ 234 221 *cep->snd_p_buf = cep->sbuf_wptr; 235 222 … … 248 235 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 249 236 250 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/237 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 251 238 cep->snd_tskid = TA_NULL; 252 239 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 257 244 258 245 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT || 259 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) { /* ãã³ããããã³ã°ã³ã¼ã«*/246 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) { /* ノンブロッキングコール */ 260 247 261 248 #else /* of #ifdef TCP_CFG_EXTENTIONS */ 262 249 263 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/250 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) { /* ノンブロッキングコール */ 264 251 265 252 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ … … 267 254 ER_UINT error; 268 255 269 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/256 /* 送信ウィンドバッファにデータを書き込む。*/ 270 257 error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len); 271 258 272 259 #ifdef TCP_CFG_EXTENTIONS 273 260 274 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/261 /* 送信緊急ポインタを設定する。*/ 275 262 if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB) 276 263 cep->snd_up = cep->snd_una + error; … … 293 280 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 294 281 295 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/282 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 296 283 cep->snd_tskid = TA_NULL; 297 284 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 301 288 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 302 289 303 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããåºæ¥ããåºåã¿ã¹ã¯ãèµ·åºããã*/290 /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/ 304 291 if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz) 305 292 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 312 299 313 300 if (cep->swbuf_count > 0) { 314 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°åºåããã¹ãããã*/301 /* 送信ウィンドバッファにデータがあれば出力をポストする。*/ 315 302 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 316 303 sig_sem(SEM_TCP_POST_OUTPUT); … … 319 306 320 307 /* 321 * tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã308 * tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。 322 309 */ 323 310 … … 327 314 uint_t offset; 328 315 329 /* é信端ç¹ãããã¯ããã*/316 /* 通信端点をロックする。*/ 330 317 syscall(wai_sem(cep->semid_lock)); 331 318 332 /* len ã¨éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã®å°ããæ¹ã移ããã¼ã¿æ°ã«ããã*/319 /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/ 333 320 if (len > (cep->sbufsz - cep->swbuf_count)) 334 321 len = cep->sbufsz - cep->swbuf_count; 335 322 336 /* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/323 /* 書き込みポインタがラウンドするときの処理 */ 337 324 if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) { 338 325 offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf)); … … 348 335 cep->swbuf_count += len - offset; 349 336 350 /* é信端ç¹ã®ããã¯ã解é¤ããã*/337 /* 通信端点のロックを解除する。*/ 351 338 syscall(sig_sem(cep->semid_lock)); 352 339 … … 355 342 356 343 /* 357 * tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 358 ã¤ã 344 * tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。 359 345 */ 360 346 … … 367 353 while (cep->swbuf_count >= cep->sbufsz) { 368 354 /* 369 * éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãããªããã°ãåºåããã¹ããã¦ã 370 * éä¿¡ã¦ã£ã³ããããã¡ã空ãã¾ã§å¾ 371 ã¤ã 355 * 送信ウィンドバッファの空きがなければ、出力をポストして、 356 * 送信ウィンドバッファが空くまで待つ。 372 357 */ 373 358 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; … … 380 365 381 366 /* 382 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 383 ãè¦ãã 384 * éä¿¡ã¦ã£ã³ããããã¡ã空ãã¾ã§å¾ 385 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 386 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 367 * 送信できるか、CEP の FSM 状態を見る。 368 * 送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、 369 * コネクションが切断されたことを意味している。 387 370 */ 388 371 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { … … 394 377 } 395 378 /* 396 * tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã379 * tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。 397 380 */ 398 381 … … 402 385 uint_t len; 403 386 404 /* é信端ç¹ãããã¯ããã*/387 /* 通信端点をロックする。*/ 405 388 syscall(wai_sem(cep->semid_lock)); 406 389 407 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å 408 é ãè¨å®ããã*/ 390 /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/ 409 391 *p_buf = cep->sbuf_wptr; 410 392 411 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããµã¤ãºãè¨ç®ããã*/393 /* 送信ウィンドバッファの空きサイズを計算する。*/ 412 394 if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) 413 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/395 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */ 414 396 len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)); 415 397 else 416 398 len = cep->sbufsz - cep->swbuf_count; 417 399 418 /* é信端ç¹ã®ããã¯ã解é¤ããã*/400 /* 通信端点のロックを解除する。*/ 419 401 syscall(sig_sem(cep->semid_lock)); 420 402 421 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/403 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/ 422 404 cep->get_buf_len = len; 423 405 return (ER_UINT)len; … … 425 407 426 408 /* 427 * tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã409 * tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。 428 410 */ 429 411 … … 431 413 tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len) 432 414 { 433 /* é信端ç¹ãããã¯ããã*/415 /* 通信端点をロックする。*/ 434 416 syscall(wai_sem(cep->semid_lock)); 435 417 … … 437 419 cep->swbuf_count += len; 438 420 439 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/421 /* 書込みポインタがラウンドするときの処理 */ 440 422 if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz) 441 423 cep->sbuf_wptr = (uint8_t*)cep->sbuf; 442 424 443 /* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/425 /* tcp_get_buf の割当て長をリセットする。*/ 444 426 cep->get_buf_len = 0; 445 427 446 /* é信端ç¹ã®ããã¯ã解é¤ããã*/428 /* 通信端点のロックを解除する。*/ 447 429 syscall(sig_sem(cep->semid_lock)); 448 430 449 /* éä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/431 /* 送信ウィンドバッファがフルのときは強制的に送信する。*/ 450 432 if (cep->swbuf_count >= cep->sbufsz) 451 433 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; … … 453 435 454 436 /* 455 * tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããã437 * tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。 456 438 */ 457 439 … … 467 449 468 450 /* 469 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹470 */ 471 472 /* 473 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã451 * TCP 通信端点の受信ウィンドバッファの省コピー機能が無効 452 */ 453 454 /* 455 * tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。 474 456 */ 475 457 … … 480 462 cep->rbuf_rptr += len; 481 463 482 /* èªã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/464 /* 読み出しポインタがラウンドするときの処理 */ 483 465 if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz) 484 466 cep->rbuf_rptr = (uint8_t*)cep->rbuf; … … 486 468 487 469 /* 488 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã470 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 489 471 */ 490 472 … … 494 476 uint_t offset; 495 477 496 /* é信端ç¹ãããã¯ããã*/478 /* 通信端点をロックする。*/ 497 479 syscall(wai_sem(cep->semid_lock)); 498 480 499 /* len ã¨åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿æ°ã®å°ããæ¹ãåãåºããã¼ã¿æ°ã«ããã*/481 /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/ 500 482 if (len > cep->rwbuf_count) 501 483 len = cep->rwbuf_count; 502 484 503 /* èªã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/485 /* 読み出しポインタがラウンドするときの処理 */ 504 486 if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) { 505 487 offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf)); … … 515 497 cep->rbuf_rptr += len - offset; 516 498 517 /* é信端ç¹ã®ããã¯ã解é¤ããã*/499 /* 通信端点のロックを解除する。*/ 518 500 syscall(sig_sem(cep->semid_lock)); 519 501 … … 522 504 523 505 /* 524 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã506 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 525 507 */ 526 508 … … 530 512 uint_t len; 531 513 532 /* é信端ç¹ãããã¯ããã*/514 /* 通信端点をロックする。*/ 533 515 syscall(wai_sem(cep->semid_lock)); 534 516 535 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/517 /* 受信ウィンドバッファのデータ長を計算する。*/ 536 518 if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) 537 /* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/519 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */ 538 520 len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)); 539 521 else 540 522 len = cep->rwbuf_count; 541 523 542 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å 543 é ãè¨å®ããã*/ 524 /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/ 544 525 *p_buf = cep->rbuf_rptr; 545 526 546 /* é信端ç¹ã®ããã¯ã解é¤ããã*/527 /* 通信端点のロックを解除する。*/ 547 528 syscall(sig_sem(cep->semid_lock)); 548 529 549 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/530 /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/ 550 531 cep->rcv_buf_len = len; 551 532 return len; … … 553 534 554 535 /* 555 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã536 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 556 537 * 557 * 注æ: 558 * å 559 ¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã 560 * 並ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã 561 * 追å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã 538 * 注意: 539 * 入力 input は、T_TCP_Q_HDR によりリンクされ、 540 * 並べ替えが終了していなければならない。また、 541 * 追加するデータは、受信ウィンドバッファに収まること。 562 542 */ 563 543 … … 568 548 uint_t offset, inlen, last; 569 549 570 /* é信端ç¹ãããã¯ããã*/550 /* 通信端点をロックする。*/ 571 551 syscall(wai_sem(cep->semid_lock)); 572 552 573 553 qhdr = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff); 574 554 575 /* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/555 /* 受信済みシーケンス番号を更新する。*/ 576 556 cep->rcv_nxt += qhdr->slen; 577 557 … … 579 559 inlen = qhdr->slen; 580 560 581 /* ç·æ¥ãã¼ã¿ã® SDU è£æ£ãè¡ãã*/561 /* 緊急データの SDU 補正を行う。*/ 582 562 if (qhdr->urp > 0 && inlen > 0) { 583 563 inlen -= qhdr->urp; … … 587 567 588 568 /* 589 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã590 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦591 * ããªããã¨ãç¥ãããããã§ããã569 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 570 * これは、アプリケーションに、相手からこれ以上データが送られて 571 * こないことを知らせるためである。 592 572 */ 593 573 if (inlen > 0) { 594 574 595 /* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/575 /* 書き込みポインタがラウンドするときの処理 */ 596 576 if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) { 597 577 offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)); … … 616 596 #ifdef TCP_CFG_NON_BLOCKING 617 597 618 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/598 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ノンブロッキングコール */ 619 599 620 600 int_t len; 621 601 622 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨ç®ããã*/602 /* 受信ウィンドバッファの空きデータ長を計算する。*/ 623 603 if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) { 624 /* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/604 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */ 625 605 len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)); 626 606 } … … 628 608 len = cep->rwbuf_count; 629 609 630 /* é信端ç¹ã®ããã¯ã解é¤ããã*/610 /* 通信端点のロックを解除する。*/ 631 611 syscall(sig_sem(cep->semid_lock)); 632 612 633 613 /* 634 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã635 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦636 * ããªããã¨ãç¥ãããããã§ããã614 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 615 * これは、アプリケーションに、相手からこれ以上データが送られて 616 * こないことを知らせるためである。 637 617 */ 638 618 if (len > 0 || inlen == 0) { 639 619 640 /* tcp_rcv_buf ã®å²å½ã¦é·ãè¨å®ããã*/620 /* tcp_rcv_buf の割当て長を設定する。*/ 641 621 cep->rcv_buf_len = len; 642 622 643 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/623 /* 受信ウィンドバッファのアドレスを返す。*/ 644 624 *cep->rcv_p_buf = cep->rbuf_rptr; 645 625 … … 663 643 664 644 /* 665 * é信端ç¹ãããã¯ãã¦ã666 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã645 * 通信端点をロックして、 646 * 受信ウィンドバッファキューのネットワークバッファを解放する。 667 647 */ 668 648 syscall(wai_sem(cep->semid_lock)); … … 672 652 } 673 653 674 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/654 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 675 655 cep->rcv_tskid = TA_NULL; 676 656 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; 677 657 } 678 658 679 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/659 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ノンブロッキングコール */ 680 660 ER_UINT len; 681 661 682 /* é信端ç¹ã®ããã¯ã解é¤ããã*/662 /* 通信端点のロックを解除する。*/ 683 663 syscall(sig_sem(cep->semid_lock)); 684 664 685 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/665 /* 受信ウィンドバッファからデータを取り出す。*/ 686 666 if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) { 687 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/667 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 688 668 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 689 669 sig_sem(SEM_TCP_POST_OUTPUT); … … 691 671 692 672 /* 693 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã694 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦695 * ããªããã¨ãç¥ãããããã§ããã673 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 674 * これは、アプリケーションに、相手からこれ以上データが送られて 675 * こないことを知らせるためである。 696 676 */ 697 677 if (len > 0 || inlen == 0) { … … 713 693 } 714 694 715 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/695 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 716 696 cep->rcv_tskid = TA_NULL; 717 697 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 722 702 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 723 703 724 /* é信端ç¹ã®ããã¯ã解é¤ããã*/704 /* 通信端点のロックを解除する。*/ 725 705 syscall(sig_sem(cep->semid_lock)); 726 706 727 707 if (inlen == 0 && cep->rwbuf_count == 0) { 728 708 /* 729 * åä¿¡ã¦ã£ã³ããããã¡å 730 ã®ãã¼ã¿æ°ã 0 ã§ã 731 * ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã 732 * é信端ç¹ãããã¯ãã¦ã 733 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã 709 * 受信ウィンドバッファ内のデータ数が 0 で、 710 * 相手から FIN フラグが付いたセグメントを受信したときは、 711 * 通信端点をロックして、 712 * 受信ウィンドバッファキューのネットワークバッファを解放する。 734 713 */ 735 714 syscall(wai_sem(cep->semid_lock)); … … 739 718 740 719 /* 741 * åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 742 ¥ããã inlen == 0 ã®æãå 743 ¥åã¿ã¹ã¯ãèµ·åºããã 744 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã 745 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéãã㦠746 * ããªããã¨ãç¥ãããããã§ããã 720 * 受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。 721 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 722 * これは、アプリケーションに、相手からこれ以上データが送られて 723 * こないことを知らせるためである。 747 724 */ 748 725 if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 123 111 124 112 /* 125 * å±æé¢æ°113 * 局所関数 126 114 */ 127 115 … … 135 123 136 124 /* 137 * ããã¯ãªãæé125 * バックオフ時間 138 126 * 139 * åéãè¡ããã³ã«ãã¿ã¤ã ã¢ã¦ãã®æéã延é·ããã127 * 再送を行うたびに、タイムアウトの時間を延長する。 140 128 */ 141 129 … … 147 135 }; 148 136 149 #define TCP_TOTAL_BACK_OFF 511 /* ããã¯ãªãæéã®åè¨*/150 151 /* 152 * tcp_timers -- ã¿ã¤ã ã¢ã¦ãå¦ç137 #define TCP_TOTAL_BACK_OFF 511 /* バックオフ時間の合計 */ 138 139 /* 140 * tcp_timers -- タイムアウト処理 153 141 */ 154 142 … … 162 150 163 151 /* 164 * åéã¿ã¤ã152 * 再送タイマ 165 153 */ 166 154 case TCP_TIM_REXMT: 167 155 168 156 /* 169 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ã«ãªã£ãã¨ãã¯ã170 * ã³ãã¯ã·ã§ã³ãåæããã157 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、 158 * コネクションを切断する。 171 159 */ 172 160 if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) { … … 178 166 179 167 /* 180 * åéã¿ã¤ã ã¢ã¦ããè¨ç®ããã168 * 再送タイムアウトを計算する。 181 169 */ 182 170 cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]), … … 186 174 187 175 /* 188 * srtt: å¹³æ»åãããRTT189 * rttvar: å¹³æ»åãããåæ£176 * srtt: 平滑化された RTT 177 * rttvar: 平滑化された分散 190 178 * 191 * åéåæ°ãæ大åéåæ°ã® 1/4 ã«ãªã£ãã¨ãã¯ã192 * å¹³æ»åãããåæ£ (rttvar) ã« srtt ãå ç®ãã193 * å¹³æ»åããã RTT ã 0 ã«ããã179 * 再送回数が最大再送回数の 1/4 になったときは、 180 * 平滑化された分散 (rttvar) に srtt を加算し、 181 * 平滑化された RTT を 0 にする。 194 182 * 195 183 */ … … 200 188 201 189 /* 202 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ203 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ190 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 191 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 204 192 * 205 * ååéä¿¡ãã SEQ (snd_nxt) ã206 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã¾ã§æ»ãã193 * 前回送信した SEQ (snd_nxt) を 194 * 確認された最大送信 SEQ (snd_una) まで戻す。 207 195 */ 208 196 cep->snd_nxt = cep->snd_una; … … 210 198 211 199 /* 212 * rtt: å¾å¾©æéã®è¨æ¸¬ãä¸æ¢ããã200 * rtt: 往復時間の計測を中止する。 213 201 */ 214 202 cep->rtt = 0; 215 203 216 204 /* 217 * éä¿¡ã¦ã¤ã³ãã®è¨å®205 * 送信ウインドの設定 218 206 * 219 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº220 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº221 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº207 * snd_wnd: 相手の受信可能ウィンドサイズ 208 * snd_cwnd: 輻輳ウィンドサイズ 209 * maxseg : 相手の最大受信セグメントサイズ 222 210 * 223 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã224 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã®225 * ã©ã¡ããå°ãããµã¤ãºã® 1/2 ããæ´ã«226 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã§å²ã£ãå¤ã227 * ãã ãã2 以ä¸211 * 相手の受信可能ウィンドサイズ (snd_wnd) か、 212 * 輻輳ウィンドサイズ (snd_cwnd) の 213 * どちらか小さいサイズの 1/2 を、更に 214 * 相手の最大受信セグメントサイズ (maxseg) で割った値。 215 * ただし、2 以上 228 216 */ 229 217 if (cep->snd_wnd < cep->snd_cwnd) … … 236 224 237 225 /* 238 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã¯239 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã«ã240 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ã¯241 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã® win åã«242 * è¨å®ããã226 * 輻輳ウィンドサイズ (snd_cwnd) は 227 * 相手の受信可能ウィンドサイズ (snd_wnd) に、 228 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) は 229 * 相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に 230 * 設定する。 243 231 */ 244 232 cep->snd_cwnd = cep->maxseg; … … 246 234 cep->dupacks = 0; 247 235 248 /* åºåããã¹ãããã*/236 /* 出力をポストする。*/ 249 237 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 250 238 sig_sem(SEM_TCP_POST_OUTPUT); … … 252 240 253 241 /* 254 * æç¶ã¿ã¤ã242 * 持続タイマ 255 243 */ 256 244 case TCP_TIM_PERSIST: 257 245 258 246 /* 259 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ãè¶ 260 ãã¦ãã¦ã 261 * ã¢ã¤ãã«æéããä¿çã¿ã¤ãã®æ¨æºå¤ (TCP_TVAL_KEEP_IDLEã 262 * æ¨æº 2 * 60 * 60 ç§) 以ä¸ãã 263 * åéã¿ã¤ã ã¢ã¦ãå¤ * ããã¯ãªãæéã®åè¨ä»¥ä¸ãªã 264 * ã³ãã¯ã·ã§ã³ãåæããã 247 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、 248 * アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、 249 * 標準 2 * 60 * 60 秒) 以上か、 250 * 再送タイムアウト値 * バックオフ時間の合計以上なら 251 * コネクションを切断する。 265 252 */ 266 253 if (cep->rxtshift > TCP_MAX_REXMT_SHIFT && … … 272 259 } 273 260 274 /* æç¶ã¿ã¤ããåè¨å®ããåºåããã¹ãããã*/261 /* 持続タイマを再設定し、出力をポストする。*/ 275 262 tcp_set_persist_timer(cep); 276 263 … … 280 267 281 268 /* 282 * ä¿ç (keep alive) ã¿ã¤ã269 * 保留 (keep alive) タイマ 283 270 */ 284 271 case TCP_TIM_KEEP: 285 272 286 273 /* 287 * ã³ãã¯ã·ã§ã³ãéè¨ãããã¾ã§ã«ã¿ã¤ã ã¢ã¦ãããã288 * ã³ãã¯ã·ã§ã³ã®éè¨ãä¸æ¢ããã274 * コネクションが開設されるまでにタイムアウトしたら 275 * コネクションの開設を中止する。 289 276 */ 290 277 if (cep->fsm_state < TCP_FSM_ESTABLISHED) { … … 320 307 321 308 /* 322 * 2MSL ã¿ã¤ã309 * 2MSL タイマ 323 310 */ 324 311 case TCP_TIM_2MSL: … … 336 323 337 324 /* 338 * tcp_cancel_timers -- å 339 ¨ã¦ã®ã¿ã¤ãããã£ã³ã»ã«ããã 325 * tcp_cancel_timers -- 全てのタイマをキャンセルする。 340 326 */ 341 327 … … 352 338 353 339 /* 354 * tcp_tw_timo -- Time Wait ç¨ TCP é信端ç¹ã®ã¿ã¤ã ã¢ã¦ãå¦ç340 * tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理 355 341 */ 356 342 … … 364 350 365 351 /* 366 * Time Wait ç¨ TCP é信端ç¹ã§ã¿ã¤ã ã¢ã¦ãã®ã¨ã³ããªãæ¢ç´¢ãã367 * æ¢ç´¢ããã¨ã³ããªã空ãã«ããã352 * Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、 353 * 探索したエントリを空きにする。 368 354 */ 369 355 frees = 0; … … 375 361 376 362 /* 377 * Time Wait ç¨ TCP é信端ç¹ã®ç©ºãã¨ã³ããªãçºçããã 378 * æ¨æº TCP é信端ç¹ã§ Time Wait ä¸ã® TCP é信端ç¹ãæ¢ç´¢ãã 379 * å¿ 380 è¦ãªæ 381 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 382 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 363 * Time Wait 用 TCP 通信端点の空きエントリが発生したら 364 * 標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、 365 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 366 * 標準の TCP 通信端点を開放する。 383 367 */ 384 368 if (frees > 0) { … … 391 375 392 376 /* 393 * ãã£ã¨ãé·ãé Time Wait ãã¦ãã TCP é信端ç¹ãéæ¾ããã377 * もっとも長い間 Time Wait している TCP 通信端点を開放する。 394 378 */ 395 379 while (waits > 0) { … … 414 398 415 399 /* 416 * tcp_slow_timo -- 500 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°400 * tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数 417 401 */ 418 402 … … 456 440 457 441 /* 458 * tcp_fast_timo -- 200 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°442 * tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数 459 443 */ 460 444 … … 480 464 481 465 /* 482 * tcp_range_set -- æéãæå®ããç¯å²ã«è¨å®ããã466 * tcp_range_set -- 時間を指定した範囲に設定する。 483 467 */ 484 468 … … 495 479 496 480 /* 497 * tcp_set_persist_timer -- æç¶ã¿ã¤ãã®è¨å®481 * tcp_set_persist_timer -- 持続タイマの設定 498 482 */ 499 483 … … 504 488 505 489 /* 506 * srtt: å¹³æ»åãããRTT507 * rttvar: å¹³æ»åãããåæ£490 * srtt: 平滑化された RTT 491 * rttvar: 平滑化された分散 508 492 */ 509 493 time = ((cep->srtt >> 2) + cep->rttvar) >> 1; 510 494 511 495 /* 512 * åéã¿ã¤ããè¨å®ããã¦ããã°å復ä¸è½ã¨ã©ã¼496 * 再送タイマも設定されていれば回復不能エラー 513 497 */ 514 498 if (cep->timer[TCP_TIM_REXMT]) … … 516 500 517 501 /* 518 * æç¶ã¿ã¤ããè¨å®ããã502 * 持続タイマを設定する。 519 503 */ 520 504 cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]), … … 523 507 524 508 /* 525 * åéåæ°ãæ´æ°ããã509 * 再送回数を更新する。 526 510 */ 527 511 if (cep->rxtshift < TCP_MAX_REXMT_SHIFT) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 83 71 #define _TCP_TIMER_H_ 84 72 85 /* TCP ã¿ã¤ãå¤æ°*/73 /* TCP タイマ変数 */ 86 74 87 #define NUM_TCP_TIMERS 4 /* TCP ã®ã¿ã¤ãæ°*/75 #define NUM_TCP_TIMERS 4 /* TCP のタイマ数 */ 88 76 89 #define TCP_TIM_REXMT 0 /* åéã¿ã¤ã*/90 #define TCP_TIM_PERSIST 1 /* æç¶ã¿ã¤ã*/91 #define TCP_TIM_KEEP 2 /* ä¿ç (keep alive) ã¿ã¤ã*/92 #define TCP_TIM_2MSL 3 /* 2MSL ã¿ã¤ã*/77 #define TCP_TIM_REXMT 0 /* 再送タイマ */ 78 #define TCP_TIM_PERSIST 1 /* 持続タイマ */ 79 #define TCP_TIM_KEEP 2 /* 保留 (keep alive) タイマ*/ 80 #define TCP_TIM_2MSL 3 /* 2MSL タイマ */ 93 81 94 /* MSL: Maximum Segment Lifetime, æ大ã»ã°ã¡ã³ãçåæé*/82 /* MSL: Maximum Segment Lifetime, 最大セグメント生存時間 */ 95 83 96 84 /* 97 * TCP/IP ã®ã¿ã¤ãã®å®ç¾©85 * TCP/IP のタイマの定義 98 86 */ 99 87 … … 103 91 #define TCP_SLOW_HZ (ULONG_C(1000)/TCP_SLOW_TMO/NET_TIMER_CYCLE) /* Hz */ 104 92 105 /* TCP ã¿ã¤ãå¤*/93 /* TCP タイマ値 */ 106 94 107 95 #define TCP_TVAL_MSL (TCP_SLOW_HZ * 30) 108 /* æ大ã»ã°ã¡ã³ãçåæé*/96 /* 最大セグメント生存時間 */ 109 97 110 #define TCP_TVAL_SRTT_BASE 0 /* æ»ãããªå¾å¾©æéã®åºæºå¤*/98 #define TCP_TVAL_SRTT_BASE 0 /* 滑らかな往復時間の基準値*/ 111 99 112 100 #define TCP_TVAL_RTO_BASE (TCP_SLOW_HZ * 3) 113 /* æ 114 å ±ãå¾ãããªãå ´åã®åéã¿ã¤ã ã¢ã¦ãã®åºæºå¤ */ 101 /* 情報が得られない場合の再送タイムアウトの基準値 */ 115 102 116 103 #define TCP_TVAL_MIN_PERSIST (TCP_SLOW_HZ * 5) 117 /* æç¶ã¿ã¤ã ã¢ã¦ãã®æå°å¤*/104 /* 持続タイムアウトの最小値 */ 118 105 #define TCP_TVAL_MAX_PERSIST (TCP_SLOW_HZ * 60) 119 /* æç¶ã¿ã¤ã ã¢ã¦ãã®æ大å¤*/106 /* 持続タイムアウトの最大値 */ 120 107 121 108 #define TCP_TVAL_KEEP_INIT (TCP_SLOW_HZ * 75) 122 /* ä¿çã¿ã¤ãã®åæå¤*/109 /* 保留タイマの初期値 */ 123 110 #define TCP_TVAL_KEEP_IDLE (TCP_SLOW_HZ * 2 * 60 * 60) 124 /* ä¿çã¿ã¤ãèµ·åã¾ã§ã®æ¨æºå¤*/111 /* 保留タイマ起動までの標準値*/ 125 112 #define TCP_TVAL_KEEP_INTERVAL (TCP_SLOW_HZ * 75) 126 /* ä¿çã¿ã¤ãã¤ã³ã¿ã¼ãã«ã®æ¨æºå¤*/127 #define TCP_TVAL_KEEP_COUNT 8 /* ä¿çã¿ã¤ã ã¢ã¦ãã®æ大å¤*/113 /* 保留タイマインターバルの標準値*/ 114 #define TCP_TVAL_KEEP_COUNT 8 /* 保留タイムアウトの最大値*/ 128 115 129 116 #define TCP_TVAL_MIN (TCP_SLOW_HZ * 3) 130 /* æéã®æå°åä½*/117 /* 時間の最小単位 */ 131 118 #define TCP_TVAL_MAX_REXMT (TCP_SLOW_HZ * 64) 132 /* æ大åéæé*/119 /* 最大再送時間 */ 133 120 134 121 /* 135 * 以ä¸ã®å¤æ°ã®å¤ã¯ãã¯ãã§è¨å®ããã122 * 以下の変数の値はマクロで設定する。 136 123 * 137 124 * tcp_maixidle = tcp_keepcnt * tcp_keepintvl … … 143 130 144 131 /* 145 * ãã®ä»ã®å®æ°132 * その他の定数 146 133 */ 147 134 148 #define TCP_MAX_REXMT_SHIFT 12 /* æ大åéåæ°*/135 #define TCP_MAX_REXMT_SHIFT 12 /* 最大再送回数 */ 149 136 150 /* TCP ã¿ã¤ãå¤ã®å*/137 /* TCP タイマ値の型 */ 151 138 152 139 typedef int16_t T_TCP_TIME; 153 140 154 141 /* 155 * é¢æ°142 * 関数 156 143 */ 157 144 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 132 120 133 121 /* 134 * IPv4 㨠IPv6 ã®åãæ¿ããã¯ã122 * IPv4 と IPv6 の切り替えマクロ 135 123 */ 136 124 … … 152 140 153 141 /* 154 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 155 ¨ã¦ã®æ©è½ã 156 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 142 * TINET をライブラリ化しない場合は、全ての機能を 143 * オブジェクトファイルに出力するため、マクロを有効にする。 157 144 */ 158 145 … … 182 169 183 170 /* 184 * tcp_cre_rep -- TCP åä»å£ã®çæãæ¡å¼µæ©è½ã171 * tcp_cre_rep -- TCP 受付口の生成【拡張機能】 185 172 */ 186 173 … … 195 182 ER error; 196 183 197 /* TCP åä»å£ ID ããã§ãã¯ããã*/184 /* TCP 受付口 ID をチェックする。*/ 198 185 if (!VAID_TCP_REPID(repid)) 199 186 return E_ID; 200 187 201 /* pk_crep ã NULL ãªãã¨ã©ã¼*/188 /* pk_crep が NULL ならエラー */ 202 189 if (pk_crep == NULL) 203 190 return E_PAR; 204 191 205 /* TCP åä»å£ãå¾ãã*/192 /* TCP 受付口を得る。*/ 206 193 rep = GET_TCP_REP(repid); 207 194 208 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/195 /* TCP 受付口が、動的生成用でなければエラー */ 209 196 if (!DYNAMIC_TCP_REP(rep)) 210 197 return E_ID; 211 198 212 /* åä»å£ãããã¯ããã*/199 /* 受付口をロックする。*/ 213 200 syscall(wai_sem(rep->semid_lock)); 214 201 215 202 /* 216 * TCP åä»å£ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼203 * TCP 受付口をチェックする。生成済みであればエラー 217 204 */ 218 205 if (VALID_TCP_REP(rep)) … … 220 207 else { 221 208 222 /* TCP åä»å£çææ 223 å ±ãã³ãã¼ããã*/ 224 rep->repatr = pk_crep->repatr; /* åä»å£å±æ§ */ 225 rep->myaddr = pk_crep->myaddr; /* èªåã®ã¢ãã¬ã¹ */ 226 227 /* TCP åä»å£ãçææ¸ã¿ã«ããã*/ 209 /* TCP 受付口生成情報をコピーする。*/ 210 rep->repatr = pk_crep->repatr; /* 受付口属性 */ 211 rep->myaddr = pk_crep->myaddr; /* 自分のアドレス */ 212 213 /* TCP 受付口を生成済みにする。*/ 228 214 rep->flags |= TCP_REP_FLG_VALID; 229 215 error = E_OK; 230 216 } 231 217 232 /* åä»å£ã®ããã¯ã解é¤ããã*/218 /* 受付口のロックを解除する。*/ 233 219 syscall(sig_sem(rep->semid_lock)); 234 220 … … 245 231 246 232 /* 247 * tcp_find_cep_rep -- TCP åä»å£ããªã³ã¯ãã¦ãã TCP é信端ç¹ãå¾ãã233 * tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。 248 234 */ 249 235 … … 262 248 263 249 /* 264 * tcp_del_rep -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ã250 * tcp_del_rep -- TCP 受付口の削除【拡張機能】 265 251 */ 266 252 … … 273 259 ER error = E_OK; 274 260 275 /* TCP åä»å£ ID ããã§ãã¯ããã*/261 /* TCP 受付口 ID をチェックする。*/ 276 262 if (!VAID_TCP_REPID(repid)) 277 263 return E_ID; 278 264 279 /* TCP åä»å£ãå¾ãã*/265 /* TCP 受付口を得る。*/ 280 266 rep = GET_TCP_REP(repid); 281 267 282 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/268 /* TCP 受付口が、動的生成用でなければエラー */ 283 269 if (!DYNAMIC_TCP_REP(rep)) 284 270 return E_ID; 285 271 286 /* åä»å£ãããã¯ããã*/272 /* 受付口をロックする。*/ 287 273 syscall(wai_sem(rep->semid_lock)); 288 274 289 /* TCP åä»å£ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼*/275 /* TCP 受付口をチェックする。未生成の場合はエラー */ 290 276 if (!VALID_TCP_REP(rep)) 291 277 error = E_NOEXS; … … 293 279 if ((cep = tcp_find_cep_rep(rep)) != NULL) { 294 280 /* 295 * ãã§ã«ååãªã¼ãã³ãã¦ããã¨ã296 * ï¼tcp_acp_cep ãå¼ã°ãã¦ããã¨ãï¼ã¯ã297 * tcp_acp_cep ãçµäºãããã281 * すでに受動オープンしているとき 282 *(tcp_acp_cep が呼ばれているとき)は、 283 * tcp_acp_cep を終了させる。 298 284 */ 299 285 300 /* é信端ç¹ãããã¯ããã*/286 /* 通信端点をロックする。*/ 301 287 syscall(wai_sem(cep->semid_lock)); 302 288 303 289 /* 304 * é信端ç¹ããåä»å£ã解æ¾ãã305 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã290 * 通信端点から受付口を解放し、 291 * イベントフラグをクローズに設定する。 306 292 */ 307 293 cep->rep = NULL; … … 338 324 cep->rcv_tfn = TFN_TCP_UNDEF; 339 325 340 /* é信端ç¹ã®ããã¯ã解é¤ããã*/326 /* 通信端点のロックを解除する。*/ 341 327 syscall(sig_sem(cep->semid_lock)); 342 328 … … 345 331 error = E_OK; 346 332 347 /* TCP åä»å£ãæªçæã«ããã*/333 /* TCP 受付口を未生成にする。*/ 348 334 rep->flags &= ~TCP_REP_FLG_VALID; 349 335 } 350 336 351 /* åä»å£ã®ããã¯ã解é¤ããã*/337 /* 受付口のロックを解除する。*/ 352 338 syscall(sig_sem(rep->semid_lock)); 353 339 … … 360 346 361 347 /* 362 * tcp_cre_cep -- TCP é信端ç¹ã®çæãæ¡å¼µæ©è½ã348 * tcp_cre_cep -- TCP 通信端点の生成【拡張機能】 363 349 */ 364 350 … … 373 359 ER error; 374 360 375 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/361 /* TCP 通信端点 ID をチェックする。*/ 376 362 if (!VAID_TCP_CEPID(cepid)) 377 363 return E_ID; 378 364 379 /* pk_ccep ã NULL ãªãã¨ã©ã¼*/365 /* pk_ccep が NULL ならエラー */ 380 366 if (pk_ccep == NULL) 381 367 return E_PAR; 382 368 383 /* TCP é信端ç¹ãå¾ãã*/369 /* TCP 通信端点を得る。*/ 384 370 cep = GET_TCP_CEP(cepid); 385 371 386 /* TCP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/372 /* TCP 通信端点が、動的生成用でなければエラー */ 387 373 if (!DYNAMIC_TCP_CEP(cep)) 388 374 return E_ID; 389 375 390 /* é信端ç¹ãããã¯ããã*/376 /* 通信端点をロックする。*/ 391 377 syscall(wai_sem(cep->semid_lock)); 392 378 393 379 /* 394 * TCP é信端ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼380 * TCP 通信端点をチェックする。生成済みであればエラー 395 381 */ 396 382 if (VALID_TCP_CEP(cep)) … … 398 384 else { 399 385 400 /* TCP é信端ç¹çææ 401 å ±ãã³ãã¼ããã*/ 402 cep->cepatr = pk_ccep->cepatr; /* é信端ç¹å±æ§ */ 403 cep->sbuf = pk_ccep->sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ */ 404 cep->sbufsz = pk_ccep->sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 405 cep->rbuf = pk_ccep->rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ */ 406 cep->rbufsz = pk_ccep->rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 407 cep->callback = (void*)pk_ccep->callback; /* ã³ã¼ã«ãã㯠*/ 408 409 /* TCP é信端ç¹ãçææ¸ã¿ã«ããã*/ 386 /* TCP 通信端点生成情報をコピーする。*/ 387 cep->cepatr = pk_ccep->cepatr; /* 通信端点属性 */ 388 cep->sbuf = pk_ccep->sbuf; /* 送信用ウィンドバッファ */ 389 cep->sbufsz = pk_ccep->sbufsz; /* 送信用ウィンドバッファサイズ */ 390 cep->rbuf = pk_ccep->rbuf; /* 受信用ウィンドバッファ */ 391 cep->rbufsz = pk_ccep->rbufsz; /* 受信用ウィンドバッファサイズ */ 392 cep->callback = (void*)pk_ccep->callback; /* コールバック */ 393 394 /* TCP 通信端点を生成済みにする。*/ 410 395 cep->flags |= TCP_CEP_FLG_VALID; 411 396 error = E_OK; 412 397 } 413 398 414 /* é信端ç¹ã®ããã¯ã解é¤ããã*/399 /* 通信端点のロックを解除する。*/ 415 400 syscall(sig_sem(cep->semid_lock)); 416 401 … … 423 408 424 409 /* 425 * tcp_del_cep -- TCP é信端ç¹ã®åé¤ãæ¡å¼µæ©è½ã410 * tcp_del_cep -- TCP 通信端点の削除【拡張機能】 426 411 */ 427 412 … … 436 421 ER error; 437 422 438 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/423 /* TCP 通信端点 ID をチェックする。*/ 439 424 if (!VAID_TCP_CEPID(cepid)) 440 425 return E_ID; 441 426 442 /* TCP é信端ç¹ãå¾ãã*/427 /* TCP 通信端点を得る。*/ 443 428 cep = GET_TCP_CEP(cepid); 444 429 445 /* TCP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/430 /* TCP 通信端点が、動的生成用でなければエラー */ 446 431 if (!DYNAMIC_TCP_CEP(cep)) 447 432 return E_ID; 448 433 449 /* é信端ç¹ãããã¯ããã*/434 /* 通信端点をロックする。*/ 450 435 syscall(wai_sem(cep->semid_lock)); 451 436 452 437 /* 453 * TCP é信端ç¹ããã§ãã¯ããã以ä¸ã®å ´åã¯ã¨ã©ã¼454 * ã»æªçæã455 * ã»ä½¿ç¨ä¸ã438 * TCP 通信端点をチェックする。以下の場合はエラー 439 * ・未生成。 440 * ・使用中。 456 441 */ 457 442 if (!VALID_TCP_CEP(cep)) … … 461 446 else { 462 447 463 /* TCP é信端ç¹ãæªçæã«ããã*/448 /* TCP 通信端点を未生成にする。*/ 464 449 cep->flags &= ~TCP_CEP_FLG_VALID; 465 450 error = E_OK; 466 451 } 467 452 468 /* é信端ç¹ã®ããã¯ã解é¤ããã*/453 /* 通信端点のロックを解除する。*/ 469 454 syscall(sig_sem(cep->semid_lock)); 470 455 … … 479 464 480 465 /* 481 * tcp_acp_cep -- æ¥ç¶è¦æ±å¾ 482 ã¡ (ååãªã¼ãã³)ãæ¨æºæ©è½ã 466 * tcp_acp_cep -- 接続要求待ち (受動オープン)【標準機能】 483 467 */ 484 468 … … 493 477 FLGPTN flag; 494 478 495 /* TCP åä»å£ããã§ãã¯ããã*/479 /* TCP 受付口をチェックする。*/ 496 480 if (!VAID_TCP_REPID(repid)) 497 481 return E_ID; … … 499 483 #ifdef TCP_CFG_NON_BLOCKING 500 484 501 /* p_dstaddr ã NULL ãªãã¨ã©ã¼*/485 /* p_dstaddr が NULL ならエラー */ 502 486 if (p_dstaddr == NULL) 503 487 return E_PAR; … … 505 489 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 506 490 507 /* p_dstaddr ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/491 /* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */ 508 492 if (p_dstaddr == NULL || tmout == TMO_NBLK) 509 493 return E_PAR; … … 512 496 513 497 /* 514 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã515 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼498 * CEP をロックし、API 機能コードとタスク識別子を記録する。 499 * すでに記録されていれば、ペンディング中なのでエラー 516 500 */ 517 501 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_ACP_CEP)) != E_OK) 518 502 return error; 519 503 520 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 521 ã§ãªããã°ã¨ã©ã¼ã*/ 504 /* CEP の FSM がクローズ状態でなければエラー。*/ 522 505 if (cep->fsm_state != TCP_FSM_CLOSED) { 523 506 error = E_OBJ; … … 526 509 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 527 510 528 /* TCP é信端ç¹ãåæåããã*/511 /* TCP 通信端点を初期化する。*/ 529 512 tcp_init_cep(cep); 530 513 531 /* TCP åä»å£ãå¾ãã*/514 /* TCP 受付口を得る。*/ 532 515 rep = GET_TCP_REP(repid); 533 516 534 517 #ifdef TCP_CFG_EXTENTIONS 535 518 536 /* TCP åä»å£ãããã¯ããã*/519 /* TCP 受付口をロックする。*/ 537 520 syscall(wai_sem(rep->semid_lock)); 538 521 539 /* TCP åä»å£ããã§ãã¯ããã*/522 /* TCP 受付口をチェックする。*/ 540 523 if (!VALID_TCP_REP(rep)) { 541 524 syscall(sig_sem(rep->semid_lock)); … … 546 529 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 547 530 548 /* TCP é信端ç¹ã«TCPåä»å£ãè¨é²ããã*/531 /* TCP 通信端点にTCP受付口を記録する。*/ 549 532 cep->rep = rep; 550 533 551 534 #ifdef TCP_CFG_EXTENTIONS 552 535 553 /* TCP åä»å£ã®ããã¯ã解é¤ããã*/536 /* TCP 受付口のロックを解除する。*/ 554 537 syscall(sig_sem(rep->semid_lock)); 555 538 556 539 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 557 540 558 /* TCP åä»å£ã®ã¢ãã¬ã¹ãã³ãã¼ããã*/541 /* TCP 受付口のアドレスをコピーする。*/ 559 542 cep->myaddr = rep->myaddr; 560 543 561 /* é信端ç¹ãè¨å®ããã*/544 /* 通信端点を設定する。*/ 562 545 cep->fsm_state = TCP_FSM_LISTEN; 563 546 564 547 #ifdef TCP_CFG_NON_BLOCKING 565 548 566 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/549 /* タイムアウトをチェックする。*/ 567 550 if (tmout == TMO_NBLK) { 568 /* ãã³ããããã³ã°ã³ã¼ã«*/551 /* ノンブロッキングコール */ 569 552 cep->p_dstaddr = p_dstaddr; 570 553 cep->rcv_nblk_tfn = TFN_TCP_ACP_CEP; … … 576 559 577 560 /* 578 * FSM ã ESTABLISHED ã«ãªãã¾ã§å¾ 579 ã¤ã 580 * FSM ã CLOSED ã«ãªã£ãå ´åã¯ãã¨ã©ã¼ãçºçãããã¨ãæå³ãã¦ããã 561 * FSM が ESTABLISHED になるまで待つ。 562 * FSM が CLOSED になった場合は、エラーが発生したことを意味している。 581 563 */ 582 564 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 592 574 593 575 if (error == E_OK) { 594 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/576 /* 相手のアドレスをコピーする。*/ 595 577 *p_dstaddr = cep->dstaddr; 596 578 } 597 579 else { 598 580 /* 599 * é信端ç¹ããåä»å£ã解æ¾ãã600 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã581 * 通信端点から受付口を解放し、 582 * イベントフラグをクローズに設定する。 601 583 */ 602 584 cep->rep = NULL; … … 622 604 623 605 /* 624 * tcp_con_cep -- æ¥ç¶è¦æ± (è½åãªã¼ãã³)ãæ¨æºæ©è½ã606 * tcp_con_cep -- 接続要求 (能動オープン)【標準機能】 625 607 */ 626 608 … … 637 619 638 620 /* 639 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ãã 640 * ãã¦å 641 ããã«ããã£ã¹ãã¢ãã¬ã¹ãªãã¨ã©ã¼ 621 * p_dstaddr または p_myaddr が NULL か、 622 * あて先がマルチキャストアドレスならエラー 642 623 */ 643 624 if (p_myaddr == NULL || p_dstaddr == NULL || IN_IS_ADDR_MULTICAST(&p_dstaddr->ipaddr)) … … 647 628 648 629 /* 649 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ã 650 * ãã¦å 651 ããã«ããã£ã¹ãã¢ãã¬ã¹ãã 652 * tmout ã TMO_NBLK ãªãã¨ã©ã¼ 630 * p_dstaddr または p_myaddr が NULL 、 631 * あて先がマルチキャストアドレスか、 632 * tmout が TMO_NBLK ならエラー 653 633 */ 654 634 if (p_myaddr == NULL || p_dstaddr == NULL || … … 659 639 660 640 /* 661 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã662 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼641 * CEP をロックし、API 機能コードとタスク識別子を記録する。 642 * すでに記録されていれば、ペンディング中なのでエラー 663 643 */ 664 644 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CON_CEP)) != E_OK) 665 645 return error; 666 646 667 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 668 ã§ãªããã°ã¨ã©ã¼ã*/ 647 /* CEP の FSM がクローズ状態でなければエラー。*/ 669 648 if (cep->fsm_state != TCP_FSM_CLOSED) { 670 649 error = E_OBJ; … … 673 652 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 674 653 675 /* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/654 /* シーケンス番号を初期化する。*/ 676 655 if (tcp_iss == 0) 677 656 tcp_init_iss(); 678 657 679 /* é信端ç¹ãåæåããã*/658 /* 通信端点を初期化する。*/ 680 659 tcp_init_cep(cep); 681 660 682 661 /* 683 * p_myaddr ã NADR (-1) ã§ã¯ãªããèª IP ã¢ãã¬ã¹ã ANY ã§ãªããã°ã684 * æå®ããã IP ã¢ãã¬ã¹ãå²ãå½ã¦ãã662 * p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、 663 * 指定された IP アドレスを割り当てる。 685 664 */ 686 665 if (p_myaddr != NADR && !IN_IS_ADDR_ANY(&p_myaddr->ipaddr)) … … 696 675 } 697 676 698 /* é信端ç¹ãè¨å®ããã*/677 /* 通信端点を設定する。*/ 699 678 cep->fsm_state = TCP_FSM_SYN_SENT; 700 679 cep->dstaddr = *p_dstaddr; … … 706 685 #ifdef TCP_CFG_NON_BLOCKING 707 686 708 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/687 /* タイムアウトをチェックする。*/ 709 688 if (tmout == TMO_NBLK) { 710 /* ãã³ããããã³ã°ã³ã¼ã«*/689 /* ノンブロッキングコール */ 711 690 cep->p_dstaddr = p_dstaddr; 712 691 cep->p_myaddr = p_myaddr; 713 692 cep->snd_nblk_tfn = TFN_TCP_CON_CEP; 714 693 715 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/694 /* コネクションの開設をポストする。*/ 716 695 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 717 696 sig_sem(SEM_TCP_POST_OUTPUT); … … 723 702 724 703 /* 725 * p_myaddr ã NADR (-1) ãã726 * èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã704 * p_myaddr が NADR (-1) か、 705 * 自ポート番号が TCP_PORTANY なら、自動で割り当てる。 727 706 */ 728 707 if (p_myaddr == NADR || p_myaddr->portno == TCP_PORTANY) … … 731 710 goto err_ret; 732 711 733 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/712 /* コネクションの開設をポストする。*/ 734 713 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 735 714 sig_sem(SEM_TCP_POST_OUTPUT); 736 715 737 716 /* 738 * ã¤ãã³ãã ESTABLISHED ã«ãªãã¾ã§å¾ 739 ã¤ã 740 * ã¤ãã³ãã CLOSED ã«ãªã£ãå ´åã¯ãä½ããã®ã¨ã©ã¼ãçºçãããã 741 * æ¥ç¶è¦æ±ãæå¦ããããã¨ãæå³ãã¦ããã 717 * イベントが ESTABLISHED になるまで待つ。 718 * イベントが CLOSED になった場合は、何らかのエラーが発生したか、 719 * 接続要求が拒否されたことを意味している。 742 720 */ 743 721 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 754 732 if (error != E_OK) { 755 733 /* 756 * é信端ç¹ããåä»å£ã解æ¾ãã757 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã734 * 通信端点から受付口を解放し、 735 * イベントフラグをクローズに設定する。 758 736 */ 759 737 cep->rep = NULL; … … 779 757 780 758 /* 781 * tcp_user_closed -- ã¦ã¼ã¶ããã®ã³ãã¯ã·ã§ã³ã®éæ¾759 * tcp_user_closed -- ユーザからのコネクションの開放 782 760 */ 783 761 … … 787 765 switch (cep->fsm_state) { 788 766 789 case TCP_FSM_CLOSED: /* ã¯ãã¼ãº*/790 case TCP_FSM_LISTEN: /* ååãªã¼ãã³*/767 case TCP_FSM_CLOSED: /* クローズ */ 768 case TCP_FSM_LISTEN: /* 受動オープン */ 791 769 cep->fsm_state = TCP_FSM_CLOSED; 792 770 cep = tcp_close(cep); 793 771 break; 794 772 795 case TCP_FSM_SYN_SENT: /* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿*/796 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/773 case TCP_FSM_SYN_SENT: /* 能動オープン、SYN 送信済み */ 774 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 797 775 cep->flags |= TCP_CEP_FLG_NEED_FIN; 798 776 break; 799 777 800 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº*/778 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 801 779 cep->fsm_state = TCP_FSM_FIN_WAIT_1; 802 780 break; 803 781 804 case TCP_FSM_CLOSE_WAIT: /* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾ 805 ã¡ */ 782 case TCP_FSM_CLOSE_WAIT: /* 相手から FIN 受信、APP の終了待ち */ 806 783 cep->fsm_state = TCP_FSM_LAST_ACK; 807 784 break; … … 814 791 815 792 /* 816 * tcp_cls_cep -- é信端ç¹ã®ã¯ãã¼ãºãæ¨æºæ©è½ã793 * tcp_cls_cep -- 通信端点のクローズ【標準機能】 817 794 */ 818 795 … … 826 803 #ifndef TCP_CFG_NON_BLOCKING 827 804 828 /* tmout ã TMO_NBLK ãªãã¨ã©ã¼*/805 /* tmout が TMO_NBLK ならエラー */ 829 806 if (tmout == TMO_NBLK) 830 807 return E_PAR; … … 833 810 834 811 /* 835 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã836 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼812 * CEP をロックし、API 機能コードとタスク識別子を記録する。 813 * すでに記録されていれば、ペンディング中なのでエラー 837 814 */ 838 815 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CLS_CEP)) != E_OK) … … 841 818 #ifdef TCP_CFG_NON_BLOCKING 842 819 843 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/844 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/820 /* タイムアウトをチェックする。*/ 821 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 845 822 846 823 if (!IS_PTR_DEFINED(cep->callback)) 847 824 error = E_OBJ; 848 else if (cep->fsm_state == TCP_FSM_CLOSED) { /* ãã§ã«ã¯ãã¼ãºããã¦ããã¨ã*/825 else if (cep->fsm_state == TCP_FSM_CLOSED) { /* すでにクローズされているとき */ 849 826 850 827 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 … … 864 841 } 865 842 else { 866 /* NBLK ã®API æ©è½ã³ã¼ããè¨å®ããã*/843 /* NBLK のAPI 機能コードを設定する。*/ 867 844 cep->rcv_nblk_tfn = TFN_TCP_CLS_CEP; 868 845 869 if ((cep = tcp_user_closed(cep)) != NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/870 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/846 if ((cep = tcp_user_closed(cep)) != NULL) { /* コネクションを切断する。*/ 847 /* 切断セグメント出力をポストする。*/ 871 848 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 872 849 sig_sem(SEM_TCP_POST_OUTPUT); 873 850 } 874 851 875 /* cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã876 * æ¢ã«ã³ãã¯ã·ã§ã³ãåæããã¦ãããã¨ãæå³ãã¦ããã877 * ã¾ãããã®å ´åã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¦ããã852 /* cep が NULL で戻ってきた場合は、 853 * 既にコネクションが切断されていることを意味している。 854 * また、この場合コールバック関数が呼び出されている。 878 855 */ 879 856 return E_WBLK; 880 857 } 881 858 } 882 else { /* éãã³ããããã³ã°ã³ã¼ã«*/883 884 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 885 886 if ((cep = tcp_user_closed(cep)) == NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/887 888 /* cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã889 * æ¢ã«ã³ãã¯ã·ã§ã³ãåæããã¦ãããã¨ãæå³ãã¦ããã859 else { /* 非ノンブロッキングコール */ 860 861 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 862 863 if ((cep = tcp_user_closed(cep)) == NULL) { /* コネクションを切断する。*/ 864 865 /* cep が NULL で戻ってきた場合は、 866 * 既にコネクションが切断されていることを意味している。 890 867 */ 891 868 return error; 892 869 } 893 870 else { 894 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/871 /* 切断セグメント出力をポストする。*/ 895 872 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 896 873 sig_sem(SEM_TCP_POST_OUTPUT); 897 874 898 /* ã¤ãã³ããã©ã°ã CLOSED ã«ãªãã¾ã§å¾ 899 ã¤ã*/ 875 /* イベントフラグが CLOSED になるまで待つ。*/ 900 876 error = twai_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED, TWF_ORW, &flag, tmout); 901 877 if (error == E_OK && cep->error != E_OK) … … 904 880 if (error != E_OK) { 905 881 if (error == E_RLWAI) { 906 /* tcp_cls_cep ããã£ã³ã»ã«ãããã¨ãã¯ãRST ãéä¿¡ããã*/882 /* tcp_cls_cep がキャンセルされたときは、RST を送信する。*/ 907 883 tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una - 1, 908 884 cep->rbufsz - cep->rwbuf_count, TCP_FLG_RST); 909 885 } 910 886 911 /* ã¿ã¤ãã¼ãåæ¢ããã*/887 /* タイマーを停止する。*/ 912 888 tcp_cancel_timers(cep); 913 889 914 890 /* 915 * é信端ç¹ãããã¯ãã916 * åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã891 * 通信端点をロックし、 892 * 受信再構成キューのネットワークバッファを解放する。 917 893 */ 918 894 syscall(wai_sem(cep->semid_lock)); … … 920 896 syscall(sig_sem(cep->semid_lock)); 921 897 922 /* ç¶æ 923 ãæªä½¿ç¨ã«ããã*/ 898 /* 状態を未使用にする。*/ 924 899 cep->fsm_state = TCP_FSM_CLOSED; 925 900 926 901 /* 927 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã928 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½929 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½902 * 以下に関係しないフラグをクリアーする。 903 * ・送受信ウィンドバッファの省コピー機能 904 * ・動的な通信端点の生成・削除機能 930 905 */ 931 906 cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK | … … 933 908 934 909 /* 935 * é信端ç¹ãããã¯ãã936 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã910 * 通信端点をロックし、 911 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 937 912 */ 938 913 cep->rwbuf_count = 0; … … 962 937 963 938 /* 964 * tcp_sht_cep -- ãã¼ã¿éä¿¡ã®çµäºãæ¨æºæ©è½ã939 * tcp_sht_cep -- データ送信の終了【標準機能】 965 940 */ 966 941 … … 972 947 973 948 /* 974 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã975 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼949 * CEP をロックし、API 機能コードとタスク識別子を記録する。 950 * すでに記録されていれば、ペンディング中なのでエラー 976 951 */ 977 952 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SHT_CEP)) != E_OK) 978 953 return error; 979 954 980 /* TCP é信端ç¹ã®ã³ãã¯ã·ã§ã³ã確ç«ç¶æ 981 ã§ãªããã°ã¨ã©ã¼ */ 955 /* TCP 通信端点のコネクションが確立状態でなければエラー */ 982 956 if (!TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) { 983 957 if ((error = cep->error) == E_OK) … … 985 959 } 986 960 987 else if ((cep = tcp_user_closed(cep)) != NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/988 989 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/961 else if ((cep = tcp_user_closed(cep)) != NULL) { /* コネクションを切断する。*/ 962 963 /* 切断セグメント出力をポストする。*/ 990 964 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 991 965 sig_sem(SEM_TCP_POST_OUTPUT); … … 1002 976 1003 977 /* 1004 * tcp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã978 * tcp_snd_dat -- パケットの送信【標準機能】 1005 979 */ 1006 980 … … 1013 987 #ifdef TCP_CFG_NON_BLOCKING 1014 988 1015 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/989 /* data が NULL か、len < 0 ならエラー */ 1016 990 if (data == NULL || len < 0) 1017 991 return E_PAR; … … 1019 993 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1020 994 1021 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/995 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 1022 996 if (data == NULL || len < 0 || tmout == TMO_NBLK) 1023 997 return E_PAR; … … 1026 1000 1027 1001 /* 1028 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1029 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1002 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1003 * すでに記録されていれば、ペンディング中なのでエラー 1030 1004 */ 1031 1005 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_DAT)) != E_OK) 1032 1006 return error; 1033 1007 1034 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 1035 ãè¦ãã*/ 1008 /* 送信できるか、通信端点の状態を見る。*/ 1036 1009 if ((error = tcp_can_send_more(cep, TFN_TCP_SND_DAT, tmout)) != E_OK) 1037 1010 goto err_ret; … … 1039 1012 #ifdef TCP_CFG_NON_BLOCKING 1040 1013 1041 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1042 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1043 1044 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1014 /* タイムアウトをチェックする。*/ 1015 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1016 1017 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 1045 1018 if (!TCP_IS_SWBUF_FULL(cep)) { 1046 1019 1047 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1020 /* 送信ウィンドバッファにデータを書き込む。*/ 1048 1021 error = TCP_WRITE_SWBUF(cep, data, (uint_t)len); 1049 1022 1050 /* åºåããã¹ãããã*/1023 /* 出力をポストする。*/ 1051 1024 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1052 1025 sig_sem(SEM_TCP_POST_OUTPUT); … … 1054 1027 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1055 1028 1056 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1029 /* コールバック関数を呼び出す。*/ 1057 1030 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)error); 1058 1031 1059 1032 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1060 1033 1061 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1034 /* コールバック関数を呼び出す。*/ 1062 1035 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)&error); 1063 1036 … … 1076 1049 } 1077 1050 } 1078 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1079 1080 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1081 1082 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 1083 ã¤ã*/ 1051 else { /* 非ノンブロッキングコール */ 1052 1053 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1054 1055 /* 送信ウィンドバッファが空くのを待つ。*/ 1084 1056 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 1085 1057 goto err_ret; 1086 1058 1087 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1059 /* 送信ウィンドバッファにデータを書き込む。*/ 1088 1060 if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) { 1089 1061 1090 /* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/1062 /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/ 1091 1063 if (TCP_IS_SWBUF_FULL(cep)) 1092 1064 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; 1093 1065 1094 /* åºåããã¹ãããã*/1066 /* 出力をポストする。*/ 1095 1067 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1096 1068 sig_sem(SEM_TCP_POST_OUTPUT); … … 1116 1088 1117 1089 /* 1118 * tcp_snd_oob -- ç·æ¥ãã¼ã¿ã®éä¿¡ãæ¡å¼µæ©è½ã1090 * tcp_snd_oob -- 緊急データの送信【拡張機能】 1119 1091 */ 1120 1092 … … 1127 1099 #ifdef TCP_CFG_NON_BLOCKING 1128 1100 1129 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/1101 /* data が NULL か、len < 0 ならエラー */ 1130 1102 if (data == NULL || len < 0) 1131 1103 return E_PAR; … … 1133 1105 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1134 1106 1135 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/1107 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 1136 1108 if (data == NULL || len < 0 || tmout == TMO_NBLK) 1137 1109 return E_PAR; … … 1140 1112 1141 1113 /* 1142 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1143 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1114 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1115 * すでに記録されていれば、ペンディング中なのでエラー 1144 1116 */ 1145 1117 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_OOB)) != E_OK) 1146 1118 return error; 1147 1119 1148 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 1149 ãè¦ãã*/ 1120 /* 送信できるか、通信端点の状態を見る。*/ 1150 1121 if ((error = tcp_can_send_more(cep, TFN_TCP_SND_OOB, tmout)) != E_OK) 1151 1122 goto err_ret; … … 1153 1124 #ifdef TCP_CFG_NON_BLOCKING 1154 1125 1155 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1156 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1157 1158 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1126 /* タイムアウトをチェックする。*/ 1127 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1128 1129 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 1159 1130 if (!TCP_IS_SWBUF_FULL(cep)) { 1160 1131 1161 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1132 /* 送信ウィンドバッファにデータを書き込む。*/ 1162 1133 error = TCP_WRITE_SWBUF(cep, data, (uint_t)len); 1163 1134 1164 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/1135 /* 送信緊急ポインタを設定する。*/ 1165 1136 cep->snd_up = cep->snd_una + cep->swbuf_count; 1166 1137 1167 /* åºåããã¹ãããã*/1138 /* 出力をポストする。*/ 1168 1139 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1169 1140 sig_sem(SEM_TCP_POST_OUTPUT); … … 1171 1142 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1172 1143 1173 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1144 /* コールバック関数を呼び出す。*/ 1174 1145 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)error); 1175 1146 1176 1147 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1177 1148 1178 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1149 /* コールバック関数を呼び出す。*/ 1179 1150 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)&error); 1180 1151 … … 1193 1164 } 1194 1165 } 1195 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1196 1197 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1198 1199 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 1200 ã¤ã*/ 1166 else { /* 非ノンブロッキングコール */ 1167 1168 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1169 1170 /* 送信ウィンドバッファが空くのを待つ。*/ 1201 1171 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 1202 1172 goto err_ret; 1203 1173 1204 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1174 /* 送信ウィンドバッファにデータを書き込む。*/ 1205 1175 if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) { 1206 1176 1207 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/1177 /* 送信緊急ポインタを設定する。*/ 1208 1178 cep->snd_up = cep->snd_una + cep->swbuf_count; 1209 1179 1210 /* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/1180 /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/ 1211 1181 if (TCP_IS_SWBUF_FULL(cep)) 1212 1182 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; 1213 1183 1214 /* åºåããã¹ãããã*/1184 /* 出力をポストする。*/ 1215 1185 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1216 1186 sig_sem(SEM_TCP_POST_OUTPUT); … … 1236 1206 1237 1207 /* 1238 * tcp_get_buf -- éä¿¡ç¨ãããã¡ã®ç²å¾ãæ¨æºæ©è½ã1208 * tcp_get_buf -- 送信用バッファの獲得【標準機能】 1239 1209 */ 1240 1210 … … 1247 1217 #ifdef TCP_CFG_NON_BLOCKING 1248 1218 1249 /* p_buf ã NULL ãªãã¨ã©ã¼*/1219 /* p_buf が NULL ならエラー */ 1250 1220 if (p_buf == NULL) 1251 1221 return E_PAR; … … 1253 1223 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1254 1224 1255 /* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/1225 /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */ 1256 1226 if (p_buf == NULL || tmout == TMO_NBLK) 1257 1227 return E_PAR; … … 1260 1230 1261 1231 /* 1262 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1263 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1232 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1233 * すでに記録されていれば、ペンディング中なのでエラー 1264 1234 */ 1265 1235 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_GET_BUF)) != E_OK) 1266 1236 return error; 1267 1237 1268 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 1269 ãè¦ãã*/ 1238 /* 送信できるか、通信端点の状態を見る。*/ 1270 1239 if ((error = tcp_can_send_more(cep, TFN_TCP_GET_BUF, tmout)) != E_OK) 1271 1240 goto err_ret; … … 1273 1242 #ifdef TCP_CFG_NON_BLOCKING 1274 1243 1275 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1276 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1244 /* タイムアウトをチェックする。*/ 1245 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1277 1246 1278 1247 if (!TCP_IS_SWBUF_FULL(cep)) { 1279 1248 1280 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1249 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 1281 1250 error = TCP_GET_SWBUF_ADDR(cep, p_buf); 1282 1251 1283 1252 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1284 1253 1285 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1254 /* コールバック関数を呼び出す。*/ 1286 1255 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)error); 1287 1256 1288 1257 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1289 1258 1290 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1259 /* コールバック関数を呼び出す。*/ 1291 1260 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)&error); 1292 1261 … … 1304 1273 } 1305 1274 1306 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1307 1308 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1309 1310 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 1311 ã¤ã*/ 1275 else { /* 非ノンブロッキングコール */ 1276 1277 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1278 1279 /* 送信ウィンドバッファが空くのを待つ。*/ 1312 1280 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 1313 1281 goto err_ret; 1314 1282 1315 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/1283 /* 送信ウィンドバッファの空アドレスを獲得する。*/ 1316 1284 error = TCP_GET_SWBUF_ADDR(cep, p_buf); 1317 1285 … … 1333 1301 1334 1302 /* 1335 * tcp_snd_buf -- ãããã¡å 1336 ã®ãã¼ã¿ã®éä¿¡ãæ¨æºæ©è½ã 1303 * tcp_snd_buf -- バッファ内のデータの送信【標準機能】 1337 1304 */ 1338 1305 … … 1343 1310 ER error; 1344 1311 1345 /* éä¿¡ããé·ã len ããã§ãã¯ããã*/1312 /* 送信する長さ len をチェックする。*/ 1346 1313 if (len < 0) 1347 1314 return E_PAR; 1348 1315 1349 /* éä¿¡ããé·ãlen ã 0 ã§ããã°ãä½ãããªãã§æ»ãã*/1316 /* 送信する長さlen が 0 であれば、何もしないで戻る。*/ 1350 1317 if (len == 0) 1351 1318 return E_OK; 1352 1319 1353 1320 /* 1354 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1355 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1321 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1322 * すでに記録されていれば、ペンディング中なのでエラー 1356 1323 */ 1357 1324 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_BUF)) != E_OK) 1358 1325 return error; 1359 1326 1360 /* éä¿¡ããé·ã len ããã§ãã¯ããã*/1327 /* 送信する長さ len をチェックする。*/ 1361 1328 if (len > cep->get_buf_len) { 1362 1329 error = E_OBJ; … … 1364 1331 } 1365 1332 1366 /* éä¿¡ã§ããããCEP ã® FSM ç¶æ 1367 ãè¦ãã*/ 1333 /* 送信できるか、CEP の FSM 状態を見る。*/ 1368 1334 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { 1369 1335 if ((error = cep->error) == E_OK) … … 1372 1338 } 1373 1339 1374 /* éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã*/1340 /* 送信ウィンドバッファのデータを送信可能にする。*/ 1375 1341 TCP_SEND_SWBUF(cep, (uint_t)len); 1376 1342 1377 /* åºåããã¹ãããã*/1343 /* 出力をポストする。*/ 1378 1344 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1379 1345 sig_sem(SEM_TCP_POST_OUTPUT); … … 1390 1356 1391 1357 /* 1392 * tcp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã1358 * tcp_rcv_dat -- パケットの受信【標準機能】 1393 1359 */ 1394 1360 … … 1401 1367 #ifdef TCP_CFG_NON_BLOCKING 1402 1368 1403 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/1369 /* data が NULL か、len < 0 ならエラー */ 1404 1370 if (data == NULL || len < 0) 1405 1371 return E_PAR; … … 1407 1373 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1408 1374 1409 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/1375 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 1410 1376 if (data == NULL || len < 0 || tmout == TMO_NBLK) 1411 1377 return E_PAR; … … 1414 1380 1415 1381 /* 1416 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1417 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1382 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1383 * すでに記録されていれば、ペンディング中なのでエラー 1418 1384 */ 1419 1385 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_DAT)) != E_OK) 1420 1386 return error; 1421 1387 1422 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 1423 ãè¦ãã*/ 1388 /* 受信できるか、通信端点の状態を見る。*/ 1424 1389 if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK) 1425 1390 goto err_ret; … … 1427 1392 #ifdef TCP_CFG_NON_BLOCKING 1428 1393 1429 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1430 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1431 1432 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1394 /* タイムアウトをチェックする。*/ 1395 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1396 1397 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/ 1433 1398 if (cep->rwbuf_count > 0) { 1434 1399 1435 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/1400 /* 受信ウィンドバッファからデータを取り出す。*/ 1436 1401 len = TCP_READ_RWBUF(cep, data, (uint_t)len); 1437 1402 … … 1456 1421 } 1457 1422 } 1458 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1459 1460 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1461 1462 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 1463 ¥åãããã¾ã§å¾ 1464 ã¤ã*/ 1423 else { /* 非ノンブロッキングコール */ 1424 1425 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1426 1427 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 1465 1428 if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) 1466 1429 goto err_ret; 1467 1430 1468 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/1431 /* 受信ウィンドバッファからデータを取り出す。*/ 1469 1432 error = TCP_READ_RWBUF(cep, data, (uint_t)len); 1470 1433 1471 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/1434 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 1472 1435 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1473 1436 sig_sem(SEM_TCP_POST_OUTPUT); … … 1492 1455 1493 1456 /* 1494 * tcp_rcv_oob -- ç·æ¥ãã¼ã¿ã®åä¿¡ãæ¡å¼µæ©è½ã1457 * tcp_rcv_oob -- 緊急データの受信【拡張機能】 1495 1458 * 1496 * 注æ: éä¿¡å´ãè¤æ°ãªã¯ãããã®ãã¼ã¿ãéä¿¡ãã¦ãã1497 * ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ã®ã¿åä¿¡ããã1459 * 注意: 送信側が複数オクテットのデータを送信しても、 1460 * 緊急ポインタが指す 1 オクテットのデータのみ受信する。 1498 1461 */ 1499 1462 … … 1504 1467 uint8_t *urg; 1505 1468 1506 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1469 /* TCP 通信端点 ID をチェックする。*/ 1507 1470 if (!VAID_TCP_CEPID(cepid)) 1508 1471 return E_ID; 1509 1472 1510 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/1473 /* data が NULL か、len < 0 ならエラー */ 1511 1474 if (data == NULL || len < 0) 1512 1475 return E_PAR; 1513 1476 1514 /* TCP é信端ç¹ãå¾ãã*/1477 /* TCP 通信端点を得る。*/ 1515 1478 cep = GET_TCP_CEP(cepid); 1516 1479 1517 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 1518 ãè¦ãã*/ 1519 /* åä¿¡ã§ããããfsm_state ãè¦ãã*/ 1480 /* 受信できるか、通信端点の状態を見る。*/ 1481 /* 受信できるか、fsm_state を見る。*/ 1520 1482 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state)) 1521 1483 return E_OBJ; 1522 1484 1523 1485 /* 1524 * ç·æ¥ãã¼ã¿å 1525 ¥ãã®ã»ã°ã¡ã³ãã® TCP ãããã 1526 * è¨å®ããã¦ããªããã°ãç·æ¥ãã¼ã¿ãåä¿¡ãã¦ããªãã 1486 * 緊急データ入りのセグメントの TCP ヘッダが 1487 * 設定されていなければ、緊急データを受信していない。 1527 1488 */ 1528 1489 if (cep->urg_tcph == NULL) 1529 1490 return E_OBJ; 1530 1491 1531 /* len == 0 ãªããããã¡ãªã¼ãã¼ããã¼*/1492 /* len == 0 ならバッファオーバーフロー */ 1532 1493 if (len == 0) 1533 1494 return E_BOVR; 1534 1495 1535 /* ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ãèªã¿åãã*/1496 /* 緊急ポインタが指す 1 オクテットのデータを読み取る。*/ 1536 1497 urg = (uint8_t*)cep->urg_tcph + TCP_DATA_OFF(cep->urg_tcph->doff) + cep->urg_tcph->urp + TCP_CFG_URG_OFFSET; 1537 1498 *(uint8_t*)data = *urg; 1538 1499 1539 /* èªã¿åã£ããã¼ã¿ããå¾ãã® SDU ãåã«è©°ããã*/1500 /* 読み取ったデータから後ろの SDU を前に詰める。*/ 1540 1501 memcpy(urg, urg + 1, cep->urg_tcph->sum - (cep->urg_tcph->urp + TCP_CFG_URG_OFFSET) - 1); 1541 1502 1542 /* tcp_rcv_oob() ãå¼åºããããã¨ç¥ãããããã«ãNULL ãè¨å®ããã*/1503 /* tcp_rcv_oob() が呼出されたこと知らせるために、NULL を設定する。*/ 1543 1504 cep->urg_tcph = NULL; 1544 1505 … … 1553 1514 1554 1515 /* 1555 * tcp_rcv_buf -- åä¿¡ãããã¼ã¿ã®å 1556 ¥ã£ããããã¡ã®ç²å¾ãæ¨æºæ©è½ã 1516 * tcp_rcv_buf -- 受信したデータの入ったバッファの獲得【標準機能】 1557 1517 */ 1558 1518 … … 1565 1525 #ifdef TCP_CFG_NON_BLOCKING 1566 1526 1567 /* p_buf ã NULL ãªãã¨ã©ã¼*/1527 /* p_buf が NULL ならエラー */ 1568 1528 if (p_buf == NULL) 1569 1529 return E_PAR; … … 1571 1531 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1572 1532 1573 /* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/1533 /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */ 1574 1534 if (p_buf == NULL || tmout == TMO_NBLK) 1575 1535 return E_PAR; … … 1578 1538 1579 1539 /* 1580 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1581 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1540 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1541 * すでに記録されていれば、ペンディング中なのでエラー 1582 1542 */ 1583 1543 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_BUF)) != E_OK) 1584 1544 return error; 1585 1545 1586 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 1587 ãè¦ãã*/ 1546 /* 受信できるか、通信端点の状態を見る。*/ 1588 1547 if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK) 1589 1548 goto err_ret; … … 1591 1550 #ifdef TCP_CFG_NON_BLOCKING 1592 1551 1593 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1594 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1595 1596 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1552 /* タイムアウトをチェックする。*/ 1553 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1554 1555 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/ 1597 1556 if (cep->rwbuf_count > 0) { 1598 1557 1599 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/1558 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 1600 1559 error = TCP_GET_RWBUF_ADDR(cep, p_buf); 1601 1560 1602 1561 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1603 1562 1604 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1563 /* コールバック関数を呼び出す。*/ 1605 1564 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)error); 1606 1565 1607 1566 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1608 1567 1609 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1568 /* コールバック関数を呼び出す。*/ 1610 1569 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)&error); 1611 1570 … … 1621 1580 } 1622 1581 } 1623 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1624 1625 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1626 1627 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 1628 ¥åãããã¾ã§å¾ 1629 ã¤ã*/ 1582 else { /* 非ノンブロッキングコール */ 1583 1584 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1585 1586 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 1630 1587 if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) { 1631 1588 cep->rwbuf_count = 0; … … 1633 1590 } 1634 1591 1635 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãç²å¾ããã*/1592 /* 受信ウィンドバッファのアドレスを獲得する。*/ 1636 1593 error = TCP_GET_RWBUF_ADDR(cep, p_buf); 1637 1594 … … 1653 1610 1654 1611 /* 1655 * tcp_rel_buf -- åä¿¡ç¨ãããã¡ã®è§£æ¾ãæ¨æºæ©è½ã1612 * tcp_rel_buf -- 受信用バッファの解放【標準機能】 1656 1613 */ 1657 1614 … … 1662 1619 ER error; 1663 1620 1664 /* 解æ¾ããé·ã len ããã§ãã¯ããã*/1621 /* 解放する長さ len をチェックする。*/ 1665 1622 if (len < 0) 1666 1623 return E_PAR; 1667 1624 1668 1625 /* 1669 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1670 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1626 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1627 * すでに記録されていれば、ペンディング中なのでエラー 1671 1628 */ 1672 1629 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_REL_BUF)) != E_OK) 1673 1630 return error; 1674 1631 1675 /* 解æ¾ããé·ã len ããã§ãã¯ããã*/1632 /* 解放する長さ len をチェックする。*/ 1676 1633 if (len > cep->rcv_buf_len) { 1677 1634 error = E_OBJ; … … 1679 1636 } 1680 1637 1681 /* é信端ç¹ãããã¯ããã*/1638 /* 通信端点をロックする。*/ 1682 1639 syscall(wai_sem(cep->semid_lock)); 1683 1640 1684 /* åä¿¡ã¦ã£ã³ããããã¡ããåä¿¡ãããªã¯ããããåé¤ããã*/1641 /* 受信ウィンドバッファから受信したオクテットを削除する。*/ 1685 1642 TCP_DROP_RWBUF(cep, (uint_t)len); 1686 1643 1687 /* tcp_rcv_buf ã®å²å½ã¦é·ããªã»ããããã*/1644 /* tcp_rcv_buf の割当て長をリセットする。*/ 1688 1645 cep->rcv_buf_len = 0; 1689 1646 1690 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1647 /* 通信端点のロックを解除する。*/ 1691 1648 syscall(sig_sem(cep->semid_lock)); 1692 1649 1693 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/1650 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 1694 1651 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1695 1652 sig_sem(SEM_TCP_POST_OUTPUT); … … 1706 1663 1707 1664 /* 1708 * tcp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«1665 * tcp_can_snd -- ペンディングしている送信のキャンセル 1709 1666 */ 1710 1667 … … 1714 1671 ER error = E_OK; 1715 1672 1716 /* é信端ç¹ãããã¯ããã*/1673 /* 通信端点をロックする。*/ 1717 1674 syscall(wai_sem(cep->semid_lock)); 1718 1675 1719 1676 /* 1720 * snd_tskid ã TA_NULL ãªãã1721 * ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼1677 * snd_tskid が TA_NULL なら、 1678 * ペンディングしていないのでエラー 1722 1679 */ 1723 1680 if (cep->snd_tskid == TA_NULL) 1724 1681 error = EV_NOPND; 1725 1682 1726 /* ãã³ãã£ã³ã°ä¸ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼*/1683 /* ペンディング中の API 機能コードと一致しなければエラー */ 1727 1684 else if (fncd != TFN_TCP_ALL && fncd != cep->snd_tfn) 1728 1685 error = E_OBJ; 1729 1686 1730 /* å¦çããã£ã³ã»ã«ããã*/1687 /* 処理をキャンセルする。*/ 1731 1688 else { 1732 1689 1733 /* åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1690 /* 受信再構成キューのネットワークバッファを解放する。*/ 1734 1691 tcp_free_reassq(cep); 1735 1692 1736 /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1693 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/ 1737 1694 cep->rwbuf_count = 0; 1738 1695 TCP_FREE_RWBUFQ(cep); 1739 1696 1740 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1697 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 1741 1698 TCP_FREE_SWBUFQ(cep); 1742 1699 1743 1700 #ifdef TCP_CFG_NON_BLOCKING 1744 1701 1745 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) { /* ãã³ããããã³ã°ã³ã¼ã«*/1702 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) { /* ノンブロッキングコール */ 1746 1703 1747 1704 switch (cep->snd_nblk_tfn) { 1748 1705 1749 1706 case TFN_TCP_CON_CEP: 1750 /* é信端ç¹ããåä»å£ã解æ¾ããã*/1707 /* 通信端点から受付口を解放する。*/ 1751 1708 cep->rep = NULL; 1752 1709 cep->fsm_state = TCP_FSM_CLOSED; … … 1789 1746 } 1790 1747 1791 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1748 /* 通信端点のロックを解除する。*/ 1792 1749 syscall(sig_sem(cep->semid_lock)); 1793 1750 … … 1796 1753 1797 1754 /* 1798 * tcp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«1755 * tcp_can_rcv -- ペンディングしている受信のキャンセル 1799 1756 */ 1800 1757 … … 1804 1761 ER error = E_OK; 1805 1762 1806 /* é信端ç¹ãããã¯ããã*/1763 /* 通信端点をロックする。*/ 1807 1764 syscall(wai_sem(cep->semid_lock)); 1808 1765 1809 1766 /* 1810 * rcv_tskid ã TA_NULL ãªãã1811 * ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼1767 * rcv_tskid が TA_NULL なら、 1768 * ペンディングしていないのでエラー 1812 1769 */ 1813 1770 if (cep->rcv_tskid == TA_NULL) 1814 1771 error = EV_NOPND; 1815 1772 1816 /* ãã³ãã£ã³ã°ä¸ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼*/1773 /* ペンディング中の API 機能コードと一致しなければエラー */ 1817 1774 else if (fncd != TFN_TCP_ALL && fncd != cep->rcv_tfn) 1818 1775 error = E_OBJ; 1819 1776 1820 /* å¦çããã£ã³ã»ã«ããã*/1777 /* 処理をキャンセルする。*/ 1821 1778 else { 1822 1779 1823 /* åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1780 /* 受信再構成キューのネットワークバッファを解放する。*/ 1824 1781 tcp_free_reassq(cep); 1825 1782 1826 /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1783 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/ 1827 1784 cep->rwbuf_count = 0; 1828 1785 TCP_FREE_RWBUFQ(cep); 1829 1786 1830 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1787 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 1831 1788 TCP_FREE_SWBUFQ(cep); 1832 1789 1833 1790 #ifdef TCP_CFG_NON_BLOCKING 1834 1791 1835 if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { /* ãã³ããããã³ã°ã³ã¼ã«*/1792 if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { /* ノンブロッキングコール */ 1836 1793 1837 1794 switch (cep->rcv_nblk_tfn) { … … 1839 1796 case TFN_TCP_ACP_CEP: 1840 1797 /* 1841 * é信端ç¹ããåä»å£ã解æ¾ãã1842 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã1798 * 通信端点から受付口を解放し、 1799 * イベントフラグをクローズに設定する。 1843 1800 */ 1844 1801 cep->rep = NULL; … … 1888 1845 } 1889 1846 1890 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1847 /* 通信端点のロックを解除する。*/ 1891 1848 syscall(sig_sem(cep->semid_lock)); 1892 1849 … … 1895 1852 1896 1853 /* 1897 * tcp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã1854 * tcp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 1898 1855 */ 1899 1856 … … 1904 1861 ER error = E_OK, snd_err, rcv_err; 1905 1862 1906 /* API æ©è½ã³ã¼ãããã§ãã¯ããã*/1863 /* API 機能コードをチェックする。*/ 1907 1864 if (!VALID_TFN_TCP_CAN(fncd)) 1908 1865 return E_PAR; 1909 1866 1910 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1867 /* TCP 通信端点 ID をチェックする。*/ 1911 1868 if (!VAID_TCP_CEPID(cepid)) 1912 1869 return E_ID; 1913 1870 1914 /* TCP é信端ç¹ãå¾ãã*/1871 /* TCP 通信端点を得る。*/ 1915 1872 cep = GET_TCP_CEP(cepid); 1916 1873 1917 /* TCP é信端ç¹ããã§ãã¯ããã*/1874 /* TCP 通信端点をチェックする。*/ 1918 1875 if (!VALID_TCP_CEP(cep)) 1919 1876 return E_NOEXS; 1920 1877 1921 if (fncd == TFN_TCP_ALL) { /* TFN_TCP_ALL ã®å¦ç*/1878 if (fncd == TFN_TCP_ALL) { /* TFN_TCP_ALL の処理 */ 1922 1879 snd_err = tcp_can_snd(cep, fncd); 1923 1880 rcv_err = tcp_can_rcv(cep, fncd); 1924 1881 1925 1882 /* 1926 * snd_err 㨠rcv_err ã®ã©ã¡ããEV_NOPND1927 * ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼1883 * snd_err と rcv_err のどちらも EV_NOPND 1884 * なら、ペンディングしていないのでエラー 1928 1885 */ 1929 1886 if (snd_err == EV_NOPND && rcv_err == EV_NOPND) … … 1942 1899 } 1943 1900 1944 else if (IS_TFN_TCP_RCV(fncd)) { /* åä¿¡å¦çã®ãã£ã³ã»ã«*/1901 else if (IS_TFN_TCP_RCV(fncd)) { /* 受信処理のキャンセル */ 1945 1902 if ((error = tcp_can_rcv(cep, fncd)) == EV_NOPND) 1946 1903 error = E_OBJ; 1947 1904 } 1948 1905 1949 else { /* éä¿¡å¦çã®ãã£ã³ã»ã«*/1906 else { /* 送信処理のキャンセル */ 1950 1907 if ((error = tcp_can_snd(cep, fncd)) == EV_NOPND) 1951 1908 error = E_OBJ; … … 1958 1915 1959 1916 /* 1960 * tcp_set_opt -- TCP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã1917 * tcp_set_opt -- TCP 通信端点オプションの設定【拡張機能】 1961 1918 * 1962 * 注æ: è¨å®å¯è½ãª TCP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã1919 * 注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。 1963 1920 */ 1964 1921 … … 1972 1929 T_TCP_CEP *cep; 1973 1930 1974 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1931 /* TCP 通信端点 ID をチェックする。*/ 1975 1932 if (!VAID_TCP_CEPID(cepid)) 1976 1933 return E_ID; 1977 1934 1978 /* TCP é信端ç¹ãå¾ãã*/1935 /* TCP 通信端点を得る。*/ 1979 1936 cep = GET_TCP_CEP(cepid); 1980 1937 1981 /* TCP é信端ç¹ããã§ãã¯ããã*/1938 /* TCP 通信端点をチェックする。*/ 1982 1939 if (!VALID_TCP_CEP(cep)) 1983 1940 return E_NOEXS; … … 1991 1948 1992 1949 /* 1993 * tcp_get_opt -- TCP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã1950 * tcp_get_opt -- TCP 通信端点オプションの設定【拡張機能】 1994 1951 * 1995 * 注æ: è¨å®å¯è½ãª TCP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã1952 * 注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。 1996 1953 */ 1997 1954 … … 2005 1962 T_TCP_CEP *cep; 2006 1963 2007 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1964 /* TCP 通信端点 ID をチェックする。*/ 2008 1965 if (!VAID_TCP_CEPID(cepid)) 2009 1966 return E_ID; 2010 1967 2011 /* TCP é信端ç¹ãå¾ãã*/1968 /* TCP 通信端点を得る。*/ 2012 1969 cep = GET_TCP_CEP(cepid); 2013 1970 2014 /* TCP é信端ç¹ããã§ãã¯ããã*/1971 /* TCP 通信端点をチェックする。*/ 2015 1972 if (!VALID_TCP_CEP(cep)) 2016 1973 return E_NOEXS; -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * TCP ãããã»ãã¤ãã¼ãã¢ã¯ã»ã¹ãã¯ã74 * TCP ヘッダ・ペイロードアクセスマクロ 87 75 */ 88 76 … … 105 93 106 94 /* 107 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©95 * TINET 1.1 との互換性のための定義 108 96 */ 109 97 … … 118 106 119 107 /* 120 * TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©108 * TINET 1.3 との互換性のための定義 121 109 */ 122 110 … … 127 115 128 116 /* 129 * ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©117 * コールバック関数の定義 130 118 */ 131 119 … … 133 121 134 122 /* 135 * TCP åä»å£136 */ 137 138 /* IPv4 ç¨ TCP åä»å£*/123 * TCP 受付口 124 */ 125 126 /* IPv4 用 TCP 受付口 */ 139 127 typedef struct t_tcp4_rep { 140 128 141 129 /* 142 * ITRON TCP/IP API ãTCP åä»å£ã¨åãã¡ã³ã130 * ITRON TCP/IP API、TCP 受付口と同じメンバ 143 131 */ 144 ATR repatr; /* åä»å£å±æ§*/145 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/132 ATR repatr; /* 受付口属性 */ 133 T_IPV4EP myaddr; /* 自分のアドレス */ 146 134 147 135 #ifdef TCP_CFG_EXTENTIONS 148 uint16_t flags; /* åä»å£ãã©ã°*/149 ID semid_lock; /* åä»å£ããã¯*/136 uint16_t flags; /* 受付口フラグ */ 137 ID semid_lock; /* 受付口ロック */ 150 138 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 151 139 152 140 } T_TCP4_REP; 153 141 154 /* IPv6 ç¨ TCP åä»å£*/142 /* IPv6 用 TCP 受付口 */ 155 143 typedef struct t_tcp6_rep { 156 144 157 145 /* 158 * ITRON TCP/IP API ãTCP åä»å£ã¨åãã¡ã³ã146 * ITRON TCP/IP API、TCP 受付口と同じメンバ 159 147 */ 160 ATR repatr; /* åä»å£å±æ§*/161 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/148 ATR repatr; /* 受付口属性 */ 149 T_IPV6EP myaddr; /* 自分のアドレス */ 162 150 163 151 #ifdef TCP_CFG_EXTENTIONS 164 uint16_t flags; /* åä»å£ãã©ã°*/165 ID semid_lock; /* åä»å£ããã¯*/152 uint16_t flags; /* 受付口フラグ */ 153 ID semid_lock; /* 受付口ロック */ 166 154 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 167 155 … … 177 165 178 166 /* 179 * åä»å£ãã©ã°180 */ 181 182 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* åççæã»åé¤å¯è½åä»å£ã*/183 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* çææ¸ã¿ã§æå¹ãªåä»å£ã*/184 185 /* 186 * TCP é信端ç¹167 * 受付口フラグ 168 */ 169 170 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能受付口。 */ 171 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な受付口。 */ 172 173 /* 174 * TCP 通信端点 187 175 */ 188 176 … … 192 180 193 181 /* 194 * é常㮠IPv4 TCP é信端ç¹182 * 通常の IPv4 TCP 通信端点 195 183 */ 196 184 typedef struct t_tcp4_cep { 197 185 198 186 /* 199 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã187 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 200 188 */ 201 ATR cepatr; /* é信端ç¹å±æ§*/202 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡*/203 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/204 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡*/205 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/206 t_tcp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/189 ATR cepatr; /* 通信端点属性 */ 190 void *sbuf; /* 送信用ウィンドバッファ */ 191 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 192 void *rbuf; /* 受信用ウィンドバッファ */ 193 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 194 t_tcp_callback callback; /* コールバック関数 */ 207 195 208 196 /* 209 * TINET ç¬èªã®ã¡ã³ã197 * TINET 独自のメンバ 210 198 */ 211 uint32_t flags; /* é信端ç¹ãã©ã° */ 212 ID semid_lock; /* é信端ç¹ãã㯠*/ 213 ID est_flgid; /* ã³ãã¯ã·ã§ã³ç¶æ 214 ã¤ãã³ããã©ã° */ 215 ID snd_flgid; /* éä¿¡ã¤ãã³ããã©ã° */ 216 ID rcv_flgid; /* åä¿¡ã¤ãã³ããã©ã° */ 217 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å */ 218 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å */ 219 uint8_t *sbuf_rptr; /* éä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 220 uint8_t *sbuf_wptr; /* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 221 uint8_t *rbuf_rptr; /* åä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 222 uint8_t *rbuf_wptr; /* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 223 T_TCP_SEQ snd_ssthresh; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd) */ 224 /* ã®ãããå¤ */ 225 T_TCP_TIME rxtcur; /* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */ 226 T_TCP_TIME srtt; /* å¹³æ»åããã RTT */ 227 T_TCP_TIME rttvar; /* å¹³æ»åãããåæ£ */ 228 T_TCP_WND snd_cwnd; /* 輻輳ã¦ã£ã³ããµã¤ãº */ 199 uint32_t flags; /* 通信端点フラグ */ 200 ID semid_lock; /* 通信端点ロック */ 201 ID est_flgid; /* コネクション状態イベントフラグ */ 202 ID snd_flgid; /* 送信イベントフラグ */ 203 ID rcv_flgid; /* 受信イベントフラグ */ 204 ID snd_tskid; /* 送信タスク識別子 */ 205 ID rcv_tskid; /* 受信タスク識別子 */ 206 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */ 207 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */ 208 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */ 209 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */ 210 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */ 211 /* のしきい値 */ 212 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */ 213 T_TCP_TIME srtt; /* 平滑化された RTT */ 214 T_TCP_TIME rttvar; /* 平滑化された分散 */ 215 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */ 229 216 230 217 /* 231 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº218 * 相手の最大受信セグメントサイズ 232 219 * 233 * ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxseg) ã¨ã 234 * ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxopd) ãå¥ã« 235 * ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã® 236 * ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã 237 * æ¬å®è£ 238 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯ 239 * å®è£ 240 ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã 220 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 221 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 222 * なっている。これは、現在のインターネットでは、オプション付きの 223 * セグメントのほうが多いからと説明されているためである。 224 * 本実装では、最大セグメントサイズオプション以外のオプションは 225 * 実装しないので、t_maxseg の使用する。 241 226 */ 242 227 T_TCP_SEG maxseg; 243 228 244 int16_t snd_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/245 int16_t rcv_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/229 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 230 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 246 231 247 232 #ifdef TCP_CFG_NON_BLOCKING 248 233 249 T_IPV4EP *p_dstaddr; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿ */ 250 T_IPV4EP *p_myaddr; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿ */ 251 int16_t snd_nblk_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 252 int16_t rcv_nblk_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 253 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 254 é ã¢ãã¬ã¹ */ 255 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 256 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 257 é ã¢ãã¬ã¹ */ 258 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 259 void **snd_p_buf; /* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 260 void **rcv_p_buf; /* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 234 T_IPV4EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 235 T_IPV4EP *p_myaddr; /* 自分のアドレスへのポインタ */ 236 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 237 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ 238 void *snd_data; /* 送信データ領域の先頭アドレス */ 239 int_t snd_len; /* 送信データ領域の長さ */ 240 void *rcv_data; /* 受信データ領域の先頭アドレス */ 241 int_t rcv_len; /* 受信データ領域の長さ */ 242 void **snd_p_buf; /* 送信バッファへのポインタ */ 243 void **rcv_p_buf; /* 受信バッファへのポインタ */ 261 244 262 245 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 263 246 264 247 #ifdef TCP_CFG_SWBUF_CSAVE 265 T_NET_BUF *swbufq; /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/248 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 266 249 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */ 267 250 268 251 /* 269 * ãã以éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ãã¯ãªã¢ã¼ãããã252 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 270 253 */ 271 254 272 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP ã®ã¿ã¤ã*/273 T_IPV4EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹*/274 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/275 T_TCP4_REP *rep; /* åä»å£*/276 T_NET_BUF *reassq; /* åä¿¡åæ§æãã¥ã¼*/255 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 256 T_IPV4EP dstaddr; /* 相手のアドレス */ 257 T_IPV4EP myaddr; /* 自分のアドレス */ 258 T_TCP4_REP *rep; /* 受付口 */ 259 T_NET_BUF *reassq; /* 受信再構成キュー */ 277 260 278 261 #ifdef TCP_CFG_RWBUF_CSAVE 279 T_NET_BUF *rwbufq; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/262 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 280 263 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */ 281 264 282 265 #ifdef TCP_CFG_EXTENTIONS 283 T_TCP_HDR *urg_tcph; /* ç·æ¥ãã¼ã¿å 284 ¥ãã®ã»ã°ã¡ã³ãã® TCP ããã */ 285 T_TCP_SEQ snd_up; /* éä¿¡ããç·æ¥ãã¤ã³ã¿ */ 286 T_TCP_SEQ rcv_up; /* åä¿¡ããç·æ¥ãã¤ã³ã¿ */ 266 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 267 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 268 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 287 269 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 288 270 289 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 290 /* 確èªãããæ大éä¿¡ SEQ */ 291 T_TCP_SEQ snd_max; /* éä¿¡ããæ大 SEQ */ 292 T_TCP_SEQ snd_nxt; /* 次ã«éä¿¡ãã SEQ */ 293 T_TCP_SEQ snd_old_nxt; /* å 294 ã® snd_nxt */ 295 T_TCP_SEQ snd_wl1; /* ååã¦ã£ã³ããæ´æ°ãã SEQ */ 296 T_TCP_SEQ snd_wl2; /* ååã¦ã£ã³ããæ´æ°ãã ACK */ 297 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 298 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 299 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 300 ãã¦ããæå°ã® SEQ */ 301 T_TCP_SEQ rcv_adv; /* åä¿¡ãæå¾ 302 ãã¦ããæ大㮠SEQ */ 303 T_TCP_SEQ rcv_wnd; /* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 304 T_TCP_SEQ rtseq; /* æéè¨æ¸¬ãå§ãã SEQ */ 305 T_TCP_SEQ last_ack_sent; /* æå¾ã«éä¿¡ãã ACK */ 306 T_TCP_TIME idle; /* ã¢ã¤ãã«æé */ 307 ER error; /* éåæã«çºçããã¨ã©ã¼ */ 308 ER net_error; /* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ 309 */ 310 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 311 T_TCP_WND max_sndwnd; /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº */ 312 T_TCP_TIME rtt; /* å¾å¾©æé */ 313 uint16_t swbuf_count; /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 314 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 315 uint16_t rcv_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 316 uint16_t get_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 317 uint8_t rxtshift; /* åéä¿¡åæ°ã® log(2) */ 318 uint8_t fsm_state; /* FSM ç¶æ 319 */ 320 uint8_t dupacks; /* åé ACK æ° */ 271 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 272 /* 確認された最大送信 SEQ */ 273 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */ 274 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */ 275 T_TCP_SEQ snd_old_nxt; /* 元の snd_nxt */ 276 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */ 277 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */ 278 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 279 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 280 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 281 T_TCP_SEQ rcv_adv; /* 受信を期待している最大の SEQ */ 282 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */ 283 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */ 284 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */ 285 T_TCP_TIME idle; /* アイドル時間 */ 286 ER error; /* 非同期に発生したエラー */ 287 ER net_error; /* ネットワークのエラー状態 */ 288 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 289 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */ 290 T_TCP_TIME rtt; /* 往復時間 */ 291 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */ 292 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 293 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */ 294 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */ 295 uint8_t rxtshift; /* 再送信回数の log(2) */ 296 uint8_t fsm_state; /* FSM 状態 */ 297 uint8_t dupacks; /* 再送 ACK 数 */ 321 298 322 299 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 323 uint8_t rwbufq_entries; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ã¨ã³ããªæ°*/300 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 324 301 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 325 302 … … 327 304 328 305 /* 329 * Time Wait ç¨ IPv4 TCP é信端ç¹306 * Time Wait 用 IPv4 TCP 通信端点 330 307 */ 331 308 typedef struct t_tcp4_twcep { 332 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 333 T_TCP_TIME timer_2msl; /* 2MSL ã¿ã¤ã */ 334 T_IPV4EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹ */ 335 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 336 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 337 /* 確èªãããæ大éä¿¡ SEQ */ 338 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 339 ãã¦ããæå°ã® SEQ */ 340 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 341 uint8_t fsm_state; /* FSM ç¶æ 342 */ 309 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 310 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 311 T_IPV4EP dstaddr; /* 相手のアドレス */ 312 T_IPV4EP myaddr; /* 自分のアドレス */ 313 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 314 /* 確認された最大送信 SEQ */ 315 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 316 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 317 uint8_t fsm_state; /* FSM 状態 */ 343 318 344 319 } T_TCP4_TWCEP; 345 320 346 321 /* 347 * é常㮠IPv6 TCP é信端ç¹322 * 通常の IPv6 TCP 通信端点 348 323 */ 349 324 typedef struct t_tcp6_cep { 350 325 351 326 /* 352 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã327 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 353 328 */ 354 ATR cepatr; /* é信端ç¹å±æ§*/355 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡*/356 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/357 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡*/358 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/359 t_tcp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/329 ATR cepatr; /* 通信端点属性 */ 330 void *sbuf; /* 送信用ウィンドバッファ */ 331 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 332 void *rbuf; /* 受信用ウィンドバッファ */ 333 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 334 t_tcp_callback callback; /* コールバック関数 */ 360 335 361 336 /* 362 * TINET ç¬èªã®ã¡ã³ã337 * TINET 独自のメンバ 363 338 */ 364 uint32_t flags; /* é信端ç¹ãã©ã° */ 365 ID semid_lock; /* é信端ç¹ãã㯠*/ 366 ID est_flgid; /* ã³ãã¯ã·ã§ã³ç¶æ 367 ã¤ãã³ããã©ã° */ 368 ID snd_flgid; /* éä¿¡ã¤ãã³ããã©ã° */ 369 ID rcv_flgid; /* åä¿¡ã¤ãã³ããã©ã° */ 370 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å */ 371 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å */ 372 uint8_t *sbuf_rptr; /* éä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 373 uint8_t *sbuf_wptr; /* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 374 uint8_t *rbuf_rptr; /* åä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 375 uint8_t *rbuf_wptr; /* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 376 T_TCP_SEQ snd_ssthresh; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd) */ 377 /* ã®ãããå¤ */ 378 T_TCP_TIME rxtcur; /* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */ 379 T_TCP_TIME srtt; /* å¹³æ»åããã RTT */ 380 T_TCP_TIME rttvar; /* å¹³æ»åãããåæ£ */ 381 T_TCP_WND snd_cwnd; /* 輻輳ã¦ã£ã³ããµã¤ãº */ 339 uint32_t flags; /* 通信端点フラグ */ 340 ID semid_lock; /* 通信端点ロック */ 341 ID est_flgid; /* コネクション状態イベントフラグ */ 342 ID snd_flgid; /* 送信イベントフラグ */ 343 ID rcv_flgid; /* 受信イベントフラグ */ 344 ID snd_tskid; /* 送信タスク識別子 */ 345 ID rcv_tskid; /* 受信タスク識別子 */ 346 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */ 347 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */ 348 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */ 349 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */ 350 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */ 351 /* のしきい値 */ 352 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */ 353 T_TCP_TIME srtt; /* 平滑化された RTT */ 354 T_TCP_TIME rttvar; /* 平滑化された分散 */ 355 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */ 382 356 383 357 /* 384 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº358 * 相手の最大受信セグメントサイズ 385 359 * 386 * ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxseg) ã¨ã 387 * ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxopd) ãå¥ã« 388 * ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã® 389 * ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã 390 * æ¬å®è£ 391 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯ 392 * å®è£ 393 ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã 360 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 361 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 362 * なっている。これは、現在のインターネットでは、オプション付きの 363 * セグメントのほうが多いからと説明されているためである。 364 * 本実装では、最大セグメントサイズオプション以外のオプションは 365 * 実装しないので、t_maxseg の使用する。 394 366 */ 395 367 T_TCP_SEG maxseg; 396 368 397 T_IPV6EP *p_dstaddr; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/398 T_IPV6EP *p_myaddr; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/399 int16_t snd_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/400 int16_t rcv_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/369 T_IPV6EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 370 T_IPV6EP *p_myaddr; /* 自分のアドレスへのポインタ */ 371 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 372 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 401 373 402 374 #ifdef TCP_CFG_NON_BLOCKING 403 375 404 int16_t snd_nblk_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 405 int16_t rcv_nblk_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 406 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 407 é ã¢ãã¬ã¹ */ 408 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 409 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 410 é ã¢ãã¬ã¹ */ 411 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 412 void **snd_p_buf; /* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 413 void **rcv_p_buf; /* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 376 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 377 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ 378 void *snd_data; /* 送信データ領域の先頭アドレス */ 379 int_t snd_len; /* 送信データ領域の長さ */ 380 void *rcv_data; /* 受信データ領域の先頭アドレス */ 381 int_t rcv_len; /* 受信データ領域の長さ */ 382 void **snd_p_buf; /* 送信バッファへのポインタ */ 383 void **rcv_p_buf; /* 受信バッファへのポインタ */ 414 384 415 385 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 416 386 417 387 #ifdef TCP_CFG_SWBUF_CSAVE 418 T_NET_BUF *swbufq; /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/388 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 419 389 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */ 420 390 421 391 /* 422 * ãã以éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ãã¯ãªã¢ã¼ãããã392 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 423 393 */ 424 394 425 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP ã®ã¿ã¤ã*/426 T_IPV6EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹*/427 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/428 T_TCP6_REP *rep; /* åä»å£*/429 T_NET_BUF *reassq; /* åä¿¡åæ§æãã¥ã¼*/395 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 396 T_IPV6EP dstaddr; /* 相手のアドレス */ 397 T_IPV6EP myaddr; /* 自分のアドレス */ 398 T_TCP6_REP *rep; /* 受付口 */ 399 T_NET_BUF *reassq; /* 受信再構成キュー */ 430 400 431 401 #ifdef TCP_CFG_RWBUF_CSAVE 432 T_NET_BUF *rwbufq; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/402 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 433 403 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */ 434 404 435 405 #ifdef TCP_CFG_EXTENTIONS 436 T_TCP_HDR *urg_tcph; /* ç·æ¥ãã¼ã¿å 437 ¥ãã®ã»ã°ã¡ã³ãã® TCP ããã */ 438 T_TCP_SEQ snd_up; /* éä¿¡ããç·æ¥ãã¤ã³ã¿ */ 439 T_TCP_SEQ rcv_up; /* åä¿¡ããç·æ¥ãã¤ã³ã¿ */ 406 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 407 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 408 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 440 409 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 441 410 442 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 443 /* 確èªãããæ大éä¿¡ SEQ */ 444 T_TCP_SEQ snd_max; /* éä¿¡ããæ大 SEQ */ 445 T_TCP_SEQ snd_nxt; /* 次ã«éä¿¡ãã SEQ */ 446 T_TCP_SEQ snd_old_nxt; /* å 447 ã® snd_nxt */ 448 T_TCP_SEQ snd_wl1; /* ååã¦ã£ã³ããæ´æ°ãã SEQ */ 449 T_TCP_SEQ snd_wl2; /* ååã¦ã£ã³ããæ´æ°ãã ACK */ 450 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 451 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 452 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 453 ãã¦ããæå°ã® SEQ */ 454 T_TCP_SEQ rcv_adv; /* åä¿¡ãæå¾ 455 ãã¦ããæ大㮠SEQ */ 456 T_TCP_SEQ rcv_wnd; /* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 457 T_TCP_SEQ rtseq; /* æéè¨æ¸¬ãå§ãã SEQ */ 458 T_TCP_SEQ last_ack_sent; /* æå¾ã«éä¿¡ãã ACK */ 459 T_TCP_TIME idle; /* ã¢ã¤ãã«æé */ 460 ER error; /* éåæã«çºçããã¨ã©ã¼ */ 461 ER net_error; /* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ 462 */ 463 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 464 T_TCP_WND max_sndwnd; /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº */ 465 T_TCP_TIME rtt; /* å¾å¾©æé */ 466 uint16_t swbuf_count; /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 467 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 468 uint16_t rcv_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 469 uint16_t get_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 470 uint8_t rxtshift; /* åéä¿¡åæ°ã® log(2) */ 471 uint8_t fsm_state; /* FSM ç¶æ 472 */ 473 uint8_t dupacks; /* åé ACK æ° */ 411 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 412 /* 確認された最大送信 SEQ */ 413 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */ 414 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */ 415 T_TCP_SEQ snd_old_nxt; /* 元の snd_nxt */ 416 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */ 417 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */ 418 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 419 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 420 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 421 T_TCP_SEQ rcv_adv; /* 受信を期待している最大の SEQ */ 422 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */ 423 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */ 424 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */ 425 T_TCP_TIME idle; /* アイドル時間 */ 426 ER error; /* 非同期に発生したエラー */ 427 ER net_error; /* ネットワークのエラー状態 */ 428 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 429 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */ 430 T_TCP_TIME rtt; /* 往復時間 */ 431 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */ 432 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 433 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */ 434 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */ 435 uint8_t rxtshift; /* 再送信回数の log(2) */ 436 uint8_t fsm_state; /* FSM 状態 */ 437 uint8_t dupacks; /* 再送 ACK 数 */ 474 438 475 439 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 476 uint8_t rwbufq_entries; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ã¨ã³ããªæ°*/440 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 477 441 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 478 442 … … 480 444 481 445 /* 482 * Time Wait ç¨ IPv6 TCP é信端ç¹446 * Time Wait 用 IPv6 TCP 通信端点 483 447 */ 484 448 typedef struct t_tcp6_twcep { 485 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 486 T_TCP_TIME timer_2msl; /* 2MSL ã¿ã¤ã */ 487 T_IPV6EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹ */ 488 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 489 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 490 /* 確èªãããæ大éä¿¡ SEQ */ 491 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 492 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 493 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 494 ãã¦ããæå°ã® SEQ */ 495 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 496 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 497 uint8_t fsm_state; /* FSM ç¶æ 498 */ 449 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 450 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 451 T_IPV6EP dstaddr; /* 相手のアドレス */ 452 T_IPV6EP myaddr; /* 自分のアドレス */ 453 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 454 /* 確認された最大送信 SEQ */ 455 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 456 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 457 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 458 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 459 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 460 uint8_t fsm_state; /* FSM 状態 */ 499 461 500 462 } T_TCP6_TWCEP; … … 513 475 514 476 /* 515 * TCP é信端ç¹ã®ç¶æ 516 ãã©ã° 517 */ 518 519 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000001) /* ç´ã¡ã«ç¸æã« ACK ãéãã */ 520 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000002) /* ACK ãé 521 延ããã */ 522 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000004) /* FIN ãéã£ã¦ããã */ 523 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000008) /* SYN ãéä¿¡ããã */ 524 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00000010) /* FIN ãéä¿¡ããã */ 525 #define TCP_CEP_FLG_FORCE ULONG_C(0x00000020) /* å¼·å¶éä¿¡ã */ 526 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00000040) /* push ããªãã */ 527 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00000080) /* é 528 延ããªãã */ 529 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00000100) /* å¼·å¶éä¿¡ããå¾ãã©ã°ãã¯ãªã¢ã¼ããã*/ 530 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00000200) /* éä¿¡ãéå§ããã */ 531 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00000400) /* éä¿¡ãäºç´ããã */ 532 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00001000) /* åççæã»åé¤å¯è½é信端ç¹ã */ 533 #define TCP_CEP_FLG_VALID ULONG_C(0x00002000) /* çææ¸ã¿ã§æå¹ãªé信端ç¹ã */ 534 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00004000) /* éä¿¡ããå¾ã³ãã¯ã·ã§ã³ãéããã*/ 535 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000) /* éä¿¡ããå¾ãsnd_nxt ãå 536 ã«æ»ãã*/ 537 538 /* éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ */ 539 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x00080000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦è¦æ± */ 540 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x00070000) /* ãã¹ã¯ */ 541 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* éä¿¡ã¦ã£ã³ããããã¡æªä½¿ç¨ */ 542 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x00010000) /* ç¸æã®åä¿¡ã¦ã£ã³ãã®éãå¾ 543 ã¡ */ 544 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x00020000) /* ãããã¯ã¼ã¯ãããã¡äºç´å¾ 545 ã¡ */ 546 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x00030000) /* ãããã¯ã¼ã¯ãããã¡äºç´æ¸ã¿ */ 547 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x00040000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿ */ 548 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x00050000) /* éä¿¡å¯è½ */ 549 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x00060000) /* éä¿¡æ¸ã¿ã§ãACKå¾ 550 ã¡ */ 551 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x00070000) /* éä¿¡æ¸ã¿ã§ãACKå®äº */ 552 553 /* 554 * é信端ç¹ã¤ãã³ããã©ã° 555 */ 556 557 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* ã³ãã¯ã·ã§ã³ç¢ºç« */ 558 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* æªä½¿ç¨ç¶æ 559 */ 560 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* éä¿¡ã¦ã£ã³ããããã¡ç©ºã */ 561 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* éä¿¡ã¦ã£ã³ããããã¡ãã¼ã¿ãã */ 562 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* å 563 ¨ã¤ãã³ã */ 564 565 /* 566 * 追å API æ©è½ã»äºè±¡ã³ã¼ã 567 */ 568 569 /* TCP é¢ä¿ */ 477 * TCP 通信端点の状態フラグ 478 */ 479 480 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000001) /* 直ちに相手に ACK を送る。 */ 481 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000002) /* ACK を遅延する。 */ 482 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000004) /* FIN を送ってある。 */ 483 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000008) /* SYN を送信する。 */ 484 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00000010) /* FIN を送信する。 */ 485 #define TCP_CEP_FLG_FORCE ULONG_C(0x00000020) /* 強制送信。 */ 486 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00000040) /* push しない。 */ 487 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00000080) /* 遅延しない。 */ 488 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00000100) /* 強制送信した後フラグをクリアーする。*/ 489 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00000200) /* 送信を開始する。 */ 490 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00000400) /* 送信を予約する。 */ 491 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00001000) /* 動的生成・削除可能通信端点。 */ 492 #define TCP_CEP_FLG_VALID ULONG_C(0x00002000) /* 生成済みで有効な通信端点。 */ 493 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00004000) /* 送信した後コネクションを閉じる。*/ 494 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000) /* 送信した後、snd_nxt を元に戻す。*/ 495 496 /* 送受信ウィンドバッファの省コピー機能 */ 497 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x00080000) /* ネットワークバッファ割当て要求 */ 498 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x00070000) /* マスク */ 499 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* 送信ウィンドバッファ未使用 */ 500 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x00010000) /* 相手の受信ウィンドの開き待ち */ 501 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x00020000) /* ネットワークバッファ予約待ち */ 502 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x00030000) /* ネットワークバッファ予約済み */ 503 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x00040000) /* ネットワークバッファ割当て済み */ 504 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x00050000) /* 送信可能 */ 505 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x00060000) /* 送信済みで、ACK待ち */ 506 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x00070000) /* 送信済みで、ACK完了 */ 507 508 /* 509 * 通信端点イベントフラグ 510 */ 511 512 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* コネクション確立 */ 513 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* 未使用状態 */ 514 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* 送信ウィンドバッファ空き */ 515 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり */ 516 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* 全イベント */ 517 518 /* 519 * 追加 API 機能・事象コード 520 */ 521 522 /* TCP 関係 */ 570 523 571 524 #define TFN_TCP_UNDEF (0) 572 525 573 526 /* 574 * srtt: å¹³æ»åãããRTT575 * rttvar: å¹³æ»åãããåæ£576 * rtt: 測å®ãããå¾å¾©æé527 * srtt: 平滑化された RTT 528 * rttvar: 平滑化された分散 529 * rtt: 測定された往復時間 577 530 * 578 * å¹³æ»åããã RTT (srtt) ã¨å¹³æ»åãããåæ£ (rttvar) ã579 * æ´æ°åã§è¨ç®ããããã«ãå·¦ã·ãããã¦ã¹ã±ã¼ã«ããã580 * srtt 㯠2 é²å°æ°ç¹ä»¥ä¸ 3 ãããã581 * rttvar 㯠2 é²å°æ°ç¹ä»¥ä¸ 2 ããããä¿æããã531 * 平滑化された RTT (srtt) と平滑化された分散 (rttvar) を 532 * 整数型で計算するために、左シフトしてスケールする。 533 * srtt は 2 進小数点以下 3 ビット、 534 * rttvar は 2 進小数点以下 2 ビットを保持する。 582 535 */ 583 536 584 537 #define TCP_DELTA_SHIFT 2 585 /* å·®å = rtt/8 + srtt*7/8 ã®è¨ç®ã®ããã®ã·ããå¤*/538 /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値 */ 586 539 #define TCP_SRTT_SHIFT (TCP_DELTA_SHIFT + 3) 587 /* srtt ã®ã·ããå¤ã3(+2)ããã*/540 /* srtt のシフト値、3(+2)ビット */ 588 541 #define TCP_RTTVAR_SHIFT (TCP_DELTA_SHIFT + 2) 589 /* rttvar ã®ã·ããå¤ã2(+2)ããã*/542 /* rttvar のシフト値、2(+2)ビット */ 590 543 #define TCP_SRTT_SCALE (1<<TCP_SRTT_SHIFT) 591 544 #define TCP_RTTVAR_SCALE (1<<TCP_RTTVAR_SHIFT) 592 545 593 546 /* 594 * é«éå転éãéå§ããåé ACK æ°ã®ãããå¤547 * 高速再転送を開始する再送 ACK 数のしきい値 595 548 */ 596 549 … … 598 551 599 552 /* 600 * åä¿¡åæ§æãã¥ã¼ã§ã® TCP ããã553 * 受信再構成キューでの TCP ヘッダ 601 554 */ 602 555 603 556 typedef struct t_tcp_q_hdr { 604 uint16_t sport; /* éä¿¡å 605 ãã¼ãçªå· */ 606 uint16_t dport; /* å®å 607 ãã¼ãçªå· */ 608 609 uint32_t seq; /* SEQ çªå· */ 610 611 T_NET_BUF *next; /* 次ã®ã»ã°ã¡ã³ããå 612 㯠ACK çªå·(ack) */ 613 614 uint8_t doff; /* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã) */ 615 uint8_t flags; /* ãã©ã°(ä¸ä½6ããã) */ 616 uint16_t soff; /* SDU ãªãã»ãããå 617 ã¯ã¦ã£ã³ããµã¤ãº(win) */ 618 619 uint16_t slen; /* SDU é·ãå 620 ã¯ãã§ãã¯ãµã (sum) */ 621 uint16_t urp; /* ç·æ¥ãã¤ã³ã¿ï¼SDU é·è£æ£ï¼ */ 557 uint16_t sport; /* 送信元ポート番号 */ 558 uint16_t dport; /* 宛先ポート番号 */ 559 560 uint32_t seq; /* SEQ 番号 */ 561 562 T_NET_BUF *next; /* 次のセグメント、元は ACK 番号(ack) */ 563 564 uint8_t doff; /* データオフセット(上位4ビット) */ 565 uint8_t flags; /* フラグ(下位6ビット) */ 566 uint16_t soff; /* SDU オフセット、元はウィンドサイズ(win) */ 567 568 uint16_t slen; /* SDU 長、元はチェックサム(sum) */ 569 uint16_t urp; /* 緊急ポインタ(SDU 長補正) */ 622 570 } __attribute__((packed, aligned(2)))T_TCP_Q_HDR; 623 571 … … 626 574 627 575 /* 628 * ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©629 */ 630 631 #define TMIN_TCP_REPID 1 /* TCP åä»å£ ID ã®æå°å¤*/632 #define TMIN_TCP_CEPID 1 /* TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/633 #define TMIN_TCP_TWCEPID 1 /* Time Wait ç¨ TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/634 635 /* 636 * å¶å¾¡ã»ã°ã¡ã³ãï¼ãã¼ã¿ãªãï¼ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡576 * オブジェクト ID の最小値の定義 577 */ 578 579 #define TMIN_TCP_REPID 1 /* TCP 受付口 ID の最小値 */ 580 #define TMIN_TCP_CEPID 1 /* TCP 通信端点 ID の最小値 */ 581 #define TMIN_TCP_TWCEPID 1 /* Time Wait 用 TCP 通信端点 ID の最小値 */ 582 583 /* 584 * 制御セグメント(データなし)サイズのネットワークバッファ 637 585 */ 638 586 639 587 typedef struct t_net_buf_cseg { 640 uint16_t len; /* ãã¼ã¿ã®é·ã*/641 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/642 uint8_t flags; /* ãã©ã°*/588 uint16_t len; /* データの長さ */ 589 uint8_t idix; /* mpfid のインデックス */ 590 uint8_t flags; /* フラグ */ 643 591 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 644 592 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 648 596 #endif 649 597 uint8_t buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE]; 650 /* ãããã¡æ¬ä½*/598 /* バッファ本体 */ 651 599 } T_NET_BUF_CSEG; 652 600 … … 654 602 655 603 /* 656 * SNMP 㮠管çæ 657 å ±ãã¼ã¹ (MIB) 604 * SNMP の 管理情報ベース (MIB) 658 605 */ 659 606 … … 674 621 675 622 /* 676 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã623 * 関数シミュレーションマクロ 677 624 */ 678 625 … … 720 667 721 668 /* 722 * å 723 ¨åå¤æ° 669 * 全域変数 724 670 */ 725 671 … … 738 684 739 685 /* 740 * Inline é¢æ°686 * Inline 関数 741 687 */ 742 688 … … 744 690 745 691 /* 746 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã747 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°748 */ 749 750 /* 751 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã692 * TCP 通信端点の受信ウィンドバッファの省コピー機能が 693 * 無効の場合は何もしないためのダミーの関数 694 */ 695 696 /* 697 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 752 698 */ 753 699 … … 762 708 763 709 /* 764 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿ã765 * æå¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°766 */ 767 768 /* 769 * tcp_read_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãã710 * TCP 通信端点の送信ウィンドバッファの省コピー機能のみが 711 * 有効の場合は何もしないためのダミーの関数 712 */ 713 714 /* 715 * tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。 770 716 */ 771 717 … … 780 726 781 727 /* 782 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã783 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°784 */ 785 786 /* 787 * tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã728 * TCP 通信端点の送信ウィンドバッファの省コピー機能が 729 * 無効の場合は何もしないためのダミーの関数 730 */ 731 732 /* 733 * tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。 788 734 */ 789 735 … … 794 740 795 741 /* 796 * tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããã742 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。 797 743 */ 798 744 … … 803 749 804 750 /* 805 * tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããã751 * tcp_push_res_nbuf -- ネットワークバッファを予約する。 806 752 */ 807 753 … … 813 759 814 760 /* 815 * tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãã761 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。 816 762 */ 817 763 … … 825 771 826 772 /* 827 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã773 * TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ 828 774 */ 829 775 … … 859 805 860 806 /* 861 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã807 * TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ 862 808 */ 863 809 … … 910 856 911 857 /* 912 * é¢æ°858 * 関数 913 859 */ 914 860 … … 941 887 942 888 /* 943 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°944 */ 945 946 /* 947 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã948 * é¢æ°ã®é¸æã«ä½¿ç¨ããã889 * TCP 通信端点の受信ウィンドバッファ用関数 890 */ 891 892 /* 893 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、 894 * 関数の選択に使用する。 949 895 */ 950 896 … … 956 902 957 903 /* 958 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°904 * TCP 通信端点の受信ウィンドバッファの省コピー機能用関数 959 905 */ 960 906 … … 966 912 967 913 /* 968 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°914 * TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数 969 915 */ 970 916 … … 976 922 977 923 /* 978 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°979 */ 980 981 /* 982 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã983 * é¢æ°ã®é¸æã«ä½¿ç¨ããã924 * TCP 通信端点の送信ウィンドバッファ用関数 925 */ 926 927 /* 928 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、 929 * 関数の選択に使用する。 984 930 */ 985 931 … … 998 944 999 945 /* 1000 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°946 * TCP 通信端点の送信ウィンドバッファの省コピー機能用関数 1001 947 */ 1002 948 … … 1012 958 1013 959 /* 1014 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°960 * TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数 1015 961 */ 1016 962 … … 1028 974 1029 975 /* 1030 * tcp_find_cep -- ãã¼ãçªå·ãã TCP é信端ç¹ãå¾ãã976 * tcp_find_cep -- ポート番号から TCP 通信端点を得る。 1031 977 * 1032 * 注æ: myaddr ã¯ã1033 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã1034 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã978 * 注意: myaddr は、 979 * TINET-1.2 からネットワークバイトオーダ、 980 * TINET-1.1 までは、ホストバイトオーダ 1035 981 */ 1036 982 extern T_TCP_CEP *tcp_find_cep (T_IN_ADDR *dstaddr, uint16_t dstport, … … 1038 984 1039 985 /* 1040 * TCP ãããã®ãã¬ã¼ã¹åºåæ©è½ç¨é¢æ°986 * TCP ヘッダのトレース出力機能用関数 1041 987 */ 1042 988 extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep); 1043 989 extern void tcp_input_trace (T_NET_BUF *input, T_TCP_CEP *cep); 1044 990 1045 /* TCP åºåã¿ã¹ã¯*/991 /* TCP 出力タスク */ 1046 992 1047 993 extern void tcp_output_task(intptr_t exinf); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 45 33 46 34 /* 47 * UDP ã§ä½¿ç¨ããã«ã¼ãã«ãªãã¸ã§ã¯ã35 * UDP で使用するカーネルオブジェクト 48 36 */ 49 37 … … 51 39 52 40 /* 53 * ãã³ããããã³ã°ã³ã¼ã«ãè¡ãå ´åã«çµã¿è¾¼ãã¿ã¹ã¯ã¨ã»ããã©41 * ノンブロッキングコールを行う場合に組み込むタスクとセマフォ 54 42 */ 55 43 … … 65 53 }); 66 54 67 /* ã»ããã©*/55 /* セマフォ */ 68 56 69 57 CRE_SEM(SEM_UDP_POST_OUTPUT, { TA_TPRI, 0, 1 }); -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * UDP ããããRFC768 åç 87 § 74 * UDP ヘッダ、RFC768 参照 88 75 */ 89 76 90 77 typedef struct t_udp_hdr { 91 uint16_t sport; /* éä¿¡å 92 ãã¼ãçªå· */ 93 uint16_t dport; /* å®å 94 ãã¼ãçªå· */ 78 uint16_t sport; /* 送信元ポート番号 */ 79 uint16_t dport; /* 宛先ポート番号 */ 95 80 96 uint16_t ulen; /* ãã¼ã¿ã°ã©ã é·*/97 uint16_t sum; /* ãã§ãã¯ãµã*/81 uint16_t ulen; /* データグラム長 */ 82 uint16_t sum; /* チェックサム */ 98 83 } __attribute__((packed, aligned(2)))T_UDP_HDR; 99 84 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 129 117 130 118 /* 131 * SNMP 㮠管çæ 132 å ±ãã¼ã¹ (MIB) 119 * SNMP の 管理情報ベース (MIB) 133 120 */ 134 121 … … 142 129 143 130 /* 144 * udp_dstaddr_accept -- UDP ã®ãã¦å 145 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 146 * 147 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ã以ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã 148 * 149 * ã»ãã¦å 150 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 151 * ã»ãã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾© 131 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 132 * 133 * DHCP_CFG が定義されているときは、以下のデータグラムを受信する。 134 * 135 * ・あて先アドレスがブロードキャスト 136 * ・ローカルアドレスが未定義 152 137 */ 153 138 … … 168 153 169 154 /* 170 * udp_dstaddr_accept -- UDP ã®ãã¦å 171 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 172 * 173 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 174 * 175 * ã»ãã¦å 176 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 155 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 156 * 157 * 以下の場合もデータグラムを受信する。 158 * 159 * ・あて先アドレスがブロードキャスト 177 160 */ 178 161 … … 194 177 195 178 /* 196 * udp_dstaddr_accept -- UDP ã®ãã¦å 197 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 198 * 199 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 200 * 201 * ã»ãã¦å 202 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 179 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 180 * 181 * 以下の場合もデータグラムを受信する。 182 * 183 * ・あて先アドレスがブロードキャスト 203 184 */ 204 185 … … 222 203 223 204 /* 224 * udp_dstaddr_accept -- UDP ã®ãã¦å 225 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 226 * 227 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã 228 * 229 * ã»ãã¦å 230 ã¢ãã¬ã¹ããã«ããã£ã¹ã 205 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 206 * 207 * 以下の場合もデータグラムを受信する。 208 * 209 * ・あて先アドレスがマルチキャスト 231 210 */ 232 211 … … 243 222 244 223 /* 245 * udp_input -- UDP ã®å 246 ¥åé¢æ° 224 * udp_input -- UDP の入力関数 247 225 */ 248 226 … … 263 241 NET_COUNT_MIB(udp_stats.udpInDatagrams, 1); 264 242 265 /* ãããé·ããã§ãã¯ããã*/243 /* ヘッダ長をチェックする。*/ 266 244 if (input->len < hlen + UDP_HDR_SIZE) 267 245 goto buf_rel; … … 269 247 udph = (T_UDP_HDR *)(input->buf + *offp); 270 248 271 /* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ãã*/249 /* データグラム長をチェックする */ 272 250 ulen = ntohs(udph->ulen); 273 251 if (ulen != input->len - hlen) 274 252 goto buf_rel; 275 253 276 /* å®å 277 ãã¼ãã 0 ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ãããRFC768 */ 254 /* 宛先ポートが 0 のデータグラムは破棄する。RFC768 */ 278 255 if (udph->dport == 0) 279 256 goto buf_rel; … … 281 258 #ifdef UDP_CFG_IN_CHECKSUM 282 259 283 /* ãã§ãã¯ãµã ããã§ãã¯ãã*/260 /* チェックサムをチェックする */ 284 261 if (udph->sum && IN_CKSUM(input, IPPROTO_UDP, *offp, ulen) != 0) 285 262 goto buf_rel; … … 289 266 iph = GET_IP_HDR(input); 290 267 291 /* å®å 292 ã¢ãã¬ã¹ã¨ãã¼ãããã§ãã¯ãã */ 268 /* 宛先アドレスとポートをチェックする */ 293 269 for (ix = tmax_udp_ccepid; ix -- > 0; ) { 294 270 cep = &udp_cep[ix]; … … 298 274 len = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE); 299 275 300 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/276 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 301 277 if (psnd_dtq(cep->rcvqid, (intptr_t)input) != E_OK) 302 278 goto buf_rel; … … 305 281 #ifdef UDP_CFG_NON_BLOCKING 306 282 307 else if (cep->rcv_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/308 309 /* p_dstaddr ãè¨å®ããã*/283 else if (cep->rcv_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 284 285 /* p_dstaddr を設定する。*/ 310 286 cep->rcv_p_dstaddr->portno = ntohs(udph->sport); 311 287 IN_COPY_TO_HOST(&cep->rcv_p_dstaddr->ipaddr, &GET_IP_HDR(input)->src); 312 288 313 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/289 /* データをバッファに移す。*/ 314 290 memcpy(cep->rcv_data, GET_UDP_SDU(input, *offp), 315 291 (size_t)(len < cep->rcv_len ? len : cep->rcv_len)); … … 337 313 else if (IS_PTR_DEFINED(cep->callback)) { 338 314 339 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/315 /* コールバック関数を呼び出す。*/ 340 316 cep->cb_netbuf = input; 341 317 … … 351 327 352 328 /* 353 * ãããã¯ã¼ã¯ãããã¡ããã®ã¾ã¾ã§ããã°ãã³ã¼ã«ããã¯é¢æ°å 354 㧠355 * ãã¼ã¿ãèªã¿åºããªãã£ããã¨ã«ãªãã®ã§ãæ¨ã¦ãã 329 * ネットワークバッファがそのままであれば、コールバック関数内で 330 * データを読み出さなかったことになるので、捨てる。 356 331 */ 357 332 if (cep->cb_netbuf != NULL) … … 369 344 #if defined(SUPPORT_INET4) 370 345 371 /* ãã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/346 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 372 347 if (ntohl(iph->dst) == IF_GET_IFNET()->in_ifaddr.addr) { 373 348 syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport)); 374 349 375 350 icmp_error(ICMP4_UNREACH_PORT, input); 376 /* icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ä¸ã¸æããã*/351 /* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/ 377 352 } 378 353 … … 381 356 #if defined(SUPPORT_INET6) 382 357 383 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã 㯠ICMP ã¨ã©ã¼ãéç¥ããªãã*/358 /* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/ 384 359 if (!IN6_IS_ADDR_MULTICAST(&iph->dst)) { 385 360 syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport)); 386 361 387 /* icmp6_error ã§ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããã*/362 /* icmp6_error で、ネットワークバッファ input を返却する。*/ 388 363 icmp6_error(input, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_NOPORT, 0); 389 364 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_output.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 127 115 128 116 /* 129 * é¢æ°117 * 関数 130 118 */ 131 119 … … 133 121 134 122 /* 135 * UDP åºåã¿ã¹ã¯136 * ãã³ããããã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ã使ç¨ããã123 * UDP 出力タスク 124 * ノンブロッキングコールを組み込んだとき使用する。 137 125 */ 138 126 … … 148 136 #endif /* of #ifdef UDP_CFG_OUT_CHECKSUM */ 149 137 150 /* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/138 /* IP データグラムを割り当てる。*/ 151 139 if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + cep->snd_len), 0, 152 140 &cep->snd_p_dstaddr->ipaddr, … … 157 145 } 158 146 159 /* UDP ãããã«æ 160 å ±ãè¨å®ããã*/ 147 /* UDP ヘッダに情報を設定する。*/ 161 148 udph = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET); 162 149 udph->sport = htons(cep->myaddr.portno); … … 165 152 udph->sum = 0; 166 153 167 /* ãã¼ã¿ãã³ãã¼ããã*/154 /* データをコピーする。*/ 168 155 memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET), 169 156 cep->snd_data, (size_t)cep->snd_len); … … 174 161 (uint_t)(UDP_HDR_SIZE + cep->snd_len)); 175 162 176 /* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå 177 ¥ããã*/ 163 /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/ 178 164 if (sum == 0) 179 165 sum = UINT_C(0xffff); … … 182 168 #endif/* of #ifdef UDP_CFG_OUT_CHECKSUM */ 183 169 184 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/170 /* ネットワークバッファ長を調整する。*/ 185 171 output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE + cep->snd_len); 186 172 187 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/173 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 188 174 if ((error = IP_OUTPUT(output, TMO_UDP_OUTPUT)) != E_OK) 189 175 goto err_ret; … … 236 222 237 223 /* 238 * UDP åºåã¿ã¹ã¯239 * ãã³ããããã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ã使ç¨ããã224 * UDP 出力タスク 225 * ノンブロッキングコールを組み込んだとき使用する。 240 226 */ 241 227 … … 252 238 #if defined(SUPPORT_INET6) && !defined(SUPPORT_TCP) 253 239 254 /* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®ãå®è¡ããã*/240 /* IPv6 のステートレス・アドレス自動設定を実行する。*/ 255 241 in6_if_up(IF_GET_IFNET()); 256 242 … … 259 245 while (true) { 260 246 261 /* åºåããã¹ããããã¾ã§å¾ 262 ã¤ã*/ 247 /* 出力がポストされるまで待つ。*/ 263 248 syscall(wai_sem(SEM_UDP_POST_OUTPUT)); 264 249 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 125 113 126 114 /* 127 * å±æå¤æ°115 * 局所変数 128 116 */ 129 117 130 static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO; /* èªåå²ãå½ã¦çªå·*/118 static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO; /* 自動割り当て番号 */ 131 119 132 120 /* 133 * udp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨å®ããã121 * udp_alloc_auto_port -- 自動割り当てポート番号を設定する。 134 122 */ 135 123 … … 167 155 168 156 /* 169 * udp_alloc_port -- æå®ããããã¼ãçªå·ãè¨å®ããã157 * udp_alloc_port -- 指定されたポート番号を設定する。 170 158 */ 171 159 -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_usrreq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r279 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 81 69 82 70 /* 83 * ãã³ããããã³ã°ã³ã¼ã«ãçµè¾¼ã¾ãªãå ´åã«ãªã³ã¯ãããé¢æ°ã®å®ç¾©71 * ノンブロッキングコールを組込まない場合にリンクされる関数の定義 84 72 */ 85 73 … … 131 119 132 120 /* 133 * IPv4 㨠IPv6 ã®åãæ¿ããã¯ã121 * IPv4 と IPv6 の切り替えマクロ 134 122 */ 135 123 … … 151 139 152 140 /* 153 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 154 ¨ã¦ã®æ©è½ã 155 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 141 * TINET をライブラリ化しない場合は、全ての機能を 142 * オブジェクトファイルに出力するため、マクロを有効にする。 156 143 */ 157 144 … … 174 161 175 162 /* 176 * udp_send_data -- ãã±ããéä¿¡ã®ä¸»è¦é¨163 * udp_send_data -- パケット送信の主要部 177 164 */ 178 165 … … 192 179 NET_COUNT_UDP(net_count_udp.out_packets, 1); 193 180 194 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/181 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 195 182 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 196 183 syscall(get_tim(&before)); 197 184 198 /* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/185 /* IP データグラムを割り当てる。*/ 199 186 if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0, 200 187 &p_dstaddr->ipaddr, … … 204 191 goto err_ret; 205 192 206 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/193 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 207 194 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 208 195 syscall(get_tim(&after)); … … 215 202 } 216 203 217 /* UDP ãããã«æ 218 å ±ãè¨å®ããã*/ 204 /* UDP ヘッダに情報を設定する。*/ 219 205 udph = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET); 220 206 udph->sport = htons(cep->myaddr.portno); … … 223 209 udph->sum = 0; 224 210 225 /* ãã¼ã¿ãã³ãã¼ããã*/211 /* データをコピーする。*/ 226 212 memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET), data, (size_t)len); 227 213 … … 230 216 sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET, (uint_t)(UDP_HDR_SIZE + len)); 231 217 232 /* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå 233 ¥ããã*/ 218 /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/ 234 219 if (sum == 0) 235 220 sum = 0xffff; … … 238 223 #endif /* of #ifdef UDP_CFG_OUT_CHECKSUM */ 239 224 240 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/225 /* ネットワークバッファ長を調整する。*/ 241 226 output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE + len); 242 227 243 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/228 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 244 229 if ((error = IP_OUTPUT(output, tmout)) == E_OK) { 245 230 NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1); … … 257 242 258 243 /* 259 * udp_cre_cep -- UDP é信端ç¹ã®çæãæ¡å¼µæ©è½ã244 * udp_cre_cep -- UDP 通信端点の生成【拡張機能】 260 245 */ 261 246 … … 270 255 ER error; 271 256 272 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/257 /* UDP 通信端点 ID をチェックする。*/ 273 258 if (!VALID_UDP_CEPID(cepid)) 274 259 return E_ID; 275 260 276 /* pk_ccep ã NULL ãªãã¨ã©ã¼*/261 /* pk_ccep が NULL ならエラー */ 277 262 if (pk_ccep == NULL) 278 263 return E_PAR; 279 264 280 /* UDP é信端ç¹ãå¾ãã*/265 /* UDP 通信端点を得る。*/ 281 266 cep = GET_UDP_CEP(cepid); 282 267 283 /* UDP é信端ç¹ããã§ãã¯ããã*/268 /* UDP 通信端点をチェックする。*/ 284 269 if (VALID_UDP_CEP(cep)) 285 270 return E_OBJ; 286 271 287 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/272 /* UDP 通信端点が、動的生成用でなければエラー */ 288 273 if (!DYNAMIC_UDP_CEP(cep)) 289 274 return E_ID; 290 275 291 /* é信端ç¹ãããã¯ããã*/276 /* 通信端点をロックする。*/ 292 277 syscall(wai_sem(cep->semid_lock)); 293 278 294 279 /* 295 * UDP é信端ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼280 * UDP 通信端点をチェックする。生成済みであればエラー 296 281 */ 297 282 if (VALID_UDP_CEP(cep)) … … 300 285 301 286 /* 302 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã287 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 303 288 */ 304 289 if (pk_ccep->myaddr.portno == UDP_PORTANY) … … 309 294 if (error == E_OK) { 310 295 311 /* UDP é信端ç¹çææ 312 å ±ãã³ãã¼ããã*/ 313 cep->cepatr = pk_ccep->cepatr; /* é信端ç¹å±æ§ */ 314 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* èªåã®ã¢ãã¬ã¹ */ 315 cep->callback = (void*)pk_ccep->callback; /* ã³ã¼ã«ãã㯠*/ 316 317 /* UDP é信端ç¹ãçææ¸ã¿ã«ããã*/ 296 /* UDP 通信端点生成情報をコピーする。*/ 297 cep->cepatr = pk_ccep->cepatr; /* 通信端点属性 */ 298 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* 自分のアドレス */ 299 cep->callback = (void*)pk_ccep->callback; /* コールバック */ 300 301 /* UDP 通信端点を生成済みにする。*/ 318 302 cep->flags |= UDP_CEP_FLG_VALID; 319 303 } 320 304 } 321 305 322 /* é信端ç¹ã®ããã¯ã解é¤ããã*/306 /* 通信端点のロックを解除する。*/ 323 307 syscall(sig_sem(cep->semid_lock)); 324 308 … … 331 315 332 316 /* 333 * udp_del_cep -- UDP é信端ç¹ã®åé¤ãæ¡å¼µæ©è½ã317 * udp_del_cep -- UDP 通信端点の削除【拡張機能】 334 318 */ 335 319 … … 344 328 ER error; 345 329 346 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/330 /* UDP 通信端点 ID をチェックする。*/ 347 331 if (!VALID_UDP_CEPID(cepid)) 348 332 return E_ID; 349 333 350 /* UDP é信端ç¹ãå¾ãã*/334 /* UDP 通信端点を得る。*/ 351 335 cep = GET_UDP_CEP(cepid); 352 336 353 /* UDP é信端ç¹ããã§ãã¯ããã*/337 /* UDP 通信端点をチェックする。*/ 354 338 if (!VALID_UDP_CEP(cep)) 355 339 return E_NOEXS; 356 340 357 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/341 /* UDP 通信端点が、動的生成用でなければエラー */ 358 342 if (!DYNAMIC_UDP_CEP(cep)) 359 343 return E_ID; 360 344 361 /* é信端ç¹ãããã¯ããã*/345 /* 通信端点をロックする。*/ 362 346 syscall(wai_sem(cep->semid_lock)); 363 347 364 348 /* 365 * UDP é信端ç¹ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼366 * ã»æªçæã349 * UDP 通信端点をチェックする。未生成の場合はエラー 350 * ・未生成。 367 351 */ 368 352 if (!VALID_UDP_CEP(cep)) … … 372 356 udp_can_rcv(cep, E_DLT); 373 357 374 /* UDP é信端ç¹ãæªçæã«ããã*/358 /* UDP 通信端点を未生成にする。*/ 375 359 cep->flags &= ~UDP_CEP_FLG_VALID; 376 360 error = E_OK; 377 361 } 378 362 379 /* é信端ç¹ã®ããã¯ã解é¤ããã*/363 /* 通信端点のロックを解除する。*/ 380 364 syscall(sig_sem(cep->semid_lock)); 381 365 … … 390 374 391 375 /* 392 * udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã376 * udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 393 377 */ 394 378 … … 399 383 ER error = E_OK, snd_err, rcv_err; 400 384 401 /* API æ©è½ã³ã¼ãããã§ãã¯ããã*/385 /* API 機能コードをチェックする。*/ 402 386 if (!VALID_TFN_UDP_CAN(fncd)) 403 387 return E_PAR; 404 388 405 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/389 /* UDP 通信端点 ID をチェックする。*/ 406 390 if (!VALID_UDP_CEPID(cepid)) 407 391 return E_ID; 408 392 409 /* UDP é信端ç¹ãå¾ãã*/393 /* UDP 通信端点を得る。*/ 410 394 cep = GET_UDP_CEP(cepid); 411 395 412 /* UDP é信端ç¹ããã§ãã¯ããã*/396 /* UDP 通信端点をチェックする。*/ 413 397 if (!VALID_UDP_CEP(cep)) 414 398 return E_NOEXS; 415 399 416 /* é信端ç¹ãããã¯ããã*/400 /* 通信端点をロックする。*/ 417 401 syscall(wai_sem(cep->semid_lock)); 418 402 419 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL ã®å¦ç*/403 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL の処理 */ 420 404 421 405 snd_err = udp_can_snd(cep, E_RLWAI); … … 423 407 424 408 /* 425 * snd_err 㨠rcv_err ã®ã©ã¡ããEV_NOPND426 * ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼409 * snd_err と rcv_err のどちらも EV_NOPND 410 * なら、ペンディングしていないのでエラー 427 411 */ 428 412 if (snd_err == EV_NOPND && rcv_err == EV_NOPND) … … 440 424 } 441 425 } 442 else if (fncd == TFN_UDP_SND_DAT) { /* éä¿¡å¦çã®ãã£ã³ã»ã«*/426 else if (fncd == TFN_UDP_SND_DAT) { /* 送信処理のキャンセル */ 443 427 if ((error = udp_can_snd(cep, E_RLWAI)) == EV_NOPND) 444 428 error = E_OBJ; 445 429 } 446 else if (fncd == TFN_UDP_RCV_DAT) { /* åä¿¡å¦çã®ãã£ã³ã»ã«*/430 else if (fncd == TFN_UDP_RCV_DAT) { /* 受信処理のキャンセル */ 447 431 if ((error = udp_can_rcv(cep, E_RLWAI)) == EV_NOPND) 448 432 error = E_OBJ; … … 451 435 error = E_PAR; 452 436 453 /* é信端ç¹ãããã¯ã解é¤ããã*/437 /* 通信端点をロックを解除する。*/ 454 438 syscall(sig_sem(cep->semid_lock)); 455 439 … … 460 444 461 445 /* 462 * udp_set_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã446 * udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】 463 447 * 464 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã448 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 465 449 */ 466 450 … … 474 458 T_UDP_CEP *cep; 475 459 476 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/460 /* UDP 通信端点 ID をチェックする。*/ 477 461 if (!VALID_UDP_CEPID(cepid)) 478 462 return E_ID; 479 463 480 /* UDP é信端ç¹ãå¾ãã*/464 /* UDP 通信端点を得る。*/ 481 465 cep = GET_UDP_CEP(cepid); 482 466 483 /* UDP é信端ç¹ããã§ãã¯ããã*/467 /* UDP 通信端点をチェックする。*/ 484 468 if (!VALID_UDP_CEP(cep)) 485 469 return E_NOEXS; … … 493 477 494 478 /* 495 * udp_get_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã479 * udp_get_opt -- UDP 通信端点オプションの設定【拡張機能】 496 480 * 497 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã481 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 498 482 */ 499 483 … … 507 491 T_UDP_CEP *cep; 508 492 509 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/493 /* UDP 通信端点 ID をチェックする。*/ 510 494 if (!VALID_UDP_CEPID(cepid)) 511 495 return E_ID; 512 496 513 /* UDP é信端ç¹ãå¾ãã*/497 /* UDP 通信端点を得る。*/ 514 498 cep = GET_UDP_CEP(cepid); 515 499 516 /* UDP é信端ç¹ããã§ãã¯ããã*/500 /* UDP 通信端点をチェックする。*/ 517 501 if (!VALID_UDP_CEP(cep)) 518 502 return E_NOEXS; … … 534 518 535 519 /* 536 * udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«520 * udp_can_snd -- ペンディングしている送信のキャンセル 537 521 */ 538 522 … … 540 524 udp_can_snd (T_UDP_CEP *cep, ER error) 541 525 { 542 if (cep->snd_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸ */ 543 544 #ifdef UDP_CFG_EXTENTIONS 545 546 /* å¾ 547 ã¡ä¸ã«çºçããã¨ã©ã¼æ 548 å ±ãè¨å®ããã*/ 526 if (cep->snd_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 527 528 #ifdef UDP_CFG_EXTENTIONS 529 530 /* 待ち中に発生したエラー情報を設定する。*/ 549 531 cep->error = error; 550 532 … … 554 536 cep->snd_tskid = TA_NULL; 555 537 } 556 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/538 else /* どちらでもないならペンディングしていない */ 557 539 error = EV_NOPND; 558 540 … … 565 547 566 548 /* 567 * udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«549 * udp_can_rcv -- ペンディングしている受信のキャンセル 568 550 */ 569 551 … … 571 553 udp_can_rcv (T_UDP_CEP *cep, ER error) 572 554 { 573 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸ */ 574 575 #ifdef UDP_CFG_EXTENTIONS 576 577 /* å¾ 578 ã¡ä¸ã«çºçããã¨ã©ã¼æ 579 å ±ãè¨å®ããã*/ 555 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 556 557 #ifdef UDP_CFG_EXTENTIONS 558 559 /* 待ち中に発生したエラー情報を設定する。*/ 580 560 cep->error = error; 581 561 … … 585 565 cep->rcv_tskid = TA_NULL; 586 566 } 587 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/567 else /* どちらでもないならペンディングしていない */ 588 568 error = EV_NOPND; 589 569 … … 596 576 597 577 /* 598 * udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã578 * udp_snd_dat -- パケットの送信【標準機能】 599 579 */ 600 580 … … 605 585 ER error; 606 586 607 /* p_dstaddr ã¾ã㯠data ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/587 /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */ 608 588 if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK) 609 589 return E_PAR; 610 590 611 /* ãã¼ã¿é·ããã§ãã¯ããã*/591 /* データ長をチェックする。*/ 612 592 if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU) 613 593 return E_PAR; 614 594 615 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/595 /* UDP 通信端点 ID をチェックする。*/ 616 596 if (!VALID_UDP_CEPID(cepid)) 617 597 return E_ID; 618 598 619 /* UDP é信端ç¹ãå¾ãã*/599 /* UDP 通信端点を得る。*/ 620 600 cep = GET_UDP_CEP(cepid); 621 601 622 /* UDP é信端ç¹ããã§ãã¯ããã*/602 /* UDP 通信端点をチェックする。*/ 623 603 if (!VALID_UDP_CEP(cep)) 624 604 return E_NOEXS; 625 605 626 606 /* 627 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã607 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 628 608 */ 629 609 if (cep->myaddr.portno == UDP_PORTANY) { … … 632 612 } 633 613 634 /* é信端ç¹ãããã¯ããã*/614 /* 通信端点をロックする。*/ 635 615 syscall(wai_sem(cep->semid_lock)); 636 616 637 617 if (cep->snd_tskid != TA_NULL) { 638 618 639 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/619 /* 非ノンブロッキングコールでペンディング中 */ 640 620 error = E_QOVR; 641 621 642 /* é信端ç¹ãããã¯ã解é¤ããã*/622 /* 通信端点をロックを解除する。*/ 643 623 syscall(sig_sem(cep->semid_lock)); 644 624 } 645 625 else { 646 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/626 /* 現在のタスク識別子を記録する。*/ 647 627 get_tid(&(cep->snd_tskid)); 648 628 649 629 #ifdef UDP_CFG_EXTENTIONS 650 630 651 /* å¾ 652 ã¡ä¸ã«çºçããã¨ã©ã¼æ 653 å ±ããªã»ããããã*/ 631 /* 待ち中に発生したエラー情報をリセットする。*/ 654 632 cep->error = E_OK; 655 633 656 634 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 657 635 658 /* é信端ç¹ãããã¯ã解é¤ããã*/636 /* 通信端点をロックを解除する。*/ 659 637 syscall(sig_sem(cep->semid_lock)); 660 638 661 /* ãã±ãããéä¿¡ããã*/639 /* パケットを送信する。*/ 662 640 error = udp_send_data(cep, p_dstaddr, data, len, tmout); 663 641 664 642 #ifdef UDP_CFG_EXTENTIONS 665 643 666 /* å¾ 667 ã¡ä¸ã«çºçããã¨ã©ã¼æ 668 å ±ãè¿ãã*/ 644 /* 待ち中に発生したエラー情報を返す。*/ 669 645 if (error == E_RLWAI) 670 646 error = cep->error; … … 681 657 682 658 /* 683 * udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã659 * udp_rcv_dat -- パケットの受信【標準機能】 684 660 */ 685 661 … … 693 669 uint_t ulen, uhoff; 694 670 695 /* p_dstaddr ã¾ã㯠data ã NULL ãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/671 /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */ 696 672 if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK) 697 673 return E_PAR; 698 674 699 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/675 /* UDP 通信端点 ID をチェックする。*/ 700 676 if (!VALID_UDP_CEPID(cepid)) 701 677 return E_ID; 702 678 703 /* UDP é信端ç¹ãå¾ãã*/679 /* UDP 通信端点を得る。*/ 704 680 cep = GET_UDP_CEP(cepid); 705 681 706 /* UDP é信端ç¹ããã§ãã¯ããã*/682 /* UDP 通信端点をチェックする。*/ 707 683 if (!VALID_UDP_CEP(cep)) 708 684 return E_NOEXS; 709 685 710 /* é信端ç¹ãããã¯ããã*/686 /* 通信端点をロックする。*/ 711 687 syscall(wai_sem(cep->semid_lock)); 712 688 713 689 if (cep->rcv_tskid != TA_NULL) { 714 690 715 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/691 /* 非ノンブロッキングコールでペンディング中 */ 716 692 error = E_QOVR; 717 693 718 /* é信端ç¹ãããã¯ã解é¤ããã*/694 /* 通信端点をロックを解除する。*/ 719 695 syscall(sig_sem(cep->semid_lock)); 720 696 } 721 697 else { 722 698 723 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/699 /* 現在のタスク識別子を記録する。*/ 724 700 get_tid(&(cep->rcv_tskid)); 725 701 726 702 #ifdef UDP_CFG_EXTENTIONS 727 703 728 /* å¾ 729 ã¡ä¸ã«çºçããã¨ã©ã¼æ 730 å ±ããªã»ããããã*/ 704 /* 待ち中に発生したエラー情報をリセットする。*/ 731 705 cep->error = E_OK; 732 706 733 707 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 734 708 735 /* é信端ç¹ãããã¯ã解é¤ããã*/709 /* 通信端点をロックを解除する。*/ 736 710 syscall(sig_sem(cep->semid_lock)); 737 711 738 /* å 739 ¥åãããã¾ã§å¾ 740 ã¤ã*/ 712 /* 入力があるまで待つ。*/ 741 713 if (cep->cb_netbuf != NULL) { 742 714 743 715 /* 744 * ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸ãã 745 * udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã 746 * ãã§ã«å 747 ¥åæ¸ã¿ã§ããã 716 * ここにくる場合は、コールバック関数の中から 717 * udp_rcv_dat を呼び出していることになり、 718 * すでに入力済みである。 748 719 */ 749 720 input = cep->cb_netbuf; … … 754 725 #ifdef UDP_CFG_EXTENTIONS 755 726 756 /* å¾ 757 ã¡ä¸ã«çºçããã¨ã©ã¼æ 758 å ±ãè¿ãã*/ 727 /* 待ち中に発生したエラー情報を返す。*/ 759 728 if (error == E_RLWAI) 760 729 error = cep->error; … … 766 735 } 767 736 768 /* p_dstaddr ãè¨å®ããã*/737 /* p_dstaddr を設定する。*/ 769 738 uhoff = (uint_t)GET_UDP_HDR_OFFSET(input); 770 739 udph = GET_UDP_HDR(input, uhoff); … … 772 741 IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src); 773 742 774 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/743 /* データをバッファに移す。*/ 775 744 ulen = ntohs(udph->ulen); 776 745 if (ulen - UDP_HDR_SIZE > len) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_usrreq_nblk.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 128 116 129 117 /* 130 * IPv4 㨠IPv6 ã®åãæ¿ããã¯ã118 * IPv4 と IPv6 の切り替えマクロ 131 119 */ 132 120 … … 146 134 147 135 /* 148 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 149 ¨ã¦ã®æ©è½ã 150 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 136 * TINET をライブラリ化しない場合は、全ての機能を 137 * オブジェクトファイルに出力するため、マクロを有効にする。 151 138 */ 152 139 … … 165 152 166 153 /* 167 * udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«154 * udp_can_snd -- ペンディングしている送信のキャンセル 168 155 */ 169 156 … … 171 158 udp_can_snd (T_UDP_CEP *cep, ER error) 172 159 { 173 if (cep->snd_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/160 if (cep->snd_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 174 161 if (IS_PTR_DEFINED(cep->callback)) 175 162 … … 188 175 cep->snd_p_dstaddr = NULL; 189 176 } 190 else if (cep->snd_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/177 else if (cep->snd_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 191 178 192 179 #ifdef UDP_CFG_EXTENTIONS 193 180 194 /* å¾ 195 ã¡ä¸ã«çºçããã¨ã©ã¼æ 196 å ±ãè¨å®ããã*/ 181 /* 待ち中に発生したエラー情報を設定する。*/ 197 182 cep->error = error; 198 183 … … 202 187 cep->snd_tskid = TA_NULL; 203 188 } 204 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/189 else /* どちらでもないならペンディングしていない */ 205 190 error = EV_NOPND; 206 191 … … 213 198 214 199 /* 215 * udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«200 * udp_can_rcv -- ペンディングしている受信のキャンセル 216 201 */ 217 202 … … 219 204 udp_can_rcv (T_UDP_CEP *cep, ER error) 220 205 { 221 if (cep->rcv_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/206 if (cep->rcv_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 222 207 if (IS_PTR_DEFINED(cep->callback)) 223 208 … … 236 221 cep->rcv_p_dstaddr = NULL; 237 222 } 238 else if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/223 else if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 239 224 240 225 #ifdef UDP_CFG_EXTENTIONS 241 226 242 /* å¾ 243 ã¡ä¸ã«çºçããã¨ã©ã¼æ 244 å ±ãè¨å®ããã*/ 227 /* 待ち中に発生したエラー情報を設定する。*/ 245 228 cep->error = error; 246 229 … … 250 233 cep->rcv_tskid = TA_NULL; 251 234 } 252 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/235 else /* どちらでもないならペンディングしていない */ 253 236 error = EV_NOPND; 254 237 … … 261 244 262 245 /* 263 * udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã246 * udp_snd_dat -- パケットの送信【標準機能】 264 247 */ 265 248 … … 270 253 ER error; 271 254 272 /* p_dstaddr ã¾ã㯠data ã NULL ãªãã¨ã©ã¼*/255 /* p_dstaddr または data が NULL ならエラー */ 273 256 if (p_dstaddr == NULL || data == NULL) 274 257 return E_PAR; 275 258 276 /* ãã¼ã¿é·ããã§ãã¯ããã*/259 /* データ長をチェックする。*/ 277 260 if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU) 278 261 return E_PAR; 279 262 280 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/263 /* UDP 通信端点 ID をチェックする。*/ 281 264 if (!VALID_UDP_CEPID(cepid)) 282 265 return E_ID; 283 266 284 /* UDP é信端ç¹ãå¾ãã*/267 /* UDP 通信端点を得る。*/ 285 268 cep = GET_UDP_CEP(cepid); 286 269 287 /* UDP é信端ç¹ããã§ãã¯ããã*/270 /* UDP 通信端点をチェックする。*/ 288 271 if (!VALID_UDP_CEP(cep)) 289 272 return E_NOEXS; 290 273 291 274 /* 292 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã275 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 293 276 */ 294 277 if (cep->myaddr.portno == UDP_PORTANY) { … … 298 281 299 282 /* 300 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã283 * タイムアウトをチェックする。 301 284 */ 302 285 303 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/304 305 /* é信端ç¹ãããã¯ããã*/286 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 287 288 /* 通信端点をロックする。*/ 306 289 syscall(wai_sem(cep->semid_lock)); 307 290 308 291 if (cep->snd_p_dstaddr != NULL) { 309 292 310 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/293 /* ノンブロッキングコールでペンディング中 */ 311 294 error = E_QOVR; 312 295 313 /* é信端ç¹ãããã¯ã解é¤ããã*/296 /* 通信端点をロックを解除する。*/ 314 297 syscall(sig_sem(cep->semid_lock)); 315 298 } 316 299 else if (cep->snd_tskid != TA_NULL) { 317 300 318 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/319 error = E_OBJ; 320 321 /* é信端ç¹ãããã¯ã解é¤ããã*/301 /* 非ノンブロッキングコールでペンディング中 */ 302 error = E_OBJ; 303 304 /* 通信端点をロックを解除する。*/ 322 305 syscall(sig_sem(cep->semid_lock)); 323 306 } … … 328 311 cep->snd_len = len; 329 312 330 /* é信端ç¹ãããã¯ã解é¤ããã*/313 /* 通信端点をロックを解除する。*/ 331 314 syscall(sig_sem(cep->semid_lock)); 332 315 … … 336 319 } 337 320 } 338 else { /* éãã³ããããã³ã°ã³ã¼ã«*/321 else { /* 非ノンブロッキングコール */ 339 322 340 /* é信端ç¹ãããã¯ããã*/323 /* 通信端点をロックする。*/ 341 324 syscall(wai_sem(cep->semid_lock)); 342 325 343 326 if (cep->snd_p_dstaddr != NULL) { 344 327 345 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/346 error = E_OBJ; 347 348 /* é信端ç¹ãããã¯ã解é¤ããã*/328 /* ノンブロッキングコールでペンディング中 */ 329 error = E_OBJ; 330 331 /* 通信端点をロックを解除する。*/ 349 332 syscall(sig_sem(cep->semid_lock)); 350 333 } 351 334 else if (cep->snd_tskid != TA_NULL) { 352 335 353 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/336 /* 非ノンブロッキングコールでペンディング中 */ 354 337 error = E_QOVR; 355 338 356 /* é信端ç¹ãããã¯ã解é¤ããã*/339 /* 通信端点をロックを解除する。*/ 357 340 syscall(sig_sem(cep->semid_lock)); 358 341 } 359 342 else { 360 343 361 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/344 /* 現在のタスク識別子を記録する。*/ 362 345 get_tid(&(cep->snd_tskid)); 363 346 364 /* é信端ç¹ãããã¯ã解é¤ããã*/365 syscall(sig_sem(cep->semid_lock)); 366 367 /* ãã±ãããéä¿¡ããã*/347 /* 通信端点をロックを解除する。*/ 348 syscall(sig_sem(cep->semid_lock)); 349 350 /* パケットを送信する。*/ 368 351 error = udp_send_data(cep, p_dstaddr, data, len, tmout); 369 352 } … … 378 361 379 362 /* 380 * udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã363 * udp_rcv_dat -- パケットの受信【標準機能】 381 364 */ 382 365 … … 390 373 uint_t ulen, uhoff; 391 374 392 /* p_dstaddr ã¾ã㯠data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/375 /* p_dstaddr または data が NULL か、len < 0 ならエラー */ 393 376 if (p_dstaddr == NULL || data == NULL || len < 0) 394 377 return E_PAR; 395 378 396 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/379 /* UDP 通信端点 ID をチェックする。*/ 397 380 if (!VALID_UDP_CEPID(cepid)) 398 381 return E_ID; 399 382 400 /* UDP é信端ç¹ãå¾ãã*/383 /* UDP 通信端点を得る。*/ 401 384 cep = GET_UDP_CEP(cepid); 402 385 403 /* UDP é信端ç¹ããã§ãã¯ããã*/386 /* UDP 通信端点をチェックする。*/ 404 387 if (!VALID_UDP_CEP(cep)) 405 388 return E_NOEXS; 406 389 407 390 /* 408 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã391 * タイムアウトをチェックする。 409 392 */ 410 393 411 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/412 413 /* é信端ç¹ãããã¯ããã*/394 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 395 396 /* 通信端点をロックする。*/ 414 397 syscall(wai_sem(cep->semid_lock)); 415 398 416 399 if (cep->rcv_p_dstaddr != NULL) 417 400 418 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/401 /* ノンブロッキングコールでペンディング中 */ 419 402 error = E_QOVR; 420 403 421 404 else if (cep->rcv_tskid != TA_NULL) 422 405 423 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/406 /* 非ノンブロッキングコールでペンディング中 */ 424 407 error = E_OBJ; 425 408 else { … … 430 413 } 431 414 432 /* é信端ç¹ãããã¯ã解é¤ããã*/415 /* 通信端点をロックを解除する。*/ 433 416 syscall(sig_sem(cep->semid_lock)); 434 417 return error; 435 418 } 436 else { /* éãã³ããããã³ã°ã³ã¼ã«*/437 438 /* é信端ç¹ãããã¯ããã*/419 else { /* 非ノンブロッキングコール */ 420 421 /* 通信端点をロックする。*/ 439 422 syscall(wai_sem(cep->semid_lock)); 440 423 441 424 if (cep->rcv_p_dstaddr != NULL) { 442 425 443 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/444 error = E_OBJ; 445 446 /* é信端ç¹ãããã¯ã解é¤ããã*/426 /* ノンブロッキングコールでペンディング中 */ 427 error = E_OBJ; 428 429 /* 通信端点をロックを解除する。*/ 447 430 syscall(sig_sem(cep->semid_lock)); 448 431 } 449 432 else if (cep->rcv_tskid != TA_NULL) { 450 433 451 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/434 /* 非ノンブロッキングコールでペンディング中 */ 452 435 error = E_QOVR; 453 436 454 /* é信端ç¹ãããã¯ã解é¤ããã*/437 /* 通信端点をロックを解除する。*/ 455 438 syscall(sig_sem(cep->semid_lock)); 456 439 } 457 440 else { 458 441 459 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/442 /* 現在のタスク識別子を記録する。*/ 460 443 get_tid(&(cep->rcv_tskid)); 461 444 462 /* é信端ç¹ãããã¯ã解é¤ããã*/ 463 syscall(sig_sem(cep->semid_lock)); 464 465 /* å 466 ¥åãããã¾ã§å¾ 467 ã¤ã*/ 445 /* 通信端点をロックを解除する。*/ 446 syscall(sig_sem(cep->semid_lock)); 447 448 /* 入力があるまで待つ。*/ 468 449 if (cep->cb_netbuf != NULL) { 469 450 470 451 /* 471 * ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸ãã 472 * udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã 473 * ãã§ã«å 474 ¥åæ¸ã¿ã§ããã 452 * ここにくる場合は、コールバック関数の中から 453 * udp_rcv_dat を呼び出していることになり、 454 * すでに入力済みである。 475 455 */ 476 456 input = cep->cb_netbuf; … … 482 462 } 483 463 484 /* p_dstaddr ãè¨å®ããã*/464 /* p_dstaddr を設定する。*/ 485 465 uhoff = (uint_t)GET_UDP_HDR_OFFSET(input); 486 466 udph = GET_UDP_HDR(input, uhoff); … … 488 468 IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src); 489 469 490 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/470 /* データをバッファに移す。*/ 491 471 ulen = ntohs(udph->ulen); 492 472 if (ulen - UDP_HDR_SIZE > len) -
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 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$ … … 84 72 85 73 /* 86 * UDP ãããã»ãã¤ãã¼ãã¢ã¯ã»ã¹ãã¯ã74 * UDP ヘッダ・ペイロードアクセスマクロ 87 75 */ 88 76 … … 100 88 101 89 /* 102 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©90 * TINET 1.1 との互換性のための定義 103 91 */ 104 92 … … 113 101 114 102 /* 115 * ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©103 * コールバック関数の定義 116 104 */ 117 105 … … 119 107 120 108 /* 121 * UDP é信端ç¹122 */ 123 124 125 /* 126 * IPv4 UDP é信端ç¹109 * UDP 通信端点 110 */ 111 112 113 /* 114 * IPv4 UDP 通信端点 127 115 */ 128 116 typedef struct t_udp4_cep { 129 117 130 118 /* 131 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã132 */ 133 ATR cepatr; /* UDP é信端ç¹å±æ§*/134 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/135 t_udp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/136 137 /* 138 * TINET ç¬èªã®ã¡ã³ã139 */ 140 uint16_t flags; /* é信端ç¹ãã©ã°*/141 ID semid_lock; /* é信端ç¹ããã¯*/142 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å*/143 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å*/144 ID rcvqid; /* éã³ã¼ã«ããã¯ç¨åä¿¡ãã¥ã¼èå¥å*/145 T_NET_BUF *cb_netbuf; /* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/119 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 120 */ 121 ATR cepatr; /* UDP 通信端点属性 */ 122 T_IPV4EP myaddr; /* 自分のアドレス */ 123 t_udp_callback callback; /* コールバック関数 */ 124 125 /* 126 * TINET 独自のメンバ 127 */ 128 uint16_t flags; /* 通信端点フラグ */ 129 ID semid_lock; /* 通信端点ロック */ 130 ID snd_tskid; /* 送信タスク識別子 */ 131 ID rcv_tskid; /* 受信タスク識別子 */ 132 ID rcvqid; /* 非コールバック用受信キュー識別子*/ 133 T_NET_BUF *cb_netbuf; /* コールバック用受信ネットワークバッファ*/ 146 134 147 135 #ifdef UDP_CFG_NON_BLOCKING 148 136 149 T_IPV4EP *snd_p_dstaddr; /* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 150 T_IPV4EP *rcv_p_dstaddr; /* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 151 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 152 é ã¢ãã¬ã¹ */ 153 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 154 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 155 é ã¢ãã¬ã¹ */ 156 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 137 T_IPV4EP *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/ 138 T_IPV4EP *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/ 139 void *snd_data; /* 送信データ領域の先頭アドレス */ 140 int_t snd_len; /* 送信データ領域の長さ */ 141 void *rcv_data; /* 受信データ領域の先頭アドレス */ 142 int_t rcv_len; /* 受信データ領域の長さ */ 157 143 158 144 #endif /* of #ifdef UDP_CFG_NON_BLOCKING */ 159 145 160 146 #ifdef UDP_CFG_EXTENTIONS 161 ER error; /* å¾ 162 ã¡ä¸ã«çºçããã¨ã©ã¼ */ 147 ER error; /* 待ち中に発生したエラー */ 163 148 #endif 164 149 … … 170 155 171 156 /* 172 * IPv6 UDP é信端ç¹157 * IPv6 UDP 通信端点 173 158 */ 174 159 … … 176 161 177 162 /* 178 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã179 */ 180 ATR cepatr; /* UDP é信端ç¹å±æ§*/181 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/182 t_udp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/183 184 /* 185 * TINET ç¬èªã®ã¡ã³ã186 */ 187 uint16_t flags; /* é信端ç¹ãã©ã°*/188 ID semid_lock; /* é信端ç¹ããã¯*/189 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å*/190 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å*/191 ID rcvqid; /* éã³ã¼ã«ããã¯ç¨åä¿¡ãã¥ã¼èå¥å*/192 T_NET_BUF *cb_netbuf; /* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/163 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 164 */ 165 ATR cepatr; /* UDP 通信端点属性 */ 166 T_IPV6EP myaddr; /* 自分のアドレス */ 167 t_udp_callback callback; /* コールバック関数 */ 168 169 /* 170 * TINET 独自のメンバ 171 */ 172 uint16_t flags; /* 通信端点フラグ */ 173 ID semid_lock; /* 通信端点ロック */ 174 ID snd_tskid; /* 送信タスク識別子 */ 175 ID rcv_tskid; /* 受信タスク識別子 */ 176 ID rcvqid; /* 非コールバック用受信キュー識別子*/ 177 T_NET_BUF *cb_netbuf; /* コールバック用受信ネットワークバッファ*/ 193 178 194 179 #ifdef UDP_CFG_NON_BLOCKING 195 180 196 T_IPV6EP *snd_p_dstaddr; /* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 197 T_IPV6EP *rcv_p_dstaddr; /* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 198 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 199 é ã¢ãã¬ã¹ */ 200 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 201 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 202 é ã¢ãã¬ã¹ */ 203 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 181 T_IPV6EP *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/ 182 T_IPV6EP *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/ 183 void *snd_data; /* 送信データ領域の先頭アドレス */ 184 int_t snd_len; /* 送信データ領域の長さ */ 185 void *rcv_data; /* 受信データ領域の先頭アドレス */ 186 int_t rcv_len; /* 受信データ領域の長さ */ 204 187 205 188 #endif /* of #ifdef UDP_CFG_NON_BLOCKING */ 206 189 207 190 #ifdef UDP_CFG_EXTENTIONS 208 ER error; /* å¾ 209 ã¡ä¸ã«çºçããã¨ã©ã¼ */ 191 ER error; /* 待ち中に発生したエラー */ 210 192 #endif 211 193 … … 217 199 218 200 /* 219 * UDP é信端ç¹ãã©ã°220 */ 221 222 #define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200) /* éä¿¡ãéå§ããã*/223 #define UDP_CEP_FLG_DYNAMIC UINT_C(0x0400) /* åççæã»åé¤å¯è½é信端ç¹ã*/224 #define UDP_CEP_FLG_VALID UINT_C(0x0800) /* çææ¸ã¿ã§æå¹ãªé信端ç¹ã*/225 226 /* 227 * ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©228 */ 229 230 #define TMIN_UDP_CEPID 1 /* UDP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/201 * UDP 通信端点フラグ 202 */ 203 204 #define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200) /* 送信を開始する。 */ 205 #define UDP_CEP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能通信端点。 */ 206 #define UDP_CEP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な通信端点。 */ 207 208 /* 209 * オブジェクト ID の最小値の定義 210 */ 211 212 #define TMIN_UDP_CEPID 1 /* UDP 通信端点 ID の最小値 */ 231 213 232 214 #ifdef SUPPORT_MIB 233 215 234 216 /* 235 * SNMP 㮠管çæ 236 å ±ãã¼ã¹ (MIB) 217 * SNMP の 管理情報ベース (MIB) 237 218 */ 238 219 … … 247 228 248 229 /* 249 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã230 * 関数シミュレーションマクロ 250 231 */ 251 232 … … 265 246 266 247 /* 267 * å 268 ¨åå¤æ° 248 * 全域変数 269 249 */ 270 250 … … 279 259 280 260 /* 281 * TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©261 * TINET 1.3 との互換性のための定義 282 262 */ 283 263 … … 286 266 287 267 /* 288 * é¢æ°268 * 関数 289 269 */ 290 270 … … 297 277 extern ER udp_alloc_port (T_UDP_CEP *cep, uint16_t portno); 298 278 299 /* ãã³ããããã³ã°ã³ã¼ã«ãè¡ãå ´åã«çµã¿è¾¼ãã¿ã¹ã¯*/279 /* ノンブロッキングコールを行う場合に組み込むタスク */ 300 280 301 281 extern void udp_output_task(intptr_t exinf);
Note:
See TracChangeset
for help on using the changeset viewer.