Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/netinet
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- Location:
- azure_iot_hub/trunk/asp3_dcre/tinet/netinet
- Files:
-
- 54 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/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
r388 r389 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$ … … 115 103 116 104 /* 117 * ICMPv6 ããã105 * ICMPv6 ヘッダ 118 106 */ 119 107 120 108 typedef struct t_icmp6_hdr { 121 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/122 uint8_t code; /* ãµãå*/123 uint16_t sum; /* ãã§ãã¯ãµã*/109 uint8_t type; /* メッセージの型 */ 110 uint8_t code; /* サブ型 */ 111 uint16_t sum; /* チェックサム */ 124 112 union { 125 113 uint32_t data32; … … 132 120 #define icmp6_data16 data.data16 133 121 #define icmp6_data8 data.data8 134 #define icmp6_pptr data.data32 /* ãã©ã¡ã¼ã¿ç°å¸¸*/135 #define icmp6_mtu data.data32 /* ãã©ã¡ã¼ã¿ç°å¸¸*/136 #define icmp6_id data.data16[0] /* ã¨ã³ã¼è¦æ±ã¨å¿ç*/137 #define icmp6_seq data.data16[1] /* ã¨ã³ã¼è¦æ±ã¨å¿ç*/122 #define icmp6_pptr data.data32 /* パラメータ異常 */ 123 #define icmp6_mtu data.data32 /* パラメータ異常 */ 124 #define icmp6_id data.data16[0] /* エコー要求と応答 */ 125 #define icmp6_seq data.data16[1] /* エコー要求と応答 */ 138 126 139 127 #define ICMP6_HDR_SIZE (sizeof(T_ICMP6_HDR)) … … 147 135 148 136 /* 149 * ICMP6 ã¿ã¤ã 150 */ 151 152 #define ICMP6_DST_UNREACH UINT_C(1) /* å®å 153 å°éä¸å¯è½ */ 154 #define ICMP6_PACKET_TOO_BIG UINT_C(2) /* ãã±ããã大ããããã */ 155 #define ICMP6_TIME_EXCEEDED UINT_C(3) /* TTL ãè¶ 156 éããã */ 157 #define ICMP6_PARAM_PROB UINT_C(4) /* IPv6 ããããä¸æ£ã */ 158 159 #define ICMP6_ECHO_REQUEST UINT_C(128) /* ã¨ã³ã¼è¦æ± */ 160 #define ICMP6_ECHO_REPLY UINT_C(129) /* ã¨ã³ã¼å¿ç */ 161 162 #define ICMP6_MEMBERSHIP_QUERY UINT_C(130) /* ã°ã«ã¼ãã¡ã³ãç 163 §ä¼ */ 164 #define ICMP6_MEMBERSHIP_REPORT UINT_C(131) /* ã°ã«ã¼ãã¡ã³ãå ±å */ 165 #define ICMP6_MEMBERSHIP_REDUCTION UINT_C(132) /* ã°ã«ã¼ãã¡ã³ãçµäº */ 166 167 #define MLD_LISTENER_QUERY UINT_C(130) /* ãã«ããã£ã¹ãåä¿¡è 168 ç 169 §ä¼ */ 170 #define MLD_LISTENER_REPORT UINT_C(131) /* ãã«ããã£ã¹ãåä¿¡è 171 å ±å */ 172 #define MLD_LISTENER_DONE UINT_C(132) /* ãã«ããã£ã¹ãåä¿¡è 173 çµäº */ 174 175 #define ND_ROUTER_SOLICIT UINT_C(133) /* ã«ã¼ã¿è¦è« */ 176 #define ND_ROUTER_ADVERT UINT_C(134) /* ã«ã¼ã¿éç¥ */ 177 #define ND_NEIGHBOR_SOLICIT UINT_C(135) /* è¿é£è¦è« */ 178 #define ND_NEIGHBOR_ADVERT UINT_C(136) /* è¿é£éç¥ */ 179 #define ND_REDIRECT UINT_C(137) /* åãç´ã */ 180 181 #define ICMP6_ROUTER_RENUMBERING UINT_C(138) /* ã«ã¼ã¿çªå·åè¨å® */ 182 183 #define ICMP6_WRU_REQUEST UINT_C(139) /* è¦æ±ãã¼ãæ¢ç´¢ */ 184 #define ICMP6_WRU_REPLY UINT_C(140) /* å¿çãã¼ãæ¢ç´¢ */ 185 186 #define ICMP6_FQDN_QUERY UINT_C(139) /* FQDN ç 187 §ä¼ */ 188 #define ICMP6_FQDN_REPLY UINT_C(140) /* FQDN å¿ç */ 189 190 #define ICMP6_NI_QUERY UINT_C(139) /* ãã¼ãæ 191 å ±ç 192 §ä¼ */ 193 #define ICMP6_NI_REPLY UINT_C(140) /* ãã¼ãæ 194 å ±å¿ç */ 195 196 #define ICMP6_MAX_TYPE UINT_C(203) /* ICMP6 ã¿ã¤ãã®æå¤§å¤ */ 197 198 /* 199 * ICMP6 ã³ã¼ã 200 */ 201 202 /* å®å 203 å°éä¸å¯è½ */ 204 205 #define ICMP6_DST_UNREACH_NOROUTE UINT_C(0) /* å°éã«ã¼ããªãã */ 206 #define ICMP6_DST_UNREACH_ADMIN UINT_C(1) /* 管çè 207 ã«ããç¡å¹åä¸ã */ 208 #define ICMP6_DST_UNREACH_NOTEIGHBOR UINT_C(2) /* è¿é£è 209 ã§ã¯ãªããªã£ãã */ 210 #define ICMP6_DST_UNREACH_BEYOND_SCOPE UINT_C(2) /* ã¹ã³ã¼ããè¶ 211 ãã¦ããã */ 212 #define ICMP6_DST_UNREACH_ADDR UINT_C(3) /* å®å 213 ã¢ãã¬ã¹ã«å°éä¸å¯è½ã */ 214 #define ICMP6_DST_UNREACH_NOPORT UINT_C(4) /* å®å 215 ãã¼ãã«å°éä¸å¯è½ã */ 216 217 /* TTL è¶ 218 é */ 219 220 #define ICMP6_TIME_EXCEED_TRANSIT UINT_C(0) /* 転éæã« TTL==0 ã«ãªã£ãã */ 221 #define ICMP6_TIME_EXCEED_REASSEMBLY UINT_C(1) /* IP åæ§æã§ã¿ã¤ã ã¢ã¦ãããã*/ 222 223 /* ãããä¸æ£ */ 224 225 #define ICMP6_PARAMPROB_HEADER UINT_C(0) /* ãããã«ä¸æ£ããã£ãã */ 226 #define ICMP6_PARAMPROB_NEXT_HEADER UINT_C(1) /* 次ããããèªèã§ããªãã */ 227 #define ICMP6_PARAMPROB_OPTION UINT_C(2) /* ãªãã·ã§ã³ãèªèã§ããªãã */ 228 229 /* å 230 é¨ä½¿ç¨ */ 231 #define ND_REDIRECT_ONLINK UINT_C(0) /* ãªã³ãªã³ã¯ã¸ã®åãç´ã */ 232 #define ND_REDIRECT_ROUTER UINT_C(1) /* ã«ã¼ã¿ã¸ã®åãç´ã */ 233 234 /* 235 * å¶éå¤ 236 */ 237 238 /* ICMPv6 ã®æ大ãã¤ãã¼ãé· */ 137 * ICMP6 タイプ 138 */ 139 140 #define ICMP6_DST_UNREACH UINT_C(1) /* 宛先到達不可能 */ 141 #define ICMP6_PACKET_TOO_BIG UINT_C(2) /* パケットが大きすぎる。 */ 142 #define ICMP6_TIME_EXCEEDED UINT_C(3) /* TTL を超過した。 */ 143 #define ICMP6_PARAM_PROB UINT_C(4) /* IPv6 ヘッダが不正。 */ 144 145 #define ICMP6_ECHO_REQUEST UINT_C(128) /* エコー要求 */ 146 #define ICMP6_ECHO_REPLY UINT_C(129) /* エコー応答 */ 147 148 #define ICMP6_MEMBERSHIP_QUERY UINT_C(130) /* グループメンバ照会 */ 149 #define ICMP6_MEMBERSHIP_REPORT UINT_C(131) /* グループメンバ報告 */ 150 #define ICMP6_MEMBERSHIP_REDUCTION UINT_C(132) /* グループメンバ終了 */ 151 152 #define MLD_LISTENER_QUERY UINT_C(130) /* マルチキャスト受信者照会 */ 153 #define MLD_LISTENER_REPORT UINT_C(131) /* マルチキャスト受信者報告 */ 154 #define MLD_LISTENER_DONE UINT_C(132) /* マルチキャスト受信者終了 */ 155 156 #define ND_ROUTER_SOLICIT UINT_C(133) /* ルータ要請 */ 157 #define ND_ROUTER_ADVERT UINT_C(134) /* ルータ通知 */ 158 #define ND_NEIGHBOR_SOLICIT UINT_C(135) /* 近隣要請 */ 159 #define ND_NEIGHBOR_ADVERT UINT_C(136) /* 近隣通知 */ 160 #define ND_REDIRECT UINT_C(137) /* 向け直し */ 161 162 #define ICMP6_ROUTER_RENUMBERING UINT_C(138) /* ルータ番号再設定 */ 163 164 #define ICMP6_WRU_REQUEST UINT_C(139) /* 要求ノード探索 */ 165 #define ICMP6_WRU_REPLY UINT_C(140) /* 応答ノード探索 */ 166 167 #define ICMP6_FQDN_QUERY UINT_C(139) /* FQDN 照会 */ 168 #define ICMP6_FQDN_REPLY UINT_C(140) /* FQDN 応答 */ 169 170 #define ICMP6_NI_QUERY UINT_C(139) /* ノード情報照会 */ 171 #define ICMP6_NI_REPLY UINT_C(140) /* ノード情報応答 */ 172 173 #define ICMP6_MAX_TYPE UINT_C(203) /* ICMP6 タイプの最大値 */ 174 175 /* 176 * ICMP6 コード 177 */ 178 179 /* 宛先到達不可能 */ 180 181 #define ICMP6_DST_UNREACH_NOROUTE UINT_C(0) /* 到達ルートなし。 */ 182 #define ICMP6_DST_UNREACH_ADMIN UINT_C(1) /* 管理者により無効化中。 */ 183 #define ICMP6_DST_UNREACH_NOTEIGHBOR UINT_C(2) /* 近隣者ではなくなった。 */ 184 #define ICMP6_DST_UNREACH_BEYOND_SCOPE UINT_C(2) /* スコープを超えている。 */ 185 #define ICMP6_DST_UNREACH_ADDR UINT_C(3) /* 宛先アドレスに到達不可能。 */ 186 #define ICMP6_DST_UNREACH_NOPORT UINT_C(4) /* 宛先ポートに到達不可能。 */ 187 188 /* TTL 超過 */ 189 190 #define ICMP6_TIME_EXCEED_TRANSIT UINT_C(0) /* 転送時に TTL==0 になった。 */ 191 #define ICMP6_TIME_EXCEED_REASSEMBLY UINT_C(1) /* IP 再構成でタイムアウトした。*/ 192 193 /* ヘッダ不正 */ 194 195 #define ICMP6_PARAMPROB_HEADER UINT_C(0) /* ヘッダに不正があった。 */ 196 #define ICMP6_PARAMPROB_NEXT_HEADER UINT_C(1) /* 次ヘッダが認識できない。 */ 197 #define ICMP6_PARAMPROB_OPTION UINT_C(2) /* オプションが認識できない。 */ 198 199 /* 内部使用 */ 200 #define ND_REDIRECT_ONLINK UINT_C(0) /* オンリンクへの向け直し */ 201 #define ND_REDIRECT_ROUTER UINT_C(1) /* ルータへの向け直し */ 202 203 /* 204 * 制限値 205 */ 206 207 /* ICMPv6 の最大ペイロード長 */ 239 208 #define ICMPV6_PAYLOAD_MAXLEN (IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE)) 240 209 241 210 /* 242 * è¿é£è¦è«211 * 近隣要請 243 212 */ 244 213 … … 246 215 T_ICMP6_HDR hdr; 247 216 T_IN6_ADDR target; 248 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/217 /* この後にオプションが続く */ 249 218 } T_NEIGHBOR_SOLICIT_HDR; 250 219 … … 264 233 265 234 /* 266 * è¿é£éç¥235 * 近隣通知 267 236 */ 268 237 … … 270 239 T_ICMP6_HDR hdr; 271 240 T_IN6_ADDR target; 272 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/241 /* この後にオプションが続く */ 273 242 } __attribute__((packed, aligned(2))) T_NEIGHBOR_ADVERT_HDR; 274 243 275 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/244 /* ICMP6 ヘッダのデータ部の定義 */ 276 245 277 246 #define nd_na_flags_reserved hdr.data.data32 … … 295 264 296 265 /* 297 * è¿é£éç¥ãã©ã°ãnd_na_flags_reserved (hdr.data32) ã«è¨å®ããã266 * 近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。 298 267 */ 299 268 300 269 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN 301 270 302 #define ND_NA_FLG_OVERRIDE ULONG_C(0x20000000) /* è¿é£ãã£ãã·ã¥ä¸æ¸ã*/303 #define ND_NA_FLG_SOLICITED ULONG_C(0x40000000) /* è¿é£è¦è«ã¸ã®å¿ç*/304 #define ND_NA_FLG_ROUTER ULONG_C(0x80000000) /* ã«ã¼ã¿éç¥*/271 #define ND_NA_FLG_OVERRIDE ULONG_C(0x20000000) /* 近隣キャッシュ上書き */ 272 #define ND_NA_FLG_SOLICITED ULONG_C(0x40000000) /* 近隣要請への応答 */ 273 #define ND_NA_FLG_ROUTER ULONG_C(0x80000000) /* ルータ通知 */ 305 274 306 275 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN 307 276 308 #define ND_NA_FLG_OVERRIDE ULONG_C(0x00000020) /* è¿é£ãã£ãã·ã¥ä¸æ¸ã*/309 #define ND_NA_FLG_SOLICITED ULONG_C(0x00000040) /* è¿é£è¦è«ã¸ã®å¿ç*/310 #define ND_NA_FLG_ROUTER ULONG_C(0x00000080) /* ã«ã¼ã¿éç¥*/277 #define ND_NA_FLG_OVERRIDE ULONG_C(0x00000020) /* 近隣キャッシュ上書き */ 278 #define ND_NA_FLG_SOLICITED ULONG_C(0x00000040) /* 近隣要請への応答 */ 279 #define ND_NA_FLG_ROUTER ULONG_C(0x00000080) /* ルータ通知 */ 311 280 312 281 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */ 313 282 314 283 /* 315 * ã«ã¼ã¿éç¥284 * ルータ通知 316 285 * 317 286 * RFC4291: IP Version 6 Addressing Architecture … … 322 291 typedef struct t_router_advert_hdr { 323 292 T_ICMP6_HDR hdr; 324 uint32_t reachable; /* [us] å°éå¯è½æé*/325 uint32_t retransmit; /* [us] è¿é£è¦è«éä¿¡éé*/326 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/293 uint32_t reachable; /* [us] 到達可能時間 */ 294 uint32_t retransmit; /* [us] 近隣要請送信間隔 */ 295 /* この後にオプションが続く */ 327 296 } __attribute__((packed, aligned(2))) T_ROUTER_ADVERT_HDR; 328 297 329 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/298 /* ICMP6 ヘッダのデータ部の定義 */ 330 299 331 300 #define nd_ra_current_hoplimit hdr.data.data8[0] 332 301 #define nd_ra_flags hdr.data.data8[1] 333 #define nd_ra_router_lifetime hdr.data.data16[1] /* [s] ã«ã¼ã¿æå¹æé*/302 #define nd_ra_router_lifetime hdr.data.data16[1] /* [s] ルータ有効時間 */ 334 303 335 304 #define ROUTER_ADVERT_HDR_SIZE (sizeof(T_ROUTER_ADVERT_HDR)) … … 349 318 350 319 /* 351 * ã«ã¼ã¿éç¥ãããã®ãã©ã°320 * ルータ通知ヘッダのフラグ 352 321 */ 353 322 … … 357 326 358 327 /* 359 * M: RA以å¤ã®æ¹æ³ã§èªåçã«ã¢ãã¬ã¹ãè¨å®ãããã¨ã許å¯ããã 360 * O: RA以å¤ã®æ¹æ³ã§èªåçã«ã¢ãã¬ã¹ä»¥å¤ã®æ 361 å ±ãè¨å®ãããã¨ãã許å¯ããã 328 * M: RA以外の方法で自動的にアドレスを設定することを許可する。 329 * O: RA以外の方法で自動的にアドレス以外の情報を設定することをを許可する。 362 330 * 363 331 * M O 364 * ON ON ã¢ãã¬ã¹ã¨ãã以å¤ã®æ 365 å ±ãDHCPv6ã§è¨å®ããï¼statefullï¼ 366 * ON OFF ã¢ãã¬ã¹ã¯DHCPv6ã§è¨å®ãããããã以å¤ã¯æåã§è¨å®ããã 367 * OFF ON ã¢ãã¬ã¹ã¯ RA ã§è¨å®ãããããã以å¤ã®æ 368 å ±ãDHCPv6ã§è¨å®ããï¼statelessï¼ 369 * OFF OFF DHCPv6 ã¯ä½¿ç¨ããªãã 370 */ 371 372 /* 373 * ã«ã¼ã¿è¦è« 332 * ON ON アドレスとそれ以外の情報をDHCPv6で設定する(statefull) 333 * ON OFF アドレスはDHCPv6で設定するが、それ以外は手動で設定する。 334 * OFF ON アドレスは RA で設定するが、それ以外の情報をDHCPv6で設定する(stateless) 335 * OFF OFF DHCPv6 は使用しない。 336 */ 337 338 /* 339 * ルータ要請 374 340 */ 375 341 … … 378 344 } __attribute__((packed, aligned(2))) T_ROUTER_SOLICIT_HDR; 379 345 380 /* ICMP6 ãããã®ãã¼ã¿é¨ã®å®ç¾©*/346 /* ICMP6 ヘッダのデータ部の定義 */ 381 347 382 348 #define nd_rs_reserved hdr.data.data32 … … 399 365 400 366 /* 401 * è¿é£æ¢ç´¢ãªãã·ã§ã³402 */ 403 404 /* è¿é£æ¢ç´¢ããã*/367 * 近隣探索オプション 368 */ 369 370 /* 近隣探索ヘッダ */ 405 371 406 372 typedef struct t_neighbor_hdr { … … 409 375 } __attribute__((packed, aligned(2))) T_NEIGHBOR_HDR; 410 376 411 /* è¿é£æ¢ç´¢ãªãã·ã§ã³ããã*/377 /* 近隣探索オプションヘッダ */ 412 378 413 379 typedef struct t_nd_opt_hdr { 414 uint8_t type; /* ãªãã·ã§ã³ã¿ã¤ã*/415 uint8_t len; /* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã*/380 uint8_t type; /* オプションタイプ */ 381 uint8_t len; /* オプション長、単位は 8 バイト */ 416 382 } __attribute__((packed, aligned(2))) T_ND_OPT_HDR; 417 383 418 384 #define ND_OPT_HDR_SIZE (sizeof(T_ND_OPT_HDR)) 419 385 420 #define ND_OPT_SOURCE_LINKADDR UINT_C(1) /* éä¿¡å 421 ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ */ 422 #define ND_OPT_TARGET_LINKADDR UINT_C(2) /* 対象ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã¢ãã¬ã¹ */ 423 #define ND_OPT_PREFIX_INFORMATION UINT_C(3) /* ãã¬ãã£ãã¯ã¹æ 424 å ± */ 425 #define ND_OPT_REDIRECTED_HEADER UINT_C(4) /* ãªãã¤ã¬ã¯ãã»ããã */ 386 #define ND_OPT_SOURCE_LINKADDR UINT_C(1) /* 送信先ネットワークインタフェースのアドレス */ 387 #define ND_OPT_TARGET_LINKADDR UINT_C(2) /* 対象ネットワークインタフェースのアドレス */ 388 #define ND_OPT_PREFIX_INFORMATION UINT_C(3) /* プレフィックス情報 */ 389 #define ND_OPT_REDIRECTED_HEADER UINT_C(4) /* リダイレクト・ヘッダ */ 426 390 #define ND_OPT_MTU UINT_C(5) /* MTU */ 427 391 428 #define ND_OPT_PREFIX_INFO_COUNT UINT_C(6) /* ãã¬ãã£ãã¯ã¹æ 429 å ±ã®åæ° */ 430 #define ND_OPT_OFF_ARRAY_SIZE UINT_C(7) /* ND ãªãã·ã§ã³ã®ãªãã»ãããè¨é²ããé 431 åãµã¤ãº*/ 432 433 #define ND_OPT_OFF_ARRAY_IX(t) ((t)-1) /* ãªãã»ããé 434 åã®ã¤ã³ããã¯ã¹ */ 435 436 /* ãã¬ãã£ãã¯ã¹ãªãã·ã§ã³ */ 392 #define ND_OPT_PREFIX_INFO_COUNT UINT_C(6) /* プレフィックス情報の個数 */ 393 #define ND_OPT_OFF_ARRAY_SIZE UINT_C(7) /* ND オプションのオフセットを記録する配列サイズ*/ 394 395 #define ND_OPT_OFF_ARRAY_IX(t) ((t)-1) /* オフセット配列のインデックス */ 396 397 /* プレフィックスオプション */ 437 398 438 399 typedef struct t_nd_opt_prefix_info { 439 uint8_t type; /* è¿é£æ¢ç´¢ãªãã·ã§ã³ã¿ã¤ã= 3 */440 uint8_t len; /* ãªãã·ã§ã³é· = 8Ã4=32 */441 uint8_t prefix_len; /* ãã¬ãã£ãã¯ã¹é·*/442 uint8_t flags; /* ãã©ã°*/443 uint32_t valid; /* [s] æå¹æé*/444 uint32_t preferred; /* [s] æ¨å¥¨æå¹æé*/400 uint8_t type; /* 近隣探索オプションタイプ = 3 */ 401 uint8_t len; /* オプション長 = 8×4=32 */ 402 uint8_t prefix_len; /* プレフィックス長 */ 403 uint8_t flags; /* フラグ */ 404 uint32_t valid; /* [s] 有効時間 */ 405 uint32_t preferred; /* [s] 推奨有効時間 */ 445 406 uint32_t reserved; 446 T_IN6_ADDR prefix; /* ãã¬ãã£ãã¯ã¹*/407 T_IN6_ADDR prefix; /* プレフィックス */ 447 408 } __attribute__((packed, aligned(2))) T_ND_OPT_PREFIX_INFO; 448 409 449 #define ND_OPT_PI_FLAG_ONLINK UINT_C(0x80) /* ãªã³ãªã³ã¯ãã¬ãã£ãã¯ã¹*/450 #define ND_OPT_PI_FLAG_AUTO UINT_C(0x40) /* ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®*/451 452 /* MTU ãªãã·ã§ã³ããã*/410 #define ND_OPT_PI_FLAG_ONLINK UINT_C(0x80) /* オンリンクプレフィックス */ 411 #define ND_OPT_PI_FLAG_AUTO UINT_C(0x40) /* ステートレス・アドレス自動設定*/ 412 413 /* MTU オプションヘッダ */ 453 414 454 415 typedef struct t_nd_opt_mtu_hdr { 455 uint8_t type; /* ãªãã·ã§ã³ã¿ã¤ã*/456 uint8_t len; /* ãªãã·ã§ã³é·ãåä½ã¯ 8 ãã¤ã*/416 uint8_t type; /* オプションタイプ */ 417 uint8_t len; /* オプション長、単位は 8 バイト*/ 457 418 uint16_t reserved; 458 419 uint32_t mtu; /* MTU */ … … 460 421 461 422 /* 462 * åãç´ã423 * 向け直し 463 424 */ 464 425 465 426 typedef struct t_nd_redirect_hdr { 466 427 T_ICMP6_HDR hdr; 467 T_IN6_ADDR target; /* ã«ã¼ã¿ã®ã¢ãã¬ã¹*/468 T_IN6_ADDR dst; /* åãç´ãã®çµç¹ã¢ãã¬ã¹*/469 /* ãã®å¾ã«ãªãã·ã§ã³ãç¶ã*/428 T_IN6_ADDR target; /* ルータのアドレス */ 429 T_IN6_ADDR dst; /* 向け直しの終点アドレス */ 430 /* この後にオプションが続く */ 470 431 } __attribute__((packed, aligned(2))) T_ND_REDIRECT_HDR; 471 432 … … 475 436 476 437 /* 477 * SNMP 㮠管çæ 478 å ±ãã¼ã¹ (MIB) 438 * SNMP の 管理情報ベース (MIB) 479 439 */ 480 440 … … 521 481 522 482 /* 523 * é¢æ°483 * 関数 524 484 */ 525 485 -
azure_iot_hub/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
r388 r389 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 -
azure_iot_hub/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
r388 r389 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 * ARP ãã£ãã·ã¥ã¨ã³ããª112 * ARP キャッシュエントリ 125 113 */ 126 114 … … 128 116 129 117 /* 130 * é¢æ°118 * 関数 131 119 */ 132 120 … … 135 123 136 124 /* 137 * in_arpinput -- TCP/IP ç¨ ARP ã®å 138 ¥åé¢æ° 125 * in_arpinput -- TCP/IP 用 ARP の入力関数 139 126 */ 140 127 … … 152 139 et_arph = GET_ETHER_ARP_HDR(input); 153 140 154 ntoahl(saddr, et_arph->sproto); /* éä¿¡å 155 IP ã¢ãã¬ã¹ */ 156 ntoahl(taddr, et_arph->tproto); /* 解決対象 IP ã¢ãã¬ã¹ */ 157 158 /* 159 * 以ä¸ã®å ´åã¯ã¨ã©ã¼ 160 * ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ãèªå 161 * ã»éä¿¡ãã¹ãã®ç©çã¢ãã¬ã¹ãããã¼ããã£ã¹ã 141 ntoahl(saddr, et_arph->sproto); /* 送信元 IP アドレス */ 142 ntoahl(taddr, et_arph->tproto); /* 解決対象 IP アドレス */ 143 144 /* 145 * 以下の場合はエラー 146 * ・送信ホストの物理アドレスが自分 147 * ・送信ホストの物理アドレスがブロードキャスト 162 148 */ 163 149 if (memcmp(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN) == 0 || … … 166 152 167 153 /* 168 * éä¿¡ãã¹ãã® IP ã¢ãã¬ã¹ãèªåã®å ´åã¯ãéè¤ãã¦ããã®ã§169 * ç¸æã«ãç¥ãããã170 * ãã ããèªåã¨ç¸æã®ã¢ãã¬ã¹ãæªå®ç¾©ï¼IPV4_ADDRANYï¼ã®æã¯ä½ãããªãã154 * 送信ホストの IP アドレスが自分の場合は、重複しているので 155 * 相手にも知らせる。 156 * ただし、自分と相手のアドレスが未定義(IPV4_ADDRANY)の時は何もしない。 171 157 */ 172 158 if ((saddr == ifp->in4_ifaddr.addr) && (saddr != IPV4_ADDRANY)) { … … 197 183 198 184 /* 199 * 以ä¸ã®å ´åã¯ä½ãããªãã 200 * ã»è§£æ±ºå¯¾è±¡ IP ã¢ãã¬ã¹ãèªåã§ã¯ãªãã注: å 201 ã® FreeBSD ã® 202 * å®è£ 203 ã§ã¯ãARP PROXY çã®ãããèªå以å¤ã® IP ã¢ãã¬ã¹ã® 204 * 解決ãè¡ã£ã¦ããããæ¬å®è£ 205 ã§ã¯ãèªå以å¤ã® IP 206 * ã¢ãã¬ã¹ã®è§£æ±ºã¯è¡ããªãã 185 * 以下の場合は何もしない。 186 * ・解決対象 IP アドレスが自分ではない、注: 元の FreeBSD の 187 * 実装では、ARP PROXY 等のため、自分以外の IP アドレスの 188 * 解決も行っているが、本実装では、自分以外の IP 189 * アドレスの解決は行わない。 207 190 */ 208 191 if (taddr != ifp->in4_ifaddr.addr) … … 210 193 211 194 /* 212 * éä¿¡å 213 IP ã¢ãã¬ã¹ã ARP ãã£ãã·ã¥ã«ããã調ã¹ãã 214 * ãã£ãã·ã¥ã«ãªããã°ãæ°ãã«ã¨ã³ããªãç»é²ããã 195 * 送信元 IP アドレスが ARP キャッシュにあるか調べる。 196 * キャッシュになければ、新たにエントリを登録する。 215 197 */ 216 198 syscall(wai_sem(SEM_ARP_CACHE_LOCK)); … … 221 203 222 204 /* 223 * éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°éä¿¡ããã205 * 送信がペンデングされているフレームがあれば送信する。 224 206 */ 225 207 if (ent->hold) { 226 208 227 /* ãã¬ã¼ã ã® Ethernet ããããè¨å®ããã*/209 /* フレームの Ethernet ヘッダを設定する。*/ 228 210 memcpy(GET_ETHER_HDR(ent->hold)->dhost, ent->mac_addr, ETHER_ADDR_LEN); 229 211 … … 232 214 syscall(sig_sem(SEM_ARP_CACHE_LOCK)); 233 215 234 /* ãã³ãã£ã³ã°ããã¦ãããã¬ã¼ã ãéä¿¡ããã*/216 /* ペンディングされているフレームを送信する。*/ 235 217 IF_RAW_OUTPUT(pending, TMO_FEVR); 236 218 … … 243 225 arph = GET_ARP_HDR(input); 244 226 245 /* ã¢ãã¬ã¹è§£æ±ºè¦æ±ã§ãªããã°çµäº*/227 /* アドレス解決要求でなければ終了 */ 246 228 if (ntohs(arph->opcode) != ARPOP_REQUEST) 247 229 goto buf_rel; 248 230 249 /* Ethernet ARP ããããè¨å®ããã*/231 /* Ethernet ARP ヘッダを設定する。*/ 250 232 memcpy(et_arph->thost, et_arph->shost, ETHER_ADDR_LEN); 251 233 memcpy(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN); … … 253 235 ahtonl(et_arph->sproto, taddr); 254 236 255 /* Ethernet ARP ããããè¨å®ããã*/237 /* Ethernet ARP ヘッダを設定する。*/ 256 238 arph->opcode = htons(ARPOP_REPLY); 257 239 258 /* Ethernet ããããè¨å®ããã*/240 /* Ethernet ヘッダを設定する。*/ 259 241 eth = GET_ETHER_HDR(input); 260 242 memcpy(eth->dhost, eth->shost, ETHER_ADDR_LEN); 261 243 memcpy(eth->shost, ifaddr->lladdr, ETHER_ADDR_LEN); 262 244 263 /* ARP å¿çãéä¿¡ããã*/245 /* ARP 応答を送信する。*/ 264 246 IF_RAW_OUTPUT(input, TMO_FEVR); 265 247 return; … … 272 254 273 255 /* 274 * arp_timer -- ARP ãã£ãã·ã¥ã®æ´æ°256 * arp_timer -- ARP キャッシュの更新 275 257 */ 276 258 … … 286 268 arp_cache[ix].expire -= ARP_TIMER_TMO; 287 269 if (arp_cache[ix].expire == 0) { 288 /* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/270 /* 送信がペンデングされているフレームがあれば捨てる。*/ 289 271 if (arp_cache[ix].hold) { 290 272 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 301 283 302 284 /* 303 * arp_lookup -- ARP ãã£ãã·ã¥ã®æ¢ç´¢ã¨ç»é² 304 * 305 * 注æ: SEM_ARP_CACHE_LOCK ãç²å¾ããç¶æ 306 ã§å¼åºãã㨠285 * arp_lookup -- ARP キャッシュの探索と登録 286 * 287 * 注意: SEM_ARP_CACHE_LOCK を獲得した状態で呼出すこと 307 288 */ 308 289 … … 318 299 } 319 300 320 /* create ãçãªããæ°ããªã¨ã³ããªãç»é²ããã*/301 /* create が真なら、新たなエントリを登録する。*/ 321 302 if (create) { 322 303 323 /* ã¾ãã空ããããã°ããã®ç©ºããå©ç¨ããã*/304 /* まず、空きがあれば、その空きを利用する。*/ 324 305 for (ix = NUM_ARP_ENTRY; ix -- > 0; ) { 325 306 if (arp_cache[ix].expire == 0) { … … 330 311 331 312 /* 332 * 空ãããªããã°ãã¿ã¤ã ã¢ã¦ãã¾ã§æéãæçã®333 * ã¨ã³ããªã¼ãç ´æ£ãã¦å©ç¨ããã313 * 空きがなければ、タイムアウトまで時間が最短の 314 * エントリーを破棄して利用する。 334 315 */ 335 316 syslog(LOG_NOTICE, "[ARP] cache busy, size=%d", NUM_ARP_ENTRY); … … 349 330 350 331 /* 351 * arp_request -- MAC ã¢ãã¬ã¹è§£æ±ºè¦æ±332 * arp_request -- MAC アドレス解決要求 352 333 */ 353 334 … … 367 348 if ((error = tget_net_buf(&arp_req, IF_ARP_ETHER_HDR_SIZE, TMO_ARP_GET_NET_BUF)) == E_OK) { 368 349 369 /* ã¤ã¼ãµãããããããè¨å®ããã*/350 /* イーサネットヘッダを設定する。*/ 370 351 eth = GET_ETHER_HDR(arp_req); 371 352 memcpy(eth->dhost, ether_broad_cast_addr, ETHER_ADDR_LEN); … … 373 354 eth->type = htons(ETHER_TYPE_ARP); 374 355 375 /* ARP ããããè¨å®ããã*/356 /* ARP ヘッダを設定する。*/ 376 357 arph = GET_ARP_HDR(arp_req); 377 358 arph->hrd_addr = htons(ARPHRD_ETHER); … … 381 362 arph->opcode = htons(ARPOP_REQUEST); 382 363 383 /* ã¤ã¼ãµããã ARP ããããè¨å®ããã*/364 /* イーサネット ARP ヘッダを設定する。*/ 384 365 et_arph = GET_ETHER_ARP_HDR(arp_req); 385 366 src = IF_GET_IFNET()->in4_ifaddr.addr; … … 389 370 ahtonl(et_arph->tproto, dst); 390 371 391 /* éä¿¡ããã*/372 /* 送信する。*/ 392 373 error = IF_RAW_OUTPUT(arp_req, TMO_ARP_OUTPUT); 393 374 } … … 398 379 399 380 /* 400 * arp_get_cache -- ARP ãã£ãã·ã¥ãç²å¾ããã381 * arp_get_cache -- ARP キャッシュを獲得する。 401 382 */ 402 383 … … 408 389 409 390 /* 410 * arp_input -- ARP ã®å 411 ¥åé¢æ° 391 * arp_input -- ARP の入力関数 412 392 */ 413 393 … … 420 400 NET_COUNT_ARP(net_count_arp.in_packets, 1); 421 401 422 /* ARP ãããã®é·ãããã§ãã¯ããã*/402 /* ARP ヘッダの長さをチェックする。*/ 423 403 if (input->len < IF_ARP_HDR_SIZE) 424 404 goto buf_rel; … … 427 407 428 408 /* 429 * ç©çã¢ãã¬ã¹ãã©ã¼ãããã Ehternet 以å¤430 * ã¾ãã¯ããããã³ã«ã IP 以å¤ã¯ã¨ã©ã¼ã409 * 物理アドレスフォーマットが Ehternet 以外 410 * または、プロトコルが IP 以外はエラー。 431 411 */ 432 412 if (ntohs(arph->hrd_addr) != ARPHRD_ETHER || … … 434 414 goto buf_rel; 435 415 436 /* ARP ããã + Ether ARP ãããã®é·ãããã§ãã¯ããã*/416 /* ARP ヘッダ + Ether ARP ヘッダの長さをチェックする。*/ 437 417 if (input->len < IF_ARP_ETHER_HDR_SIZE) 438 418 goto buf_rel; … … 447 427 448 428 /* 449 * arp_resolve -- MAC ã¢ãã¬ã¹è§£æ±º450 * 451 * ã¢ãã¬ã¹è§£æ±ºãã§ããã°ãæ»ãå¤ã¯ true ãè¿ããã§ããªããã°452 * éä¿¡ããã³ãã£ã³ã°ãã¦ãæ»ãå¤ã¯ false ãè¿ãã429 * arp_resolve -- MAC アドレス解決 430 * 431 * アドレス解決ができれば、戻り値は true を返し、できなければ 432 * 送信をペンディングして、戻り値は false を返す。 453 433 */ 454 434 … … 463 443 464 444 /* 465 * 次ã®å ´åã¯ãã¤ã¼ãµãããã®ããã¼ããã£ã¹ãã¢ãã¬ã¹ãè¿ãã445 * 次の場合は、イーサネットのブロードキャストアドレスを返す。 466 446 * 467 * ã»å 468 ¨ãããã 1 469 * ã»ãã¹ãé¨ã®å 470 ¨ãããã 1 ã§ããããã¯ã¼ã¯é¨ããã¼ã«ã«ã¢ãã¬ã¹ 447 * ・全ビットが 1 448 * ・ホスト部の全ビットが 1 で、ネットワーク部がローカルアドレス 471 449 */ 472 450 if (gw == IPV4_ADDR_BROADCAST || … … 476 454 } 477 455 478 /* éä¿¡å 479 GW ã® IP ã¢ãã¬ã¹ã ARP ãã£ãã·ã¥ã«ããã調ã¹ãã*/ 456 /* 送信先 GW の IP アドレスが ARP キャッシュにあるか調べる。*/ 480 457 syscall(wai_sem(SEM_ARP_CACHE_LOCK)); 481 458 ent = arp_lookup(gw, true); … … 486 463 } 487 464 else { 488 /* éä¿¡ããã³ãã³ã°ããã¦ãããã¬ã¼ã ãããã°æ¨ã¦ãã*/465 /* 送信がペンデングされているフレームがあれば捨てる。*/ 489 466 if (ent->hold) { 490 467 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 493 470 494 471 /* 495 * éä¿¡ããã³ãã£ã³ã°ããã496 * IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ãè¨å®ããã¦ããã¨ãã¯ã497 * éä¿¡ããã³ãã£ã³ã°ããªãã472 * 送信をペンディングする。 473 * IF でネットワークバッファを開放しないフラグが設定されているときは、 474 * 送信をペンディングしない。 498 475 */ 499 476 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) … … 505 482 syscall(sig_sem(SEM_ARP_CACHE_LOCK)); 506 483 507 /* ã¢ãã¬ã¹è§£æ±ºè¦æ±ãéä¿¡ããã*/484 /* アドレス解決要求を送信する。*/ 508 485 arp_request(ifaddr, gw); 509 486 return false; … … 512 489 513 490 /* 514 * arp_init -- ARP åæå491 * arp_init -- ARP 初期化 515 492 */ 516 493 … … 523 500 #ifdef ETHER_CFG_MULTICAST 524 501 /* 525 * ether_map_ipv4_multicast -- IPv4 ãã«ããã£ã¹ãã¢ãã¬ã¹ããã¤ã¼ãµãããã»ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ502 * ether_map_ipv4_multicast -- IPv4 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換 526 503 */ 527 504 -
azure_iot_hub/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
r388 r389 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 #if defined(_IP4_CFG) && defined(SUPPORT_ETHER) 51 39 52 /* ARP ãã£ãã·ã¥æ´æ°ç¨ã»ããã©*/40 /* ARP キャッシュ更新用セマフォ */ 53 41 54 42 CRE_SEM(SEM_ARP_CACHE_LOCK, { TA_TPRI, 1, 1 }); -
azure_iot_hub/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
r388 r389 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 … … 132 118 133 119 /* 134 * TINET ç¬èªAPI120 * TINET 独自 API 135 121 */ 136 122 -
azure_iot_hub/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
r388 r389 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$ … … 89 77 90 78 /* 91 * TINET ã®ãã¼ã¸ã§ã³æ 92 å ± 79 * TINET のバージョン情報 93 80 */ 94 81 95 #define TINET_PRVER UINT_C(0x1070) /* TINET ã®ãã¼ã¸ã§ã³çªå·*/82 #define TINET_PRVER UINT_C(0x1070) /* TINET のバージョン番号 */ 96 83 97 84 /* 98 * ã¤ã³ã¿ã¼ãããã·ã¹ãã ã®å®ç¾©ãRFC790 åç 99 § 85 * インターネットシステムの定義、RFC790 参照 100 86 */ 101 87 102 88 /* 103 * ãããã³ã«(RFC1700)89 * プロトコル (RFC1700) 104 90 */ 105 91 106 #define IPPROTO_IP UINT_C(0) /* IP ã®ããã¼*/107 #define IPPROTO_HOPOPTS UINT_C(0) /* IPv6 ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³*/92 #define IPPROTO_IP UINT_C(0) /* IP のダミー */ 93 #define IPPROTO_HOPOPTS UINT_C(0) /* IPv6 中継点 (Hop-by-Hop) オプション */ 108 94 #define IPPROTO_ICMP UINT_C(1) /* ICMP */ 109 95 #define IPPROTO_IGMP UINT_C(2) /* IGMP */ … … 111 97 #define IPPROTO_UDP UINT_C(17) /* UDP */ 112 98 #define IPPROTO_IPV6 UINT_C(41) /* IPv6 */ 113 #define IPPROTO_ROUTING UINT_C(43) /* çµè·¯å¶å¾¡ãªãã·ã§ã³*/114 #define IPPROTO_FRAGMENT UINT_C(44) /* æçåãªãã·ã§ã³*/99 #define IPPROTO_ROUTING UINT_C(43) /* 経路制御オプション */ 100 #define IPPROTO_FRAGMENT UINT_C(44) /* 断片化オプション */ 115 101 #define IPPROTO_RSVP UINT_C(46) /* RSVP */ 116 #define IPPROTO_ESP UINT_C(50) /* IPv6 æå·åãªãã·ã§ã³*/117 #define IPPROTO_AH UINT_C(51) /* IPv6 èªè¨¼ãªãã·ã§ã³*/102 #define IPPROTO_ESP UINT_C(50) /* IPv6 暗号化オプション */ 103 #define IPPROTO_AH UINT_C(51) /* IPv6 認証オプション */ 118 104 #define IPPROTO_ICMPV6 UINT_C(58) /* ICMPv6 */ 119 #define IPPROTO_NONE UINT_C(59) /* IPv6 次ãããç¡ã */ 120 #define IPPROTO_DSTOPTS UINT_C(60) /* IPv6 çµç¹ãªãã·ã§ã³ */ 121 #define IPPROTO_IPCOMP UINT_C(108) /* ãã¤ãã¼ãå§ç¸® */ 122 #define IPPROTO_DONE UINT_C(257) /* IPv6 ã§ä¸ä½ãããã³ã«å 123 ¥åçµäº */ 105 #define IPPROTO_NONE UINT_C(59) /* IPv6 次ヘッダ無し */ 106 #define IPPROTO_DSTOPTS UINT_C(60) /* IPv6 終点オプション */ 107 #define IPPROTO_IPCOMP UINT_C(108) /* ペイロード圧縮 */ 108 #define IPPROTO_DONE UINT_C(257) /* IPv6 で上位プロトコル入力終了 */ 124 109 125 110 /* 126 * ãã¼ãã®é·ã111 * ポートの長さ 127 112 */ 128 113 … … 130 115 131 116 /* 132 * ãã¼ãçªå·ã®å®ç¾©117 * ポート番号の定義 133 118 */ 134 119 135 #define TCP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP æ¨æº*/136 #define UDP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP æ¨æº*/120 #define TCP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP 標準 */ 121 #define UDP_PORTANY UINT_C(0x0000) /* ITRON TCP/IP 標準 */ 137 122 138 #define TCP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known çµäºçªå·*/139 #define TCP_PORT_FIRST_AUTO UINT_C(1024) /* èªåå²ãå½ã¦éå§çªå·*/140 #define TCP_PORT_LAST_AUTO UINT_C(4999) /* èªåå²ãå½ã¦çµäºçªå·*/123 #define TCP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known 終了番号 */ 124 #define TCP_PORT_FIRST_AUTO UINT_C(1024) /* 自動割り当て開始番号 */ 125 #define TCP_PORT_LAST_AUTO UINT_C(4999) /* 自動割り当て終了番号 */ 141 126 142 #define UDP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known çµäºçªå·*/143 #define UDP_PORT_FIRST_AUTO UINT_C(1024) /* èªåå²ãå½ã¦éå§çªå·*/144 #define UDP_PORT_LAST_AUTO UINT_C(4999) /* èªåå²ãå½ã¦çµäºçªå·*/127 #define UDP_PORT_LAST_WELL_KNOWN UINT_C(1023) /* Well Known 終了番号 */ 128 #define UDP_PORT_FIRST_AUTO UINT_C(1024) /* 自動割り当て開始番号 */ 129 #define UDP_PORT_LAST_AUTO UINT_C(4999) /* 自動割り当て終了番号 */ 145 130 146 131 /* 147 * API IP ãããã³ã«ã®æå®132 * API IPプロトコルの指定 148 133 */ 149 134 … … 153 138 154 139 /* 155 * åççæç¨ TCP/IPv6 é信端ç¹140 * 動的生成用 TCP/IPv6 通信端点 156 141 */ 157 142 … … 159 144 160 145 /* 161 * ãã¤ããªã¼ãé¢æ°ã®å®ç¾©146 * バイトオーダ関数の定義 162 147 * 163 * tinet/net/net.h ã§ããã¤ããªã¼ãã®å®ç¾©ãè¡ã£ã¦ãããã164 * tinet/net/net.h ãã¤ã³ã¯ã«ã¼ãããªã165 * ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ç¨ã«166 * ã¿ã¼ã²ããä¾åããªããã¤ããªã¼ãé¢æ°ãå®ç¾©ããã148 * tinet/net/net.h でもバイトオーダの定義を行っているが、 149 * tinet/net/net.h をインクルードしない 150 * アプリケーションプログラム用に 151 * ターゲット依存しないバイトオーダ関数を定義する。 167 152 */ 168 153 169 154 #if defined(_NET_CFG_BYTE_ORDER) 170 155 171 /* tinet/net/net.h ãã¤ã³ã¯ã«ã¼ããã¦ããã*/156 /* tinet/net/net.h をインクルードしている。*/ 172 157 173 158 #else /* of #if defined(_NET_CFG_BYTE_ORDER) */ … … 186 171 187 172 /* 188 * TINET ç¬èªAPI173 * TINET 独自 API 189 174 */ 190 175 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r388 r389 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 ã¢ãã¬ã¹ 87 */ 88 89 /* åæ¹åç 90 § */ 74 * IPv4 アドレス 75 */ 76 77 /* 前方参照 */ 91 78 92 79 #ifndef T_IN4_ADDR_DEFINED … … 99 86 100 87 /* 101 * ITRON TCP/IPv4 ã¢ãã¬ã¹/ãã¼ãçªå·ã®å®ç¾©88 * ITRON TCP/IPv4 アドレス/ポート番号の定義 102 89 */ 103 90 104 91 typedef struct t_ipv4ep { 105 uint32_t ipaddr; /* IPv4 ã¢ãã¬ã¹*/106 uint16_t portno; /* ãã¼ãçªå·*/92 uint32_t ipaddr; /* IPv4 アドレス */ 93 uint16_t portno; /* ポート番号 */ 107 94 } T_IPV4EP; 108 95 … … 110 97 111 98 /* 112 * ã¢ãã¬ã¹ã®é·ã99 * アドレスの長さ 113 100 */ 114 101 … … 116 103 117 104 /* 118 * IPv4 ã¢ãã¬ã¹ã®å®ç¾©119 */ 120 121 #define IPV4_ADDRANY ULONG_C(0x00000000) /* ITRON TCP/IP æ¨æº*/105 * IPv4 アドレスの定義 106 */ 107 108 #define IPV4_ADDRANY ULONG_C(0x00000000) /* ITRON TCP/IP 標準 */ 122 109 #define IPV4_ADDRBROADCAST ULONG_C(0xffffffff) 123 110 … … 158 145 159 146 /* 160 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã147 * 関数シミュレーションマクロ 161 148 */ 162 149 … … 167 154 168 155 /* 169 * åççæç¨ TCP é信端ç¹156 * 動的生成用 TCP 通信端点 170 157 */ 171 158 172 159 typedef struct t_tcp_ccep { 173 /* æ¨æº */ 174 ATR cepatr; /* é信端ç¹å±æ§ */ 175 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ */ 176 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 177 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ */ 178 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 179 FP callback; /* ã³ã¼ã«ãã㯠*/ 180 /* å®è£ 181 ä¾å */ 160 /* 標準 */ 161 ATR cepatr; /* 通信端点属性 */ 162 void *sbuf; /* 送信用ウィンドバッファ */ 163 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 164 void *rbuf; /* 受信用ウィンドバッファ */ 165 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 166 FP callback; /* コールバック */ 167 /* 実装依存 */ 182 168 } T_TCP_CCEP; 183 169 184 170 /* 185 * åççæç¨ TCP åä»å£171 * 動的生成用 TCP 受付口 186 172 */ 187 173 188 174 typedef struct t_tcp_crep { 189 /* æ¨æº */ 190 ATR repatr; /* åä»å£å±æ§ */ 191 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 192 /* å®è£ 193 ä¾å */ 175 /* 標準 */ 176 ATR repatr; /* 受付口属性 */ 177 T_IPV4EP myaddr; /* 自分のアドレス */ 178 /* 実装依存 */ 194 179 } T_TCP_CREP; 195 180 196 181 /* 197 * åççæç¨ UDP é信端ç¹182 * 動的生成用 UDP 通信端点 198 183 */ 199 184 200 185 typedef struct t_udp_ccep { 201 /* æ¨æº */ 202 ATR cepatr; /* UDP é信端ç¹å±æ§ */ 203 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 204 FP callback; /* ã³ã¼ã«ããã¯é¢æ° */ 205 /* å®è£ 206 ä¾å */ 186 /* 標準 */ 187 ATR cepatr; /* UDP 通信端点属性 */ 188 T_IPV4EP myaddr; /* 自分のアドレス */ 189 FP callback; /* コールバック関数 */ 190 /* 実装依存 */ 207 191 } T_UDP_CCEP; 208 192 209 193 /* 210 * TINET ç¬èªAPI194 * TINET 独自 API 211 195 */ 212 196 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 125 113 126 114 /* 127 * in_rtinit -- ã«ã¼ãã£ã³ã°è¡¨ãåæåããã115 * in_rtinit -- ルーティング表を初期化する。 128 116 */ 129 117 … … 141 129 142 130 /* 143 * in_rtnewentry -- æ°ããã¨ã³ããªãç²å¾ããã131 * in_rtnewentry -- 新しいエントリを獲得する。 144 132 */ 145 133 … … 151 139 int_t ix; 152 140 153 /* 空ãã¨ã³ããªãæ¢ãã*/141 /* 空きエントリを探す。*/ 154 142 for (ix = NUM_IN4_STATIC_ROUTE_ENTRY; ix < NUM_IN4_ROUTE_ENTRY; ix ++) { 155 143 rt = &routing4_tbl[ix]; … … 160 148 } 161 149 162 /* expire ã®åä½ã¯ [s]ã*/150 /* expire の単位は [s]。*/ 163 151 syscall(get_tim(&now)); 164 152 now /= SYSTIM_HZ; 165 153 166 154 if (frt == NULL) { 167 /* 空ãããªããã°ãæå¹æéããã£ã¨ãçãã¨ã³ããªã空ãã«ããã*/155 /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/ 168 156 T_IN4_RTENTRY *srt = NULL; 169 157 int_t diff, sdiff = INT_MAX; … … 174 162 diff = (int_t)(rt->expire - now); 175 163 if (diff <= 0) { /* rt->expire <= now */ 176 /* æ¢ã«ãæå¹æéãéãã¦ããã*/164 /* 既に、有効時間が過ぎている。*/ 177 165 frt = rt; 178 166 break; … … 195 183 196 184 /* 197 * in_rttimer -- ã«ã¼ãã£ã³ã°è¡¨ã®ç®¡çã¿ã¤ãã¼185 * in_rttimer -- ルーティング表の管理タイマー 198 186 */ 199 187 … … 204 192 int_t ix; 205 193 206 /* expire ã®åä½ã¯ [s]ã*/194 /* expire の単位は [s]。*/ 207 195 syscall(get_tim(&now)); 208 196 now /= SYSTIM_HZ; … … 219 207 220 208 /* 221 * in4_get_maxnum_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨å®å¯è½ãªæ大ã¢ãã¬ã¹æ°ãè¿ãã209 * in4_get_maxnum_ifaddr -- インタフェースに設定可能な最大アドレス数を返す。 222 210 */ 223 211 … … 229 217 230 218 /* 231 * in4_get_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã«è¨å®ããã¦ããã¢ãã¬ã¹ãè¿ãã219 * in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。 232 220 */ 233 221 … … 241 229 242 230 /* 243 * in4_set_header -- IPv4 ããããè¨å®ããã231 * in4_set_header -- IPv4 ヘッダを設定する。 244 232 */ 245 233 … … 251 239 T_IFNET *ifp = IF_GET_IFNET(); 252 240 253 /* IP ããããè¨å®ããã*/241 /* IP ヘッダを設定する。*/ 254 242 ip4h->vhl = IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2); 255 243 ip4h->len = htons(IP4_HDR_SIZE + len); … … 259 247 ip4h->id = ip4h->flg_off = ip4h->sum = 0; 260 248 261 /* IP ã¢ãã¬ã¹ãè¨å®ããã*/249 /* IP アドレスを設定する。*/ 262 250 ip4h->dst = htonl(*dstaddr); 263 251 … … 271 259 272 260 /* 273 * in4_get_datagram -- IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨å®ããã261 * in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。 274 262 */ 275 263 … … 282 270 uint_t align; 283 271 284 /* ãã¼ã¿é·ã 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/272 /* データ長を 4 オクテット境界に調整する。*/ 285 273 align = (len + 3) >> 2 << 2; 286 274 287 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/275 /* ネットワークバッファを獲得する。*/ 288 276 if ((error = tget_net_buf_ex(nbuf, (uint_t)(IF_IP4_HDR_SIZE + align), 289 277 (uint_t)(IF_IP4_HDR_SIZE + maxlen), nbatr, tmout)) != E_OK) … … 291 279 292 280 /* 293 * ãã大ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ãç²å¾ããå ´åã®ã¿é·ãã調æ´ããã294 * ããå°ããªãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡ã®ç²å¾ã¯ãéä¿¡ã¦ã£ã³ããããã¡ã®295 * çã³ãã¼æ©è½ã§ä½¿ç¨ãããå®éã«éä¿¡ããã¾ã§ããã¼ã¿ãµã¤ãºã¯æ±ºå®ã§ããªãã281 * より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。 282 * より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの 283 * 省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。 296 284 */ 297 285 if ((nbatr & NBA_SEARCH_ASCENT) != 0) 298 286 (*nbuf)->len = (uint16_t)(IF_IP4_HDR_SIZE + len); 299 287 300 /* IP ããããè¨å®ããã*/288 /* IP ヘッダを設定する。*/ 301 289 if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK) { 302 290 syscall(rel_net_buf(*nbuf)); … … 305 293 } 306 294 307 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/295 /* 4 オクテット境界までパディングで埋める。*/ 308 296 if (align > len) 309 297 memset((GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len)); … … 313 301 314 302 /* 315 * in4_cksum -- IPv4 ã®ãã©ã³ã¹ãã¼ã層ãããã®ãã§ãã¯ãµã ãè¨ç®ããã316 * 317 * 注æ: æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã303 * in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。 304 * 305 * 注意: 戻り値はネットワークバイトオーダ 318 306 */ 319 307 … … 324 312 uint_t align; 325 313 326 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/314 /* 4 オクテット境界のデータ長 */ 327 315 align = (len + 3) >> 2 << 2; 328 316 329 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/317 /* 4 オクテット境界までパディングで埋める。*/ 330 318 if (align > len) 331 319 memset((uint8_t*)nbuf->buf + off + len, 0, (size_t)(align - len)); … … 340 328 341 329 /* 342 * in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨343 * 344 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã345 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨346 * ä¾å¤ãçºçããå¯è½æ§ãããã347 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã348 * 349 * æ»ãå¤ã¯ãããã¯ã¼ã¯ãã¤ããªã¼ã330 * in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用 331 * 332 * 注意: data は 4 オクテット単位でパディングすること。 333 * data が 2 オクテット単位にアラインされていないと 334 * 例外が発生する可能性がある。 335 * len は 4 オクテット単位にアラインされていること。 336 * 337 * 戻り値はネットワークバイトオーダ 350 338 */ 351 339 352 340 uint16_t 353 in_cksum (void *data, uint_t len /* ãªã¯ãããåä½*/)341 in_cksum (void *data, uint_t len /*オクテット単位*/) 354 342 { 355 343 uint16_t sum; … … 360 348 361 349 /* 362 * in4_is_dstaddr_accept -- å®å 363 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 364 * 365 * 注æ: dstaddr ã¯ã 366 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 367 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 350 * in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 351 * 352 * 注意: dstaddr は、 353 * TINET-1.2 からネットワークバイトオーダ、 354 * TINET-1.1 までは、ホストバイトオーダ 368 355 */ 369 356 … … 378 365 379 366 /* 380 * inn4_is_dstaddr_accept -- å®å 381 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 382 * 383 * 注æ: dstaddr ã¯ã 384 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 385 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 367 * inn4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 368 * 369 * 注意: dstaddr は、 370 * TINET-1.2 からネットワークバイトオーダ、 371 * TINET-1.1 までは、ホストバイトオーダ 386 372 */ 387 373 … … 399 385 400 386 /* 401 * in4_addrwithifp -- å®å 402 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 403 ã¢ãã¬ã¹ãã 404 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã 405 * in6_addrwithifp ãã·ãã¥ã¬ã¼ãããã ãã§ã 406 * ã¨ã©ã¼ãè¿ããã¨ã¯ãªãã 387 * in4_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、 388 * ネットワークインタフェースから探索する。 389 * in6_addrwithifp をシミュレートするだけで、 390 * エラーを返すことはない。 407 391 */ 408 392 … … 415 399 416 400 /* 417 * in4_add_ifaddr -- ã¤ã³ã¿ãã§ã¼ã¹ã« IPv4 ã¢ãã¬ã¹ãè¨å®ããã401 * in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。 418 402 */ 419 403 … … 431 415 432 416 /* 433 * in4_add_route -- çµè·¯è¡¨ã«ã¨ã³ããªãè¨å®ããã417 * in4_add_route -- 経路表にエントリを設定する。 434 418 */ 435 419 … … 451 435 452 436 /* 453 * in4_rtalloc -- ã«ã¼ãã£ã³ã°è¡¨ãæ¢ç´¢ããã437 * in4_rtalloc -- ルーティング表を探索する。 454 438 */ 455 439 … … 477 461 478 462 /* 479 * in4_rtredirect -- ã«ã¼ãã£ã³ã°è¡¨ã«ã¨ã³ããªãç»é²ããã480 * 481 * 注æ: å¼æ° tmo ã®åä½ã¯ [ms]ã463 * in4_rtredirect -- ルーティング表にエントリを登録する。 464 * 465 * 注意: 引数 tmo の単位は [ms]。 482 466 */ 483 467 … … 496 480 497 481 /* 498 * in4_timer -- IPv4 å 499 ±éã¿ã¤ãã¼ 500 * 501 * 1ç§å¨æã§èµ·åãããã 482 * in4_timer -- IPv4 共通タイマー 483 * 484 * 1秒周期で起動される。 502 485 */ 503 486 … … 521 504 522 505 /* 523 * in4_init -- IPv4 å 524 ±éæ©è½ãåæåããã 506 * in4_init -- IPv4 共通機能を初期化する。 525 507 */ 526 508 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/in4_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r388 r389 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$ … … 86 74 87 75 /* 88 * ã¤ã³ã¿ãã§ã¼ã¹ã¢ãã¬ã¹æ§é ä½76 * インタフェースアドレス構造体 89 77 */ 90 78 91 79 typedef struct t_in4_ifaddr { 92 T_IN4_ADDR addr; /* IPv4 ã¢ãã¬ã¹*/93 T_IN4_ADDR mask; /* ãµãããããã¹ã¯*/80 T_IN4_ADDR addr; /* IPv4 アドレス */ 81 T_IN4_ADDR mask; /* サブネットマスク */ 94 82 } T_IN4_IFADDR; 95 83 96 84 /* 97 * ã«ã¼ãã£ã³ã°è¡¨ã¨ã³ããªæ§é ä½85 * ルーティング表エントリ構造体 98 86 */ 99 87 100 88 typedef struct t_in4_rtentry { 101 T_IN4_ADDR target; /* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹*/102 T_IN4_ADDR mask; /* ç®æ¨ãããã¯ã¼ã¯ã¢ãã¬ã¹ã®ãµãããããã¹ã¯*/103 T_IN4_ADDR gateway; /* ã²ã¼ãã¦ã§ã¤ã® IP ã¢ãã¬ã¹*/104 uint32_t expire; /* æå¹æéãåããæå»[s] */105 uint8_t flags; /* ãã©ã°*/89 T_IN4_ADDR target; /* 目標ネットワークアドレス */ 90 T_IN4_ADDR mask; /* 目標ネットワークアドレスのサブネットマスク */ 91 T_IN4_ADDR gateway; /* ゲートウェイの IP アドレス */ 92 uint32_t expire; /* 有効時間が切れる時刻 [s] */ 93 uint8_t flags; /* フラグ */ 106 94 } T_IN4_RTENTRY; 107 95 /* 108 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©109 * 110 * TINET 1.5 ã¨ã®äºææ§ã®ããã«å®ç¾©ãç¡å¹ã«ããã96 * TINET 1.1 との互換性のための定義 97 * 98 * TINET 1.5 との互換性のために定義を無効にした。 111 99 */ 112 100 … … 123 111 124 112 /* 125 * ã«ã¼ãã£ã³ã°è¡¨113 * ルーティング表 126 114 */ 127 115 … … 133 121 134 122 /* 135 * åæ¹åç 136 § 123 * 前方参照 137 124 */ 138 125 … … 148 135 149 136 /* 150 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã137 * 関数シミュレーションマクロ 151 138 */ 152 139 … … 154 141 155 142 /* 156 * é¢æ°143 * 関数 157 144 */ 158 145 … … 171 158 172 159 /* 173 * in4_is_dstaddr_accept -- å®å 174 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 175 * 176 * 注æ: dstaddr ã¯ã 177 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã 178 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã 160 * in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 161 * 162 * 注意: dstaddr は、 163 * TINET-1.2 からネットワークバイトオーダ、 164 * TINET-1.1 までは、ホストバイトオーダ 179 165 */ 180 166 extern bool_t in4_is_dstaddr_accept (T_IN4_ADDR *myaddr, T_IN4_ADDR *dstaddr); … … 182 168 183 169 /* 184 * in_cksum -- ãã§ãã¯ãµã è¨ç®é¢æ°ãIPv4ãICMPv4 ç¨185 * 186 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã187 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨188 * ä¾å¤ãçºçããå¯è½æ§ãããã189 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã190 */ 191 extern uint16_t in_cksum(void *data, uint_t len /* ãªã¯ãããåä½*/);192 193 /* 194 * in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°195 * 196 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã197 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨198 * ä¾å¤ãçºçããå¯è½æ§ãããã199 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã200 */ 201 extern uint32_t in_cksum_sum (void *data, uint_t len /* ãªã¯ãããåä½*/);202 203 /* 204 * in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°205 * 206 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã207 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨208 * ä¾å¤ãçºçããå¯è½æ§ãããã209 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã170 * in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用 171 * 172 * 注意: data は 4 オクテット単位でパディングすること。 173 * data が 2 オクテット単位にアラインされていないと 174 * 例外が発生する可能性がある。 175 * len は 4 オクテット単位にアラインされていること。 176 */ 177 extern uint16_t in_cksum(void *data, uint_t len /*オクテット単位*/); 178 179 /* 180 * in_cksum_sum -- チェックサムの合計計算関数 181 * 182 * 注意: data は 4 オクテット単位でパディングすること。 183 * data が 2 オクテット単位にアラインされていないと 184 * 例外が発生する可能性がある。 185 * len は 4 オクテット単位にアラインされていること。 186 */ 187 extern uint32_t in_cksum_sum (void *data, uint_t len /*オクテット単位*/); 188 189 /* 190 * in_cksum_carry -- チェックサムの桁上げ計算関数 191 * 192 * 注意: data は 4 オクテット単位でパディングすること。 193 * data が 2 オクテット単位にアラインされていないと 194 * 例外が発生する可能性がある。 195 * len は 4 オクテット単位にアラインされていること。 210 196 */ 211 197 extern uint32_t in_cksum_carry (uint32_t sum); -
azure_iot_hub/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
r388 r389 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); … … 145 133 extern ER udp6_can_cep(ID cepid, FN fncd); 146 134 147 /* ãæ¡å¼µæ©è½ã*/135 /* 【拡張機能】 */ 148 136 149 137 extern ER udp_del_cep (ID cepid); -
azure_iot_hub/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
r388 r389 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 … … 158 145 #define tmax_tcp_repid _tinet_tmax_tcp_repid 159 146 #define tmax_tcp_cepid _tinet_tmax_tcp_cepid 160 #define tmax_tcp_crepid _tinet_tmax_tcp_repid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/161 #define tmax_tcp_ccepid _tinet_tmax_tcp_cepid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/147 #define tmax_tcp_crepid _tinet_tmax_tcp_repid /* TINET 1.3 との互換性のための定義 */ 148 #define tmax_tcp_ccepid _tinet_tmax_tcp_cepid /* TINET 1.3 との互換性のための定義 */ 162 149 163 150 /* netinet/udp_input.c */ … … 195 182 #define udp4_cep _tinet_udp4_cep 196 183 #define tmax_udp_cepid _tinet_tmax_udp_cepid 197 #define tmax_udp_ccepid _tinet_tmax_udp_cepid /* TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©*/184 #define tmax_udp_ccepid _tinet_tmax_udp_cepid /* TINET 1.3 との互換性のための定義 */ 198 185 199 186 /* netinet/ip_icmp.c */ -
azure_iot_hub/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
r388 r389 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 * in_cksum_sum -- ãã§ãã¯ãµã ã®åè¨è¨ç®é¢æ°120 * 121 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã122 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨123 * ä¾å¤ãçºçããå¯è½æ§ãããã124 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã125 * 126 * æ»ãå¤ã¯ãã¹ããã¤ããªã¼ã107 * in_cksum_sum -- チェックサムの合計計算関数 108 * 109 * 注意: data は 4 オクテット単位でパディングすること。 110 * data が 2 オクテット単位にアラインされていないと 111 * 例外が発生する可能性がある。 112 * len は 4 オクテット単位にアラインされていること。 113 * 114 * 戻り値はホストバイトオーダ 127 115 */ 128 116 129 117 uint32_t 130 in_cksum_sum (void *data, uint_t len /* ãªã¯ãããåä½*/)118 in_cksum_sum (void *data, uint_t len /*オクテット単位*/) 131 119 { 132 120 uint32_t sum = 0; … … 146 134 147 135 /* 148 * in_cksum_carry -- ãã§ãã¯ãµã ã®æ¡ä¸ãè¨ç®é¢æ°149 * 150 * 注æ: data 㯠4 ãªã¯ãããåä½ã§ããã£ã³ã°ãããã¨ã151 * data ã 2 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ããªãã¨152 * ä¾å¤ãçºçããå¯è½æ§ãããã153 * len 㯠4 ãªã¯ãããåä½ã«ã¢ã©ã¤ã³ããã¦ãããã¨ã136 * in_cksum_carry -- チェックサムの桁上げ計算関数 137 * 138 * 注意: data は 4 オクテット単位でパディングすること。 139 * data が 2 オクテット単位にアラインされていないと 140 * 例外が発生する可能性がある。 141 * len は 4 オクテット単位にアラインされていること。 154 142 */ 155 143 … … 168 156 169 157 /* 170 * in_strtfn -- API æ©è½ã³ã¼ãã®æå表ç¾ãè¿ãã158 * in_strtfn -- API 機能コードの文字表現を返す。 171 159 */ 172 160 173 161 typedef struct t_strtfn { 174 FN fncd; /* API æ©è½ã³ã¼ã*/175 const char *str; /* æå表ç¾*/162 FN fncd; /* API 機能コード */ 163 const char *str; /* 文字表現 */ 176 164 } T_STRTFN; 177 165 … … 222 210 223 211 /* 224 * ipv42str -- IPv4 ã¢ãã¬ã¹ãæååã«å¤æããã212 * ipv42str -- IPv4 アドレスを文字列に変換する。 225 213 */ 226 214 … … 256 244 257 245 /* 258 * in6_is_addr_ipv4mapped -- IPv4 å°å½±ã¢ãã¬ã¹ã§ããäºãæ¤æ»ããã246 * in6_is_addr_ipv4mapped -- IPv4 射影アドレスである事を検査する。 259 247 */ 260 248 … … 268 256 269 257 /* 270 * ip_exchg_addr -- IP ã¢ãã¬ã¹ã交æããã258 * ip_exchg_addr -- IP アドレスを交換する。 271 259 */ 272 260 … … 279 267 iph = GET_IP6_HDR(nbuf); 280 268 281 /* IPv6 ã¢ãã¬ã¹ã交æããã*/269 /* IPv6 アドレスを交換する。*/ 282 270 ipaddr = iph->src; 283 271 iph->src = iph->dst; … … 293 281 iph = GET_IP4_HDR(nbuf); 294 282 295 /* IPv4 ã¢ãã¬ã¹ã交æããã*/283 /* IPv4 アドレスを交換する。*/ 296 284 ipaddr = iph->src; 297 285 iph->src = iph->dst; … … 311 299 312 300 /* 313 * ip_exchg_addr -- IP ã¢ãã¬ã¹ã交æããã301 * ip_exchg_addr -- IP アドレスを交換する。 314 302 */ 315 303 … … 322 310 iph = GET_IP_HDR(nbuf); 323 311 324 /* IP ã¢ãã¬ã¹ã交æããã*/312 /* IP アドレスを交換する。*/ 325 313 ipaddr = iph->src; 326 314 iph->src = iph->dst; … … 333 321 334 322 /* 335 * inn_is_dstaddr_accept -- å®å 336 ã¢ãã¬ã¹ã¨ãã¦æ£ããããã§ãã¯ããã 323 * inn_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。 337 324 */ 338 325 … … 357 344 358 345 /* 359 * inn_are_net_srcaddr_equal -- ã¢ãã¬ã¹ãåä¸ããã§ãã¯ããã346 * inn_are_net_srcaddr_equal -- アドレスが同一かチェックする。 360 347 */ 361 348 … … 375 362 376 363 /* 377 * inn_copy_to_host -- IP ããããããã¹ã表ç¾å¤æãã¦ãIP ã¢ãã¬ã¹ãã³ãã¼ããã364 * inn_copy_to_host -- IP ヘッダからホスト表現変換して、IP アドレスをコピーする。 378 365 */ 379 366 … … 389 376 390 377 /* 391 * inn_get_datagram -- IPv6/IPv4 ãã¼ã¿ã°ã©ã ãç²å¾ããããããè¨å®ããã378 * inn_get_datagram -- IPv6/IPv4 データグラムを獲得し、ヘッダを設定する。 392 379 */ 393 380 … … 413 400 414 401 /* 415 * inn_addrwithifp -- å®å 416 ã¢ãã¬ã¹ã«ãµããããéä¿¡å 417 ã¢ãã¬ã¹ãã 418 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããæ¢ç´¢ããã 402 * inn_addrwithifp -- 宛先アドレスにふさわしい送信元アドレスを、 403 * ネットワークインタフェースから探索する。 419 404 */ 420 405 … … 435 420 436 421 /* 437 * inn_is_addr_multicast -- ã¢ãã¬ã¹ããã«ããã£ã¹ãã¢ãã¬ã¹ããã§ãã¯ããã422 * inn_is_addr_multicast -- アドレスがマルチキャストアドレスかチェックする。 438 423 */ 439 424 … … 451 436 452 437 /* 453 * ãã¤ããªã¼ãé¢æ°ã®å®ç¾©454 * 455 * tinet/net/net.h ã§ããã¤ããªã¼ãã®å®ç¾©ãè¡ã£ã¦ãããã456 * tinet/net/net.h ãã¤ã³ã¯ã«ã¼ãããªã457 * ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ç¨ã«458 * ã¿ã¼ã²ããä¾åããªããã¤ããªã¼ãé¢æ°ãå®ç¾©ããã438 * バイトオーダ関数の定義 439 * 440 * tinet/net/net.h でもバイトオーダの定義を行っているが、 441 * tinet/net/net.h をインクルードしない 442 * アプリケーションプログラム用に 443 * ターゲット依存しないバイトオーダ関数を定義する。 459 444 */ 460 445 -
azure_iot_hub/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
r388 r389 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$ … … 87 75 88 76 /* 89 * ç¬èªã®ã¨ã©ã¼ã³ã¼ã 90 */ 91 92 #define EV_NOPND (-97) /* ãã³ãã£ã³ã°ãã¦ããªã */ 93 94 /* 95 * ãããã¯ã¼ã¯ã¨ã©ã¼ã³ã¼ã 96 */ 97 98 #define EV_MSIZE (-98) /* ãã¼ã¿ã°ã©ã é·è¶ 99 é */ 100 #define EV_NURCH (-99) /* ãããã¯ã¼ã¯å°éä¸è½ */ 101 #define EV_HDOWN (-100) /* ãã¹ããã¦ã³ */ 102 #define EV_HURCH (-101) /* ãã¹ãå°éä¸è½ */ 103 #define EV_CNNRF (-102) /* æ¥ç¶ä¸è½ */ 104 #define EV_CNRST (-103) /* æ¥ç¶ãªã»ãã */ 105 #define EV_REXMTMO (-104) /* åéã¿ã¤ã ã¢ã¦ã */ 106 107 /* 108 * å 109 ±éã¿ã¤ãã®èµ·åå¨æã®å®ç¾© 77 * 独自のエラーコード 78 */ 79 80 #define EV_NOPND (-97) /* ペンディングしていない */ 81 82 /* 83 * ネットワークエラーコード 84 */ 85 86 #define EV_MSIZE (-98) /* データグラム長超過 */ 87 #define EV_NURCH (-99) /* ネットワーク到達不能 */ 88 #define EV_HDOWN (-100) /* ホストダウン */ 89 #define EV_HURCH (-101) /* ホスト到達不能 */ 90 #define EV_CNNRF (-102) /* 接続不能 */ 91 #define EV_CNRST (-103) /* 接続リセット */ 92 #define EV_REXMTMO (-104) /* 再送タイムアウト */ 93 94 /* 95 * 共通タイマの起動周期の定義 110 96 */ 111 97 … … 113 99 114 100 /* 115 * ã«ã¼ãã£ã³ã°ã¨ã³ããªç¶æ 116 ãã©ã° 117 */ 118 119 #define IN_RTF_DEFINED UINT_C(0x01) /* å®ç¾©æ¸ã¿ */ 120 #define IN_RTF_REDIRECT UINT_C(0x10) /* åãç´ãã«ããèªåè¨å®ããã */ 121 122 /* 123 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã 101 * ルーティングエントリ状態フラグ 102 */ 103 104 #define IN_RTF_DEFINED UINT_C(0x01) /* 定義済み */ 105 #define IN_RTF_REDIRECT UINT_C(0x10) /* 向け直しにより自動設定された */ 106 107 /* 108 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 124 109 */ 125 110 … … 207 192 208 193 /* 209 * é¢æ°194 * 関数 210 195 */ 211 196 extern bool_t inn_is_dstaddr_accept (T_IN6_ADDR *myaddr, T_NET_BUF *nbuf); -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r388 r389 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_IN4_REDIRECT_ROUTE_ENTRY > 0 61 49 62 /* ã«ã¼ãã£ã³ã°è¡¨ï¼åãç´ãï¼*/50 /* ルーティング表(向け直し)*/ 63 51 64 52 CRE_SEM(SEM_IN4_ROUTING_TBL, { TA_TPRI, 1, 1 }); -
azure_iot_hub/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
r388 r389 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 * IPv4 ã®å®ç¾©ãRFC791 åç 89 § 76 * IPv4 の定義、RFC791 参照 90 77 */ 91 78 … … 93 80 94 81 /* 95 * IPv4 ãããã®å®ç¾©82 * IPv4 ヘッダの定義 96 83 */ 97 84 98 85 typedef struct t_ip4_hdr { 99 86 uint8_t vhl; /* version << 4 | header length >> 2 */ 100 /* length 㯠4 octets åä½*/87 /* length は 4 octets 単位 */ 101 88 uint8_t type; /* type of services */ 102 89 uint16_t len; /* total length */ … … 116 103 117 104 /* 118 * IPv4 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã105 * IPv4 ヘッダ構造体メンバアクセスマクロ 119 106 */ 120 107 … … 128 115 129 116 /* 130 * IPv4 ãããã®ãã£ã¼ã«ãã®å¤ã®å®ç¾©117 * IPv4 ヘッダのフィールドの値の定義 131 118 */ 132 119 133 #define IP4_VHL_BORING UINT_C(0x45) /* ãªãã·ã§ã³ããªã VHL å¤*/134 #define IP4_RF UINT_C(0x8000) /* off: äºç´*/135 #define IP4_DF UINT_C(0x4000) /* off: åå²ç¦æ¢*/136 #define IP4_MF UINT_C(0x2000) /* off: åå²ãã*/137 #define IP4_OFFMASK UINT_C(0x1fff) /* ãªãã»ããé¨ã®ãã¹ã¯å¤*/120 #define IP4_VHL_BORING UINT_C(0x45) /* オプションがない VHL 値 */ 121 #define IP4_RF UINT_C(0x8000) /* off: 予約 */ 122 #define IP4_DF UINT_C(0x4000) /* off: 分割禁止 */ 123 #define IP4_MF UINT_C(0x2000) /* off: 分割あり */ 124 #define IP4_OFFMASK UINT_C(0x1fff) /* オフセット部のマスク値 */ 138 125 139 126 /* 140 * å¶éå¤127 * 制限値 141 128 */ 142 129 143 #define IP4_MAXPACKET UINT_C(65535) /* æ大ãã±ãããµã¤ãº*/144 #define IP4_MAXTTL UINT_C(255) /* TTL æ大å¤*/145 #define IP4_DEFTTL UINT_C(64) /* TTL è¦å®å¤(RFC1340) */146 #define IP4_FRAGTTL UINT_C(60) /* åå²ããããã¼ã¿ã°ã©ã ã®çåæéï¼ç§ï¼*/147 #define IP4_MSS UINT_C(576) /* æ大ã»ã°ã¡ã³ããµã¤ãºã®è¦å®å¤*/130 #define IP4_MAXPACKET UINT_C(65535) /* 最大パケットサイズ */ 131 #define IP4_MAXTTL UINT_C(255) /* TTL 最大値 */ 132 #define IP4_DEFTTL UINT_C(64) /* TTL 規定値 (RFC1340) */ 133 #define IP4_FRAGTTL UINT_C(60) /* 分割されたデータグラムの生存時間(秒)*/ 134 #define IP4_MSS UINT_C(576) /* 最大セグメントサイズの規定値 */ 148 135 149 /* IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã*/136 /* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */ 150 137 151 138 #if !defined(_IP6_CFG) && defined(_IP4_CFG) -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip4_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r388 r389 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 * IP ã® MSS ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡89 * IP の MSS サイズのネットワークバッファ 102 90 */ 103 91 104 92 typedef struct t_net_buf_ip_mss { 105 uint16_t len; /* ãã¼ã¿ã®é·ã*/106 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/107 uint8_t flags; /* ãã©ã°*/93 uint16_t len; /* データの長さ */ 94 uint8_t idix; /* mpfid のインデックス */ 95 uint8_t flags; /* フラグ */ 108 96 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 109 97 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 113 101 #endif 114 102 uint8_t buf[IF_HDR_SIZE + IP4_MSS]; 115 /* ãããã¡æ¬ä½*/103 /* バッファ本体 */ 116 104 } T_NET_BUF_IP_MSS; 117 105 118 106 /* 119 * 65536 ãªã¯ããããµã¤ãºã®ãããã¯ã¼ã¯ãããã¡107 * 65536 オクテットサイズのネットワークバッファ 120 108 */ 121 109 122 110 typedef struct t_net_buf4_65536 { 123 uint16_t len; /* ãã¼ã¿ã®é·ã*/124 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/125 uint8_t flags; /* ãã©ã°*/111 uint16_t len; /* データの長さ */ 112 uint8_t idix; /* mpfid のインデックス */ 113 uint8_t flags; /* フラグ */ 126 114 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 127 115 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 131 119 #endif 132 120 uint8_t buf[IF_IP4_HDR_SIZE + 65536]; 133 /* ãããã¡æ¬ä½*/121 /* バッファ本体 */ 134 122 #if defined(IF_PDU_HDR_PADDING) 135 123 uint8_t padding[IF_PDU_HDR_PADDING]; 136 #endif /* ãããã®ä½å*/124 #endif /* ヘッダの余分 */ 137 125 } T_NET_BUF4_65536; 138 126 … … 140 128 141 129 /* 142 * åæ§æãã¥ã¼ç¨ IPv4 ãããã®å®ç¾©130 * 再構成キュー用 IPv4 ヘッダの定義 143 131 */ 144 132 145 133 typedef struct t_qip4_hdr { 146 134 uint8_t vhl; /* version << 4 | header length >> 2 */ 147 /* length 㯠4 octets åä½*/135 /* length は 4 octets 単位 */ 148 136 uint8_t type; /* type of services */ 149 137 uint16_t len; /* total length */ … … 158 146 uint32_t src; /* source address */ 159 147 160 T_NET_BUF *next; /* 次㮠IPv4 ãã©ã°ã¡ã³ã*/148 T_NET_BUF *next; /* 次の IPv4 フラグメント */ 161 149 } __attribute__((packed, aligned(2))) T_QIP4_HDR; 162 150 … … 171 159 172 160 /* 173 * ãã¼ã¿ã°ã©ã åæ§æç¨ãããã¯ã¼ã¯ãããã¡161 * データグラム再構成用ネットワークバッファ 174 162 */ 175 163 176 164 typedef struct t_net_buf4_reassm { 177 uint16_t len; /* ãã¼ã¿ã®é·ã*/178 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/179 uint8_t flags; /* ãã©ã°*/165 uint16_t len; /* データの長さ */ 166 uint8_t idix; /* mpfid のインデックス */ 167 uint8_t flags; /* フラグ */ 180 168 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 181 169 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 185 173 #endif 186 174 uint8_t buf[IP4_CFG_FRAG_REASSM_SIZE]; 187 /* ãããã¡æ¬ä½*/175 /* バッファ本体 */ 188 176 } __attribute__((packed, aligned(2))) T_NET_BUF4_REASSM; 189 177 … … 191 179 192 180 /* 193 * TCP ã®åæ§æãã¥ã¼ã«ããã IPv4 ãããã®å®ç¾©181 * TCP の再構成キューにおける IPv4 ヘッダの定義 194 182 */ 195 183 196 184 typedef struct t_ip4_tcp_q_hdr { 197 185 uint8_t vhl; /* version << 4 | header length >> 2 */ 198 /* length 㯠4 octets åä½*/186 /* length は 4 octets 単位 */ 199 187 uint8_t type; /* type of services */ 200 188 uint16_t len; /* total length */ … … 205 193 uint8_t ttl; /* time to live */ 206 194 uint8_t proto; /* protocol */ 207 uint16_t thoff; /* TCP ãããã®ãªãã»ãã*/195 uint16_t thoff; /* TCP ヘッダのオフセット */ 208 196 209 197 T_IN4_ADDR src; /* source address */ … … 214 202 215 203 /* 216 * SNMP 㮠管çæ 217 å ±ãã¼ã¹ (MIB) 204 * SNMP の 管理情報ベース (MIB) 218 205 */ 219 206 … … 257 244 258 245 /* 259 * é¢æ°246 * 関数 260 247 */ 261 248 -
azure_iot_hub/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
r388 r389 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$ … … 115 103 116 104 /* 117 * IPv6 ã®å®ç¾©ãRFC2460 åç 118 § 105 * IPv6 の定義、RFC2460 参照 119 106 */ 120 107 … … 122 109 123 110 /* 124 * IPv6 ãããã®å®ç¾©111 * IPv6 ヘッダの定義 125 112 */ 126 113 … … 139 126 140 127 /* 141 * IPv6 ãããæ§é ä½ã¡ã³ãã¢ã¯ã»ã¹ãã¯ã128 * IPv6 ヘッダ構造体メンバアクセスマクロ 142 129 */ 143 130 … … 149 136 150 137 /* 151 * æ¡å¼µããã138 * 拡張ヘッダ 152 139 */ 153 140 154 141 typedef struct t_ip6_ext_hdr { 155 142 uint8_t next; /* Next Header */ 156 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ã*/143 uint8_t len; /* 8 オクテット単位の長さ */ 157 144 } __attribute__((packed, aligned(2)))T_IP6_EXT_HDR; 158 145 159 146 /* 160 * ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³ããã147 * 中継点 (Hop-by-Hop) オプションヘッダ 161 148 */ 162 149 163 150 typedef struct t_ip6_hbh_hdr { 164 151 uint8_t next; /* Next Header */ 165 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 166 * ãã®ãªãã·ã§ã³ãããå 167 ¨ä½ã®ãªã¯ãããæ°ã 168 * 8 ã§å²ã£ãå¤ã® - 1 ãå 169 ¥ãã 152 uint8_t len; /* 8 オクテット単位の長さ。ただし、 153 * このオプションヘッダ全体のオクテット数を 154 * 8 で割った値の - 1 が入る。 170 155 */ 171 156 } __attribute__((packed, aligned(2)))T_IP6_HBH_HDR; 172 157 173 158 /* 174 * çµç¹ (Destination) ãªãã·ã§ã³ããã159 * 終点 (Destination) オプションヘッダ 175 160 */ 176 161 177 162 typedef struct t_ip6_dest_hdr { 178 163 uint8_t next; /* Next Header */ 179 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 180 * ãã®ãªãã·ã§ã³ãããå 181 ¨ä½ã®ãªã¯ãããæ°ã 182 * 8 ã§å²ã£ãå¤ã® - 1 ãå 183 ¥ãã 164 uint8_t len; /* 8 オクテット単位の長さ。ただし、 165 * このオプションヘッダ全体のオクテット数を 166 * 8 で割った値の - 1 が入る。 184 167 */ 185 168 } __attribute__((packed, aligned(2)))T_IP6_DEST_HDR; 186 169 187 /* ä¸ç¶ç¹ (Hop-by-Hop) ãªãã·ã§ã³*/170 /* 中継点 (Hop-by-Hop) オプション */ 188 171 189 172 #define IP6OPT_PAD1 UINT_C(0x00) /* 00 0 00000 */ … … 194 177 #define IP6OPT_RTR_ALERT UINT_C(0x05) /* 00 0 00101 */ 195 178 196 #define IP6OPT_MINLEN 2 /* ãªãã·ã§ã³ã®æçé·*/197 198 /* æªç¥ã®ãªãã·ã§ã³ã®å¦çã®æå®*/199 200 #define IP6OPT_TYPE_SKIP UINT_C(0x00) /* ç¡è¦ããã*/201 #define IP6OPT_TYPE_DISCARD UINT_C(0x40) /* ãã¼ã¿ã°ã©ã ãç ´æ£ããã*/202 #define IP6OPT_TYPE_FORCEICMP UINT_C(0x80) /* ç ´æ£ãã¦ãICMP ãè¿éããã*/179 #define IP6OPT_MINLEN 2 /* オプションの最短長 */ 180 181 /* 未知のオプションの処理の指定 */ 182 183 #define IP6OPT_TYPE_SKIP UINT_C(0x00) /* 無視する。 */ 184 #define IP6OPT_TYPE_DISCARD UINT_C(0x40) /* データグラムを破棄する。 */ 185 #define IP6OPT_TYPE_FORCEICMP UINT_C(0x80) /* 破棄して、ICMP を返送する。 */ 203 186 #define IP6OPT_TYPE_ICMP UINT_C(0xc0) 204 /* ç ´æ£ãã¦ããã«ããã£ã¹ãã§ãªããã° ICMP ãè¿éããã*/187 /* 破棄して、マルチキャストでなければ ICMP を返送する。 */ 205 188 206 189 #define IP6OPT_TYPE(o) ((o)&UINT_C(0xc0)) 207 190 208 191 /* 209 * çµè·¯å¶å¾¡ããã192 * 経路制御ヘッダ 210 193 */ 211 194 212 195 typedef struct t_ip6_rt_hdr { 213 196 uint8_t next; /* Next Header */ 214 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 215 * ãã®ãªãã·ã§ã³ãããå 216 ¨ä½ã®ãªã¯ãããæ°ã 217 * 8 ã§å²ã£ãå¤ã® - 1 ãå 218 ¥ãã 219 */ 220 uint8_t type; /* çµè·¯å¶å¾¡ã¿ã¤ã */ 221 uint8_t segleft; /* ã»ã°ã¡ã³ãã®æ®ã */ 197 uint8_t len; /* 8 オクテット単位の長さ。ただし、 198 * このオプションヘッダ全体のオクテット数を 199 * 8 で割った値の - 1 が入る。 200 */ 201 uint8_t type; /* 経路制御タイプ */ 202 uint8_t segleft; /* セグメントの残り */ 222 203 } __attribute__((packed, aligned(2)))T_IP6_RT_HDR; 223 204 224 205 /* 225 * ã¿ã¤ã 0 çµè·¯å¶å¾¡ããã206 * タイプ 0 経路制御ヘッダ 226 207 */ 227 208 228 209 typedef struct t_ip6_rt0_hdr { 229 210 uint8_t next; /* Next Header */ 230 uint8_t len; /* 8 ãªã¯ãããåä½ã®é·ãããã ãã 231 * ãã®ãªãã·ã§ã³ãããå 232 ¨ä½ã®ãªã¯ãããæ°ã 233 * 8 ã§å²ã£ãå¤ã® - 1 ãå 234 ¥ãã 235 */ 236 uint8_t type; /* çµè·¯å¶å¾¡ã¿ã¤ã */ 237 uint8_t segleft; /* ã»ã°ã¡ã³ãã®æ®ã */ 238 uint32_t reserved; /* äºç´ */ 211 uint8_t len; /* 8 オクテット単位の長さ。ただし、 212 * このオプションヘッダ全体のオクテット数を 213 * 8 で割った値の - 1 が入る。 214 */ 215 uint8_t type; /* 経路制御タイプ */ 216 uint8_t segleft; /* セグメントの残り */ 217 uint32_t reserved; /* 予約 */ 239 218 } __attribute__((packed, aligned(2)))T_IP6_RT0_HDR; 240 219 241 220 /* 242 * æçããã221 * 断片ヘッダ 243 222 */ 244 223 … … 246 225 uint8_t next; /* Next Header */ 247 226 uint8_t reserved; 248 uint16_t off_flag; /* ãªãã»ããã¨ãã©ã°*/249 uint32_t ident; /* åå²èå¥å*/227 uint16_t off_flag; /* オフセットとフラグ */ 228 uint32_t ident; /* 分割識別子 */ 250 229 } __attribute__((packed, aligned(2)))T_IP6_FRAG_HDR; 251 230 252 /* æçãããã®ãªãã»ããã¨ãã©ã°*/231 /* 断片ヘッダのオフセットとフラグ */ 253 232 254 233 #ifdef _NET_CFG_BYTE_ORDER … … 256 235 #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN 257 236 258 #define IP6F_OFF_MASK UINT_C(0xfff8) /* ãªãã»ãããååºããã¹ã¯*/259 #define IP6F_RESERVED_MASK UINT_C(0x0006) /* äºç´ãååºããã¹ã¯*/260 #define IP6F_MORE_FRAG UINT_C(0x0001) /* ä¸éãã©ã°ã¡ã³ã*/237 #define IP6F_OFF_MASK UINT_C(0xfff8) /* オフセットを取出すマスク */ 238 #define IP6F_RESERVED_MASK UINT_C(0x0006) /* 予約を取出すマスク */ 239 #define IP6F_MORE_FRAG UINT_C(0x0001) /* 中間フラグメント */ 261 240 262 241 #elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN 263 242 264 #define IP6F_OFF_MASK UINT_C(0xf8ff) /* ãªãã»ãããååºããã¹ã¯*/265 #define IP6F_RESERVED_MASK UINT_C(0x0600) /* äºç´ãååºããã¹ã¯*/266 #define IP6F_MORE_FRAG UINT_C(0x0100) /* ä¸éãã©ã°ã¡ã³ã*/243 #define IP6F_OFF_MASK UINT_C(0xf8ff) /* オフセットを取出すマスク */ 244 #define IP6F_RESERVED_MASK UINT_C(0x0600) /* 予約を取出すマスク */ 245 #define IP6F_MORE_FRAG UINT_C(0x0100) /* 中間フラグメント */ 267 246 268 247 #endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */ … … 271 250 272 251 /* 273 * å¶éå¤274 */ 275 276 #define IPV6_MAXHLIM UINT_C(255) /* ããããªãããã®æ大å¤*/277 #define IPV6_DEFHLIM UINT_C(64) /* ããããªãããã®è¦å®å¤*/278 #define IPV6_FRAGTTL UINT_C(60) /* åå²ããããã¼ã¿ã°ã©ã ã®çåæéï¼ç§ï¼*/279 #define IPV6_MMTU UINT_C(1280) /* æå° MTUããã¤ãã¼ã (1024) + ããã(256) */280 #define IPV6_MAXPACKET UINT_C(65535) /* ã¸ã£ã³ããã¤ãã¼ããé¤ãæ大ãã±ãããµã¤ãº*/281 282 /* 283 * IPv6 㨠IPv4 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã284 */ 285 286 /* 287 * ããããªãããã®è¦å®å¤ã¯ãã«ã¼ã¿éç¥ã«ããå¤æ´ããããã¨ããã252 * 制限値 253 */ 254 255 #define IPV6_MAXHLIM UINT_C(255) /* ホップリミットの最大値 */ 256 #define IPV6_DEFHLIM UINT_C(64) /* ホップリミットの規定値 */ 257 #define IPV6_FRAGTTL UINT_C(60) /* 分割されたデータグラムの生存時間(秒) */ 258 #define IPV6_MMTU UINT_C(1280) /* 最小 MTU。ペイロード (1024) + ヘッダ (256) */ 259 #define IPV6_MAXPACKET UINT_C(65535) /* ジャンボペイロードを除く最大パケットサイズ */ 260 261 /* 262 * IPv6 と IPv4 をコンパイル時に選択するためのマクロ 263 */ 264 265 /* 266 * ホップリミットの規定値は、ルータ通知により変更されることがある 288 267 */ 289 268 290 269 #if NUM_ND6_DEF_RTR_ENTRY > 0 291 270 292 /* ã«ã¼ã¿éç¥ãåä¿¡ããå ´åã¯ãéç¥ãããå¤*/271 /* ルータ通知を受信する場合は、通知された値 */ 293 272 294 273 #define IP6_DEFTTL ip6_defhlim … … 296 275 #else /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */ 297 276 298 /* ã«ã¼ã¿éç¥ãåä¿¡ããªãå ´åã®å¤ã¯æ¢å®å¤*/277 /* ルータ通知を受信しない場合の値は既定値 */ 299 278 300 279 #define IP6_DEFTTL IPV6_DEFHLIM … … 302 281 #endif /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */ 303 282 304 /* IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã*/283 /* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */ 305 284 306 285 #ifdef _IP6_CFG -
azure_iot_hub/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
r388 r389 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 * å¤æ°119 * 変数 132 120 */ 133 121 … … 135 123 136 124 /* 137 * SNMP 㮠管çæ 138 å ±ãã¼ã¹ (MIB) 125 * SNMP の 管理情報ベース (MIB) 139 126 */ 140 127 … … 144 131 145 132 /* 146 * é¢æ°133 * 関数 147 134 */ 148 135 … … 159 146 160 147 /* 161 * icmp_echo -- ã¨ã³ã¼è¦æ±ãåä¿¡ããã¨ãã®å¦ç162 * 163 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã148 * icmp_echo -- エコー要求を受信したときの処理 149 * 150 * input には IF ヘッダと IP ヘッダも含まれている。 164 151 */ 165 152 … … 173 160 NET_COUNT_MIB(icmp_stats.icmpInEchos, 1); 174 161 175 /* IPv4 ã¢ãã¬ã¹ãæªå®ç¾©ã®æã¯å¿çããªãã*/162 /* IPv4 アドレスが未定義の時は応答しない。*/ 176 163 if (!IN4_IS_ADDR_ANY(&ifp->in4_ifaddr.addr)) { 177 164 178 165 /* 179 * ã¡ãã»ã¼ã¸ã®åãã¨ã³ã¼è¦æ± (8) ãã180 * ã¨ã³ã¼å¿ç (0) ã«å¤æ´ãã¦éãè¿ãã166 * メッセージの型をエコー要求 (8) から 167 * エコー応答 (0) に変更して送り返す。 181 168 */ 182 169 … … 185 172 186 173 /* 187 * å®å 188 ã¢ãã¬ã¹ã¯åä¿¡ããã¡ãã»ã¼ã¸ã®éä¿¡å 189 ã¢ãã¬ã¹ã 190 * éä¿¡å 191 ã¢ãã¬ã¹ã¯èª IPv4 ã¢ãã¬ã¹ã 174 * 宛先アドレスは受信したメッセージの送信元アドレス。 175 * 送信元アドレスは自 IPv4 アドレス。 192 176 */ 193 177 ip4h = GET_IP4_HDR(input); … … 195 179 ip4h->src = htonl(ifp->in4_ifaddr.addr); 196 180 197 /* ãã§ãã¯ãµã ãè¨ç®ããã*/181 /* チェックサムを計算する。*/ 198 182 icmp4h->sum = 0; 199 183 icmp4h->sum = in_cksum(icmp4h, 200 184 (uint_t)(((input->len - GET_IF_IP4_HDR_SIZE(input)) + 3) >> 2 << 2)); 201 185 202 /* éä¿¡ããã*/186 /* 送信する。*/ 203 187 NET_COUNT_ICMP4(net_count_icmp4.out_octets, 204 188 input->len - GET_IF_IP4_HDR_SIZE(input)); … … 211 195 212 196 /* 213 * icmp_unreach -- ICMP4_UNREACH ãåä¿¡ããã¨ãã®å¦ç197 * icmp_unreach -- ICMP4_UNREACH を受信したときの処理 214 198 */ 215 199 … … 246 230 error = code2error[code]; 247 231 248 /* æçµãããã TCP/UDP ã®ã¿å¯¾å¿ããã*/232 /* 最終ヘッダが TCP/UDP のみ対応する。*/ 249 233 if (ip4h->proto == IPPROTO_TCP || ip4h->proto == IPPROTO_UDP) { 250 234 … … 275 259 276 260 /* 277 * icmp_redirect -- åãç´ãã¡ãã»ã¼ã¸ãåä¿¡ããã¨ãã®å¦ç278 * 279 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã261 * icmp_redirect -- 向け直しメッセージを受信したときの処理 262 * 263 * input には IF ヘッダと IP ヘッダも含まれている。 280 264 */ 281 265 … … 291 275 292 276 /* 293 * å 294 容ãã§ãã¯ã以ä¸ã®å ´åã¯ã¨ã©ã¼ 277 * 内容チェック、以下の場合はエラー 295 278 * 296 * ã»ICMP ã³ã¼ãããICMP4_REDIRECT_PORT_AND_HOST (3) 以ä¸297 * ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æå°é·ããçã (IP ããã + ICMP ããã + IP ããã+ 8)298 * ã»ãã¼ã¿ã°ã©ã é·ããICMP ã®æ大é·ããçã299 * ã»279 * ・ICMP コードが、ICMP4_REDIRECT_PORT_AND_HOST (3) 以上 280 * ・データグラム長が、ICMP の最小長より短い (IP ヘッダ + ICMP ヘッダ + IP ヘッダ + 8) 281 * ・データグラム長が、ICMP の最大長より短い 282 * ・ 300 283 */ 301 284 if (icmp4h->code > ICMP4_REDIRECT_PORT_AND_HOST || … … 313 296 314 297 /* 315 * icmp_input -- ICMP ã®å 316 ¥åé¢æ° 317 * 318 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã 298 * icmp_input -- ICMP の入力関数 299 * 300 * input には IF ヘッダと IP ヘッダも含まれている。 319 301 */ 320 302 … … 331 313 NET_COUNT_ICMP4(net_count_icmp4.in_packets, 1); 332 314 333 /* ICMP ãããã®é·ãããã§ãã¯ããã*/315 /* ICMP ヘッダの長さをチェックする。*/ 334 316 if (input->len < IF_IP4_ICMP4_HDR_SIZE) { 335 317 NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1); … … 340 322 icmp4h = (T_ICMP4_HDR *)(input->buf + *offp); 341 323 342 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/324 /* 4 オクテット境界のデータ長 */ 343 325 len = input->len - *offp; 344 326 align = (len + 3) >> 2 << 2; 345 327 346 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/328 /* 4 オクテット境界までパディングで埋める。*/ 347 329 if (align > len) 348 330 memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len)); 349 331 350 /* ãã§ãã¯ãµã ãè¨ç®ããã*/332 /* チェックサムを計算する。*/ 351 333 if (in_cksum(icmp4h, align) != 0) { 352 334 NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1); … … 354 336 } 355 337 356 /* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/338 /* メッセージの型により分岐する。*/ 357 339 switch (icmp4h->type) { 358 340 case ICMP4_ECHO_REQUEST: … … 409 391 410 392 /* 411 * icmp_error -- ICMP ã¨ã©ã¼éä¿¡é¢æ°ã412 * 413 * input ã«ã¯ IF ããã㨠IP ããããå«ã¾ãã¦ããã414 * icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ã415 * å¼åºãå´ã§ãéæ¾ãã¦ããçµäºããã393 * icmp_error -- ICMP エラー送信関数。 394 * 395 * input には IF ヘッダと IP ヘッダも含まれている。 396 * icmp_error では、ネットワークバッファ input を返却しないので、 397 * 呼出し側で、開放してから終了する。 416 398 */ 417 399 … … 428 410 ip4hl = GET_IP4_HDR_SIZE(input); 429 411 430 /* éä¿¡ç¨ã® IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/412 /* 送信用の IP データグラムを獲得する。*/ 431 413 if (input->len - ip4hl < 8) 432 414 len = input->len - ip4hl; … … 440 422 return; 441 423 442 /* ICMP ããããè¨å®ããã*/424 /* ICMP ヘッダを設定する。*/ 443 425 icmp4h = GET_ICMP4_HDR(output, IF_IP4_ICMP4_HDR_OFFSET); 444 426 icmp4h->type = ICMP4_UNREACH; … … 446 428 icmp4h->data.addr= 0; 447 429 448 /* ã¨ã©ã¼ãçºçãã IP ããã㨠ãã¼ã¿ 8 ãªã¯ããããã³ãã¼ããã*/430 /* エラーが発生した IP ヘッダと データ 8 オクテットをコピーする。*/ 449 431 memcpy(GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET), 450 432 GET_IP4_HDR(input), (size_t)(ip4hl + len)); 451 433 452 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/434 /* 4 オクテット境界のデータ長 */ 453 435 align = (len + 3) >> 2 << 2; 454 436 455 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/437 /* 4 オクテット境界までパディングで埋める。*/ 456 438 if (align > len) 457 439 memset((uint8_t*)GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET) + ip4hl + len, 458 440 0, (size_t)(align - len)); 459 441 460 /* ãã§ãã¯ãµã ãè¨ç®ããã*/442 /* チェックサムを計算する。*/ 461 443 icmp4h->sum = 0; 462 444 icmp4h->sum = in_cksum(icmp4h, (uint_t)(ICMP4_HDR_SIZE + ip4hl + align)); 463 445 464 /* éä¿¡ããã*/446 /* 送信する。*/ 465 447 NET_COUNT_ICMP4(net_count_icmp4.out_octets, 466 448 output->len - GET_IF_IP4_HDR_SIZE(output)); -
azure_iot_hub/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
r388 r389 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 * ICMP ãããã®å®ç¾©ãRFC 79276 * ICMP ヘッダの定義、RFC 792 89 77 */ 90 78 91 79 typedef struct t_icmp_hdr { 92 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/93 uint8_t code; /* ãµãå*/94 uint16_t sum; /* ãã§ãã¯ãµã*/80 uint8_t type; /* メッセージの型 */ 81 uint8_t code; /* サブ型 */ 82 uint16_t sum; /* チェックサム */ 95 83 union { 96 84 struct id_seq { … … 116 104 117 105 /* 118 * ã¡ãã»ã¼ã¸ã®å106 * メッセージの型 119 107 */ 120 108 121 #define ICMP4_ECHO_REPLY UINT_C(0) /* ã¨ã³ã¼å¿ç*/122 #define ICMP4_UNREACH UINT_C(3) /* ã¨ã©ã¼*/123 #define ICMP4_SOURCE_QUENCH UINT_C(4) /* çºä¿¡å¶é*/124 #define ICMP4_REDIRECT UINT_C(5) /* æ¹åå¤æ´*/125 #define ICMP4_ECHO_REQUEST UINT_C(8) /* ã¨ã³ã¼è¦æ±*/126 #define ICMP4_TIME_EXCEEDED UINT_C(11) /* çºä¿¡å¶é*/127 #define ICMP4_PARAMETER UINT_C(12) /* ãã©ã¡ã¼ã¿ç°å¸¸*/128 #define ICMP4_TIME_REQUEST UINT_C(13) /* ã¿ã¤ã ã¹ã¿ã³ãè¦æ±*/129 #define ICMP4_TIME_REPLY UINT_C(14) /* ã¿ã¤ã ã¹ã¿ã³ãå¿ç*/130 #define ICMP4_MASK_REQUEST UINT_C(17) /* ã¢ãã¬ã¹ãã¹ã¯è¦æ±*/131 #define ICMP4_MASK_REPLY UINT_C(18) /* ã¢ãã¬ã¹ãã¹ã¯å¿ç*/109 #define ICMP4_ECHO_REPLY UINT_C(0) /* エコー応答 */ 110 #define ICMP4_UNREACH UINT_C(3) /* エラー */ 111 #define ICMP4_SOURCE_QUENCH UINT_C(4) /* 発信制限 */ 112 #define ICMP4_REDIRECT UINT_C(5) /* 方向変更 */ 113 #define ICMP4_ECHO_REQUEST UINT_C(8) /* エコー要求 */ 114 #define ICMP4_TIME_EXCEEDED UINT_C(11) /* 発信制限 */ 115 #define ICMP4_PARAMETER UINT_C(12) /* パラメータ異常 */ 116 #define ICMP4_TIME_REQUEST UINT_C(13) /* タイムスタンプ要求 */ 117 #define ICMP4_TIME_REPLY UINT_C(14) /* タイムスタンプ応答 */ 118 #define ICMP4_MASK_REQUEST UINT_C(17) /* アドレスマスク要求 */ 119 #define ICMP4_MASK_REPLY UINT_C(18) /* アドレスマスク応答 */ 132 120 133 121 /* 134 * ãµãå122 * サブ型 135 123 */ 136 124 137 125 /* ICMP4_UNREACH (3) */ 138 126 139 #define ICMP4_UNREACH_NET UINT_C(0) /* ãããã¯ã¼ã¯*/140 #define ICMP4_UNREACH_HOST UINT_C(1) /* ãã¹ã*/141 #define ICMP4_UNREACH_PROTOCOL UINT_C(2) /* ãããã³ã«*/142 #define ICMP4_UNREACH_PORT UINT_C(3) /* ãã¼ã*/143 #define ICMP4_UNREACH_FLAG UINT_C(4) /* åå²*/144 #define ICMP4_UNREACH_SRC_FAIL UINT_C(5) /* ã½ã¼ã¹çµè·¯*/145 #define ICMP4_UNREACH_NET_UNKNOWN UINT_C(6) /* ãããã¯ã¼ã¯ä¸æ*/146 #define ICMP4_UNREACH_HOST_UNKNOWN UINT_C(7) /* ãã¹ãä¸æ*/147 #define ICMP4_UNREACH_ISOLATED UINT_C(8) /* åé¢*/127 #define ICMP4_UNREACH_NET UINT_C(0) /* ネットワーク */ 128 #define ICMP4_UNREACH_HOST UINT_C(1) /* ホスト */ 129 #define ICMP4_UNREACH_PROTOCOL UINT_C(2) /* プロトコル */ 130 #define ICMP4_UNREACH_PORT UINT_C(3) /* ポート */ 131 #define ICMP4_UNREACH_FLAG UINT_C(4) /* 分割 */ 132 #define ICMP4_UNREACH_SRC_FAIL UINT_C(5) /* ソース経路 */ 133 #define ICMP4_UNREACH_NET_UNKNOWN UINT_C(6) /* ネットワーク不明 */ 134 #define ICMP4_UNREACH_HOST_UNKNOWN UINT_C(7) /* ホスト不明 */ 135 #define ICMP4_UNREACH_ISOLATED UINT_C(8) /* 分離 */ 148 136 #define ICMP4_UNREACH_NET_PROHIB UINT_C(9) /* */ 149 137 #define ICMP4_UNREACH_HOST_PROHIB UINT_C(10) /* */ 150 #define ICMP4_UNREACH_TOS_NET UINT_C(11) /* ãããã¯ã¼ã¯ã¸ã®ä¸æ£TOS*/151 #define ICMP4_UNREACH_TOS_HOST UINT_C(12) /* ãã¹ãã¸ã®ä¸æ£TOS */138 #define ICMP4_UNREACH_TOS_NET UINT_C(11) /* ネットワークへの不正TOS*/ 139 #define ICMP4_UNREACH_TOS_HOST UINT_C(12) /* ホストへの不正TOS */ 152 140 #define ICMP4_UNREACH_FILTER_PROHIB UINT_C(13) /* */ 153 141 #define ICMP4_UNREACH_HOST_PRECEDENCE UINT_C(14) /* */ … … 156 144 /* ICMP4_REDIRECT (5) */ 157 145 158 #define ICMP4_REDIRECT_NET UINT_C(0) /* ãããã¯ã¼ã¯*/159 #define ICMP4_REDIRECT_HOST UINT_C(1) /* ãã¹ã*/160 #define ICMP4_REDIRECT_PORT_AND_NET UINT_C(2) /* ãã¼ãçªå·ã¨ããã*/161 #define ICMP4_REDIRECT_PORT_AND_HOST UINT_C(3) /* ãã¼ãçªå·ã¨ãã¹ã*/146 #define ICMP4_REDIRECT_NET UINT_C(0) /* ネットワーク */ 147 #define ICMP4_REDIRECT_HOST UINT_C(1) /* ホスト */ 148 #define ICMP4_REDIRECT_PORT_AND_NET UINT_C(2) /* ポート番号とネット */ 149 #define ICMP4_REDIRECT_PORT_AND_HOST UINT_C(3) /* ポート番号とホスト */ 162 150 163 151 /* 164 * å 165 ¨åå¤æ° 152 * 全域変数 166 153 */ 167 154 168 155 /* 169 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã156 * 関数シミュレーションマクロ 170 157 */ 171 158 … … 177 164 178 165 /* 179 * é¢æ°166 * 関数 180 167 */ 181 168 … … 189 176 190 177 /* 191 * TINET ç¬èªAPI178 * TINET 独自 API 192 179 */ 193 180 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 239 227 NET_COUNT_IGMP(net_count_igmp.in_packets, 1); 240 228 241 /* ICMP ãããã®é·ãããã§ãã¯ããã*/229 /* ICMP ヘッダの長さをチェックする。*/ 242 230 if (input->len < IF_IP4_IGMP_HDR_SIZE) { 243 231 NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1); … … 248 236 igmph = (T_IGMPV2_HDR *)(input->buf + *offp); 249 237 250 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/238 /* 4 オクテット境界のデータ長 */ 251 239 len = input->len - *offp; 252 240 align = (len + 3) >> 2 << 2; 253 241 254 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/242 /* 4 オクテット境界までパディングで埋める。*/ 255 243 if (align > len) 256 244 memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len)); 257 245 258 /* ãã§ãã¯ãµã ãè¨ç®ããã*/246 /* チェックサムを計算する。*/ 259 247 if (in_cksum(igmph, align) != 0) { 260 248 NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1); … … 262 250 } 263 251 264 /* ã¡ãã»ã¼ã¸ã®åã«ããåå²ããã*/252 /* メッセージの型により分岐する。*/ 265 253 switch (igmph->type) { 266 254 case IGMP_MEMBERSHIP_QUERY: … … 268 256 ret = false; 269 257 270 /* åå ä¸ã®ã°ã«ã¼ãã¢ãã¬ã¹ããã®ã¯ã¨ãªã¼ã®å ´å*/258 /* 参加中のグループアドレスからのクエリーの場合 */ 271 259 syscall(wai_sem(SEM_IGMP_GROUP_LOCK)); 272 260 … … 283 271 284 272 if (ret) { 285 /* ã¡ã³ãã¼ã·ãããªãã¼ããéä¿¡*/273 /* メンバーシップリポートを送信 */ 286 274 igmp_send_report_v2(ip4h->src); 287 275 } … … 305 293 return false; 306 294 307 /* IGMP ããããè¨å®ããã*/295 /* IGMP ヘッダを設定する。*/ 308 296 igmph = GET_IGMPV2_HDR(output, IF_IP4_IGMP_HDR_OFFSET); 309 297 igmph->type = IGMP_MEMBERSHIP_REPORT_V2; … … 311 299 igmph->addr = htonl(dst); 312 300 313 /* 4 ãªã¯ãããå¢çã®ãã¼ã¿é·*/301 /* 4 オクテット境界のデータ長 */ 314 302 align = (len + 3) >> 2 << 2; 315 303 316 /* 4 ãªã¯ãããå¢çã¾ã§ããã£ã³ã°ã§åããã*/304 /* 4 オクテット境界までパディングで埋める。*/ 317 305 if (align > len) 318 306 memset((uint8_t*)GET_IGMP_SDU(output, IF_IP4_IGMP_HDR_OFFSET) + len, 319 307 0, (size_t)(align - len)); 320 308 321 /* ãã§ãã¯ãµã ãè¨ç®ããã*/309 /* チェックサムを計算する。*/ 322 310 igmph->sum = 0; 323 311 igmph->sum = in_cksum(igmph, (uint_t)(IGMP_HDR_SIZE + align)); 324 312 325 /* éä¿¡ããã*/313 /* 送信する。*/ 326 314 NET_COUNT_IGMP(net_count_igmp.out_octets, 327 315 output->len - GET_IF_IP4_HDR_SIZE(output)); … … 335 323 336 324 /* 337 * igmp_timer -- IGMP å 338 ±éã¿ã¤ãã¼ 325 * igmp_timer -- IGMP 共通タイマー 339 326 */ 340 327 static void igmp_timer(void *ignore) … … 367 354 368 355 /* 369 * igmp_init -- IGMP æ©è½ãåæåããã356 * igmp_init -- IGMP 機能を初期化する。 370 357 */ 371 358 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r388 r389 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 * IGMP ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«35 * IGMP コンフィギュレーションファイル 48 36 */ 49 37 50 38 #if defined(_IP4_CFG) && defined(SUPPORT_IGMP) 51 39 52 /* IGMP ã°ã«ã¼ãæ´æ°ç¨ã»ããã©*/40 /* IGMP グループ更新用セマフォ */ 53 41 54 42 CRE_SEM(SEM_IGMP_GROUP_LOCK, { TA_TPRI, 1, 1 }); -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/ip_igmp.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r388 r389 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$ … … 47 35 #define _IP_IGMP_H_ 48 36 49 #define NUM_IGMP_ENTRY 5 /* ãã«ããã£ã¹ãã°ã«ã¼ãã®ã¨ã³ããªæ°*/37 #define NUM_IGMP_ENTRY 5 /* マルチキャストグループのエントリ数 */ 50 38 51 39 /* 52 * IGMPv1 ãããã®å®ç¾©ãRFC 111240 * IGMPv1 ヘッダの定義、RFC 1112 53 41 */ 54 42 55 43 typedef struct t_igmpv1_hdr 56 44 { 57 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/58 uint8_t unused; /* æªä½¿ç¨*/59 uint16_t sum; /* ãã§ãã¯ãµã*/60 T_IN4_ADDR addr; /* ã°ã«ã¼ãã¢ãã¬ã¹*/45 uint8_t type; /* メッセージの型 */ 46 uint8_t unused; /* 未使用 */ 47 uint16_t sum; /* チェックサム */ 48 T_IN4_ADDR addr; /* グループアドレス */ 61 49 } __attribute__((packed)) T_IGMPV1_HDR; 62 50 63 51 /* 64 * IGMPv2 ãããã®å®ç¾©ãRFC 223652 * IGMPv2 ヘッダの定義、RFC 2236 65 53 */ 66 54 67 55 typedef struct t_igmpv2_hdr 68 56 { 69 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/70 uint8_t time; /* æ大å¿çæé*/71 uint16_t sum; /* ãã§ãã¯ãµã*/72 T_IN4_ADDR addr; /* ã°ã«ã¼ãã¢ãã¬ã¹*/57 uint8_t type; /* メッセージの型 */ 58 uint8_t time; /* 最大応答時間 */ 59 uint16_t sum; /* チェックサム */ 60 T_IN4_ADDR addr; /* グループアドレス */ 73 61 } __attribute__((packed)) T_IGMPV2_HDR; 74 62 75 63 typedef struct t_igmpv3_query_hdr 76 64 { 77 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/78 uint8_t time; /* æ大å¿çæé*/79 uint16_t sum; /* ãã§ãã¯ãµã*/80 T_IN4_ADDR grpaddr; /* ã°ã«ã¼ãã¢ãã¬ã¹*/81 uint8_t sqrv; /* S ãã©ã°ãQuerier Robustness Value */65 uint8_t type; /* メッセージの型 */ 66 uint8_t time; /* 最大応答時間 */ 67 uint16_t sum; /* チェックサム */ 68 T_IN4_ADDR grpaddr; /* グループアドレス */ 69 uint8_t sqrv; /* Sフラグ、Querier Robustness Value */ 82 70 uint8_t qqic; /* Qurier's Query Interval Code */ 83 uint16_t num; /* éä¿¡å 84 ã®æ° */ 85 T_IN4_ADDR sdraddr; /* éä¿¡å 86 ã¢ãã¬ã¹ */ 71 uint16_t num; /* 送信元の数 */ 72 T_IN4_ADDR sdraddr; /* 送信元アドレス */ 87 73 } __attribute__((packed)) T_IGMPV3Q_HDR; 88 74 89 75 typedef struct t_igmp_group_record 90 76 { 91 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å */ 92 uint8_t len; /* è£å©ãã¼ã¿é· */ 93 uint16_t num; /* éä¿¡å 94 ã®æ° */ 95 T_IN4_ADDR grpaddr; /* ã°ã«ã¼ãã¢ãã¬ã¹ */ 96 T_IN4_ADDR sdraddr; /* éä¿¡å 97 ã¢ãã¬ã¹ */ 98 /* è£å©ãã¼ã¿ */ 77 uint8_t type; /* メッセージの型 */ 78 uint8_t len; /* 補助データ長 */ 79 uint16_t num; /* 送信元の数 */ 80 T_IN4_ADDR grpaddr; /* グループアドレス */ 81 T_IN4_ADDR sdraddr; /* 送信元アドレス */ 82 /* 補助データ */ 99 83 } __attribute__((packed)) T_IGMP_GROUP_RECORD; 100 84 101 85 typedef struct t_igmpv3_report_hdr 102 86 { 103 uint8_t type; /* ã¡ãã»ã¼ã¸ã®å*/104 uint8_t rsv1; /* äºç´*/105 uint16_t sum; /* ãã§ãã¯ãµã*/106 uint16_t rsv2; /* äºç´*/107 uint16_t num; /* ã°ã«ã¼ãã¬ã³ã¼ãã®æ°*/108 T_IGMP_GROUP_RECORD record; /* ã°ã«ã¼ãã¬ã³ã¼ã*/87 uint8_t type; /* メッセージの型 */ 88 uint8_t rsv1; /* 予約 */ 89 uint16_t sum; /* チェックサム */ 90 uint16_t rsv2; /* 予約 */ 91 uint16_t num; /* グループレコードの数 */ 92 T_IGMP_GROUP_RECORD record; /* グループレコード */ 109 93 } __attribute__((packed)) T_IGMPV3R_HDR; 110 94 … … 121 105 122 106 /* 123 * ã¡ãã»ã¼ã¸ã®å107 * メッセージの型 124 108 */ 125 109 126 #define IGMP_MEMBERSHIP_QUERY 0x11 /* ã¡ã³ãã¼ã·ããã¯ã¨ãªã¼*/127 #define IGMP_MEMBERSHIP_REPORT 0x12 /* ã¡ã³ãã¼ã·ããã¬ãã¼ã*/128 #define IGMP_MEMBERSHIP_REPORT_V2 0x16 /* ã¡ã³ãã¼ã·ããã¬ãã¼ã*/129 #define IGMP_LEAVE_GROUP 0x17 /* ãªã¼ãã°ã«ã¼ã*/130 #define IGMP_MEMBERSHIP_REPORT_V3 0x22 /* ã¡ã³ãã¼ã·ããã¬ãã¼ã*/110 #define IGMP_MEMBERSHIP_QUERY 0x11 /* メンバーシップクエリー */ 111 #define IGMP_MEMBERSHIP_REPORT 0x12 /* メンバーシップレポート */ 112 #define IGMP_MEMBERSHIP_REPORT_V2 0x16 /* メンバーシップレポート */ 113 #define IGMP_LEAVE_GROUP 0x17 /* リーブグループ */ 114 #define IGMP_MEMBERSHIP_REPORT_V3 0x22 /* メンバーシップレポート */ 131 115 132 116 /* 133 * UDP é信端ç¹ãªãã·ã§ã³117 * UDP通信端点オプション 134 118 */ 135 119 … … 164 148 165 149 /* 166 * IGMP ã°ã«ã¼ãã¨ã³ããª150 * IGMP グループエントリ 167 151 */ 168 152 169 153 typedef struct igmp_entry 170 154 { 171 int16_t timer; /* éä¿¡ã¾ã§ã®æé[ç§] */172 int16_t resptime; /* æ大å¿çæé[ç§] */173 T_IN4_ADDR ip_addr; /* IP ã¢ãã¬ã¹*/155 int16_t timer; /* 送信までの時間[秒] */ 156 int16_t resptime; /* 最大応答時間[秒] */ 157 T_IN4_ADDR ip_addr; /* IP アドレス */ 174 158 } T_IGMP_ENTRY; 175 159 -
azure_iot_hub/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
r388 r389 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$ … … 141 129 142 130 /* 143 * å¤æ°131 * 変数 144 132 */ 145 133 … … 147 135 148 136 /* 149 * SNMP 㮠管çæ 150 å ±ãã¼ã¹ (MIB) 137 * SNMP の 管理情報ベース (MIB) 151 138 */ 152 139 … … 158 145 159 146 /* 160 * ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼147 * データグラム再構成キュー 161 148 */ 162 149 … … 165 152 166 153 /* 167 * é¢æ°154 * 関数 168 155 */ 169 156 … … 172 159 173 160 /* 174 * ip_get_frag_queue -- ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼ãç²å¾ããã161 * ip_get_frag_queue -- データグラム再構成キューを獲得する。 175 162 */ 176 163 … … 182 169 183 170 /* 184 * ip_freef -- ãã¼ã¿ã°ã©ã åæ§æãã¥ã¼ã解æ¾ããã171 * ip_freef -- データグラム再構成キューを解放する。 185 172 */ 186 173 … … 200 187 201 188 /* 202 * ip_frag_timer -- ãã¼ã¿ã°ã©ã åæ§æ管çã¿ã¤ã189 * ip_frag_timer -- データグラム再構成管理タイマ 203 190 */ 204 191 … … 223 210 224 211 /* 225 * ip_reass -- ãã¼ã¿ã°ã©ã ãåæ§æããã212 * ip_reass -- データグラムを再構成する。 226 213 */ 227 214 … … 247 234 248 235 /* 249 * ID ãIPã¢ãã¬ã¹ãä¸ä½ãããã³ã«ãç°ãªããã©ã°ã¡ã³ãããã¥ã¼ã«æãã°ç ´æ£ããã236 * ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。 250 237 */ 251 238 frag = ip_frag_queue[ix]; … … 264 251 NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN], 1); 265 252 266 /* æ°è¦ã® ID ãªããå®å 267 ã¢ãã¬ã¹ãä¿åãã¦ããã¥ã¼ã«ã¤ãªãã*/ 253 /* 新規の ID なら、宛先アドレスを保存して、キューにつなぐ。*/ 268 254 frag_dst [ix] = dst; 269 255 ip_frag_queue[ix] = input; … … 271 257 input = NULL; 272 258 273 /* åæ§æã¿ã¤ã ã¢ã¦ããè¨å®ããã*/259 /* 再構成タイムアウトを設定する。*/ 274 260 ip4h->ttl = IP4_FRAGTTL; 275 261 } 276 262 else { 277 263 278 /* æ£ããä½ç½®ã«æ¿å 279 ¥ããã*/ 264 /* 正しい位置に挿入する。*/ 280 265 prev = NULL; 281 266 while (frag != NULL && … … 294 279 input = NULL; 295 280 296 /* å 297 ¨ã¦ã®ãã©ã°ã¡ã³ããæã£ã¦ããã調ã¹ãã*/ 281 /* 全てのフラグメントが揃っているか調べる。*/ 298 282 off = 0; 299 283 for (frag = ip_frag_queue[ix]; frag != NULL; frag = GET_QIP4_HDR(frag)->next) { 300 284 if ((IP4_FLGOFF_OFF(GET_QIP4_HDR(frag)->flg_off) << 3) != off) { 301 /* éä¸ãæãã¦ãããçµäºããã*/285 /* 途中が抜けていたら終了する。*/ 302 286 syscall(sig_sem(SEM_IP4_FRAG_QUEUE)); 303 287 return NULL; … … 307 291 } 308 292 309 /* å 310 ¨ã¦ã®ãã©ã°ã¡ã³ããæã£ããåæ§æããã*/ 293 /* 全てのフラグメントが揃ったら再構成する。*/ 311 294 if ((GET_QIP4_HDR(prev)->flg_off & IP4_MF) == 0) { 312 295 313 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/296 /* ネットワークバッファを獲得する。*/ 314 297 if (tget_net_buf(&input, IF_IP4_HDR_SIZE + off, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) { 315 298 NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN_OK], 1); 316 299 NET_COUNT_MIB(ip_stats.ipReasmOKs, 1); 317 300 318 /* IPv4 ããããè¨å®ããã*/301 /* IPv4 ヘッダを設定する。*/ 319 302 frag = ip_frag_queue[ix]; 320 303 ip4h = GET_IP4_HDR(input); … … 326 309 ip4h->flg_off = ip4h->id = 0; 327 310 328 /* ãã¼ã¿ã°ã©ã ãåæ§æããã*/311 /* データグラムを再構成する。*/ 329 312 off = IP4_HDR_SIZE; 330 313 while (frag != NULL) { … … 340 323 NET_COUNT_MIB(ip_stats.ipReasmFails, 1); 341 324 } 342 /* ãã¥ã¼ã空ã«ããã*/325 /* キューを空にする。*/ 343 326 ip_freef(ix); 344 327 } … … 351 334 352 335 /* 353 * ip_init -- IP ã®åæå336 * ip_init -- IP の初期化 354 337 */ 355 338 … … 361 344 362 345 /* 363 * ip_remove_options -- IPv4 ãããã®ãªãã·ã§ã³ãåé¤ãã以éãåã«è©°ããã346 * ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。 364 347 */ 365 348 … … 385 368 386 369 /* 387 * ip_input -- IP ã®å 388 ¥åé¢æ° 370 * ip_input -- IP の入力関数 389 371 */ 390 372 391 373 #if defined(SUPPORT_IPSEC) 392 374 /* 393 * TODO: IPsec SPãæ¤ç´¢ãããã±ããããªã¸ã§ã¯ããããã©ããå¤å®ããå¦çãå®è£ 394 ãã 375 * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実装する 395 376 */ 396 377 #endif /* of defined(SUPPORT_IPSEC) */ … … 408 389 NET_COUNT_MIB(ip_stats.ipInReceives, 1); 409 390 410 /* IP ãããã®é·ãããã§ãã¯ããã*/391 /* IP ヘッダの長さをチェックする。*/ 411 392 if (input->len < IF_IP4_HDR_SIZE) { 412 393 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1); … … 418 399 hlen = GET_IP4_HDR_SIZE(input); 419 400 420 /* ãã¼ã¸ã§ã³ããã§ãã¯ããã*/401 /* バージョンをチェックする。*/ 421 402 if (IP4_VHL_V(ip4h->vhl) != IPV4_VERSION) { 422 403 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_VER], 1); … … 425 406 } 426 407 427 /* IP ãããã®é·ãããã§ãã¯ãããªãã·ã§ã³ã解æããã*/408 /* IP ヘッダの長さをチェックし、オプションを解析する。*/ 428 409 if (hlen > IP4_HDR_SIZE) { 429 410 NET_COUNT_IP4(net_count_ip4[NC_IP4_OPTS], 1); 430 /* %%% ãªãã·ã§ã³ã®è§£æ%%% */431 } 432 433 /* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ããã*/411 /* %%% オプションの解析 %%% */ 412 } 413 414 /* データグラム長をチェックする。*/ 434 415 if (ntohs(ip4h->len) > input->len - IF_HDR_SIZE) { 435 416 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1); … … 438 419 } 439 420 440 /* ãããã¯ã¼ã¯ãããã¡ã®é·ãããã¼ã¿ã°ã©ã é·ã«èª¿æ´ããã*/421 /* ネットワークバッファの長さをデータグラム長に調整する。*/ 441 422 input->len = (uint16_t)(ntohs(ip4h->len) + IF_HDR_SIZE); 442 423 443 /* ãã§ãã¯ãµã ããã§ãã¯ããã*/424 /* チェックサムをチェックする。*/ 444 425 if (in_cksum(ip4h, hlen) != 0) { 445 426 NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_CKSUM], 1); … … 448 429 } 449 430 450 /* IP ãããã®é·ãããã§ãã¯ããä¸ä½ã ICMP 以å¤ã¯ãªãã·ã§ã³ãæ¶å»ããã*/431 /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/ 451 432 if (hlen > IP4_HDR_SIZE && ip4h->proto != IPPROTO_ICMP) { 452 433 memset((uint8_t*)ip4h + IP4_HDR_SIZE, 0, hlen - IP4_HDR_SIZE); 453 434 } 454 435 455 /* éä¿¡å 456 ã¢ãã¬ã¹ããã§ãã¯ããã*/ 436 /* 送信元アドレスをチェックする。*/ 457 437 src = ntohl(ip4h->src); 458 438 bc = (ifp->in4_ifaddr.addr & ifp->in4_ifaddr.mask) | ~ifp->in4_ifaddr.mask; … … 476 456 #endif /* of #ifdef SUPPORT_LOOP */ 477 457 478 /* ãã¦å 479 ã¢ãã¬ã¹ããã§ãã¯ããã*/ 458 /* あて先アドレスをチェックする。*/ 480 459 dst = ntohl(ip4h->dst); 481 460 … … 483 462 484 463 /* 485 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ããã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾©ã®486 * å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã464 * DHCP_CFG が定義されているときは、ローカルアドレスが未定義の 465 * 場合もデータグラムを受信する。 487 466 */ 488 467 … … 529 508 #ifdef IP4_CFG_FRAGMENT 530 509 531 /* åå²ããã¦ããããã§ãã¯ããã*/510 /* 分割されているかチェックする。*/ 532 511 if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) { 533 512 if ((input = ip_reass(ip4h, input)) == NULL) … … 537 516 #else /* of #ifdef IP4_CFG_FRAGMENT */ 538 517 539 /* åå²ããã¦ããããã§ãã¯ããã*/518 /* 分割されているかチェックする。*/ 540 519 if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) { 541 520 T_IN4_ADDR src; … … 555 534 556 535 #if defined(SUPPORT_IPSEC) 557 /* ããã§ipsec4_in_rejectãå®è¡ãã*/536 /* ここでipsec4_in_rejectを実行する */ 558 537 if ((ip4h->proto != IPPROTO_ESP) && ipsec4_in_reject (input)) { 559 538 goto buf_rel; … … 561 540 #endif /* of #if defined(SUPPORT_IPSEC) */ 562 541 563 /* ãããã³ã«ãé¸æãã*/542 /* プロトコルを選択する */ 564 543 switch (ip4h->proto) { 565 544 … … 607 586 NET_COUNT_MIB(ip_stats.ipInUnknownProtos, 1); 608 587 609 /* ãã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/588 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 610 589 if (dst == ifp->in4_ifaddr.addr) { 611 590 T_IN4_ADDR src; … … 616 595 } 617 596 /* 618 * icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§619 * éæ¾ãã¦ããçµäºããã597 * icmp_error では、ネットワークバッファ input を返却しないので 598 * 開放してから終了する。 620 599 */ 621 600 break; -
azure_iot_hub/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
r388 r389 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$ … … 123 111 124 112 /* 125 * IP output -- IP ã®åºåé¢æ°126 * 127 * 注æ: ãã¼ã¸ã§ã³ã¨ãããé·ã¯ä¸ä½å±¤ã§è¨å®ããã113 * IP output -- IP の出力関数 114 * 115 * 注意: バージョンとヘッダ長は上位層で設定する。 128 116 */ 129 117 … … 144 132 145 133 #ifdef SUPPORT_IPSEC 146 /* XXX: IPsec ã®å¦çã¯ãã±ããæçåã®åã«è¡ããã*/147 148 /* SPD ãåå¾ãã*/134 /* XXX: IPsecの処理はパケット断片化の前に行われる */ 135 136 /* SPDを取得する */ 149 137 sp = ipsec4_getpolicybyaddr(output, IPSEC_DIR_OUTBOUND, &ipsec_error); 150 138 if (sp==NULL) { … … 153 141 } 154 142 155 /* ããªã·ããã§ãã¯ãã*/143 /* ポリシをチェックする*/ 156 144 #if 0 157 145 switch (sp->policy) { … … 165 153 166 154 case IPSEC_POLICY_IPSEC: 167 /* XXX: SH2 ã§ã¯ããã§illegal Instructionãçºçãããã³ã³ãã¤ã©ã®ãã°? */155 /* XXX: SH2ではここでillegal Instructionが発生する。コンパイラのバグ? */ 168 156 if (sp->req == NULL) { 169 /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã*/157 /* 鍵交換デーモンに対してSAの取得を要求する */ 170 158 goto bad; 171 159 } … … 173 161 174 162 default: 175 /* ä¸æ£ãªããªã·*/163 /* 不正なポリシ */ 176 164 goto bad; 177 165 break; 178 166 } 179 167 #else /* 0 */ 180 /* XXX: ã³ã³ãã¤ã©ã®ä¸å 181 ·ååé¿ã®ãã switchãããifæã§æ¸ãç´ãã */ 168 /* XXX: コンパイラの不具合回避のため switchをやめif文で書き直した */ 182 169 policy = sp->spinitb->policy; 183 170 … … 188 175 else if (policy == IPSEC_POLICY_IPSEC) { 189 176 if (sp->req == NULL) 190 /* éµäº¤æãã¼ã¢ã³ã«å¯¾ãã¦SAã®åå¾ãè¦æ±ãã*/177 /* 鍵交換デーモンに対してSAの取得を要求する */ 191 178 goto bad; 192 179 } else … … 199 186 200 187 state.m = output; 201 /* XXX: ipsec4_output()å 202 ã§ã¯ãip->{len,off}ããããã¯ã¼ã¯ãã¤ããªã¼ãã¨ãã */ 188 /* XXX: ipsec4_output()内では、ip->{len,off}をネットワークバイトオーダとする */ 203 189 error = ipsec4_output (&state, sp, 0 /* flags */ ); 204 190 output = state.m; 205 191 206 192 if (error) { 207 /* net_buf ã¯ipsec4_outputã«ãã£ã¦æ¢ã«è§£æ¾ããã¦ãã*/193 /* net_buf はipsec4_outputによって既に解放されている */ 208 194 switch (error) { 209 195 default: … … 213 199 } 214 200 215 /* ipsec4_outputã«å½±é¿ãåããå¤ãæ´æ°ãã */ 216 /* XXX: å¿ 217 è¦ã? */ 201 /* ipsec4_outputに影響を受けた値を更新する */ 202 /* XXX: 必要か? */ 218 203 219 204 skip_ipsec: … … 227 212 228 213 /* 229 * ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶ 230 ãã¦ããã°ã 231 * åå²ãã¦éä¿¡ããã 214 * データグラムサイズがネットワークの MTU を超えていれば、 215 * 分割して送信する。 232 216 */ 233 217 if (ntohs(ip4h->len) > IF_MTU) { … … 247 231 flen = len - off; 248 232 249 /* ãã¼ã¿é·ã¯ 4 ãªã¯ãããå¢çã«èª¿æ´ããã*/233 /* データ長は 4 オクテット境界に調整する。 */ 250 234 align = (flen + 3) >> 2 << 2; 251 235 252 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/236 /* ネットワークバッファを獲得する。*/ 253 237 if (tget_net_buf(&frag, align + IF_IP4_HDR_SIZE, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) { 254 238 255 /* ãã©ã°ã¡ã³ããã³ãã¼ããã*/239 /* フラグメントをコピーする。*/ 256 240 memcpy(GET_IP4_SDU(frag), (uint8_t *)ip4h + off, flen); 257 241 258 /* ããããåããã*/242 /* ヘッダを埋める。*/ 259 243 fip4h = GET_IP4_HDR(frag); 260 244 *fip4h = *ip4h; … … 279 263 } 280 264 else { 281 /* ç²å¾ã§ããªããã°ãéä¿¡ããããããã*/265 /* 獲得できなければ、送信をあきらめる。*/ 282 266 syscall(rel_net_buf(output)); 283 267 NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1); … … 294 278 else { 295 279 296 /* ããããåããã*/280 /* ヘッダを埋める。*/ 297 281 ip4h->id = htons(frag_id); 298 282 frag_id ++; … … 312 296 ip4h = GET_IP4_HDR(output); 313 297 314 /* ãã¼ã¿ã°ã©ã ãµã¤ãºããããã¯ã¼ã¯ã® MTU ãè¶ 315 ãã¦ããã°ã¨ã©ã¼ */ 298 /* データグラムサイズがネットワークの MTU を超えていればエラー */ 316 299 if (ntohs(ip4h->len) > IF_MTU) 317 300 return E_PAR; 318 301 319 /* ããããåããã*/302 /* ヘッダを埋める。*/ 320 303 ip4h->id = htons(frag_id); 321 304 frag_id ++; … … 327 310 328 311 #ifdef ETHER_CFG_MULTICAST 329 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´åã¯IPã¢ãã¬ã¹ã¯ãã®ã¾ã¾*/312 /* マルチキャストアドレスの場合はIPアドレスはそのまま */ 330 313 gw = ntohl(ip4h->dst); 331 314 if(!IN4_IS_ADDR_MULTICAST(gw)) -
azure_iot_hub/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
r388 r389 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$ … … 87 75 88 76 /* 89 * IPv4 㨠IPv6 ãã³ã³ãã¤ã«æã«é¸æããããã®ãã¯ã77 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ 90 78 */ 91 79 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r388 r389 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 }); -
azure_iot_hub/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
r388 r389 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 -
azure_iot_hub/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
r388 r389 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 -
azure_iot_hub/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
r388 r389 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 * æ»ãå¤118 * 戻り値 131 119 * 132 * RET_OK æ£å¸¸133 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã134 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã120 * RET_OK 正常 121 * RET_DROP エラー、セグメントを破棄する。 122 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 135 123 */ 136 124 … … 142 130 143 131 /* 144 * é¢æ°132 * 関数 145 133 */ 146 134 … … 159 147 160 148 /* 161 * parse_option -- TCP ãããã®ãªãã·ã§ã³ã解æããã149 * parse_option -- TCP ヘッダのオプションを解析する。 162 150 */ 163 151 … … 214 202 215 203 /* 216 * set_rexmt_timer -- æ°ããå¾å¾©æéãåéããåéã¿ã¤ããæ´æ°ããã204 * set_rexmt_timer -- 新しい往復時間を収集し、再送タイマを更新する。 217 205 */ 218 206 … … 225 213 if (cep->srtt != 0) { 226 214 /* 227 * srtt: å¹³æ»åãããRTT215 * srtt: 平滑化された RTT 228 216 * 229 * è¨æ¸¬ããã RTT (rtt) ã¨ç¾å¨ã®å¹³æ»åããã RTT (srtt) ã®å·® (delta) ãæ±ããã217 * 計測された RTT (rtt) と現在の平滑化された RTT (srtt) の差 (delta) を求める。 230 218 * 231 * delta 㯠2 ãããå·¦ã·ãã ( 4 å) ããå¤ã§ä¿æããã232 * srtt 㯠5 ãããå·¦ã·ãã (32 å) ããå¤ã§ä¿æããã¦ããã219 * delta は 2 ビット左シフト ( 4 倍) した値で保持する。 220 * srtt は 5 ビット左シフト (32 倍) した値で保持されている。 233 221 * 234 222 * delta = rtt / 8 - srtt / 8 235 223 * 236 * æ°ãã srtt ã¯224 * 新しい srtt は 237 225 * 238 226 * srtt = rtt / 8 + srtt * 7 / 8 239 227 * = srtt + (rtt / 8 - srtt / 8) 240 228 * 241 * ã§è¨ç®ããã242 * ãã®ãããrtt ã 2 ãããå·¦ã·ããããsrtt ã (5 - 2) ãããå³ã·ããã㦠delta ãæ±ããã229 * で計算する。 230 * このため、rtt を 2 ビット左シフトし、srtt を (5 - 2) ビット右シフトして delta を求める。 243 231 */ 244 232 delta = ((rtt - 1) << TCP_DELTA_SHIFT) - (cep->srtt >> (TCP_SRTT_SHIFT - TCP_DELTA_SHIFT)); … … 248 236 249 237 /* 250 * delta ã®çµ¶å¯¾å¤ | delta | ãæ±ããã238 * delta の絶対値 | delta | を求める。 251 239 */ 252 240 if (delta < 0) … … 254 242 255 243 /* 256 * rttvar: å¹³æ»åãããåæ£244 * rttvar: 平滑化された分散 257 245 * 258 * rttvar 㯠4 ãããå·¦ã·ãã (16 å) ããå¤ã§ä¿æããã¦ããã246 * rttvar は 4 ビット左シフト (16 倍) した値で保持されている。 259 247 * 260 248 * delta = |delta| / 4 - rttvar / 4 261 249 * 262 * æ°ãã rttvar ã¯250 * 新しい rttvar は 263 251 * 264 252 * rttvar = |delta|/ 4 + rttvar * 3 /4 265 253 * = rttvar + (|delta| / 4 - rttvar / 4) 266 254 * 267 * ã§è¨ç®ããã255 * で計算する。 268 256 */ 269 257 delta -= cep->rttvar >> (TCP_RTTVAR_SHIFT - TCP_DELTA_SHIFT); … … 274 262 else { 275 263 /* 276 * ã¾ã srtt ã®è¨å®ãè¡ããã¦ããªãã¨ãã¯ãä»åè¨æ¸¬ããã RTT ã使ç¨ããã277 * å¹³æ»åããã RTT (srtt) ã«ã¯ãRTT ã 5 ãããå·¦ã·ãã (32å) ããå¤ã278 * å¹³æ»åãããåæ£ (rttvar) ã«ã¯ãRTT ã® 1/2 ã 4 ãããå·¦ã·ãã (16å) ããå¤ã264 * まだ srtt の設定が行われていないときは、今回計測された RTT を使用する。 265 * 平滑化された RTT (srtt) には、RTT を 5 ビット左シフト (32倍) した値。 266 * 平滑化された分散 (rttvar) には、RTT の 1/2 を 4 ビット左シフト (16倍) した値。 279 267 */ 280 268 cep->srtt = rtt << TCP_SRTT_SHIFT; … … 283 271 284 272 /* 285 * rtt ã®æ¸¬å®ãçµäºããåéåæ°ããªã»ããããã273 * rtt の測定を終了し、再送回数をリセットする。 286 274 */ 287 275 cep->rtt = cep->rxtshift = 0; 288 276 289 277 /* 290 * RTT ã«è¨±ãããæå°å¤ 㨠rtt + 2 ã®å¤§ããªå¤ã®æ¹ãåéã¿ã¤ã ã¢ã¦ãã®æå°å¤ã«ããã278 * RTT に許される最小値 と rtt + 2 の大きな値の方を再送タイムアウトの最小値にする。 291 279 */ 292 280 if (rtt + 2 < TCP_TVAL_MIN) … … 301 289 302 290 /* 303 * reassemble -- åä¿¡ã»ã°ã¡ã³ããåæ§æãããé çªéãã«åä¿¡ããã¨ãã®å¦ç291 * reassemble -- 受信セグメントを再構成する。順番通りに受信したときの処理 304 292 */ 305 293 … … 313 301 if (tcph->sum > cep->rbufsz - cep->rwbuf_count) { 314 302 /* 315 * åä¿¡ã¦ã£ã³ããããã¡ã«ç©ºãããªãã¨ãã¯ç ´æ£ããã303 * 受信ウィンドバッファに空きがないときは破棄する。 316 304 */ 317 305 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DROP_SEGS], 1); … … 324 312 cep->fsm_state == TCP_FSM_ESTABLISHED) { 325 313 /* 326 * é çªéãã«ã»ã°ã¡ã³ããåä¿¡ããæã®å¦ç327 * åä¿¡ã»ã°ã¡ã³ãã®ä¸¦ã¹æ¿ãã¯ä¸è¦ãªã®ã§328 * ãã®ã¾ã¾åä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã314 * 順番通りにセグメントを受信した時の処理 315 * 受信セグメントの並べ替えは不要なので 316 * そのまま受信ウィンドバッファに書き込む。 329 317 */ 330 318 … … 341 329 qhdr = GET_TCP_Q_HDR(input, thoff); 342 330 343 /* TCP ãããã®ä½ç½®ãä¿åããã*/331 /* TCP ヘッダの位置を保存する。*/ 344 332 SET_IP_TCP_Q_HDR_OFFSET(input, thoff); 345 333 346 /* SDU ã®ãªãã»ããï¼å 347 ã¯ã¦ã£ã³ããµã¤ãºï¼ããªã»ããããã*/ 334 /* SDU のオフセット(元はウィンドサイズ)をリセットする。*/ 348 335 qhdr->soff = 0; 349 336 350 /* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/337 /* データを受信ウィンドバッファに書き込む。*/ 351 338 TCP_WRITE_RWBUF(cep, input, thoff); 352 339 } … … 359 346 360 347 /* 361 * listening -- ååãªã¼ãã³ãã¦ï¼ç¶æ 362 ã LISTEN ã®å¦ç 348 * listening -- 受動オープンして,状態が LISTEN の処理 363 349 * 364 * æ»ãå¤:365 * RET_OK æ£å¸¸366 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã367 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã350 * 戻り値: 351 * RET_OK 正常 352 * RET_DROP エラー、セグメントを破棄する。 353 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 368 354 */ 369 355 … … 376 362 377 363 /* 378 * ãã©ã°ã« RST ãã»ããããã¦ããã°ç ´æ£ããã364 * フラグに RST がセットされていれば破棄する。 379 365 */ 380 366 if (tcph->flags & TCP_FLG_RST) … … 382 368 383 369 /* 384 * ãã©ã°ã« ACK ãã»ãããã¦ãããã°ã385 * ãªã»ãããéã£ã¦ç ´æ£ããã370 * フラグに ACK がセットさてれいれば、 371 * リセットを送って破棄する。 386 372 */ 387 373 if (tcph->flags & TCP_FLG_ACK) … … 389 375 390 376 /* 391 * ãã©ã°ã« SYN ãã»ããããã¦ããªããã°ãã°ç ´æ£ããã377 * フラグに SYN がセットされていなければれば破棄する。 392 378 */ 393 379 if ((tcph->flags & TCP_FLG_SYN) == 0) … … 395 381 396 382 /* 397 * åä¿¡å¯è½ãª IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ã§ãããã¨ã確èªããã383 * 受信可能な IP アドレスとポート番号であることを確認する。 398 384 */ 399 385 if (!tcp_is_addr_accept(input, thoff)) 400 386 return RET_DROP; 401 387 402 /* ç¸æã®ã¢ãã¬ã¹ãè¨é²ããã*/388 /* 相手のアドレスを記録する。*/ 403 389 IN_COPY_TO_HOST(&cep->dstaddr.ipaddr, input); 404 390 cep->dstaddr.portno = tcph->sport; 405 391 406 /* ãªãã·ã§ã³ãå¦çããã*/392 /* オプションを処理する。*/ 407 393 parse_option(tcph, cep); 408 394 409 /* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/395 /* シーケンス番号を初期化する。*/ 410 396 if (tcp_iss == 0) 411 397 tcp_init_iss(); 412 398 413 /* èªåã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/399 /* 自分のシーケンス番号の初期値を記録する。*/ 414 400 if (iss != 0) 415 401 cep->iss = iss; … … 419 405 tcp_iss += TCP_ISS_INCR() / 4; 420 406 421 /* ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤ãè¨é²ããã*/407 /* 相手のシーケンス番号の初期値を記録する。*/ 422 408 cep->irs = tcph->seq; 423 409 424 /* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/410 /* 送受信シーケンス番号を初期化する。*/ 425 411 init_send_seq(cep); 426 412 init_receive_seq(cep); 427 413 428 /* éä¿¡ã¦ã¤ã³ããµã¤ãºãè¨å®ããã*/414 /* 送信ウインドサイズを設定する。*/ 429 415 cep->snd_wnd = tcph->win; 430 416 431 /* æçµè¨å®*/417 /* 最終設定 */ 432 418 cep->flags |= TCP_CEP_FLG_ACK_NOW; 433 419 cep->fsm_state = TCP_FSM_SYN_RECVD; … … 438 424 439 425 /* 440 * syn_sent -- è½åãªã¼ãã³ãã¦ãç¶æ 441 ã SYN éä¿¡æ¸ã®å¦ç 426 * syn_sent -- 能動オープンして、状態が SYN 送信済の処理 442 427 * 443 * æ»ãå¤:444 * RET_OK æ£å¸¸445 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã446 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã428 * 戻り値: 429 * RET_OK 正常 430 * RET_DROP エラー、セグメントを破棄する。 431 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 447 432 */ 448 433 … … 453 438 454 439 /* 455 * ç¸æããå信確èªãéããã¦æ¥ã¦ãã440 * 相手から受信確認が送られて来ても、 456 441 * 457 * ACK <= iss && éä¿¡ããæ大SEQ (snd_max) < ACK442 * ACK <= iss && 送信した最大 SEQ (snd_max) < ACK 458 443 * 459 * ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã444 * なら、リセットを送ってセグメントを破棄する。 460 445 */ 461 446 if ((tcph->flags & TCP_FLG_ACK) && … … 464 449 465 450 /* 466 * RST/ACK ãã©ã°ã®å¿çãããã°ããã¼ããéãã¦ããªã467 * ãã¨ãæå³ãã¦ããã451 * RST/ACK フラグの応答があれば、ポートが開いていない 452 * ことを意味している。 468 453 */ 469 454 if (tcph->flags & TCP_FLG_RST) { … … 476 461 477 462 /* 478 * SYN ãã©ã°ããªããã°ã»ã°ã¡ã³ããç ´æ£ããã463 * SYN フラグがなければセグメントを破棄する。 479 464 */ 480 465 if ((tcph->flags & TCP_FLG_SYN) == 0) 481 466 return RET_DROP; 482 467 483 cep->snd_wnd = tcph->win; /* snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº*/484 cep->irs = tcph->seq; /* irs: ç¸æã®ã·ã¼ã±ã³ã¹çªå·ã®åæå¤*/485 init_receive_seq(cep); /* éåä¿¡ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/468 cep->snd_wnd = tcph->win; /* snd_wnd: 相手の受信可能ウィンドサイズ */ 469 cep->irs = tcph->seq; /* irs: 相手のシーケンス番号の初期値 */ 470 init_receive_seq(cep); /* 送受信シーケンス番号を初期化する。 */ 486 471 487 472 if (tcph->flags & TCP_FLG_ACK) { 488 473 /* 489 * ACK ãã©ã°ãããã¨ãã®å¦ç474 * ACK フラグがあるときの処理 490 475 * 491 * åä¿¡ãæå¾ 492 ãã¦ããæ大㮠SEQ (rcv_adv) ã 493 * åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº (rcv_wnd) åé²ããã 494 */ 495 cep->rcv_adv += cep->rcv_wnd; /* rcv_adv: åä¿¡ãæå¾ 496 ãã¦ããæ大㮠SEQ */ 497 /* rcv_wnd: åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 498 499 /* æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã SYN å (1 ãªã¯ããã) é²ããã*/ 476 * 受信を期待している最大の SEQ (rcv_adv) を 477 * 受信可能なウィンドサイズ (rcv_wnd) 分進める。 478 */ 479 cep->rcv_adv += cep->rcv_wnd; /* rcv_adv: 受信を期待している最大の SEQ */ 480 /* rcv_wnd: 受信可能なウィンドサイズ */ 481 482 /* 未確認の最小送信 SEQ (snd_una) を SYN 分 (1 オクテット) 進める。*/ 500 483 cep->snd_una ++; 501 484 502 485 #ifdef TCP_CFG_DELAY_ACK 503 486 504 if (tcph->sum != 0) /* tcph->sum 㯠SDU é·*/487 if (tcph->sum != 0) /* tcph->sum は SDU 長 */ 505 488 cep->flags |= TCP_CEP_FLG_DEL_ACK; 506 489 else … … 515 498 if (cep->flags & TCP_CEP_FLG_NEED_FIN) { 516 499 /* 517 * CEP 㧠FIN éä¿¡ãè¦æ±ããã¦ããã°ã 518 * åæå¦çãéå§ãã 519 * CEP ã®ç¶æ 520 ã FIN Wait 1 ã«ããã 500 * CEP で FIN 送信が要求されていれば、 501 * 切断処理を開始し、 502 * CEP の状態を FIN Wait 1 にする。 521 503 */ 522 504 cep->fsm_state = TCP_FSM_FIN_WAIT_1; … … 526 508 else { 527 509 /* 528 * ç¸æãã ACK ãå¿çãããã®ã§ã 529 * CEP ã®ç¶æ 530 ã ã³ãã¯ã·ã§ã³éè¨å®äºç¶æ 531 ã«ããã 510 * 相手から ACK が応答されたので、 511 * CEP の状態を コネクション開設完了状態にする。 532 512 */ 533 513 cep->timer[TCP_TIM_KEEP] = TCP_TVAL_KEEP_IDLE; … … 540 520 if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) { 541 521 542 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/522 /* 相手のアドレスをコピーする。*/ 543 523 544 524 #if defined(_IP6_CFG) && defined(_IP4_CFG) … … 590 570 } 591 571 else { 592 /* ACK ãã©ã°ããªãã¨ãã¯ãACK ãéã£ã¦ãCEP ã®ç¶æ 593 ã SYN åä¿¡æ¸ã¿ã«ããã*/ 572 /* ACK フラグがないときは、ACK を送って、CEP の状態を SYN 受信済みにする。*/ 594 573 cep->flags |= TCP_CEP_FLG_ACK_NOW; 595 574 cep->timer[TCP_TIM_REXMT] = 0; … … 601 580 602 581 /* 603 * trim_length -- åä¿¡ãã SDU é·ã調æ´ããã582 * trim_length -- 受信した SDU 長を調整する。 604 583 */ 605 584 … … 608 587 { 609 588 tcph->seq ++; 610 if (tcph->sum > cep->rcv_wnd) { /* 注æ: tcph->sum 㯠SDU é·*/611 /* 612 * SDU é·ãåä¿¡ã¦ã£ã³ããµã¤ãºãã大ããã¨ãã¯ãåä¿¡ã¦ã£ã³ããµã¤ãºä»¥éã¯613 * ç ´æ£ããFIN ã«å¿çããªããã¨ã§ãç ´æ£ãããã¼ã¿ãåéãããã589 if (tcph->sum > cep->rcv_wnd) { /* 注意: tcph->sum は SDU 長 */ 590 /* 591 * SDU 長が受信ウィンドサイズより大きいときは、受信ウィンドサイズ以降は 592 * 破棄し、FIN に応答しないことで、破棄したデータを再送させる。 614 593 */ 615 594 tcph->sum = (uint16_t)cep->rcv_wnd; 616 595 tcph->flags &= ~TCP_FLG_FIN; 617 596 } 618 cep->snd_wl1 = tcph->seq - 1; /* cep->snd_wl1: ã¦ã£ã³ãæ´æ° SEQ çªå·*/597 cep->snd_wl1 = tcph->seq - 1; /* cep->snd_wl1: ウィンド更新 SEQ 番号 */ 619 598 620 599 #ifdef TCP_CFG_EXTENTIONS 621 cep->rcv_up = tcph->seq; /* cep->rcv_up : åä¿¡ããç·æ¥ãã¤ã³ã¿*/600 cep->rcv_up = tcph->seq; /* cep->rcv_up : 受信した緊急ポインタ */ 622 601 #endif 623 602 } 624 603 625 604 /* 626 * proc_ack2 -- ACK ã®å¦ç(2)605 * proc_ack2 -- ACK の処理 (2) 627 606 * 628 * æ»ãå¤607 * 戻り値 629 608 * 630 * RET_OK æ£å¸¸631 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã632 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã633 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã609 * RET_OK 正常 610 * RET_RETURN 正常、リターンする。 611 * RET_DROP エラー、セグメントを破棄する。 612 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 634 613 */ 635 614 … … 645 624 646 625 /* 647 * ç¸æã«å信確èªããã ACK ãããã¾ã 確èªããã¦ããªã648 * æå°éä¿¡ SEQ (snd_una) ãå¼ãã¨ãéä¿¡ã¦ã£ã³ããããã¡ãã649 * åé¤ãã¦ãããªã¯ãããæ° (acked) ã«ãªãã626 * 相手に受信確認された ACK から、まだ確認されていない 627 * 最小送信 SEQ (snd_una) を引くと、送信ウィンドバッファから 628 * 削除してよいオクテット数 (acked) になる。 650 629 */ 651 630 acked = tcph->ack - cep->snd_una; … … 653 632 654 633 /* 655 * å¾å¾©æéè¨æ¸¬ (rtt) ãè¨å®ããã¦ãã¦ãè¨æ¸¬éå§ SEQ ãã656 * å¾ã® ACK ãåä¿¡ããããã¿ã¤ãããã¯ãªãããã£ã³ã»ã«ãã657 * åéã¿ã¤ããåè¨å®ããã634 * 往復時間計測 (rtt) が設定されていて、計測開始 SEQ より 635 * 後の ACK を受信したら、タイマバックオフをキャンセルし、 636 * 再送タイマを再設定する。 658 637 */ 659 638 if (cep->rtt && SEQ_GT(tcph->ack, cep->rtseq)) { … … 662 641 663 642 /* 664 * å 665 ¨ã¦ã®æªç¢ºèªãã¼ã¿ã ACK ãããããåéã¿ã¤ããåæ¢ãã 666 * åéãè¨æ¶ãã (ããã«åºåãæç¶)ã 667 * ãããACK ãã¹ããããã«å¤ãã®ãã¼ã¿ããããªããåéã¿ã¤ãã« 668 * ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ããè¨å®ããã 669 */ 670 if (tcph->ack == cep->snd_max) { /* cep->snd_max: éä¿¡ããæ大 SEQ */ 643 * 全ての未確認データが ACK されたら、再送タイマを停止し、 644 * 再開を記憶する (さらに出力か持続)。 645 * もし、ACK すべき、さらに多くのデータがあるなら、再送タイマに 646 * 現在の再送タイムアウトを設定する。 647 */ 648 if (tcph->ack == cep->snd_max) { /* cep->snd_max: 送信した最大 SEQ */ 671 649 672 650 #ifdef TCP_CFG_SWBUF_CSAVE 673 651 674 652 /* 675 * éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã¯ã676 * éä¿¡æ¸ã¿ã§ãACKãå®äºããã¾ã§åéã¿ã¤ããå¤æ´ããªãã653 * 送信ウィンドバッファの省コピー機能が有効の場合は、 654 * 送信済みで、ACKが完了するまで再送タイマを変更しない。 677 655 */ 678 656 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_ACKED) … … 688 666 } 689 667 else if (cep->timer[TCP_TIM_PERSIST] == 0) { 690 cep->timer[TCP_TIM_REXMT] = cep->rxtcur; /* cep->rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã*/691 } 692 693 /* ç¸æãå信確èªãããã¼ã¿ãããã¨ãã®å¦ç*/668 cep->timer[TCP_TIM_REXMT] = cep->rxtcur; /* cep->rxtcur: 現在の再送タイムアウト */ 669 } 670 671 /* 相手が受信確認したデータがあるときの処理 */ 694 672 if (acked) { 695 uint32_t cw = cep->snd_cwnd; /* cep->snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº*/696 uint32_t incr = cep->maxseg; /* cep->maxseg: æ大ã»ã°ã¡ã³ããµã¤ãº*/697 698 /* 699 * æ°ãã«ç¸æãå信確èªãããã¼ã¿ããã£ãã¨ãã¯ã700 * 輻輳ã¦ã£ã³ããµã¤ãºã大ããããã701 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã702 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ãã大ããã¨ãã¯703 * 輻輳åé¿å¶å¾¡ãè¡ãã673 uint32_t cw = cep->snd_cwnd; /* cep->snd_cwnd: 輻輳ウィンドサイズ */ 674 uint32_t incr = cep->maxseg; /* cep->maxseg: 最大セグメントサイズ */ 675 676 /* 677 * 新たに相手が受信確認したデータがあったときは、 678 * 輻輳ウィンドサイズを大きくする。 679 * 輻輳ウィンドサイズ (snd_cwnd) が 680 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) より大きいときは 681 * 輻輳回避制御を行い。 704 682 * 705 683 * snd_cwnd = snd_cwnd + maxseg * maxseg / snd_cwnd; 706 684 * 707 * çãããå°ããã¨ãã¯ãã¹ãã¼ã¹ã¿ã¼ãå¶å¾¡ãè¡ãã685 * 等しいか小さいときは、スロースタート制御を行う。 708 686 * 709 687 * snd_cwnd = snd_cwnd + maxseg … … 711 689 */ 712 690 if (cw > cep->snd_ssthresh) 713 /* 輻輳åé¿å¶å¾¡*/691 /* 輻輳回避制御 */ 714 692 incr = incr * incr / cw; 715 693 … … 720 698 721 699 /* 722 * éä¿¡ã¦ã£ã³ããããã¡ãããç¸æãå信確èªãããã¼ã¿æ° (acked) ã®ãã¼ã¿ãåé¤ããã700 * 送信ウィンドバッファから、相手が受信確認したデータ数 (acked) のデータを削除する。 723 701 */ 724 702 if (acked > cep->swbuf_count) { … … 733 711 } 734 712 735 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/713 /* 送信ウィンドバッファに空きができたことを知らせる。*/ 736 714 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 737 715 738 716 /* 739 * éé確èªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ã740 * ä»åéé確èªããã ACK ã¾ã§é²ãã741 * 次ã®éä¿¡ãã¼ã¿ã® SEQ (snd_nxt) ããæ°ãã742 * éé確èªããã¦ããªãæå°éä¿¡SEQ (snd_una)743 * ã¾ã§é²ããã717 * 送達確認されていない最小送信 SEQ (snd_una) を 718 * 今回送達確認された ACK まで進め、 719 * 次の送信データの SEQ (snd_nxt) も、新しい 720 * 送達確認されていない最小送信 SEQ (snd_una) 721 * まで進める。 744 722 */ 745 723 cep->snd_una += acked; … … 748 726 749 727 /* 750 * ç¶æ 751 ã«ããåå² 728 * 状態により分岐 752 729 */ 753 730 switch (cep->fsm_state) { 754 case TCP_FSM_FIN_WAIT_1: /* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾ 755 ã¡ */ 731 case TCP_FSM_FIN_WAIT_1: /* APP が終了、FIN 送信済み、ACK 待ち */ 756 732 if (ourfinisacked) { 757 733 cep->fsm_state = TCP_FSM_FIN_WAIT_2; … … 759 735 } 760 736 break; 761 case TCP_FSM_CLOSING: /* åæã¯ãã¼ãºãFIN 交ææ¸ã¿ãACK å¾ 762 ã¡ */ 737 case TCP_FSM_CLOSING: /* 同時クローズ、FIN 交換済み、ACK 待ち */ 763 738 if (ourfinisacked) { 764 739 /* 765 * éä¿¡ãã FIN ã確èªããã¦ããã°ç¶æ 766 ãå¤æ´ãã 767 * ãã¹ã¦ã®ã¿ã¤ãããªã»ããããå¾ã2MSL ã¿ã¤ããè¨å®ããã 740 * 送信した FIN が確認されていれば状態を変更し、 741 * すべてのタイマをリセットした後、2MSL タイマを設定する。 768 742 */ 769 743 cep->fsm_state = TCP_FSM_TIME_WAIT; … … 772 746 } 773 747 break; 774 case TCP_FSM_LAST_ACK: /* APP ãçµäºãACK å¾ 775 ã¡ */ 748 case TCP_FSM_LAST_ACK: /* APP が終了、ACK 待ち */ 776 749 if (ourfinisacked) { 777 750 /* 778 * éä¿¡ãã FIN ã確èªããã¦ããã°ãcep ãã¯ãã¼ãºãã779 * ã»ã°ã¡ã³ããç ´æ£ããã751 * 送信した FIN が確認されていれば、cep をクローズし、 752 * セグメントを破棄する。 780 753 */ 781 754 cep = tcp_close(cep); … … 783 756 } 784 757 break; 785 case TCP_FSM_TIME_WAIT: /* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾ 786 ã¡ */ 758 case TCP_FSM_TIME_WAIT: /* 相手からの FIN 受信済み、時間待ち */ 787 759 /* 788 * ç¸æãã FIN ãåéããããããä¸åº¦2MSL ã¿ã¤ããè¨å®ãã789 * ACK éä¿¡å¾ãã»ã°ã¡ã³ããç ´æ£ããã760 * 相手から FIN が再送された。もう一度2MSL タイマを設定し、 761 * ACK 送信後、セグメントを破棄する。 790 762 */ 791 763 cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL; … … 798 770 799 771 /* 800 * proc_ack1 -- ACK ã®å¦ç(1)772 * proc_ack1 -- ACK の処理 (1) 801 773 * 802 * æ»ãå¤:803 * RET_OK æ£å¸¸804 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã805 * RET_DROP ã¨ã©ã¼ãã»ã°ã¡ã³ããç ´æ£ããã806 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã774 * 戻り値: 775 * RET_OK 正常 776 * RET_RETURN 正常、リターンする。 777 * RET_DROP エラー、セグメントを破棄する。 778 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 807 779 * 808 780 */ … … 814 786 815 787 switch (cep->fsm_state) { 816 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿ */ 817 818 /* ç¶æ 819 ãå¤æ´ããã*/ 788 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 789 790 /* 状態を変更する。*/ 820 791 if (cep->flags & TCP_CEP_FLG_NEED_FIN) { 821 792 cep->fsm_state = TCP_FSM_FIN_WAIT_1; … … 826 797 cep->fsm_state = TCP_FSM_ESTABLISHED; 827 798 828 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/799 /* TCP 通信端点からTCP 受付口を解放する。*/ 829 800 cep->rep = NULL; 830 801 … … 839 810 if (cep->rcv_nblk_tfn == TFN_TCP_ACP_CEP) { 840 811 841 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/812 /* 相手のアドレスをコピーする。*/ 842 813 843 814 #if defined(_IP6_CFG) && defined(_IP4_CFG) … … 889 860 if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) { 890 861 891 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/862 /* 相手のアドレスをコピーする。*/ 892 863 893 864 #if defined(_IP6_CFG) && defined(_IP4_CFG) … … 951 922 952 923 /* 953 * SDU ããªã FIN ãã¤ãã¦ããªããã°ãtcp_move_ra2rw() ãå¼åºãã954 */ 955 if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0) /* tcph->sum 㯠SDU é·*/924 * SDU がなく FIN がついていなければ、tcp_move_ra2rw() を呼出す。 925 */ 926 if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0) /* tcph->sum は SDU 長 */ 956 927 tcph->flags = tcp_move_ra2rw(cep, tcph->flags); 957 928 958 cep->snd_wl1 = tcph->seq - 1; /* snd_wl1: ã¦ã£ã³ãæ´æ°SEQ */959 960 /* break; ä¸ã«è½ã¡ãã*/929 cep->snd_wl1 = tcph->seq - 1; /* snd_wl1: ウィンド更新 SEQ */ 930 931 /* break; 下に落ちる。*/ 961 932 962 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº */ 963 case TCP_FSM_FIN_WAIT_1: /* çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 964 case TCP_FSM_FIN_WAIT_2: /* çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 965 ã¡*/ 966 case TCP_FSM_CLOSE_WAIT: /* FIN åä¿¡ãã¯ãã¼ãºå¾ 967 ã¡ */ 968 case TCP_FSM_CLOSING: /* çµäºãFIN 交ææ¸ã¿ãACK å¾ 969 ã¡ */ 970 case TCP_FSM_LAST_ACK: /* FIN åä¿¡ãçµäºãACK å¾ 971 ã¡ */ 972 case TCP_FSM_TIME_WAIT: /* çµäºãæéå¾ 973 ã¡ */ 933 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 934 case TCP_FSM_FIN_WAIT_1: /* 終了して、FIN 送信済み */ 935 case TCP_FSM_FIN_WAIT_2: /* 終了、FIN 伝達確認受信、FIN待ち*/ 936 case TCP_FSM_CLOSE_WAIT: /* FIN 受信、クローズ待ち */ 937 case TCP_FSM_CLOSING: /* 終了、FIN 交換済み、ACK 待ち */ 938 case TCP_FSM_LAST_ACK: /* FIN 受信、終了、ACK 待ち */ 939 case TCP_FSM_TIME_WAIT: /* 終了、時間待ち */ 974 940 975 941 if (SEQ_LE(tcph->ack, cep->snd_una)) { 976 942 977 943 /* 978 * åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) ã¨åãã以åã®ã¨ãã®å¦ç979 * ã¤ã¾ããå¤éã« ACK ãåä¿¡ãããã¨ãæå³ãã¦ããã944 * 受信確認 ACK が 未確認の最小送信 SEQ (snd_una) と同じか以前のときの処理 945 * つまり、多重に ACK を受信したことを意味している。 980 946 */ 981 947 982 if (tcph->sum == 0 && tcph->win == cep->snd_wnd) { /* tcph->sum 㯠SDU é·*/948 if (tcph->sum == 0 && tcph->win == cep->snd_wnd) { /* tcph->sum は SDU 長 */ 983 949 984 950 /* 985 * SDU ããªããç¸æã®ã¦ã£ã³ããµã¤ãºãå¤æ´ããã¦ããªããã°ã986 * ãã§ã«éä¿¡ããã»ã°ã¡ã³ãã®ä¸ã§ãACK (tcph->ack) ã¨987 * åã SEQ ããå§ã¾ãã»ã°ã¡ã³ãããéä¸ã§æ¶å¤±ããå¯è½æ§ãããã988 * ãã®å ´åã¯ãé«éå転éã¨é«éãªã«ããªãè¡ãã951 * SDU がなく、相手のウィンドサイズが変更されていなければ、 952 * すでに送信したセグメントの中で、ACK (tcph->ack) と 953 * 同じ SEQ から始まるセグメントが、途中で消失した可能性がある。 954 * この場合は、高速再転送と高速リカバリを行う。 989 955 */ 990 956 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DUP_ACKS], 1); … … 993 959 994 960 /* 995 * åéã¿ã¤ããã»ããããã¦ããªãã¨ãã996 * ã¾ãã¯ãACK (tcph->ack) ã¨æªç¢ºèªã®æå°éä¿¡ SEQã997 * ä¸è´ããªãã¨ãã¯ãå¤é ACK æ°ã 0 ã«ããã961 * 再送タイマがセットされていないとき、 962 * または、ACK (tcph->ack) と未確認の最小送信 SEQが 963 * 一致しないときは、多重 ACK 数を 0 にする。 998 964 */ 999 965 cep->dupacks = 0; … … 1003 969 1004 970 /* 1005 * å¤é ACK æ°ããããå¤ (æ¨æº 3) ã«ãªã£ãã1006 * é«éå転éå¦çãéå§ããã971 * 多重 ACK 数がしきい値 (標準 3) になったら 972 * 高速再転送処理を開始する。 1007 973 */ 1008 974 uint_t win; 1009 975 1010 976 /* 1011 * 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã®ãããå¤ãè¨å®ããã977 * 輻輳ウィンドサイズ(snd_cwnd)のしきい値を設定する。 1012 978 * 1013 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã1014 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã® 1/2ã1015 * ãã ãã2 * maxseg 以ä¸ã979 * 相手の受信可能ウィンドサイズ (snd_wnd) か 980 * 輻輳ウィンドサイズ (snd_cwnd) の 1/2。 981 * ただし、2 * maxseg 以上。 1016 982 * 1017 983 */ … … 1024 990 cep->snd_ssthresh = win * cep->maxseg; 1025 991 1026 /* åéã¿ã¤ãã¨å¾å¾©æéããªã»ããããã*/992 /* 再送タイマと往復時間をリセットする。*/ 1027 993 cep->timer[TCP_TIM_REXMT] = 0; 1028 994 cep->rtt = 0; 1029 995 1030 /* æ¶å¤±ããã»ã°ã¡ã³ããéä¿¡ããã*/996 /* 消失したセグメントを送信する。*/ 1031 997 cep->snd_old_nxt = cep->snd_nxt; 1032 998 cep->snd_nxt = tcph->ack; … … 1034 1000 1035 1001 /* 1036 * snd_nxt ãå 1037 ã«æ»ãããã«è¨å®ã㦠1038 * éä¿¡ãæ示ããã 1002 * snd_nxt を元に戻すように設定して 1003 * 送信を指示する。 1039 1004 */ 1040 1005 cep->flags |= TCP_CEP_FLG_POST_OUTPUT | … … 1044 1009 sig_sem(SEM_TCP_POST_OUTPUT); 1045 1010 1046 /* 輻輳ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/1011 /* 輻輳ウィンドサイズを更新する。*/ 1047 1012 cep->snd_cwnd = (uint16_t)(cep->snd_ssthresh 1048 1013 + cep->maxseg * cep->dupacks); … … 1054 1019 1055 1020 /* 1056 * å¤é ACK æ°ããããå¤ (æ¨æº 3) ãè¶ 1057 ããã 1058 * 輻輳ã¦ã£ã³ããµã¤ãºãå¢å ããªããåéããã 1021 * 多重 ACK 数がしきい値 (標準 3) を超えたら 1022 * 輻輳ウィンドサイズを増加しながら再送する。 1059 1023 */ 1060 1024 cep->snd_cwnd += cep->maxseg; 1061 1025 1062 /* éä¿¡ãæ示ããã*/1026 /* 送信を指示する。*/ 1063 1027 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1064 1028 sig_sem(SEM_TCP_POST_OUTPUT); … … 1073 1037 1074 1038 /* 1075 * åä¿¡ç¢ºèª ACK ã æªç¢ºèªã®æå°éä¿¡ SEQ (snd_una) 以éã®ã¨ãã®å¦ç1039 * 受信確認 ACK が 未確認の最小送信 SEQ (snd_una) 以降のときの処理 1076 1040 */ 1077 1041 if (cep->dupacks >= MAX_TCP_REXMT_THRESH && cep->snd_cwnd > cep->snd_ssthresh) 1078 1042 /* 1079 * é«éå転éãè¡ã£ã¦ããã¨ãã¯ã輻輳ã¦ã£ã³ããµã¤ãºããããå¤ã¾ã§æ»ãã1043 * 高速再転送を行っていたときは、輻輳ウィンドサイズをしきい値まで戻す。 1080 1044 */ 1081 1045 cep->snd_cwnd = (uint16_t)cep->snd_ssthresh; … … 1085 1049 if (SEQ_GT(tcph->ack, cep->snd_max)) 1086 1050 /* 1087 * åä¿¡ãã ACK ãéä¿¡ããæ大 SEQ ãè¶ 1088 ãã¦ããã¨ãã®å¦ç 1051 * 受信した ACK が送信した最大 SEQ を超えていたときの処理 1089 1052 */ 1090 1053 return drop_after_ack(input, cep, thoff); … … 1092 1055 if (cep->flags & TCP_CEP_FLG_NEED_SYN) { 1093 1056 /* 1094 * SYN éä¿¡è¦æ±ãåãæ¶ãã¦ãæªç¢ºèªã®æå°éä¿¡ SEQ ãé²ããã1057 * SYN 送信要求を取り消して、未確認の最小送信 SEQ を進める。 1095 1058 */ 1096 1059 cep->flags &= ~TCP_CEP_FLG_NEED_SYN; … … 1105 1068 1106 1069 /* 1107 * update_wnd -- ã¦ã£ã³ããµã¤ãºãæ´æ°ããã1070 * update_wnd -- ウィンドサイズを更新する。 1108 1071 * 1109 * æ»ãå¤: éä¿¡ãå¿ 1110 è¦ãªã true ãè¿ãã 1072 * 戻り値: 送信が必要なら true を返す。 1111 1073 */ 1112 1074 … … 1116 1078 1117 1079 /* 1118 * æ´æ°æ¡ä»¶1080 * 更新条件 1119 1081 * 1120 * ACK ãã©ã°ãã»ããããã¦ãã&&1121 * ( ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ããå||1122 * ååã¦ã£ã³ããæ´æ°ãã SEQ (snd_wl1) ã SEQ ã¨åã&&1123 * ( ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ããå||1124 * ( ååã¦ã£ã³ããæ´æ°ãã ACK (snd_wl2) ã ACK ã¨åã&&1125 * WIN ãç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã大ãã1082 * ACK フラグがセットされている && 1083 * (前回ウィンドを更新した SEQ (snd_wl1) が SEQ より前 || 1084 * 前回ウィンドを更新した SEQ (snd_wl1) が SEQ と同じ && 1085 * (前回ウィンドを更新した ACK (snd_wl2) が ACK より前 || 1086 * (前回ウィンドを更新した ACK (snd_wl2) が ACK と同じ && 1087 * WIN が相手の受信可能ウィンドサイズ (snd_wnd) より大きい 1126 1088 * ) 1127 1089 * ) … … 1139 1101 1140 1102 if (cep->snd_wnd > cep->max_sndwnd) 1141 /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãºãæ´æ°ããã*/1103 /* 今までの最大送信ウィンドサイズを更新する。*/ 1142 1104 cep->max_sndwnd = cep->snd_wnd; 1143 1105 … … 1147 1109 1148 1110 /* 1149 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ä¸ã§ã 1150 * ç¸æã®åä¿¡ã¦ã£ã³ãã空ãã®ãå¾ 1151 ã£ã¦ããã¨ãã®å¦ç 1111 * 送信ウィンドバッファ用のネットワークバッファ割り当て中で、 1112 * 相手の受信ウィンドが空くのを待っているときの処理 1152 1113 */ 1153 1114 if (cep->snd_wnd > 0) { 1154 1115 1155 1116 /* 1156 * ç¸æã®åä¿¡ã¦ã£ã³ãã空ããã¨ãã¯ã1157 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡å²ãå½ã¦ãåéããã1117 * 相手の受信ウィンドが空いたときは、 1118 * 送信ウィンドバッファ用のネットワークバッファ割り当てを再開する。 1158 1119 */ 1159 1120 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) … … 1172 1133 1173 1134 /* 1174 * proc_urg -- ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç1135 * proc_urg -- 緊急データつきのセグメントの処理 1175 1136 */ 1176 1137 … … 1183 1144 TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) { 1184 1145 1185 /* ç·æ¥ãã¼ã¿ã¤ãã®ã»ã°ã¡ã³ãã®å¦ç*/1146 /* 緊急データつきのセグメントの処理 */ 1186 1147 1187 1148 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_URG_SEGS], 1); … … 1189 1150 1190 1151 /* 1191 * ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ãåä¿¡ã¦ã£ã³ããããã¡ã® 1192 * ç¯å²ãè¶ 1193 ããã¨ãã¯ä½ãããªãã 1152 * 緊急ポインタの位置が受信ウィンドバッファの 1153 * 範囲を超えるときは何もしない。 1194 1154 */ 1195 1155 tcph->urp = 0; … … 1198 1158 1199 1159 if (SEQ_GT(tcph->seq + tcph->urp, cep->rcv_up)) 1200 /* ç·æ¥ãã¤ã³ã¿ãæ´æ°ãããã¨ãã®å¦ç*/1160 /* 緊急ポインタが更新されたときの処理 */ 1201 1161 cep->rcv_up = tcph->seq + tcph->urp; 1202 1162 1203 if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1163 if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1204 1164 1205 1165 /* 1206 * ç·æ¥ãã¤ã³ã¿ã®ä½ç½®ããä»ååä¿¡ããã»ã°ã¡ã³ãå 1207 ã®å ´åã¯ã 1208 * ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã 1166 * 緊急ポインタの位置が、今回受信したセグメント内の場合は、 1167 * コールバック関数を呼び出す。 1209 1168 */ 1210 1169 cep->urg_tcph = tcph; … … 1229 1188 1230 1189 if (cep->urg_tcph != NULL) { 1231 /* ã³ã¼ã«ããã¯é¢æ°å 1232 㧠tcp_rcv_oob() ãå¼åºããªãã£ãã*/ 1190 /* コールバック関数内で tcp_rcv_oob() を呼出さなかった。*/ 1233 1191 cep->urg_tcph = NULL; 1234 1192 tcph->urp = 0; … … 1236 1194 else { 1237 1195 /* 1238 * ã³ã¼ã«ããã¯é¢æ°å 1239 㧠tcp_rcv_oob() ãå¼åºããæã¯ã 1240 * SDU é·ã®è£æ£å¤ãè¨å®ããã 1196 * コールバック関数内で tcp_rcv_oob() を呼出した時は、 1197 * SDU 長の補正値を設定する。 1241 1198 */ 1242 1199 tcph->urp = 1; … … 1265 1222 1266 1223 /* 1267 * drop_after_ack -- åä¿¡ã»ã°ã¡ã³ããç ´æ£ããå¾ãACK ãè¿ã (注æ: ååã¨ã¯åã£ã¦ããªã)ã1224 * drop_after_ack -- 受信セグメントを破棄した後、ACK を返す (注意: 名前とは合っていない)。 1268 1225 * 1269 * æ»ãå¤:1270 * RET_RETURN æ£å¸¸ããªã¿ã¼ã³ããã1271 * RET_RST_DROP ã¨ã©ã¼ãRST ãéä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã1226 * 戻り値: 1227 * RET_RETURN 正常、リターンする。 1228 * RET_RST_DROP エラー、RST を送信し、セグメントを破棄する。 1272 1229 */ 1273 1230 … … 1278 1235 1279 1236 /* 1280 * SYN åä¿¡ç¶æ 1281 ã§ãACK ãéé確èªããã¦ããªãæå°éä¿¡ SEQ (snd_una) ãã 1282 * åã®å¤ããéä¿¡ãããæ大 SEQ (snd_max) ããå¾ã®å¤ã®å ´åã¯ãç¸æã« RST ã 1283 * éã£ã¦çµäºãããããã¯ã"LAND" DoS æ»æã¸ã®é²å¾¡ã§ãããå½é ããã SYN 1284 * ã»ã°ã¡ã³ããéä¿¡ãã¤ã¥ãããã¼ãéã§ã® ACK ã¹ãã¼ã ãé²ãã 1237 * SYN 受信状態で、ACK が送達確認されていない最小送信 SEQ (snd_una) より 1238 * 前の値か、送信された最大 SEQ (snd_max) より後の値の場合は、相手に RST を 1239 * 送って終了する。これは、"LAND" DoS 攻撃への防御であり、偽造された SYN 1240 * セグメントを送信しつづけるポート間での ACK ストームを防ぐ。 1285 1241 */ 1286 1242 if (cep->fsm_state == TCP_FSM_SYN_RECVD && (tcph->flags & TCP_FLG_ACK) && … … 1291 1247 syscall(rel_net_buf(input)); 1292 1248 1293 /* éä¿¡ãæ示ããã*/1249 /* 送信を指示する。*/ 1294 1250 cep->flags |= TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_POST_OUTPUT; 1295 1251 sig_sem(SEM_TCP_POST_OUTPUT); … … 1298 1254 1299 1255 /* 1300 * close_connection -- ã³ãã¯ã·ã§ã³éæ¾å¦çãç¸æãã FIN ãåä¿¡ããã1256 * close_connection -- コネクション開放処理、相手から FIN を受信した。 1301 1257 */ 1302 1258 … … 1323 1279 1324 1280 switch (cep->fsm_state) { 1325 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/1326 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº*/1281 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 1282 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 1327 1283 cep->fsm_state = TCP_FSM_CLOSE_WAIT; 1328 1284 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_RWBUF_READY)); 1329 1285 break; 1330 1286 1331 case TCP_FSM_FIN_WAIT_1: /* APP ãçµäºãFIN éä¿¡æ¸ã¿ãACK å¾ 1332 ã¡ */ 1287 case TCP_FSM_FIN_WAIT_1: /* APP が終了、FIN 送信済み、ACK 待ち */ 1333 1288 cep->fsm_state = TCP_FSM_CLOSING; 1334 1289 break; 1335 1290 1336 case TCP_FSM_FIN_WAIT_2: /* ç¸æããã® FIN å¾ 1337 ã¡ */ 1291 case TCP_FSM_FIN_WAIT_2: /* 相手からの FIN 待ち */ 1338 1292 cep->fsm_state = TCP_FSM_TIME_WAIT; 1339 1293 tcp_cancel_timers(cep); … … 1341 1295 1342 1296 /* 1343 * FIN WAIT 2 ç¶æ 1344 ã§ã¯ã 1345 * åä¿¡ã¯å¯è½ã§ãããããã§ã«éä¿¡ã¯çµäºãã¦ããã 1346 * ç¸æã®éä¿¡ãçµäºããã®ã§ãå 1347 ¥åã¿ã¹ã¯ã®ã¿èµ·åºããã 1297 * FIN WAIT 2 状態では、 1298 * 受信は可能であるが、すでに送信は終了している。 1299 * 相手の送信も終了したので、入力タスクのみ起床する。 1348 1300 */ 1349 1301 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 1351 1303 #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 1352 1304 1353 /* ç¸æããã® FIN ã«å¯¾ãã¦å¿çãè¿ãã*/1305 /* 相手からの FIN に対して応答を返す。*/ 1354 1306 tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una, 1355 1307 cep->rbufsz - cep->rwbuf_count, TCP_FLG_ACK); … … 1358 1310 1359 1311 /* 1360 * å¿ 1361 è¦ãªæ 1362 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 1363 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 1312 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 1313 * 標準の TCP 通信端点を開放する。 1364 1314 */ 1365 1315 tcp_move_twcep(cep); … … 1369 1319 break; 1370 1320 1371 case TCP_FSM_TIME_WAIT: /* ç¸æããã® FIN åä¿¡æ¸ã¿ãæéå¾ 1372 ã¡ */ 1321 case TCP_FSM_TIME_WAIT: /* 相手からの FIN 受信済み、時間待ち */ 1373 1322 cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL; 1374 1323 break; … … 1377 1326 1378 1327 /* 1379 * tcp_input -- TCP ã®å 1380 ¥åé¢æ° 1328 * tcp_input -- TCP の入力関数 1381 1329 * 1382 * 注æ: input ã«ã¯ IF ããã㨠IP ããããå 1383 é ã«ããã 1330 * 注意: input には IF ヘッダと IP ヘッダが先頭にある。 1384 1331 */ 1385 1332 … … 1407 1354 NET_COUNT_MIB(tcp_stats.tcpInSegs, 1); 1408 1355 1409 /* ãããé·ããã§ãã¯ããã*/1356 /* ヘッダ長をチェックする。*/ 1410 1357 if (input->len < IF_IP_TCP_HDR_SIZE(input)) { 1411 1358 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1); … … 1415 1362 tcph = GET_TCP_HDR(input, *offp); 1416 1363 1417 seglen = input->len - *offp; /* TCP ã®ã»ã°ã¡ã³ãé·*/1364 seglen = input->len - *offp; /* TCP のセグメント長 */ 1418 1365 1419 1366 if (IN_CKSUM(input, IPPROTO_TCP, *offp, (uint_t)seglen) != 0) { … … 1422 1369 } 1423 1370 1424 /* TCP ãããé·ããã§ãã¯ããã*/1371 /* TCP ヘッダ長をチェックする。*/ 1425 1372 if (TCP_HDR_LEN(tcph->doff) < TCP_HDR_SIZE || TCP_HDR_LEN(tcph->doff) > seglen) { 1426 1373 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1); 1427 1374 goto drop; 1428 1375 } 1429 tcph->sum = seglen - TCP_HDR_LEN(tcph->doff); /* ãããã tcph->sum 㯠TCP ã® SDU é·*/1376 tcph->sum = seglen - TCP_HDR_LEN(tcph->doff); /* ここから tcph->sum は TCP の SDU 長 */ 1430 1377 1431 1378 /* 1432 * SYN 㨠FIN ã®ä¸¡ããããã»ããããã¦ããã°ç ´æ£ãããnmap çã®å¯¾ç1433 * ãã ããRFC1644 T/TCP æ¡å¼µæ©è½ã¨ç«¶åããã1379 * SYN と FIN の両ビットがセットされていれば破棄する。nmap 等の対策 1380 * ただし、RFC1644 T/TCP 拡張機能と競合する。 1434 1381 */ 1435 1382 if ((tcph->flags & (TCP_FLG_SYN | TCP_FLG_FIN)) == (TCP_FLG_SYN | TCP_FLG_FIN)) 1436 1383 goto drop; 1437 1384 1438 /* ãããã¯ã¼ã¯ãªã¼ãã¼ãããã¹ããªã¼ãã¼ã«å¤æããã*/1385 /* ネットワークオーダーからホストオーダーに変換する。*/ 1439 1386 1440 1387 NTOHL(tcph->seq); … … 1445 1392 NTOHS(tcph->dport); 1446 1393 1447 /* SDU é· ãã ç·æ¥ãã¤ã³ã¿ã大ããå ´å*/1394 /* SDU 長 より 緊急ポインタが大きい場合 */ 1448 1395 if (tcph->urp > tcph->sum) 1449 1396 goto drop; … … 1454 1401 1455 1402 /* 1456 * ç¶æ 1457 ã Time Wait ä¸ã® CEP ãæ¢ç´¢ããã 1403 * 状態が Time Wait 中の CEP を探索する。 1458 1404 */ 1459 1405 twcep = tcp_find_twcep(input, *offp); 1460 1406 if (twcep != NULL) { 1461 1407 1462 if (tcph->flags & TCP_FLG_RST) /* RST ãã©ã°ãåä¿¡ããã¨ãã¯ç¡è¦ããã*/1408 if (tcph->flags & TCP_FLG_RST) /* RST フラグを受信したときは無視する。*/ 1463 1409 goto drop; 1464 1410 else { 1465 1411 1466 1412 /* 1467 * TCP é信端ç¹ã Time Wait ã®æãç¸æãã¹ãããã»ã°ã¡ã³ããæ¥ãã¨ãã¯ã1468 * ç¸æãã¹ãã® FIN ã«å¯¾ããèªãã¹ãã® ACK ã»ã°ã¡ã³ããéä¸ã§1469 * æ失ãããã¨ãæå³ãã¦ããã®ã§ãACK ã»ã°ã¡ã³ããåéããã1413 * TCP 通信端点が Time Wait の時、相手ホストからセグメントが来たときは、 1414 * 相手ホストの FIN に対する自ホストの ACK セグメントが途中で 1415 * 損失したことを意味しているので、ACK セグメントを再送する。 1470 1416 */ 1471 1417 1472 /* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/1418 /* ホストオーダーからネットワークオーダーに戻す。*/ 1473 1419 HTONS(tcph->sport); 1474 1420 HTONS(tcph->dport); … … 1479 1425 } 1480 1426 else 1481 /* æ¨æºã® TCP é信端ç¹ãå¾ãã*/1427 /* 標準の TCP 通信端点を得る。*/ 1482 1428 cep = tcp_find_cep(input, *offp); 1483 1429 1484 1430 #else /* of #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 */ 1485 1431 1486 /* TCP é信端ç¹ãå¾ãã*/1432 /* TCP 通信端点を得る。*/ 1487 1433 cep = tcp_find_cep(input, *offp); 1488 1434 … … 1490 1436 1491 1437 /* 1492 * TCP é信端ç¹ããªãå ´å㨠CEP ã®ç¶æ 1493 ãã¯ãã¼ãºãªãç ´æ£ããã 1438 * TCP 通信端点がない場合と CEP の状態がクローズなら破棄する。 1494 1439 */ 1495 1440 if (cep == NULL) { … … 1509 1454 1510 1455 /* 1511 * ã³ãã¯ã·ã§ã³éè¨æ¸ã¿ã§ã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã1512 * ã¢ã¤ãã«æéã¨çå確èªã¿ã¤ãããªã»ããããã1456 * コネクション開設済みでセグメントを受信したときは、 1457 * アイドル時間と生存確認タイマをリセットする。 1513 1458 */ 1514 1459 cep->idle = 0; … … 1517 1462 } 1518 1463 1519 /* CEP ã®ç¶æ 1520 ã LISTEN 以å¤ã®æã¯ããªãã·ã§ã³ãå¦çããã*/ 1464 /* CEP の状態が LISTEN 以外の時は、オプションを処理する。*/ 1521 1465 if (cep->fsm_state != TCP_FSM_LISTEN) 1522 1466 parse_option(tcph, cep); 1523 1467 1524 1468 /* 1525 * åä¿¡å¯è½ã¦ã£ã³ããµã¤ãºãè¨ç®ããã1469 * 受信可能ウィンドサイズを計算する。 1526 1470 * 1527 * rcv_nxt: åä¿¡ãæå¾ 1528 ãã¦ããæå°ã® SEQï¼ãã以åã¯åä¿¡æ¸ã¿ï¼ 1529 * rcv_adv: åä¿¡ãæå¾ 1530 ãã¦ããæ大㮠SEQ 1531 * rbufsz: åä¿¡ã¦ã£ã³ããããã¡ãµã¤ãº 1532 * rwbuf_count: åä¿¡ã¦ã£ã³ããããã¡ã«ãããã¼ã¿é 1533 * tcph->sum: ä»ååä¿¡ãã SDU ãµã¤ãº 1471 * rcv_nxt: 受信を期待している最小の SEQ(これ以前は受信済み) 1472 * rcv_adv: 受信を期待している最大の SEQ 1473 * rbufsz: 受信ウィンドバッファサイズ 1474 * rwbuf_count: 受信ウィンドバッファにあるデータ量 1475 * tcph->sum: 今回受信した SDU サイズ 1534 1476 * 1535 * ä»ååä¿¡ããã»ã°ã¡ã³ããé åºæ´åãã¥ã¼ã«é£çµãã 1536 * å¯è½æ§ãããã®ã§ tcph->sum ãèæ 1537 ®ããã 1477 * 今回受信したセグメントを順序整列キューに連結する 1478 * 可能性があるので tcph->sum を考慮する。 1538 1479 * 1539 1480 */ … … 1546 1487 cep->rcv_wnd = cep->rcv_adv - cep->rcv_nxt; 1547 1488 1548 /* CEP ã®ç¶æ 1549 ã«ããå¦çãè¡ãã*/ 1550 1551 if (cep->fsm_state == TCP_FSM_LISTEN) { /* ååãªã¼ãã³ (LISTEN) ã®å¦çã*/ 1489 /* CEP の状態により処理を行う。*/ 1490 1491 if (cep->fsm_state == TCP_FSM_LISTEN) { /* 受動オープン (LISTEN) の処理。*/ 1552 1492 if ((ret = listening(input, cep, *offp, iss)) == RET_RST_DROP) 1553 1493 goto reset_drop; 1554 1494 else if (ret == RET_DROP) 1555 1495 goto drop; 1556 trim_length(tcph, cep); /* åä¿¡ãã SDU é·ã調æ´ããã*/1557 1558 if (tcph->flags & TCP_FLG_ACK) { /* ACK ãã©ã°ã®å¦ç*/1496 trim_length(tcph, cep); /* 受信した SDU 長を調整する。*/ 1497 1498 if (tcph->flags & TCP_FLG_ACK) { /* ACK フラグの処理 */ 1559 1499 if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP) 1560 1500 goto drop; … … 1565 1505 } 1566 1506 } 1567 else if (cep->fsm_state == TCP_FSM_SYN_SENT) { /* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿*/1507 else if (cep->fsm_state == TCP_FSM_SYN_SENT) { /* 能動オープン、SYN 送信済み */ 1568 1508 if ((ret = syn_sent(tcph, cep)) == RET_RST_DROP) 1569 1509 goto reset_drop; 1570 1510 else if (ret == RET_DROP) 1571 1511 goto drop; 1572 trim_length(tcph, cep); /* åä¿¡ãã SDU é·ã調æ´ããã*/1573 1574 if (tcph->flags & TCP_FLG_ACK) { /* ACK ãã©ã°ã®å¦ç*/1512 trim_length(tcph, cep); /* 受信した SDU 長を調整する。*/ 1513 1514 if (tcph->flags & TCP_FLG_ACK) { /* ACK フラグの処理 */ 1575 1515 if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP) 1576 1516 goto drop; … … 1582 1522 } 1583 1523 else { 1584 if (cep->fsm_state == TCP_FSM_SYN_RECVD) { /* SYN ãåä¿¡ãSYN éä¿¡æ¸ã¿*/1524 if (cep->fsm_state == TCP_FSM_SYN_RECVD) { /* SYN を受信、SYN 送信済み */ 1585 1525 /* 1586 * ç¸æããå信確èªãéããã¦æ¥ã¦ãã1526 * 相手から受信確認が送られて来ても、 1587 1527 * 1588 * ACK <= æªç¢ºèªã®æå°éä¿¡SEQ (snd_una) &&1589 * éä¿¡ããæ大SEQ (snd_max) < ACK1528 * ACK <= 未確認の最小送信 SEQ (snd_una) && 1529 * 送信した最大 SEQ (snd_max) < ACK 1590 1530 * 1591 * ãªãããªã»ãããéã£ã¦ã»ã°ã¡ã³ããç ´æ£ããã1531 * なら、リセットを送ってセグメントを破棄する。 1592 1532 */ 1593 1533 if ((tcph->flags & TCP_FLG_ACK) && … … 1598 1538 1599 1539 /* 1600 * RST ãã©ã°ãåä¿¡ããã¨ãã®å¦ç (ç°å¸¸åæ)1540 * RST フラグを受信したときの処理 (異常切断) 1601 1541 */ 1602 1542 if (tcph->flags & TCP_FLG_RST) { … … 1604 1544 SEQ_LT(tcph->seq, cep->last_ack_sent + cep->rcv_wnd)) { 1605 1545 /* 1606 * åä¿¡ããã»ã°ã¡ã³ãã® SEQ ããæå¾ã«éä¿¡ããACK (last_ack_sent)1607 * ãããåä¿¡ã¦ã¤ã³ãã¦ãµã¤ãºã¾ã§ã®éã®å¦ç1546 * 受信したセグメントの SEQ が、最後に送信した ACK (last_ack_sent) 1547 * から、受信ウインドウサイズまでの間の処理 1608 1548 */ 1609 1549 switch (cep->fsm_state) { 1610 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/1611 1612 cep->net_error = EV_CNNRF; /* æ¥ç¶ä¸è½*/1550 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 1551 1552 cep->net_error = EV_CNNRF; /* 接続不能 */ 1613 1553 cep->error = E_CLS; 1614 1554 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1); … … 1617 1557 break; 1618 1558 1619 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº */ 1620 case TCP_FSM_CLOSE_WAIT: /* FIN åä¿¡ãã¯ãã¼ãºå¾ 1621 ã¡ */ 1559 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 1560 case TCP_FSM_CLOSE_WAIT: /* FIN 受信、クローズ待ち */ 1622 1561 NET_COUNT_MIB(tcp_stats.tcpEstabResets, 1); 1623 1562 /* fallthrough */ 1624 1563 1625 case TCP_FSM_FIN_WAIT_1: /* çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 1626 case TCP_FSM_FIN_WAIT_2: /* çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 1627 ã¡ */ 1628 1629 cep->net_error = EV_CNRST; /* æ¥ç¶ãªã»ãã */ 1564 case TCP_FSM_FIN_WAIT_1: /* 終了して、FIN 送信済み */ 1565 case TCP_FSM_FIN_WAIT_2: /* 終了、FIN 伝達確認受信、FIN待ち */ 1566 1567 cep->net_error = EV_CNRST; /* 接続リセット */ 1630 1568 cep->error = E_CLS; 1631 1569 NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1); 1632 1570 /* no break; */ 1633 1571 1634 case TCP_FSM_CLOSING: /* çµäºãFIN 交ææ¸ã¿ãACK å¾ 1635 ã¡ */ 1636 case TCP_FSM_LAST_ACK: /* FIN åä¿¡ãçµäºãACK å¾ 1637 ã¡ */ 1572 case TCP_FSM_CLOSING: /* 終了、FIN 交換済み、ACK 待ち */ 1573 case TCP_FSM_LAST_ACK: /* FIN 受信、終了、ACK 待ち */ 1638 1574 1639 1575 cep = tcp_close(cep); … … 1645 1581 1646 1582 /* 1647 * CEP ã®ç¶æ 1648 ã SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿ã®å ´åã¯ã 1649 * åä¿¡ã¦ã£ã³ãã«åã¾ãããã«ãã¼ã¿ã 1650 * 調æ´ããåã«ããã®æ¥ç¶ã«ãããã±ãããã©ãããæ¤è¨¼ããã 1583 * CEP の状態が SYN を受信し、SYN 送信済みの場合は、 1584 * 受信ウィンドに収まるようにデータを 1585 * 調整する前に、この接続によるパケットかどうかを検証する。 1651 1586 * 1652 * åä¿¡ããç¸æã® SEQ < ç¸æã® SEQ ã®åæå¤(irs)1587 * 受信した相手の SEQ < 相手の SEQ の初期値 (irs) 1653 1588 * 1654 * ããã¯ã"LAND" DoS æ»æã®é²å¾¡ã§ããã1589 * これは、"LAND" DoS 攻撃の防御である。 1655 1590 */ 1656 1591 if (cep->fsm_state == TCP_FSM_SYN_RECVD && SEQ_LT(tcph->seq, cep->irs)) { … … 1659 1594 1660 1595 /* 1661 * åä¿¡ãæå¾ 1662 ãã¦ããæå°ã® SEQ (rcv_nxt) - åä¿¡ããç¸æã® SEQ ã 1663 * æ£ãªããrcv_nxt 以åã®ãã¼ã¿ã¯ãã§ã«åä¿¡ãã¦ããã®ã§ããã®é¨åã 1664 * åé¤ããã 1596 * 受信を期待している最小の SEQ (rcv_nxt) - 受信した相手の SEQ が 1597 * 正なら、rcv_nxt 以前のデータはすでに受信しているので、その部分を 1598 * 削除する。 1665 1599 * <---------- rcv_wnd ---------> 1666 1600 * rcv_nxt rcv_nxt + rcv_wnd … … 1674 1608 * ^ ^ 1675 1609 * seq seq + len 1676 * <---------------> åé¤ããã1610 * <---------------> 削除する。 1677 1611 */ 1678 1612 todrop = cep->rcv_nxt - tcph->seq; … … 1680 1614 1681 1615 /* 1682 * SYN ãã©ã°ãã¤ãã¦ããã¨ãã¯ããã®å (1 ãªã¯ããã)1683 * SEQ ãé²ããç·æ¥ãã¤ã³ã¿ã¨åé¤ããé·ãã調æ´ããã1616 * SYN フラグがついているときは、その分 (1 オクテット) 1617 * SEQ を進め、緊急ポインタと削除する長さを調整する。 1684 1618 */ 1685 1619 if (tcph->flags & TCP_FLG_SYN) { … … 1694 1628 1695 1629 /* 1696 * åé¤ããé·ãã SDU ããé·ããã¤ã¾ããåä¿¡ãæå¾ 1697 ãã¦ãã 1698 * æå°ã® SEQ (rcv_nxt) ã«éãã¦ããªããã 1699 * åé¤ããé·ãã SDU ã¨åãã§ãFIN ãã©ã°ãã¤ãã¦ãªããã° 1700 * å 1701 ¨ã¦åé¤ããã 1630 * 削除する長さが SDU より長い、つまり、受信を期待している 1631 * 最小の SEQ (rcv_nxt) に達していないか、 1632 * 削除する長さが SDU と同じで、FIN フラグがついてなければ 1633 * 全て削除する。 1702 1634 */ 1703 if ( todrop > tcph->sum || /* tcph->sum 㯠TCP ã® SDU é·*/1635 if ( todrop > tcph->sum || /* tcph->sum は TCP の SDU 長 */ 1704 1636 (todrop == tcph->sum && (tcph->flags & TCP_FLG_FIN) == 0)) { 1705 1637 tcph->flags &= ~TCP_FLG_FIN; 1706 1638 cep->flags |= TCP_CEP_FLG_ACK_NOW; 1707 todrop = tcph->sum; /* tcph->sum 㯠TCP ã® SDU é·*/1639 todrop = tcph->sum; /* tcph->sum は TCP の SDU 長 */ 1708 1640 } 1709 1641 1710 1642 /* 1711 * SDU ãåã«è©°ããã1643 * SDU を前に詰める。 1712 1644 */ 1713 if (todrop < tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1645 if (todrop < tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1714 1646 memcpy(GET_TCP_SDU(input, *offp), 1715 1647 GET_TCP_SDU(input, *offp) + todrop, (size_t)(tcph->sum - todrop)); … … 1717 1649 1718 1650 /* 1719 * SEQ 㨠SDU é·ã調æ´ããã1651 * SEQ と SDU 長を調整する。 1720 1652 */ 1721 1653 tcph->seq += todrop; 1722 tcph->sum -= (uint16_t)todrop; /* tcph->sum 㯠TCP ã® SDU é·*/1654 tcph->sum -= (uint16_t)todrop; /* tcph->sum は TCP の SDU 長 */ 1723 1655 1724 1656 /* 1725 * ç·æ¥ãã¤ã³ã¿ã調æ´ããã1657 * 緊急ポインタを調整する。 1726 1658 */ 1727 1659 if (tcph->urp > todrop) … … 1736 1668 1737 1669 /* 1738 * ããã¦ã¼ã¶ã¿ã¹ã¯ãçµäºããå¾ã«ããã¼ã¿ãåä¿¡ãã1739 * å ´åã¯ãRST ãéãã1740 */ 1741 if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) { /* tcph->sum 㯠TCP ã® SDU é·*/1670 * もしユーザタスクが終了した後に、データを受信した 1671 * 場合は、RST を送る。 1672 */ 1673 if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) { /* tcph->sum は TCP の SDU 長 */ 1742 1674 cep = tcp_close(cep); 1743 1675 goto reset_drop; … … 1745 1677 1746 1678 /* 1747 * åä¿¡ã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããè¶ 1748 ããå ´åã¯ã 1749 * è¶ 1750 ããåãåãã 1679 * 受信セグメントが受信ウィンドを超える場合は、 1680 * 超えた分を削る。 1751 1681 * 1752 1682 * <---------- rcv_wnd ---------> … … 1761 1691 * ^ ^ 1762 1692 * seq seq + len 1763 * <-----> åé¤ããã1764 */ 1765 todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd); /* tcph->sum 㯠TCP ã® SDU é·*/1693 * <-----> 削除する。 1694 */ 1695 todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd); /* tcph->sum は TCP の SDU 長 */ 1766 1696 if (todrop > 0) { 1767 if (todrop > tcph->sum) { /* tcph->sum 㯠TCP ã® SDU é·*/1697 if (todrop > tcph->sum) { /* tcph->sum は TCP の SDU 長 */ 1768 1698 /* 1769 * åä¿¡ãã SDU ã®å 1770 ¨ã¦ãåä¿¡ã¦ã£ã³ããè¶ 1771 ããå ´åã 1699 * 受信した SDU の全てが受信ウィンドを超える場合。 1772 1700 * 1773 * TIME_WAIT ä¸ã«ãæ°ããªæ¥ç¶è¦æ±ãåä¿¡ããã1774 * å¤ãæ¥ç¶ãç ´æ£ããæ°ããªæ¥ç¶ãéå§ããã1775 * ãã ããSEQ ã¯åããé²ãã§ããªããã°ãªããªãã1701 * TIME_WAIT 中に、新たな接続要求を受信したら 1702 * 古い接続を破棄し、新たな接続を開始する。 1703 * ただし、SEQ は前より進んでいなければならない。 1776 1704 */ 1777 1705 if ((tcph->flags & TCP_FLG_SYN) && … … 1785 1713 1786 1714 /* 1787 * åä¿¡ã¦ã£ã³ãã 0 ã§ãåä¿¡ãã SEQ 㨠1788 * åä¿¡ãæå¾ 1789 ãã¦ããæå°ã® SEQ ãä¸è´ããã¨ã㯠1790 * ACK ãè¿ãããã以å¤ã¯ãã¼ã¿ãç ´æ£ããACK ãè¿ãã 1715 * 受信ウィンドが 0 で、受信した SEQ と 1716 * 受信を期待している最小の SEQ が一致したときは 1717 * ACK を返す。それ以外はデータを破棄し、ACK を返す。 1791 1718 */ 1792 1719 if (cep->rcv_wnd == 0 && (tcph->seq == cep->rcv_nxt || tcph->sum == 0)) { … … 1799 1726 } 1800 1727 } 1801 tcph->sum -= (uint16_t)todrop; /* tcph->sum 㯠TCP ã® SDU é·*/1728 tcph->sum -= (uint16_t)todrop; /* tcph->sum は TCP の SDU 長 */ 1802 1729 tcph->flags &= ~(TCP_FLG_PUSH | TCP_FLG_FIN); 1803 1730 } 1804 1731 1805 1732 /* 1806 * ãããSYN ãã»ããããã¦ããã°ã1807 * ã¨ã©ã¼ãªã®ã§ RST ãéããæ¥ç¶ãç ´æ£ããã1733 * もし、SYN がセットされていれば、 1734 * エラーなので RST を送り、接続を破棄する。 1808 1735 */ 1809 1736 if (tcph->flags & TCP_FLG_SYN) { … … 1814 1741 1815 1742 /* 1816 * ãããACK ãã»ããããã¦ããªãå ´åã¯ã 1817 * ç¶æ 1818 ã SYN åä¿¡æ¸ã¿ã 1819 * SYN ãéä¿¡ãããã¨ãã¦ããã°ãå¦çãç¶ãããã 1820 * ãã以å¤ã¯ã»ã°ã¡ã³ããç ´æ£ãã¦çµäºããã 1743 * もし、ACK がセットされていない場合は、 1744 * 状態が SYN 受信済みか 1745 * SYN を送信しようとしていれば、処理を続けるが、 1746 * それ以外はセグメントを破棄して終了する。 1821 1747 */ 1822 1748 if ((tcph->flags & TCP_FLG_ACK) == 0) { … … 1826 1752 else { 1827 1753 /* 1828 * ACK ã®å¦ç1754 * ACK の処理 1829 1755 */ 1830 1756 ret = proc_ack1(input, cep, *offp, &needoutput); … … 1840 1766 /* step 6 */ 1841 1767 1842 /* éä¿¡ã¦ã£ã³ããæ´æ°ããã*/1768 /* 送信ウィンドを更新する。*/ 1843 1769 if (update_wnd(tcph, cep) == true) 1844 1770 needoutput = true; 1845 1771 1846 /* ç·æ¥ãã¼ã¿ãå¦çããã*/1772 /* 緊急データを処理する。*/ 1847 1773 proc_urg(tcph, cep); 1848 1774 … … 1850 1776 1851 1777 /* 1852 * SDU ãããããFIN ãæªåä¿¡ã®ç¶æ 1853 ã§ãæåã« FIN ãåä¿¡ããã¨ãã 1854 * åä¿¡ã»ã°ã¡ã³ããã¥ã¼ã« net_buf ã追å ããã 1855 * ãã以å¤ã®å ´åã¯ãã»ã°ã¡ã³ããç ´æ£ããã 1778 * SDU があるか、FIN を未受信の状態で、最初に FIN を受信したとき、 1779 * 受信セグメントキューに net_buf を追加する。 1780 * それ以外の場合は、セグメントを破棄する。 1856 1781 */ 1857 1782 flags = tcph->flags; 1858 if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) && /* tcph->sum 㯠TCP ã® SDU é·*/1783 if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) && /* tcph->sum は TCP の SDU 長 */ 1859 1784 TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) { 1860 1785 flags = reassemble(input, cep, *offp, flags); … … 1866 1791 1867 1792 /* 1868 * FIN ãåä¿¡ãããã³ãã¯ã·ã§ã³ãã¯ãã¼ãºããã1793 * FIN を受信したらコネクションをクローズする。 1869 1794 */ 1870 1795 if (flags & TCP_FLG_FIN) 1871 1796 close_connection(cep, &needoutput); 1872 1797 1873 /* åºåãè¡ã£ãå¾çµäºããã*/1798 /* 出力を行った後終了する。*/ 1874 1799 if (needoutput == true || (cep->flags & TCP_CEP_FLG_ACK_NOW)) { 1875 /* éä¿¡ãæ示ããã*/1800 /* 送信を指示する。*/ 1876 1801 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1877 1802 sig_sem(SEM_TCP_POST_OUTPUT); … … 1882 1807 reset_drop: 1883 1808 /* 1884 * RST éä¿¡å¦ç1809 * RST 送信処理 1885 1810 */ 1886 1811 … … 1888 1813 goto drop; 1889 1814 1890 /* ãã¹ããªã¼ãã¼ãããããã¯ã¼ã¯ãªã¼ãã¼ã«æ»ãã*/1815 /* ホストオーダーからネットワークオーダーに戻す。*/ 1891 1816 1892 1817 HTONS(tcph->sport); … … 1902 1827 else { 1903 1828 if (tcph->flags & TCP_FLG_SYN) 1904 tcph->sum ++; /* tcph->sum 㯠SDU é·*/1829 tcph->sum ++; /* tcph->sum は SDU 長 */ 1905 1830 tcp_respond(input, cep, tcph->seq + tcph->sum, 0, rbfree, TCP_FLG_RST | TCP_FLG_ACK); 1906 1831 } 1907 1832 1908 /* input 㯠tcp_respoond ã§è¿å´ãããã*/1833 /* input は tcp_respoond で返却される。*/ 1909 1834 NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_RSTS], 1); 1910 1835 NET_COUNT_MIB(tcp_stats.tcpOutRsts, 1); -
azure_iot_hub/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
r388 r389 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 … … 132 120 133 121 /* 134 * å¤æ°122 * 変数 135 123 */ 136 124 137 /* åºåæã®ãã©ã°ã FSM ç¶æ 138 ã«ããé¸æããããã®è¡¨ */ 125 /* 出力時のフラグを FSM 状態により選択するための表 */ 139 126 140 127 const static uint8_t tcp_outflags[] = { 141 TCP_FLG_RST | TCP_FLG_ACK, /* 0, ã¯ãã¼ãº */ 142 0, /* 1, ååãªã¼ãã³ */ 143 TCP_FLG_SYN, /* 2, è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿ */ 144 TCP_FLG_SYN | TCP_FLG_ACK, /* 3, SYM ãåä¿¡ããSYN éä¿¡æ¸ã¿ */ 145 TCP_FLG_ACK, /* 4, ã³ãã¯ã·ã§ã³éè¨å®äº */ 146 TCP_FLG_ACK, /* 5, FIN åä¿¡ãã¯ãã¼ãºå¾ 147 ã¡ */ 148 TCP_FLG_FIN | TCP_FLG_ACK, /* 6, çµäºãã¦ãFIN éä¿¡æ¸ã¿ */ 149 TCP_FLG_FIN | TCP_FLG_ACK, /* 7, çµäºãFIN 交ææ¸ã¿ãACK å¾ 150 ã¡ */ 151 TCP_FLG_FIN | TCP_FLG_ACK, /* 8, FIN åä¿¡ãçµäºãACK å¾ 152 ã¡ */ 153 TCP_FLG_ACK, /* 9, çµäºãFIN ä¼é確èªåä¿¡ãFINå¾ 154 ã¡ */ 155 TCP_FLG_ACK, /* 10, çµäºãæéå¾ 156 ã¡ */ 128 TCP_FLG_RST | TCP_FLG_ACK, /* 0, クローズ */ 129 0, /* 1, 受動オープン */ 130 TCP_FLG_SYN, /* 2, 能動オープン、SYN 送信済み */ 131 TCP_FLG_SYN | TCP_FLG_ACK, /* 3, SYM を受信し、SYN 送信済み */ 132 TCP_FLG_ACK, /* 4, コネクション開設完了 */ 133 TCP_FLG_ACK, /* 5, FIN 受信、クローズ待ち */ 134 TCP_FLG_FIN | TCP_FLG_ACK, /* 6, 終了して、FIN 送信済み */ 135 TCP_FLG_FIN | TCP_FLG_ACK, /* 7, 終了、FIN 交換済み、ACK 待ち */ 136 TCP_FLG_FIN | TCP_FLG_ACK, /* 8, FIN 受信、終了、ACK 待ち */ 137 TCP_FLG_ACK, /* 9, 終了、FIN 伝達確認受信、FIN待ち */ 138 TCP_FLG_ACK, /* 10, 終了、時間待ち */ 157 139 }; 158 140 159 141 /* 160 * send_segment -- TCP åºåå¦ç142 * send_segment -- TCP 出力処理 161 143 */ 162 144 … … 188 170 189 171 /* 190 * ã»ã°ã¡ã³ãé·ããç¸æã®æ大åä¿¡ã»ã°ã¡ã³ãé·ã«èª¿æ´ããã 191 * ãããè¶ 192 ãã¦ããå ´åã¯ãè¶ 193 ããåãå¾ã§éä¿¡ããã 194 * ãã®ãããFIN ããããã¯ãªã¢ããã 172 * セグメント長を、相手の最大受信セグメント長に調整する。 173 * もし、超えている場合は、超えた分を後で送信する。 174 * このため、FIN ビットをクリアする。 195 175 * 196 * ãªãªã¸ãã«ã§ã¯ãt_maxopd ãå¶éé·ã«ãã¦ãããã 197 * æ¬å®è£ 198 ã§ã¯ãç¸æã®æ大åä¿¡ã»ã°ã¡ã³ãã«ããã 176 * オリジナルでは、t_maxopd を制限長にしているが、 177 * 本実装では、相手の最大受信セグメントにする。 199 178 */ 200 179 if (len + optlen > cep->maxseg) { … … 205 184 206 185 /* 207 * éä¿¡ãããã¡ã空ã«ãªãã¨ã㯠PUSH ãã©ã°ãè¨å®ããã186 * 送信バッファが空になるときは PUSH フラグを設定する。 208 187 */ 209 188 if (len && doff + len >= cep->swbuf_count) … … 216 195 217 196 /* 218 * éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã219 * ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã197 * 送信ウインドバッファが開放されないようにして、 198 * ネットワークバッファを出力に移す。 220 199 */ 221 200 cep->swbufq->flags |= NB_FLG_NOREL_IFOUT; … … 225 204 226 205 /* 227 * ACK å®äºç¶æ 228 ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã 229 * ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã 206 * ACK 完了状態で、この関数が呼び出されることもある。 207 * この時は、len を 0 にして、処理を継続する。 230 208 */ 231 209 len = 0; … … 254 232 255 233 /* 256 * éä¿¡ã¦ã¤ã³ããããã¡ãéæ¾ãããªãããã«ãã¦ã257 * ãããã¯ã¼ã¯ãããã¡ãåºåã«ç§»ãã234 * 送信ウインドバッファが開放されないようにして、 235 * ネットワークバッファを出力に移す。 258 236 */ 259 237 cep->swbufq->flags |= NB_FLG_NOREL_IFOUT; … … 263 241 264 242 /* 265 * ACK å®äºç¶æ 266 ã§ããã®é¢æ°ãå¼ã³åºããããã¨ãããã 267 * ãã®æã¯ãlen ã 0 ã«ãã¦ãå¦çãç¶ç¶ããã 243 * ACK 完了状態で、この関数が呼び出されることもある。 244 * この時は、len を 0 にして、処理を継続する。 268 245 */ 269 246 len = 0; … … 290 267 291 268 /* 292 * TCP ãªãã·ã§ã³ã®è¨å®ãè¡ãã 293 * æ¬å®è£ 294 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºã®ã¿è¨å®ããã 269 * TCP オプションの設定を行う。 270 * 本実装では、最大セグメントサイズのみ設定する。 295 271 */ 296 272 hdr_offset = IF_IP_TCP_HDR_OFFSET(output); … … 309 285 } 310 286 311 /* TCP SDU ã«éä¿¡ãã¼ã¿ãã³ãã¼ããã*/287 /* TCP SDU に送信データをコピーする。*/ 312 288 313 289 if (len > 0) { … … 335 311 336 312 /* 337 * snd_max: éä¿¡ããæ大SEQ338 * snd_nxt: 次ã«éä¿¡ããSEQ313 * snd_max: 送信した最大 SEQ 314 * snd_nxt: 次に送信する SEQ 339 315 * 340 * ç¸æãã FIN ãåä¿¡ããã¾ã FIN ãéä¿¡ãã¦ããªããã341 * éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã342 * ã»ã°ã¡ã³ããéä¿¡ããããSEQ ã¯é²ããªãã316 * 相手から FIN を受信し、まだ FIN を送信していないか、 317 * 送るデータがないときは、FIN を相手に届けるため、 318 * セグメントを送信するが、SEQ は進めない。 343 319 */ 344 320 if ((flags & TCP_FLG_FIN) && (cep->flags & TCP_CEP_FLG_SENT_FIN) && … … 350 326 351 327 /* 352 * SEQ ãACKããã©ã°ã®è¨å®ã328 * SEQ、ACK、フラグの設定。 353 329 */ 354 330 if (len > 0 || (flags & (TCP_FLG_SYN | TCP_FLG_FIN)) || cep->timer[TCP_TIM_PERSIST] != 0) … … 358 334 359 335 /* 360 * rcv_nxt: åä¿¡ãæå¾ 361 ãã¦ããæå°ã® SEQ 336 * rcv_nxt: 受信を期待している最小の SEQ 362 337 */ 363 338 tcph->ack = htonl(cep->rcv_nxt); … … 365 340 366 341 /* 367 * åä¿¡ã¦ã£ã³ãã®è¨ç®342 * 受信ウィンドの計算 368 343 * 369 * rbufsz: åä¿¡ç¨ãããã¡ãµã¤ãº370 * maxseg: ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº344 * rbufsz: 受信用バッファサイズ 345 * maxseg: 相手の最大受信セグメントサイズ 371 346 */ 372 347 if (win < (cep->rbufsz / 4) && win < cep->maxseg) … … 374 349 375 350 /* 376 * rcv_nxt: åä¿¡ãæå¾ 377 ãã¦ããæå°ã® SEQ 378 * rcv_adv: åä¿¡ãæå¾ 379 ãã¦ããæ大㮠SEQ 351 * rcv_nxt: 受信を期待している最小の SEQ 352 * rcv_adv: 受信を期待している最大の SEQ 380 353 */ 381 354 if ((int32_t)win < (int32_t)(cep->rcv_adv - cep->rcv_nxt)) … … 387 360 388 361 /* 389 * ç·æ¥ãã¤ã³ã¿ã®è¨å®362 * 緊急ポインタの設定 390 363 */ 391 364 if (SEQ_GT(cep->snd_up, cep->snd_nxt)) { … … 404 377 405 378 /* 406 * ãã§ãã¯ãµã ãè¨å®ããã379 * チェックサムを設定する。 407 380 */ 408 381 tcph->sum = 0; 409 382 tcph->sum = IN_CKSUM(output, IPPROTO_TCP, hdr_offset, GET_TCP_HDR_SIZE(output, hdr_offset) + len); 410 383 411 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/384 /* ネットワークバッファ長を調整する。*/ 412 385 output->len = (uint16_t)(GET_IF_IP_TCP_HDR_SIZE(output, 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_NOT_CLEAR; … … 526 496 527 497 /* 528 * tcp_output -- TCP åºåå¦ç498 * tcp_output -- TCP 出力処理 529 499 */ 530 500 … … 539 509 540 510 /* 541 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ542 * snd_max: éä¿¡ããæ大SEQ511 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 512 * snd_max: 送信した最大 SEQ 543 513 */ 544 514 idle = (cep->snd_max == cep->snd_una); 545 515 546 516 /* 547 * idle: ã¢ã¤ãã«æé548 * rxtcur: ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã517 * idle: アイドル時間 518 * rxtcur: 現在の再送タイムアウト 549 519 */ 550 520 if (idle && cep->idle >= cep->rxtcur) 551 521 552 522 /* 553 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº554 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº523 * snd_cwnd: 輻輳ウィンドサイズ 524 * maxseg : 相手の最大受信セグメントサイズ 555 525 * 556 * é·æéã¢ã¤ãã«ã ã£ãã®ã§ã¹ãã¼ã¹ã¿ã¼ãå¶å¾¡ã«è¨å®ããã526 * 長時間アイドルだったのでスロースタート制御に設定する。 557 527 */ 558 528 cep->snd_cwnd = cep->maxseg; … … 562 532 563 533 /* 564 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ565 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæ大éä¿¡SEQ534 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 535 * snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ 566 536 * 567 * doff: éä¿¡ãéå§ãããªãã»ããã568 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)537 * doff: 送信を開始するオフセット。 538 * swbuf_count (送信バッファにあるオクテット数) 569 539 * 0 V 570 540 * +-------------------------------------------+ … … 572 542 * +-------------------------------------------+ 573 543 * ^ ^ 574 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)544 * |<------------->snd_nxt (前回送信した SEQ) 575 545 * | doff 576 * snd_una ( ã¾ã 確èªããã¦ããªã)546 * snd_una (まだ確認されていない) 577 547 */ 578 548 doff = (uint_t)(cep->snd_nxt - cep->snd_una); 579 549 580 550 /* 581 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº582 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº551 * snd_wnd: 相手の受信可能ウィンドサイズ 552 * snd_cwnd: 輻輳ウィンドサイズ 583 553 * 584 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã554 * win: どちらか小さいウィンドサイズに設定する。 585 555 */ 586 556 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; 587 557 588 /* åºåãã©ã°ã®è¨å®*/558 /* 出力フラグの設定 */ 589 559 flags = tcp_outflags[cep->fsm_state]; 590 560 if (cep->flags & TCP_CEP_FLG_NEED_FIN) … … 595 565 596 566 /* 597 * ãããéä¿¡ã¦ã¤ã³ããµã¤ãº (win) ã 0 ãªã 1 ãªã¯ãããéä¿¡ããã598 * ããã§ãªããã°ãæç¶ã¿ã¤ã ã¢ã¦ãããã£ã³ã»ã«ãã599 * åéä¿¡åæ° (rxtshift) ã 0 ã«ããã567 * もし、送信ウインドサイズ (win) が 0 なら 1 オクテット送信する。 568 * そうでなければ、持続タイムアウトをキャンセルし、 569 * 再送信回数 (rxtshift) を 0 にする。 600 570 */ 601 571 if (win == 0) { 602 572 603 573 /* 604 * doff: éä¿¡ãããªã¯ãããæ°ã605 * swbuf_count: éä¿¡ãããã¡ã®ä½¿ç¨ä¸ãµã¤ãº574 * doff: 送信するオクテット数。 575 * swbuf_count: 送信バッファの使用中サイズ 606 576 * 607 * éä¿¡ãããã¡ã«æ®ã£ã¦ãããªã¯ããããããããã608 * éä¿¡ãããã¨ãã¦ãããªã¯ãããæ°ããå¤ããã°609 * FIN ãã©ã°ãã¯ãªã¢ããã577 * 送信バッファに残っているオクテットが、これから 578 * 送信しようとしているオクテット数より多ければ 579 * FIN フラグをクリアする。 610 580 */ 611 581 if (doff < cep->swbuf_count) … … 615 585 else { 616 586 /* 617 * TCP_TIM_PERSIST: æç¶ã¿ã¤ã618 * rxtshift: åéä¿¡åæ°ã®log(2)587 * TCP_TIM_PERSIST: 持続タイマ 588 * rxtshift: 再送信回数の log(2) 619 589 */ 620 590 cep->timer[TCP_TIM_PERSIST] = 0; … … 624 594 625 595 /* 626 * len: ä»åéä¿¡ãããªã¯ãããæ°627 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)596 * len: 今回送信するオクテット数 597 * swbuf_count (送信バッファにあるオクテット数) 628 598 * | 629 599 * 0 V … … 633 603 * ^ ^<-------------> 634 604 * | | len 635 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)605 * |<------------->snd_nxt (前回送信した SEQ) 636 606 * | doff 637 * snd_una ( ã¾ã 確èªããã¦ããªã)607 * snd_una (まだ確認されていない) 638 608 */ 639 609 if (cep->swbuf_count < win) … … 643 613 644 614 /* 645 * ãã§ã«éä¿¡ããã¦ããã°ãSYN ãããããªãããã646 * ãããã以ä¸ã®æ¡ä»¶ã§ã¯éä¿¡ãæ§ããã615 * すでに送信されていれば、SYN ビットをオフする。 616 * しかし、以下の条件では送信を控える。 647 617 * 648 * ã»ç¶æ 649 ã SYN éä¿¡ã 650 * ã»ã»ã°ã¡ã³ãããã¼ã¿ãå«ãã§ããã 618 * ・状態が SYN 送信。 619 * ・セグメントがデータを含んでいる。 651 620 */ 652 621 if ((flags & TCP_FLG_SYN) && SEQ_GT(cep->snd_nxt, cep->snd_una)) { 653 622 flags &= ~TCP_FLG_SYN; 654 doff --; /* -1 㯠SYN ãã©ã°å*/655 len ++; /* +1 㯠SYN ãã©ã°å*/623 doff --; /* -1 は SYN フラグ分 */ 624 len ++; /* +1 は SYN フラグ分 */ 656 625 if (len > 0 && cep->fsm_state == TCP_FSM_SYN_SENT) 657 626 break; … … 666 635 667 636 /* 668 * len ã 0 以ä¸ãªãã0 ã«è¨å®ããã669 * ãããéä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ãªãã670 * åéä¿¡ã¿ã¤ãããã£ã³ã»ã«ãã671 * ååéä¿¡ãã SEQ (snd_nxt) ã672 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã«æ»ãã673 * ããã¦ãæç¶ã¿ã¤ãã¼ãæ¢ã¾ã£ã¦ããã°ãåè¨å®ããã637 * len が 0 以下なら、0 に設定する。 638 * もし、送信ウィンドウサイズが 0 なら、 639 * 再送信タイマをキャンセルし、 640 * 前回送信した SEQ (snd_nxt) を 641 * 確認された最大送信 SEQ (snd_una) に戻す。 642 * そして、持続タイマーが止まっていれば、再設定する。 674 643 */ 675 644 len = 0; … … 685 654 686 655 /* 687 * ä»åéä¿¡ãããªã¯ãããæ° (len) ã¯ã 688 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 689 ããªãããã«ããã 656 * 今回送信するオクテット数 (len) は、 657 * 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。 690 658 */ 691 659 if (len > cep->maxseg) { … … 695 663 696 664 /* 697 * swbuf_count ( éä¿¡ãããã¡ã«ãããªã¯ãããæ°)665 * swbuf_count (送信バッファにあるオクテット数) 698 666 * | 699 667 * 0 V … … 703 671 * ^ ^<-------------> 704 672 * | | len 705 * |<------------->snd_nxt ( ååéä¿¡ããSEQ)673 * |<------------->snd_nxt (前回送信した SEQ) 706 674 * | doff 707 * snd_una ( ã¾ã 確èªããã¦ããªã)675 * snd_una (まだ確認されていない) 708 676 * 709 * ä»åéä¿¡å¾ããéä¿¡ãããã¡ã«ãã¼ã¿ãæ®ã£ã¦ããã°710 * FIN ãã©ã°ãã¯ãªã¢ããã677 * 今回送信後も、送信バッファにデータが残っていれば 678 * FIN フラグをクリアする。 711 679 */ 712 680 if (SEQ_LT(cep->snd_nxt + len, cep->snd_una + cep->swbuf_count)) … … 714 682 715 683 /* 716 * ãããã win ã¯ãåä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã717 * åä¿¡ãããã¡ã®ç©ºã容é684 * ここから win は、受信ウィンドウサイズ。 685 * 受信バッファの空き容量 718 686 */ 719 687 win = cep->rbufsz - cep->rwbuf_count; 720 688 721 689 /* 722 * æããªã¦ã£ã³ãã¦ã»ã·ã³ããã¼ã ã®åé¿å¦ç (éä¿¡å´)690 * 愚かなウィンドウ・シンドロームの回避処理 (送信側) 723 691 * 724 * 以ä¸ã®æ¡ä»¶ã§ãéä¿¡ãè¡ãã692 * 以下の条件で、送信を行う。 725 693 * 726 * ã»ãã«ãµã¤ãº (maxseg) ã®ã»ã°ã¡ã³ããéããã¨ãã§ããã 727 * ã»ç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 ã®ãã¼ã¿ã 728 * éããã¨ãã§ããã 729 * ã»éä¿¡ãããã¡ã空ã«ã§ããã¢ã¤ãã«ãéé 730 延ãªãã·ã§ã³ãæå¹ãªã¨ãã 694 * ・フルサイズ (maxseg) のセグメントを送ることができる。 695 * ・相手の最大の受信ウィンドウサイズの 1/2 のデータを 696 * 送ることができる。 697 * ・送信バッファを空にでき、アイドルか非遅延オプションが有効なとき。 731 698 */ 732 699 if (len) { 733 700 734 701 /* 735 * ä»åéä¿¡ãããªã¯ãããæ° (len) ã736 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã«737 * ä¸è´ããã¨ãã¯éä¿¡ããã702 * 今回送信するオクテット数 (len) が 703 * 相手の最大受信セグメントサイズ (maxseg) に 704 * 一致するときは送信する。 738 705 */ 739 706 if (len == cep->maxseg) { … … 743 710 744 711 /* 745 * ä»åã®éä¿¡ã§ãéä¿¡ãããã¡ã空ã«ã§ãã746 * ã¢ã¤ãã«ãé PUSH ãªãã·ã§ã³ãæå¹ãªã¨ãã712 * 今回の送信で、送信バッファを空にでき、 713 * アイドルか非 PUSH オプションが有効なとき。 747 714 */ 748 715 if ((idle || (cep->flags & TCP_CEP_FLG_NO_DELAY)) && … … 754 721 755 722 /* 756 * max_sndwnd: ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº757 * snd_nxt: 次ã«éä¿¡ããSEQ758 * snd_max: éä¿¡ããæ大SEQ723 * max_sndwnd: 今までの最大送信ウィンドサイズ 724 * snd_nxt: 次に送信する SEQ 725 * snd_max: 送信した最大 SEQ 759 726 * 760 * 次ã®æ¡ä»¶ã§ã¯éä¿¡ãè¡ãã727 * 次の条件では送信を行う。 761 728 * 762 * ã»å¼·å¶éä¿¡ãã©ã°ãã»ããããã¦ããã763 * ã»ãã¼ã¿é·ãç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã® 1/2 以ä¸ã§ã764 * ç¸æã®æ大ã®åä¿¡ã¦ã£ã³ãã¦ãµã¤ãºã 0 ãã大ããã765 * ã»æ¬¡ã«éä¿¡ãã SEQ ãéä¿¡ããæ大 SEQ ããå°ããã766 * ã¤ã¾ããåéããã¨ãã729 * ・強制送信フラグがセットされている。 730 * ・データ長が相手の最大の受信ウィンドウサイズの 1/2 以上で、 731 * 相手の最大の受信ウィンドウサイズが 0 より大きい。 732 * ・次に送信する SEQ が送信した最大 SEQ より小さい、 733 * つまり、再送するとき。 767 734 */ 768 735 if ((cep->flags & TCP_CEP_FLG_FORCE) || … … 776 743 777 744 /* 778 * æããªã¦ã£ã³ãã¦ã»ã·ã³ããã¼ã ã®åé¿å¦ç (åä¿¡å´)745 * 愚かなウィンドウ・シンドロームの回避処理 (受信側) 779 746 * 780 * ã¦ã£ã³ãã¦ãµã¤ãºããã«ãµã¤ãºã® 2 åã®ã»ã°ã¡ã³ãããããã¯781 * åä¿¡ãããã¡å®¹éã® 1/2 ã®ãããããå°ããã»ãã®782 * ãµã¤ãºã§å¢å ãããå ´åã¯ãã¦ã£ã³ãã¦ãµã¤ãºã®æ´æ°ãè¡ãã747 * ウィンドウサイズがフルサイズの 2 倍のセグメント、あるいは 748 * 受信バッファ容量の 1/2 の、いずれか小さいほうの 749 * サイズで増加される場合は、ウィンドウサイズの更新を行う。 783 750 */ 784 751 if (win > 0) { … … 786 753 787 754 /* 788 * win: åä¿¡ãããã¡ã®ç©ºã容é 789 * MAX_TCP_WIN_SIZE: TCP ãããã® win ãã£ã¼ã«ãã«è¨å®ã§ããæå¤§å¤ 790 * rcv_adv: åä¿¡ãæå¾ 791 ãã¦ããæ大㮠SEQ 792 * rcv_nxt: åä¿¡ãæå¾ 793 ãã¦ããæå°ã® SEQ 755 * win: 受信バッファの空き容量 756 * MAX_TCP_WIN_SIZE: TCP ヘッダの win フィールドに設定できる最大値 757 * rcv_adv: 受信を期待している最大の SEQ 758 * rcv_nxt: 受信を期待している最小の SEQ 794 759 */ 795 760 if (win < MAX_TCP_WIN_SIZE) … … 806 771 807 772 /* 808 * ACK ãéä¿¡ããã773 * ACK を送信する。 809 774 */ 810 775 if (cep->flags & TCP_CEP_FLG_ACK_NOW) { … … 829 794 830 795 /* 831 * snd_nxt: 次ã«éä¿¡ããSEQ832 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQãã¾ãã¯ç¢ºèªãããæ大éä¿¡SEQ796 * snd_nxt: 次に送信する SEQ 797 * snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ 833 798 * 834 * ç¸æãã FIN ãåä¿¡ããã¾ã FIN ãéä¿¡ãã¦ããªããã835 * éããã¼ã¿ããªãã¨ãã¯ãFIN ãç¸æã«å±ããããã836 * ã»ã°ã¡ã³ããéä¿¡ããã799 * 相手から FIN を受信し、まだ FIN を送信していないか、 800 * 送るデータがないときは、FIN を相手に届けるため、 801 * セグメントを送信する。 837 802 */ 838 803 if ((flags & TCP_FLG_FIN) && … … 843 808 844 809 /* 845 * éä¿¡ãã¹ããã¼ã¿ããããåéã¿ã¤ãã¨æç¶ã¿ã¤ããåãã¦ããã¨ãã¯846 * æç¶ã¿ã¤ããè¨å®ããã810 * 送信すべきデータがあり、再送タイマと持続タイマが切れているときは 811 * 持続タイマを設定する。 847 812 */ 848 813 if (cep->swbuf_count && cep->timer[TCP_TIM_REXMT ] == 0 && … … 859 824 860 825 /* 861 * tcptsk_alloc_swbufq -- éä¿¡ã¦ã£ã³ããããã¡å²ãå½ã¦826 * tcptsk_alloc_swbufq -- 送信ウィンドバッファ割り当て 862 827 */ 863 828 … … 869 834 870 835 /* 871 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº872 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº836 * snd_wnd: 相手の受信可能ウィンドサイズ 837 * snd_cwnd: 輻輳ウィンドサイズ 873 838 * 874 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã839 * win: どちらか小さいウィンドサイズに設定する。 875 840 */ 876 841 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; 877 842 878 843 /* 879 * ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾ 880 æ©ããã 844 * 相手の受信ウィンドが閉じている場合は、開くまで待機する。 881 845 */ 882 846 if (win == 0) { … … 887 851 #ifdef TCP_CFG_NON_BLOCKING 888 852 889 /* ãã³ããããã³ã°ã³ã¼ã«*/853 /* ノンブロッキングコール */ 890 854 if (!IS_PTR_DEFINED(cep->callback)) { 891 855 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 892 856 893 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/857 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 894 858 cep->snd_tskid = TA_NULL; 895 859 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 906 870 (GET_TCP_CEPID(cep) & NBA_ID_MASK)), TMO_POL)) != E_OK) { 907 871 908 /* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/872 /* ネットワークバッファを予約する。*/ 909 873 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_PEND; 910 874 } 911 875 else { 912 876 913 /* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/877 /* 送信ウィンドバッファを初期化する。*/ 914 878 tcp_init_swbuf(cep); 915 879 … … 920 884 uint_t len; 921 885 922 /* éä¿¡ã¦ã£ã³ããããã¡ã®æ¸ãè¾¼ã¿ã¢ãã¬ã¹ãè¨å®ããã*/886 /* 送信ウィンドバッファの書き込みアドレスを設定する。*/ 923 887 len = TCP_GET_SWBUF_ADDR(cep, cep->snd_p_buf); 924 888 925 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/889 /* コールバック関数を呼び出す。*/ 926 890 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 927 891 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len); … … 931 895 932 896 933 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/897 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 934 898 cep->snd_tskid = TA_NULL; 935 899 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 941 905 uint_t len; 942 906 943 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/907 /* 送信ウィンドバッファにデータを書き込む。*/ 944 908 len = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len); 945 909 946 910 #ifdef TCP_CFG_EXTENTIONS 947 911 948 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/912 /* 送信緊急ポインタを設定する。*/ 949 913 if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB) 950 914 cep->snd_up = cep->snd_una + len; … … 952 916 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 953 917 954 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããå¼·å¶çã«éä¿¡ããã*/918 /* フラグを、送信可能に設定し、強制的に送信する。*/ 955 919 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR | TCP_CEP_FLG_POST_OUTPUT; 956 920 957 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/921 /* コールバック関数を呼び出す。*/ 958 922 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 959 923 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len); … … 963 927 964 928 965 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/929 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 966 930 cep->snd_tskid = TA_NULL; 967 931 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 975 939 976 940 /* 977 * tcptsk_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡éæ¾941 * tcptsk_free_swbufq -- 送信ウィンドバッファ開放 978 942 */ 979 943 … … 982 946 { 983 947 /* 984 * å信確èªãå®äºãããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããã®985 * åºåãå®äºããã¨ãã¯ãéä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã986 */ 987 988 /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/948 * 受信確認が完了し、ネットワークインタフェースからの 949 * 出力も完了したときは、送信ウィンドバッファキューを解放する。 950 */ 951 952 /* 送信ウィンドバッファの使用中サイズをリセットする。*/ 989 953 cep->swbuf_count = 0; 990 954 991 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/955 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 992 956 syscall(rel_net_buf(cep->swbufq)); 993 957 cep->swbufq = NULL; 994 958 995 /* ãã©ã°ã空ãã«è¨å®ããã*/959 /* フラグを空きに設定する。*/ 996 960 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_FREE; 997 961 998 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããã§ãããã¨ãç¥ãããã*/962 /* 送信ウィンドバッファに空きができたことを知らせる。*/ 999 963 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 1000 964 1001 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾ 1002 ã¡ã®ã¨ãã¯ãTCP åºåã¿ã¹ã¯ãèµ·åããã*/ 965 /* 送信ウィンドバッファの空き待ちのときは、TCP 出力タスクを起動する。*/ 1003 966 if ((cep->flags & TCP_CEP_FLG_WBCS_NBUF_REQ) != 0) { 1004 967 sig_sem(SEM_TCP_POST_OUTPUT); … … 1009 972 1010 973 /* 1011 * TCP åºåã¿ã¹ã¯974 * TCP 出力タスク 1012 975 */ 1013 976 … … 1028 991 #ifdef _IP6_CFG 1029 992 1030 /* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®ãå®è¡ããã*/993 /* IPv6 のステートレス・アドレス自動設定を実行する。*/ 1031 994 in6_if_up(IF_GET_IFNET()); 1032 995 … … 1035 998 while (true) { 1036 999 1037 /* åºåããã¹ããããã¾ã§å¾ 1038 ã¤ã*/ 1000 /* 出力がポストされるまで待つ。*/ 1039 1001 syscall(wai_sem(SEM_TCP_POST_OUTPUT)); 1040 1002 … … 1061 1023 1062 1024 /* 1063 * ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµãã£ã¦ããªãã¨ãã¯ã1064 * éä¿¡ãäºç´ããã1025 * ネットワークインタフェースから送信が終わっていないときは、 1026 * 送信を予約する。 1065 1027 */ 1066 1028 if (cep->flags & TCP_CEP_FLG_POST_OUTPUT && … … 1077 1039 1078 1040 /* 1079 * éä¿¡äºç´ä¸ã«ããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ããéä¿¡ãçµäºãããã 1080 * éä¿¡ãéå§ããããã ããå®å 1081 ¨ã«éä¿¡ãçµäºããã¨ãã¯ä½ãããªãã 1041 * 送信予約中に、ネットワークインタフェースから送信が終了したら、 1042 * 送信を開始する。ただし、完全に送信が終了したときは何もしない。 1082 1043 */ 1083 1044 if (cep->flags & TCP_CEP_FLG_RESERVE_OUTPUT) { … … 1102 1063 1103 1064 /* 1104 * tcp_con_cep ã®ãã³ããããã³ã°ã³ã¼ã«ã§ã1105 * æªå²å½ã®ã®å ´åã¯ããã¼ãçªå·ãå²ãå½ã¦ãã1106 * p_myaddr ã NADR (-1) ãã1107 * èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã1065 * tcp_con_cep のノンブロッキングコールで、 1066 * 未割当のの場合は、ポート番号を割り当てる。 1067 * p_myaddr が NADR (-1) か、 1068 * 自ポート番号が TCP_PORTANY なら、自動で割り当てる。 1108 1069 */ 1109 1070 if (cep->p_myaddr == NADR || cep->p_myaddr->portno == TCP_PORTANY) … … 1120 1081 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 1121 1082 1122 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1083 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1123 1084 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; 1124 1085 cep->snd_tskid = TA_NULL; … … 1132 1093 1133 1094 if (cep->flags & TCP_CEP_FLG_CLOSE_AFTER_OUTPUT) { 1134 /* ã³ãã¯ã·ã§ã³ãéããã*/1095 /* コネクションを閉じる。*/ 1135 1096 tcp_close(cep); 1136 1097 cep->flags &= ~TCP_CEP_FLG_CLOSE_AFTER_OUTPUT; … … 1138 1099 1139 1100 if (cep->flags & TCP_CEP_FLG_RESTORE_NEXT_OUTPUT) { 1140 /* snd_nxt ãå 1141 ã«æ»ãã*/ 1101 /* snd_nxt を元に戻す。*/ 1142 1102 if (SEQ_GT(cep->snd_old_nxt, cep->snd_nxt)) 1143 1103 cep->snd_nxt = cep->snd_old_nxt; … … 1152 1112 } while (ix != last_ix); 1153 1113 1154 /* 次åã¯ãå¦çããé信端ç¹ãå¾åãã«ããã*/1114 /* 次回は、処理した通信端点を後回しにする。*/ 1155 1115 last_ix = sel_ix; 1156 1116 } -
azure_iot_hub/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
r388 r389 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 -
azure_iot_hub/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
r388 r389 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$ … … 129 117 130 118 /* 131 * å 132 ¨åå¤æ° 133 */ 134 135 /* 136 * TCP ã® SEQ ã®åæå¤ãããã°ã©ã ãèµ·åãã¦ãæåã« TCP ã»ã°ã¡ã³ãã 137 * éåä¿¡ããã¨ãã«ãget_tim() ã«ããåæåããã 119 * 全域変数 120 */ 121 122 /* 123 * TCP の SEQ の初期値、プログラムが起動して、最初に TCP セグメントを 124 * 送受信するときに、get_tim() により初期化する。 138 125 */ 139 126 T_TCP_SEQ tcp_iss = 0; … … 142 129 143 130 /* 144 * SNMP 㮠管çæ 145 å ±ãã¼ã¹ (MIB) 131 * SNMP の 管理情報ベース (MIB) 146 132 */ 147 133 … … 151 137 152 138 /* 153 * å±æå¤æ°154 */ 155 156 static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO; /* èªåå²ãå½ã¦çªå·*/139 * 局所変数 140 */ 141 142 static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO; /* 自動割り当て番号 */ 157 143 158 144 #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 159 145 160 146 /* 161 * ã¿ã¹ã¯ããã® Time Wait ç¶æ 162 CEP åé¢æ©è½ 163 */ 164 165 /* 166 * å¤æ° 147 * タスクからの Time Wait 状態 CEP 分離機能 148 */ 149 150 /* 151 * 変数 167 152 */ 168 153 … … 170 155 171 156 /* 172 * tcp_move_twcep -- å¿ 173 è¦ãªæ 174 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 175 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 157 * tcp_move_twcep -- 必要な情報を Time Wait 用 TCP 通信端点に移して、 158 * 標準の TCP 通信端点を開放する。 176 159 */ 177 160 … … 181 164 T_TCP_TWCEP* twcep; 182 165 183 /* 空ãã® Time Wait ç¨ TCP é信端ç¹ãæ¢ç´¢ããã*/166 /* 空きの Time Wait 用 TCP 通信端点を探索する。*/ 184 167 for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) { 185 168 if (twcep->fsm_state != TCP_FSM_TIME_WAIT) { 186 169 187 170 /* 188 * é信端ç¹ãããã¯ãã 189 * å¿ 190 è¦ãªæ 191 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã 171 * 通信端点をロックし、 172 * 必要な情報を Time Wait 用 TCP 通信端点に移す。 192 173 */ 193 174 syscall(wai_sem(cep->semid_lock)); … … 202 183 twcep->timer_2msl = cep->timer[TCP_TIM_2MSL]; 203 184 204 /* é信端ç¹ãããã¯ã解é¤ããã*/185 /* 通信端点をロックを解除する。*/ 205 186 syscall(sig_sem(cep->semid_lock)); 206 187 207 /* æ¨æº TCP é信端ç¹ãéæ¾ããã*/188 /* 標準 TCP 通信端点を開放する。*/ 208 189 tcp_close(cep); 209 190 … … 214 195 215 196 /* 216 * tcp_find_twcep -- ãã¼ãçªå·ãã Time Wait ç¨ TCP é信端ç¹ãå¾ãã197 * tcp_find_twcep -- ポート番号から Time Wait 用 TCP 通信端点を得る。 217 198 */ 218 199 … … 226 207 227 208 /* 228 * ç¶æ 229 ã TIME WAIT ã§ã 230 * IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããé信端ç¹ãæ¢ç´¢ããã 209 * 状態が TIME WAIT で、 210 * IP アドレスとポート番号が一致する通信端点を探索する。 231 211 */ 232 212 for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) { … … 245 225 246 226 /* 247 * tcp_find_cep -- ãã¼ãçªå·ãã TCP é信端ç¹ãå¾ãã227 * tcp_find_cep -- ポート番号から TCP 通信端点を得る。 248 228 */ 249 229 … … 257 237 258 238 /* 259 * ç¶æ 260 ã SYN éä¿¡æ¸ã¿ä»¥å¾ã¯ã 261 * IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ãã TCP é信端ç¹ãæ¢ç´¢ããã 239 * 状態が SYN 送信済み以後は、 240 * IP アドレスとポート番号が一致する TCP 通信端点を探索する。 262 241 */ 263 242 for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) { … … 270 249 } 271 250 272 /* IPv4 ã§ååãªã¼ãã³ä¸ã® TCP é信端ç¹ãå 273 ã«æ¢ç´¢ããã*/ 251 /* IPv4 で受動オープン中の TCP 通信端点を先に探索する。*/ 274 252 for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) { 275 253 if ((cep->flags & TCP_CEP_FLG_IPV4) && … … 281 259 } 282 260 283 /* ååãªã¼ãã³ä¸ã® TCP é信端ç¹ãæ¢ç´¢ããã*/261 /* 受動オープン中の TCP 通信端点を探索する。*/ 284 262 for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) { 285 263 … … 327 305 328 306 /* 329 * tcp_is_addr_accept -- åä¿¡å¯è½ãª IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ã§ãããã¨ã確èªããã307 * tcp_is_addr_accept -- 受信可能な IP アドレスとポート番号であることを確認する。 330 308 */ 331 309 … … 340 318 341 319 /* 342 * 次ã®ã¨ãã¯ç ´æ£ããã 343 * ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã 344 * ãã ããéä¿¡å 345 IP ã¢ãã¬ã¹ããã¼ã«ã«ã«ã¼ãããã¯ãªãè¯ãã 346 * ã»ãã«ããã£ã¹ãã¢ãã¬ã¹ 320 * 次のときは破棄する。 321 * ・ポート番号が同一で、送受信 IP アドレス が同一。 322 * ただし、送信元 IP アドレスがローカルループバックなら良い。 323 * ・マルチキャストアドレス 347 324 */ 348 325 … … 354 331 355 332 /* 356 * 次ã®ã¨ãã¯ãåä¿¡å¯è½ã§ã¯ãªãã357 * ã»ãã¼ãçªå·ãåä¸ã§ãéåä¿¡ IP ã¢ãã¬ã¹ ãåä¸ã358 * ã»ãã«ããã£ã¹ãã¢ãã¬ã¹333 * 次のときは、受信可能ではない。 334 * ・ポート番号が同一で、送受信 IP アドレス が同一。 335 * ・マルチキャストアドレス 359 336 */ 360 337 if (tcph->dport == tcph->sport && IN_ARE_HDR_ADDR_EQUAL(input)) … … 370 347 371 348 /* 372 * tcp_free_reassq -- åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã349 * tcp_free_reassq -- 受信再構成キューのネットワークバッファを解放する。 373 350 * 374 * 注æ: 375 * å¿ 376 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 377 * æ»ã£ãå¾ã解é¤ããå¿ 378 è¦ãããã 351 * 注意: 352 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 353 * 戻った後、解除する必要がある。 379 354 */ 380 355 … … 393 368 394 369 /* 395 * tcp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨å®ããã370 * tcp_alloc_auto_port -- 自動割り当てポート番号を設定する。 396 371 */ 397 372 … … 480 455 481 456 /* 482 * tcp_alloc_port -- æå®ããããã¼ãçªå·ãè¨å®ããã457 * tcp_alloc_port -- 指定されたポート番号を設定する。 483 458 */ 484 459 … … 500 475 501 476 /* 502 * tcp_init -- TCP ã¢ã¸ã¥ã¼ã«ã®åæå477 * tcp_init -- TCP モジュールの初期化 503 478 */ 504 479 … … 516 491 517 492 /* 518 * tcp_init_iss ã·ã¼ã±ã³ã¹çªå·ãåæåããã493 * tcp_init_iss シーケンス番号を初期化する。 519 494 */ 520 495 … … 530 505 531 506 /* 532 * tcp_close -- ã³ãã¯ã·ã§ã³ãéæ¾ããã507 * tcp_close -- コネクションを開放する。 533 508 */ 534 509 … … 536 511 tcp_close (T_TCP_CEP *cep) 537 512 { 538 /* ã¿ã¤ãã¼ãåæ¢ããã*/513 /* タイマーを停止する。*/ 539 514 tcp_cancel_timers(cep); 540 515 541 516 /* 542 * é信端ç¹ãããã¯ãã543 * åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã517 * 通信端点をロックし、 518 * 受信再構成キューのネットワークバッファを解放する。 544 519 */ 545 520 syscall(wai_sem(cep->semid_lock)); … … 547 522 syscall(sig_sem(cep->semid_lock)); 548 523 549 /* ç¶æ 550 ãæªä½¿ç¨ã«ããã*/ 524 /* 状態を未使用にする。*/ 551 525 cep->fsm_state = TCP_FSM_CLOSED; 552 526 553 527 /* 554 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã555 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½556 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½557 * ã»é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«528 * 以下に関係しないフラグをクリアーする。 529 * ・送受信ウィンドバッファの省コピー機能 530 * ・動的な通信端点の生成・削除機能 531 * ・通信端点のネットワーク層プロトコル 558 532 */ 559 533 cep->flags &= TCP_CEP_FLG_NOT_CLEAR; … … 562 536 563 537 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF || cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { 564 /* ãã³ããããã³ã°ã³ã¼ã«*/538 /* ノンブロッキングコール */ 565 539 566 540 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 … … 575 549 576 550 case TFN_TCP_ACP_CEP: 577 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/551 /* TCP 通信端点からTCP 受付口を解放する。*/ 578 552 cep->rep = NULL; 579 553 … … 587 561 case TFN_TCP_RCV_BUF: 588 562 589 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/563 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 590 564 len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf); 591 565 592 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/566 /* 異常切断等のエラーを設定する。*/ 593 567 if (cep->error == E_TMOUT) 594 568 len = E_CLS; … … 601 575 case TFN_TCP_RCV_DAT: 602 576 603 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/577 /* 受信ウィンドバッファからデータを取り出す。*/ 604 578 len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len); 605 579 606 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/580 /* 異常切断等のエラーを設定する。*/ 607 581 if (cep->error == E_TMOUT) 608 582 len = E_CLS; … … 626 600 } 627 601 628 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/602 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 629 603 cep->rcv_tskid = TA_NULL; 630 604 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 636 610 637 611 case TFN_TCP_CON_CEP: 638 /* TCP é信端ç¹ãã TCP åä»å£ã解æ¾ããã*/612 /* TCP 通信端点から TCP 受付口を解放する。*/ 639 613 cep->rep = NULL; 640 614 … … 659 633 } 660 634 661 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/635 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 662 636 cep->snd_tskid = TA_NULL; 663 637 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 678 652 case TFN_TCP_ACP_CEP: 679 653 680 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/654 /* TCP 通信端点からTCP 受付口を解放する。*/ 681 655 cep->rep = NULL; 682 656 … … 685 659 #endif 686 660 687 /* æ¥ç¶ã¨ã©ã¼ãè¨å®ããã*/661 /* 接続エラーを設定する。*/ 688 662 len = E_CLS; 689 663 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len); … … 692 666 case TFN_TCP_RCV_BUF: 693 667 694 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/668 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 695 669 len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf); 696 670 697 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/671 /* 異常切断等のエラーを設定する。*/ 698 672 if (cep->error == E_TMOUT) 699 673 len = E_CLS; … … 706 680 case TFN_TCP_RCV_DAT: 707 681 708 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/682 /* 受信ウィンドバッファからデータを取り出す。*/ 709 683 len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len); 710 684 711 /* ç°å¸¸åæçã®ã¨ã©ã¼ãè¨å®ããã*/685 /* 異常切断等のエラーを設定する。*/ 712 686 if (cep->error == E_TMOUT) 713 687 len = E_CLS; … … 731 705 } 732 706 733 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/707 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 734 708 cep->rcv_tskid = TA_NULL; 735 709 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 743 717 case TFN_TCP_CON_CEP: 744 718 745 /* TCP é信端ç¹ããTCP åä»å£ã解æ¾ããã*/719 /* TCP 通信端点からTCP 受付口を解放する。*/ 746 720 cep->rep = NULL; 747 721 … … 750 724 #endif 751 725 752 /* æ¥ç¶ã¨ã©ã¼ãè¨å®ããã*/726 /* 接続エラーを設定する。*/ 753 727 len = E_CLS; 754 728 (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len); … … 769 743 } 770 744 771 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/745 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 772 746 cep->snd_tskid = TA_NULL; 773 747 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 779 753 780 754 /* 781 * é信端ç¹ãããã¯ãã782 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã755 * 通信端点をロックし、 756 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 783 757 */ 784 758 syscall(wai_sem(cep->semid_lock)); … … 787 761 syscall(sig_sem(cep->semid_lock)); 788 762 789 /* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/763 /* 未使用になったことを知らせる。*/ 790 764 syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED)); 791 765 } 792 else { /* éãã³ããããã³ã°ã³ã¼ã«*/766 else { /* 非ノンブロッキングコール */ 793 767 794 768 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 795 769 796 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/770 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 797 771 cep->snd_tskid = cep->rcv_tskid = TA_NULL; 798 772 cep->snd_tfn = cep->rcv_tfn = TFN_TCP_UNDEF; 799 773 800 774 /* 801 * é信端ç¹ãããã¯ãã802 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã775 * 通信端点をロックし、 776 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 803 777 */ 804 778 syscall(wai_sem(cep->semid_lock)); … … 807 781 syscall(sig_sem(cep->semid_lock)); 808 782 809 /* æªä½¿ç¨ã«ãªã£ããã¨ãç¥ãããã*/783 /* 未使用になったことを知らせる。*/ 810 784 syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED)); 811 785 812 786 /* 813 * å 814 ¥åºåã¿ã¹ã¯ãèµ·åºãã¦ã 815 * éåä¿¡ä¸å¯ã«ãªã£ããã¨ãç¥ãããã 787 * 入出力タスクを起床して、 788 * 送受信不可になったことを知らせる。 816 789 */ 817 790 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 828 801 829 802 /* 830 * tcp_drop -- TCP æ¥ç¶ãç ´æ£ããã803 * tcp_drop -- TCP 接続を破棄する。 831 804 */ 832 805 … … 846 819 cep->fsm_state = TCP_FSM_CLOSED; 847 820 848 /* éä¿¡ã¨ãéä¿¡å¾ã³ãã¯ã·ã§ã³ã®åæãæ示ããã*/821 /* 送信と、送信後コネクションの切断を指示する。*/ 849 822 cep->flags |= TCP_CEP_FLG_POST_OUTPUT | TCP_CEP_FLG_CLOSE_AFTER_OUTPUT; 850 823 sig_sem(SEM_TCP_POST_OUTPUT); … … 857 830 858 831 /* 859 * tcp_respond -- TCP ã®åä¸ã¡ãã»ã¼ã¸ãéä¿¡ããã832 * tcp_respond -- TCP の単一メッセージを送信する。 860 833 */ 861 834 … … 872 845 873 846 /* 874 * output ã NULL ã§ãªããã°ãããã¯å 875 ¥åããã»ã°ã¡ã³ãã® 876 * net_buf ã§ããã®ã¾ã¾åå©ç¨ããã 847 * output が NULL でなければ、これは入力したセグメントの 848 * net_buf で、そのまま再利用する。 877 849 */ 878 850 if (output != NULL) { … … 880 852 881 853 /* 882 * IPv4 ã§ã¯ãIP ãããã®ãªãã·ã§ã³ãåé¤ããã883 * IPv6 ã§ã¯ãæ¡å¼µããããåé¤ããã854 * IPv4 では、IP ヘッダのオプションを削除する。 855 * IPv6 では、拡張ヘッダを削除する。 884 856 */ 885 857 if (IP_REMOVE_OPTIONS(output) != E_OK) { … … 892 864 #if defined(_IP6_CFG) 893 865 894 /* ãã©ããã¯ã¯ã©ã¹ã¨ããã¼ã©ãã«ãã¯ãªã¢ããã*/866 /* トラヒッククラスとフローラベルをクリアする。*/ 895 867 SET_IP_CF(output, 0); 896 868 897 869 #endif /* of #if defined(_IP6_CFG) */ 898 870 899 /* TCP SDU é·ã 0 ã«ããã*/871 /* TCP SDU 長を 0 にする。*/ 900 872 SET_IP_SDU_SIZE(output, TCP_HDR_SIZE); 901 873 902 874 tcph = GET_TCP_HDR(output, IF_IP_TCP_HDR_OFFSET(output)); 903 875 904 /* ãã¼ãçªå·ã交æããã*/876 /* ポート番号を交換する。*/ 905 877 portno = tcph->sport; 906 878 tcph->sport = tcph->dport; 907 879 tcph->dport = portno; 908 880 909 /* TCP ãããã«æ 910 å ±ãè¨å®ããã*/ 881 /* TCP ヘッダに情報を設定する。*/ 911 882 tcph->doff = TCP_MAKE_DATA_OFF(TCP_HDR_SIZE); 912 883 } 913 884 914 /* cep ã NULL ã§ããã°ãä½ãããªãã§çµäºããã*/885 /* cep が NULL であれば、何もしないで終了する。*/ 915 886 else if (cep == NULL) 916 887 return; … … 931 902 932 903 /* 933 * ãã§ãã¯ãµã ãè¨å®ããã904 * チェックサムを設定する。 934 905 */ 935 906 hdr_offset = IF_IP_TCP_HDR_OFFSET(output); … … 937 908 (uint_t)GET_TCP_HDR_SIZE(output, hdr_offset)); 938 909 939 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/910 /* ネットワークバッファ長を調整する。*/ 940 911 output->len = (uint16_t)GET_IF_IP_TCP_HDR_SIZE(output, hdr_offset); 941 912 … … 946 917 #endif /* of #ifdef TCP_CFG_TRACE */ 947 918 948 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/919 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 949 920 IP_OUTPUT(output, TMO_TCP_OUTPUT); 950 921 } 951 922 #if 0 952 923 /* 953 * tcp_get_segment -- TCP ã»ã°ã¡ã³ããç²å¾ããããããè¨å®ããã924 * tcp_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。 954 925 * 955 * æ»ãå¤ ã¨ã©ã¼ã³ã¼ã956 * optlen ãªãã·ã§ã³ãµã¤ãºã4 ãªã¯ãããåä½957 * maxlen æ大ã»ã°ã¡ã³ããµã¤ãºï¼IF/IP/TCP ããããµã¤ãºãå«ã¾ãªãï¼958 * len TCP SDU ãµã¤ãº926 * 戻り値 エラーコード 927 * optlen オプションサイズ、4 オクテット単位 928 * maxlen 最大セグメントサイズ(IF/IP/TCP ヘッダサイズを含まない) 929 * len TCP SDU サイズ 959 930 */ 960 931 … … 966 937 ER error; 967 938 968 /* IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/939 /* IP データグラムを獲得する。*/ 969 940 if ((error = IN_GET_DATAGRAM(nbuf, 970 941 (uint_t)(TCP_HDR_SIZE + optlen + len), … … 978 949 } 979 950 980 /* TCP ãããã«æ 981 å ±ãè¨å®ããã*/ 982 983 /* TCP ãããã«æ 984 å ±ãè¨å®ããã*/ 951 /* TCP ヘッダに情報を設定する。*/ 952 953 /* TCP ヘッダに情報を設定する。*/ 985 954 tcph = GET_TCP_HDR(*nbuf, IF_IP_TCP_HDR_OFFSET(*nbuf)); 986 955 tcph->sport = htons(cep->myaddr.portno); … … 993 962 #endif 994 963 /* 995 * tcpn_get_segment -- TCP ã»ã°ã¡ã³ããç²å¾ããããããè¨å®ããã964 * tcpn_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。 996 965 * 997 * æ»ãå¤ ã¨ã©ã¼ã³ã¼ã998 * optlen ãªãã·ã§ã³ãµã¤ãºã4 ãªã¯ãããåä½999 * maxlen æ大ã»ã°ã¡ã³ããµã¤ãºï¼IF/IP/TCP ããããµã¤ãºãå«ãï¼1000 * len TCP SDU ãµã¤ãº966 * 戻り値 エラーコード 967 * optlen オプションサイズ、4 オクテット単位 968 * maxlen 最大セグメントサイズ(IF/IP/TCP ヘッダサイズを含む) 969 * len TCP SDU サイズ 1001 970 */ 1002 971 … … 1008 977 ER error; 1009 978 1010 /* IP ãã¼ã¿ã°ã©ã ãç²å¾ããã*/979 /* IP データグラムを獲得する。*/ 1011 980 if ((error = IN_GET_DATAGRAM(nbuf, 1012 981 (uint_t)(TCP_HDR_SIZE + optlen + len), … … 1020 989 } 1021 990 1022 /* TCP ãããã«æ 1023 å ±ãè¨å®ããã*/ 1024 1025 /* TCP ãããã«æ 1026 å ±ãè¨å®ããã*/ 991 /* TCP ヘッダに情報を設定する。*/ 992 993 /* TCP ヘッダに情報を設定する。*/ 1027 994 tcph = GET_TCP_HDR(*nbuf, IF_IP_TCP_HDR_OFFSET(*nbuf)); 1028 995 tcph->sport = htons(cep->myaddr.portno); … … 1035 1002 1036 1003 /* 1037 * tcp_can_send_more -- éä¿¡ã§ããããé信端ç¹ã®ç¶æ 1038 ãè¦ãã 1004 * tcp_can_send_more -- 送信できるか、通信端点の状態を見る。 1039 1005 */ 1040 1006 … … 1044 1010 ER error; 1045 1011 1046 /* éä¿¡ã§ããããCEP ã® FSM ç¶æ 1047 ãè¦ãã*/ 1012 /* 送信できるか、CEP の FSM 状態を見る。*/ 1048 1013 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { 1049 1014 if ((error = cep->error) == E_OK) … … 1052 1017 #ifdef TCP_CFG_NON_BLOCKING 1053 1018 1054 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1055 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1019 /* タイムアウトをチェックする。*/ 1020 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1056 1021 1057 1022 if (!IS_PTR_DEFINED(cep->callback)) 1058 1023 error = E_OBJ; 1059 1024 else { 1060 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1025 /* コールバック関数を呼び出す。*/ 1061 1026 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1062 1027 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error); … … 1083 1048 #ifdef TCP_CFG_NON_BLOCKING 1084 1049 1085 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1086 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1050 /* タイムアウトをチェックする。*/ 1051 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1087 1052 if (!IS_PTR_DEFINED(cep->callback)) 1088 1053 error = E_OBJ; … … 1090 1055 error = E_OBJ; 1091 1056 1092 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1057 /* コールバック関数を呼び出す。*/ 1093 1058 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1094 1059 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error); … … 1116 1081 1117 1082 /* 1118 * tcp_can_recv_more -- åä¿¡ã§ããããé信端ç¹ã®ç¶æ 1119 ãè¦ãã 1083 * tcp_can_recv_more -- 受信できるか、通信端点の状態を見る。 1120 1084 * 1121 * 注æ: æ»ãå¤1085 * 注意: 戻り値 1122 1086 * 1123 * E_OK åä¿¡å¯è½1124 * E_OBJ ç¸æããåæãããããã¨ã©ã¼ãçºçããã1087 * E_OK 受信可能 1088 * E_OBJ 相手から切断されたか、エラーが発生した。 1125 1089 */ 1126 1090 … … 1129 1093 { 1130 1094 /* 1131 * åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãå ´åã¯1132 * é·ã 0ãã¾ãã¯ã¨ã©ã¼ãè¿ãã1095 * 受信できるか、fsm_state を見る。受信できない場合は 1096 * 長さ 0、またはエラーを返す。 1133 1097 */ 1134 1098 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) && … … 1138 1102 #ifdef TCP_CFG_NON_BLOCKING 1139 1103 1140 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1141 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1104 /* タイムアウトをチェックする。*/ 1105 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1142 1106 1143 1107 if (!IS_PTR_DEFINED(cep->callback)) 1144 1108 *error = E_OBJ; 1145 1109 else { 1146 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1110 /* コールバック関数を呼び出す。*/ 1147 1111 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1148 1112 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error); … … 1157 1121 1158 1122 /* 1159 * é信端ç¹ãããã¯ãã¦ã1160 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã1123 * 通信端点をロックして、 1124 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1161 1125 */ 1162 1126 syscall(wai_sem(cep->semid_lock)); … … 1174 1138 #ifdef TCP_CFG_NON_BLOCKING 1175 1139 1176 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1177 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1140 /* タイムアウトをチェックする。*/ 1141 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1178 1142 if (!IS_PTR_DEFINED(cep->callback)) 1179 1143 *error = E_OBJ; … … 1181 1145 *error = E_OBJ; 1182 1146 1183 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1147 /* コールバック関数を呼び出す。*/ 1184 1148 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1185 1149 (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error); … … 1206 1170 1207 1171 /* 1208 * tcp_wait_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 1209 ¥ãã®ãå¾ 1210 ã¤ã 1172 * tcp_wait_rwbuf -- 受信ウィンドバッファにデータが入るのを待つ。 1211 1173 */ 1212 1174 … … 1218 1180 1219 1181 if (cep->rwbuf_count == 0) { 1220 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 1221 ¥åãããã¾ã§å¾ 1222 ã¤ã*/ 1182 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 1223 1183 while (cep->rwbuf_count == 0) { 1224 1184 if ((error = twai_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY, TWF_ORW, &flag, tmout)) != E_OK) { … … 1228 1188 1229 1189 /* 1230 * åä¿¡ã§ããããfsm_state ãè¦ããåä¿¡ã§ããªãç¶æ 1231 ã§ã 1232 * åä¿¡ã¦ã£ã³ããããã¡ã«æåããªãå ´åã¯çµäºããã 1190 * 受信できるか、fsm_state を見る。受信できない状態で、 1191 * 受信ウィンドバッファに文字がない場合は終了する。 1233 1192 */ 1234 1193 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) && … … 1236 1195 1237 1196 /* 1238 * é信端ç¹ãããã¯ãã¦ã1239 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã1197 * 通信端点をロックして、 1198 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1240 1199 */ 1241 1200 syscall(wai_sem(cep->semid_lock)); … … 1255 1214 1256 1215 /* 1257 * tcp_move_ra2rw -- åä¿¡åæ§æãã¥ã¼ã§åæ§æããã»ã°ã¡ã³ããåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã1216 * tcp_move_ra2rw -- 受信再構成キューで再構成したセグメントを受信ウィンドバッファに書き込む。 1258 1217 */ 1259 1218 … … 1265 1224 1266 1225 /* 1267 * åä¿¡ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ã¿ã1268 * rcv_nxt ãå®äºãã SEQ ã ãé²ããã1226 * 受信データを受信ウィンドバッファに書き込み、 1227 * rcv_nxt を完了した SEQ だけ進める。 1269 1228 */ 1270 1229 if (TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) { … … 1275 1234 break; 1276 1235 1277 /* 次ã®ã»ã°ã¡ã³ãã«é²ãã*/1236 /* 次のセグメントに進む。*/ 1278 1237 cep->reassq = qhdr->next; 1279 1238 1280 /* FIN ãã©ã°ã®ã¿æ®ãã*/1239 /* FIN フラグのみ残す。*/ 1281 1240 flags &= TCP_FLG_FIN; 1282 1241 1283 /* ãã¼ã¿ãåä¿¡ã¦ã£ã³ããããã¡ã«æ¸ãè¾¼ãã*/1242 /* データを受信ウィンドバッファに書き込む。*/ 1284 1243 TCP_WRITE_RWBUF(cep, q, (uint_t)(GET_IP_TCP_Q_HDR_OFFSET(q))); 1285 1244 } … … 1293 1252 1294 1253 /* 1295 * tcp_write_raque -- åä¿¡ã»ã°ã¡ã³ããåæ§æãã¦ãåä¿¡åæ§æãã¥ã¼ã«ç¹ãã1254 * tcp_write_raque -- 受信セグメントを再構成して、受信再構成キューに繋ぐ。 1296 1255 */ 1297 1256 … … 1304 1263 int32_t len; 1305 1264 1306 /* TCP ãããã®ä½ç½®ãä¿åããã*/1265 /* TCP ヘッダの位置を保存する。*/ 1307 1266 SET_IP_TCP_Q_HDR_OFFSET(input, thoff); 1308 1267 1309 1268 /* 1310 * MAX_TCP_REALLOC_SIZE 以ä¸ã®å ´åã¯ãæ°ãã«ãããã¯ã¼ã¯ãããã¡ã1311 * å²å½ã¦ã¦ããã¼ã¿ãã³ãã¼ããã1312 * ãã®ã¨ããIP ã®ãªãã·ã§ã³ï¼æ¡å¼µãããï¼ã¨ TCP ã®ãªãã·ã§ã³ã¯åé¤ããã1269 * MAX_TCP_REALLOC_SIZE 以下の場合は、新たにネットワークバッファを 1270 * 割当てて、データをコピーする。 1271 * このとき、IP のオプション(拡張ヘッダ)と TCP のオプションは削除する。 1313 1272 */ 1314 1273 len = IF_IP_TCP_HDR_SIZE(input) + inqhdr->slen; … … 1317 1276 1318 1277 /* 1319 * ãããã¯ã¼ã¯ãããã¡ã確ä¿ã§ããªãã¨ãã¯å²å½ã¦ãªãã1278 * ネットワークバッファが確保できないときは割当てない。 1320 1279 */ 1321 1280 if (tget_net_buf(&new, (uint_t)len, TMO_TCP_GET_NET_BUF) != E_OK) … … 1342 1301 1343 1302 /* 1344 * ä»å追å ããã»ã°ã¡ã³ãããå(p)ã¨å¾(q)ã®ã»ã°ã¡ã³ããæ¢ãã1303 * 今回追加するセグメントより前(p)と後(q)のセグメントを探す。 1345 1304 * 1346 1305 * +-------------------------+ … … 1365 1324 1366 1325 /* 1367 * å(p)ã®ã»ã°ã¡ã³ããããã°ãæ¢ã«ãä»åã¨åãã»ã°ã¡ã³ãã 1368 * ãããã¨ãããããã®å ´åã¯ããã®é¨åã¾ãã¯å 1369 ¨ã¦ãç ´æ£ããã 1326 * 前(p)のセグメントがあれば、既に、今回と同じセグメントが 1327 * あることもある。その場合は、その部分または全てを破棄する。 1370 1328 * 1371 1329 * qhdr->seq … … 1389 1347 1390 1348 /* 1391 * len ãæ£ã§ããã°ãå(p) ã®ã»ã°ã¡ã³ãã¨ä»åã®1392 * ã»ã°ã¡ã³ããéãªã£ã¦ããã1349 * len が正であれば、前(p) のセグメントと今回の 1350 * セグメントが重なっている。 1393 1351 */ 1394 1352 if (len >= inqhdr->slen) { 1395 1353 1396 1354 /* 1397 * len ãä»åã®ã»ã°ã¡ã³ãã¨åããªã1398 * ã¾ã£ããåãã»ã°ã¡ã³ããªã®ã§ä½ãããªãã1355 * len が今回のセグメントと同じなら 1356 * まったく同じセグメントなので何もしない。 1399 1357 */ 1400 1358 if (new != NULL) { … … 1407 1365 1408 1366 /* 1409 * 追å ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã1367 * 追加するセグメントの SDU を len 分前に詰める。 1410 1368 */ 1411 1369 inqhdr->seq += len; … … 1416 1374 1417 1375 /* 1418 * ãã¥ã¼ã«ã¤ãªãåã«ãæ°ãããããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ã移ãã1419 * TCP ã®ãªãã·ã§ã³ã¯åé¤ããã1376 * キューにつなぐ前に、新しいネットワークバッファにデータを移す。 1377 * TCP のオプションは削除する。 1420 1378 */ 1421 1379 if (new != NULL) { … … 1430 1388 1431 1389 /* 1432 * éãªãå¾(q)ã®ã»ã°ã¡ã³ãã調æ´ããã1390 * 重なる後(q)のセグメントを調整する。 1433 1391 * 1434 1392 * inqhdr->seq … … 1450 1408 len = inqhdr->seq + inqhdr->slen - qhdr->seq; 1451 1409 if (len <= 0) 1452 /* len ãè² ãªãéãªã£ã¦ããªãã*/1410 /* len が負なら重なっていない。*/ 1453 1411 break; 1454 1412 else if (len < qhdr->slen) { 1455 1413 1456 1414 /* 1457 * å¾ãã§éãªã£ã¦ããã»ã°ã¡ã³ãã® SDU ã len ååã«è©°ããã1415 * 後ろで重なっているセグメントの SDU を len 分前に詰める。 1458 1416 * 1459 1417 * inqhdr->seq … … 1499 1457 1500 1458 /* 1501 * tcp_rexmt_val -- åéã¿ã¤ã ã¢ã¦ãå¤ãè¿ãã1459 * tcp_rexmt_val -- 再送タイムアウト値を返す。 1502 1460 */ 1503 1461 … … 1515 1473 1516 1474 /* 1517 * tcp_init_cep -- é信端ç¹ãåæåããã1475 * tcp_init_cep -- 通信端点を初期化する。 1518 1476 */ 1519 1477 … … 1524 1482 #ifdef TCP_CFG_RWBUF_CSAVE 1525 1483 /* 1526 * åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã«ããå ´åã 1527 * åä¿¡ã¦ã£ã³ããããã¡ãå 1528 ¨ã¦è§£æ¾ãããªããã¨ãããã®ã§ã 1529 * ããã§è§£æ¾ããã 1484 * 受信ウィンドバッファの省コピー機能を有効にした場合、 1485 * 受信ウィンドバッファが全て解放されないことがあるので、 1486 * ここで解放する。 1530 1487 */ 1531 1488 if (cep->rwbufq != NULL) { … … 1542 1499 cep->rbuf_rptr = cep->rbuf_wptr = cep->rbuf; 1543 1500 1544 cep->maxseg = DEF_TCP_SND_SEG; /* éä¿¡æ大ã»ã°ã¡ã³ããµã¤ãº*/1545 cep->srtt = TCP_TVAL_SRTT_BASE; /* æ»ãããªç§»åå¹³å*/1501 cep->maxseg = DEF_TCP_SND_SEG; /* 送信最大セグメントサイズ */ 1502 cep->srtt = TCP_TVAL_SRTT_BASE; /* 滑らかな移動平均 */ 1546 1503 cep->rttvar = ((TCP_TVAL_RTO_BASE - TCP_TVAL_SRTT_BASE) << TCP_RTTVAR_SHIFT) / 4; 1547 /* æ»ãããªåæ£*/1548 cep->rxtcur = TCP_TVAL_RTO_BASE; /* ç¾å¨ã®åéå¤*/1549 cep->snd_cwnd = MAX_TCP_WIN_SIZE; /* 輻輳ã¦ã£ã³ããµã¤ãº*/1550 cep->snd_ssthresh= MAX_TCP_WIN_SIZE; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd)ã® å¶éå¤*/1504 /* 滑らかな分散 */ 1505 cep->rxtcur = TCP_TVAL_RTO_BASE; /* 現在の再送値 */ 1506 cep->snd_cwnd = MAX_TCP_WIN_SIZE; /* 輻輳ウィンドサイズ */ 1507 cep->snd_ssthresh= MAX_TCP_WIN_SIZE; /* 輻輳ウィンドサイズ(snd_cwnd)の 制限値 */ 1551 1508 1552 1509 /* 1553 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã1554 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½1555 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½1556 * ã»é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«1510 * 以下に関係しないフラグをクリアーする。 1511 * ・送受信ウィンドバッファの省コピー機能 1512 * ・動的な通信端点の生成・削除機能 1513 * ・通信端点のネットワーク層プロトコル 1557 1514 */ 1558 1515 cep->flags &= TCP_CEP_FLG_NOT_CLEAR; 1559 1516 1560 /* ã»ããã©ãåæåããã*/1517 /* セマフォを初期化する。*/ 1561 1518 sig_sem(cep->semid_lock); 1562 1519 1563 /* ãã©ã°ãåæåããã*/1520 /* フラグを初期化する。*/ 1564 1521 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); 1565 1522 syscall(clr_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY)); … … 1567 1524 1568 1525 /* 1569 * tcp_notify -- ICMP ã¨ã©ã¼ã®å¦ç1526 * tcp_notify -- ICMP エラーの処理 1570 1527 */ 1571 1528 … … 1578 1535 1579 1536 /* 1580 * ã³ãã¯ã·ã§ã³éè¨æ¸ã§ããã¹ãå°éä¸è½ã¨ã©ã¼ã®å ´åã¯ã1581 * åéã«ããå¦çããã1537 * コネクション開設済で、ホスト到達不能エラーの場合は、 1538 * 再送により処理する。 1582 1539 */ 1583 1540 if (cep->fsm_state == TCP_FSM_ESTABLISHED && … … 1586 1543 1587 1544 /* 1588 * ã³ãã¯ã·ã§ã³éè¨ä¸ãåãã¨ã©ã¼ãä½åº¦ãåä¿¡ããå ´åã¯ã 1589 * å¾ 1590 ã¡ç¶æ 1591 ã解é¤ãã対å¿ããé¢æ°ã«ã¨ã©ã¼ãè¿ãããã 1545 * コネクション開設中、同じエラーを何度か受信した場合は、 1546 * 待ち状態を解除し、対応する関数にエラーを返させる。 1592 1547 */ 1593 1548 if (cep->fsm_state < TCP_FSM_ESTABLISHED && cep->rxtshift > 3 && cep->net_error != E_OK) { … … 1598 1553 cep->net_error = error; 1599 1554 1600 /* éä¿¡ãæ示ããã*/1555 /* 送信を指示する。*/ 1601 1556 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1602 1557 sig_sem(SEM_TCP_POST_OUTPUT); … … 1606 1561 1607 1562 /* 1608 * tcp_lock_cep -- TCP é信端ç¹ãããã¯ããã1563 * tcp_lock_cep -- TCP 通信端点をロックする。 1609 1564 */ 1610 1565 … … 1617 1572 *p_cep = NULL; 1618 1573 1619 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1574 /* TCP 通信端点 ID をチェックする。*/ 1620 1575 if (!VALID_TCP_CEPID(cepid)) 1621 1576 return E_ID; 1622 1577 1623 /* TCP é信端ç¹ãå¾ãã*/1578 /* TCP 通信端点を得る。*/ 1624 1579 cep = GET_TCP_CEP(cepid); 1625 1580 1626 /* TCP é信端ç¹ãããã¯ããã*/1581 /* TCP 通信端点をロックする。*/ 1627 1582 syscall(wai_sem(cep->semid_lock)); 1628 1583 1629 /* TCP é信端ç¹ããã§ãã¯ããã*/1584 /* TCP 通信端点をチェックする。*/ 1630 1585 if (!VALID_TCP_CEP(cep)) { 1631 1586 syscall(sig_sem(cep->semid_lock)); … … 1634 1589 1635 1590 /* 1636 * API æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1637 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1591 * API 機能コードとタスク識別子を記録する。 1592 * すでに記録されていれば、ペンディング中なのでエラー 1638 1593 */ 1639 1594 if (IS_TFN_TCP_RCV(tfn)) { … … 1657 1612 } 1658 1613 1659 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1614 /* 通信端点のロックを解除する。*/ 1660 1615 syscall(sig_sem(cep->semid_lock)); 1661 1616 … … 1667 1622 1668 1623 /* 1669 * ãã¬ã¼ã¹åºåã«ç¨ããã·ãªã¢ã«ãã¼ãçªå·1624 * トレース出力に用いるシリアルポート番号 1670 1625 */ 1671 1626 … … 1675 1630 1676 1631 /* 1677 * ã³ãã¯ã·ã§ã³ã®ç¶æ 1678 1632 * コネクションの状態 1679 1633 */ 1680 1634 … … 1694 1648 1695 1649 /* 1696 * trace_putchar -- ã·ãªã¢ã«ãã¼ãã¸ã®æååºå1650 * trace_putchar -- シリアルポートへの文字出力 1697 1651 */ 1698 1652 … … 1705 1659 1706 1660 /* 1707 * ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æåååºåã©ã¤ãã©ãª1708 */ 1709 1710 /* 1711 * æ°å¤å¤æã®ããã®å¤æ表1661 * シリアルポートへの書式付文字列出力ライブラリ 1662 */ 1663 1664 /* 1665 * 数値変換のための変換表 1712 1666 */ 1713 1667 … … 1716 1670 1717 1671 /* 1718 * convert -- trace_printf ã®æ°å¤å¤æ1672 * convert -- trace_printf の数値変換 1719 1673 */ 1720 1674 … … 1753 1707 1754 1708 /* 1755 * trace_printf -- ã·ãªã¢ã«ãã¼ãã¸ã®æ¸å¼ä»æåååºå1709 * trace_printf -- シリアルポートへの書式付文字列出力 1756 1710 */ 1757 1711 … … 1766 1720 va_start(ap, fmt); 1767 1721 while ((ch = *fmt ++) != '\0') { 1768 if (ch != '%') { /* æ¸å¼æå®ä»¥å¤*/1722 if (ch != '%') { /* 書式指定以外 */ 1769 1723 trace_putchar(portid, (char)ch); 1770 1724 continue; … … 1773 1727 width = longflag = 0; 1774 1728 padchar = ' '; 1775 if ((ch = *fmt ++) == '0') { /* ä¸ä½æ¡ã®0 */1729 if ((ch = *fmt ++) == '0') { /* 上位桁の 0 */ 1776 1730 padchar = '0'; 1777 1731 ch = *fmt ++; 1778 1732 } 1779 1733 1780 while ('0' <= ch && ch <= '9') { /* åºåå¹ 1781 */ 1734 while ('0' <= ch && ch <= '9') { /* 出力幅 */ 1782 1735 width = width * 10 + ch - '0'; 1783 1736 ch = *fmt ++; 1784 1737 } 1785 1738 1786 while (ch == 'l') { /* long (long) ã®æå®*/1739 while (ch == 'l') { /* long (long) の指定 */ 1787 1740 longflag ++; 1788 1741 ch = *fmt ++; … … 1845 1798 1846 1799 /* 1847 * TCP ãã©ã°æåå1800 * TCP フラグ文字列 1848 1801 */ 1849 1802 … … 1864 1817 1865 1818 /* 1866 * éä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå1819 * 送信 TCP ヘッダのトレース出力 1867 1820 */ 1868 1821 … … 1925 1878 1926 1879 /* 1927 * åä¿¡ TCP ãããã®ãã¬ã¼ã¹åºå1880 * 受信 TCP ヘッダのトレース出力 1928 1881 * 1929 * 注æ: TCP ãããå 1930 ã¯ããã§ã«ãã¹ããã¤ããªã¼ã 1882 * 注意: TCP ヘッダ内は、すでにホストバイトオーダ 1931 1883 */ 1932 1884 -
azure_iot_hub/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
r388 r389 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$ … … 134 122 135 123 /* 136 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å137 * ãã ããé信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ï¼cep->sbufï¼ã®å¤ã«ããã138 * TCP é信端ç¹æ¯ã«éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã使ç¨ãããã139 * 使ç¨ããªãããåãæ¿ããã140 */ 141 142 /* 143 * tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼é¸æï¼ã124 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合 125 * ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、 126 * TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、 127 * 使用しないかを切り替える。 128 */ 129 130 /* 131 * tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。 144 132 */ 145 133 … … 154 142 155 143 /* 156 * tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼é¸æï¼ã144 * tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。 157 145 */ 158 146 … … 167 155 168 156 /* 169 * tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãï¼é¸æï¼ã157 * tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。 170 158 */ 171 159 … … 178 166 179 167 /* 180 * tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾ 181 ã¤ï¼é¸æï¼ã 168 * tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(選択)。 182 169 */ 183 170 … … 192 179 193 180 /* 194 * tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼é¸æï¼ã181 * tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。 195 182 */ 196 183 … … 205 192 206 193 /* 207 * tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼é¸æï¼ã194 * tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。 208 195 */ 209 196 … … 218 205 219 206 /* 220 * tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®è§£æ¾ãæ示ããï¼é¸æï¼ã207 * tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。 221 208 */ 222 209 … … 229 216 230 217 /* 231 * tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããï¼é¸æï¼ã218 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。 232 219 */ 233 220 … … 240 227 241 228 /* 242 * tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼é¸æï¼ã229 * tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。 243 230 */ 244 231 … … 255 242 256 243 /* 257 * tcp_drop_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããï¼å°ç¨ï¼ã244 * tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。 258 245 */ 259 246 … … 262 249 { 263 250 264 /* éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã*/251 /*送信ウィンドバッファから指定されたオクテット分削除する。*/ 265 252 cep->swbuf_count -= (uint16_t)len; 266 253 267 /* éä¿¡æ¸ã¿ã§ãACKå¾ 268 ã¡ã®æã¯ãACKå®äºã«å¤æ´ããã*/ 254 /* 送信済みで、ACK待ちの時は、ACK完了に変更する。*/ 269 255 if (len > 0 && (cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_SENT) { 270 256 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED; … … 274 260 275 261 /* 276 * tcp_write_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãï¼å°ç¨ï¼ã262 * tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。 277 263 */ 278 264 … … 283 269 uint_t hdr_size = IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr); 284 270 285 /* é信端ç¹ãããã¯ããã*/271 /* 通信端点をロックする。*/ 286 272 syscall(wai_sem(cep->semid_lock)); 287 273 … … 295 281 * <---------------- error ---------------> 296 282 * ^ 297 * net_buf 㧠4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã283 * net_buf で 4 オクテット境界にアラインされている。 298 284 * 299 * tcp_output 㨠ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã 300 * n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã 301 * ãããã£ã³ã°ããããã®åãèæ 302 ®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã® 303 * 空ããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã 285 * tcp_output と ip_output で、チェックサムを計算するとき、 286 * n が 4 オクテット境界になるように SDU の後ろに 0 を 287 * パッディングする。その分を考慮して送信ウィンドバッファの 288 * 空きサイズを 4 オクテット境界に調整する。 304 289 */ 305 290 error = (uint_t)(((error - hdr_size) >> 2 << 2) + hdr_size); … … 310 295 len = (uint_t)(error - hdr_size); 311 296 312 /* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºã調æ´ããã*/297 /* 送信ウインドサイズによりサイズを調整する。*/ 313 298 if (len > cep->snd_wnd) 314 299 len = cep->snd_wnd; … … 316 301 len = cep->snd_cwnd; 317 302 318 /* ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 319 ããªãããã«ããã*/ 303 /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/ 320 304 if (len > cep->maxseg) 321 305 len = cep->maxseg; 322 306 323 /* ãã¼ã¿ã移ãã*/307 /* データを移す。*/ 324 308 memcpy(cep->sbuf_wptr, (void*)((uint8_t*)data), (size_t)len); 325 309 cep->sbuf_wptr += len; … … 327 311 error = len; 328 312 329 /* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨å®ããã*/313 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 330 314 cep->swbufq->len = (uint16_t)(cep->swbuf_count + hdr_size); 331 315 SET_IP_SDU_SIZE(cep->swbufq, cep->swbuf_count + TCP_HDR_SIZE); 332 316 333 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããã*/317 /* フラグを、送信可能に設定する。*/ 334 318 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY; 335 319 } 336 320 337 else { /* éä¿¡ã¦ã¤ã³ããããã¡ãä¸æ£*/321 else { /* 送信ウインドバッファが不正 */ 338 322 syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.", 339 323 GET_TCP_CEPID(cep), error, hdr_size); 340 324 341 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/325 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 342 326 tcp_free_swbufq_cs(cep); 343 327 } 344 328 345 /* é信端ç¹ã®ããã¯ã解é¤ããã*/329 /* 通信端点のロックを解除する。*/ 346 330 syscall(sig_sem(cep->semid_lock)); 347 331 … … 350 334 351 335 /* 352 * tcp_wait_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã¨ç¸æã®åä¿¡ã¦ã£ã³ããéãã®ãå¾ 353 ã¤ï¼å°ç¨ï¼ã 336 * tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(専用)。 354 337 */ 355 338 … … 362 345 int_t win; 363 346 364 /* éä¿¡ã¦ã£ã³ããããã¡ãå²å½ã¦æ¸ã¿ã§ã空ããããã°çµäºããã*/347 /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/ 365 348 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY && 366 349 (cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) < net_buf_siz(cep->swbufq)) 367 350 return E_OK; 368 351 369 /* éä¿¡ä¸ã§ããã°ãçµäºããã¾ã§å¾ 370 æ©ããã*/ 352 /* 送信中であれば、終了するまで待機する。*/ 371 353 while ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) { 372 354 373 /* éä¿¡å¾ 374 ã¡ã®æéã tmout ããæ¸ããã*/ 355 /* 送信待ちの時間を tmout から減ずる。*/ 375 356 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 376 357 syscall(get_tim(&before)); … … 381 362 syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY))); 382 363 383 /* éä¿¡å¾ 384 ã¡ã®æéã tmout ããæ¸ããã*/ 364 /* 送信待ちの時間を tmout から減ずる。*/ 385 365 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 386 366 syscall(get_tim(&after)); … … 391 371 392 372 /* 393 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 394 ãè¦ãã 395 * éä¿¡ã¦ã¤ã³ããããã¡ã空ãã¾ã§å¾ 396 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 397 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 373 * 送信できるか、CEP の FSM 状態を見る。 374 * 送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、 375 * コネクションが切断されたことを意味している。 398 376 */ 399 377 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) … … 401 379 } 402 380 403 /* ç¸æã®åä¿¡ã¦ã£ã³ããéãã¦ããå ´åã¯ãéãã¾ã§å¾ 404 æ©ããã*/ 381 /* 相手の受信ウィンドが閉じている場合は、開くまで待機する。*/ 405 382 while (true) { 406 383 407 384 /* 408 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº409 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº385 * snd_wnd: 相手の受信可能ウィンドサイズ 386 * snd_cwnd: 輻輳ウィンドサイズ 410 387 * 411 * win: ã©ã¡ããå°ããã¦ã£ã³ããµã¤ãºã«è¨å®ããã388 * win: どちらか小さいウィンドサイズに設定する。 412 389 */ 413 390 win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd; … … 415 392 break; 416 393 417 /* éãå¾ 418 ã¡ã®æéã tmout ããæ¸ããã*/ 394 /* 開き待ちの時間を tmout から減ずる。*/ 419 395 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 420 396 syscall(get_tim(&before)); … … 425 401 syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY))); 426 402 427 /* éãå¾ 428 ã¡ã®æéã tmout ããæ¸ããã*/ 403 /* 開き待ちの時間を tmout から減ずる。*/ 429 404 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 430 405 syscall(get_tim(&after)); … … 435 410 436 411 /* 437 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 438 ãè¦ãã 439 * éä¿¡ã¦ã¤ã³ããããã¡ã空ãã¾ã§å¾ 440 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 441 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 412 * 送信できるか、CEP の FSM 状態を見る。 413 * 送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、 414 * コネクションが切断されたことを意味している。 442 415 */ 443 416 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) … … 445 418 } 446 419 447 /* ãããã¯ã¼ã¯ãããã¡ãç²å¾ããã*/420 /* ネットワークバッファを獲得する。*/ 448 421 if ((error = tcpn_get_segment(&cep->swbufq, cep, 0, 449 422 TCP_CFG_SWBUF_CSAVE_MIN_SIZE, … … 452 425 return error; 453 426 454 /* éä¿¡ã¦ã£ã³ããããã¡ãåæåããã*/427 /* 送信ウィンドバッファを初期化する。*/ 455 428 tcp_init_swbuf(cep); 456 429 … … 459 432 460 433 /* 461 * tcp_get_swbuf_addr_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããï¼å°ç¨ï¼ã434 * tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。 462 435 */ 463 436 … … 467 440 ER_UINT error; 468 441 469 /* é信端ç¹ãããã¯ããã*/442 /* 通信端点をロックする。*/ 470 443 syscall(wai_sem(cep->semid_lock)); 471 444 … … 479 452 * <---------------- error ---------------> 480 453 * ^ 481 * net_buf 㧠4 ãªã¯ãããå¢çã«ã¢ã©ã¤ã³ããã¦ããã454 * net_buf で 4 オクテット境界にアラインされている。 482 455 * 483 * tcp_output 㨠ip_output ã§ããã§ãã¯ãµã ãè¨ç®ããã¨ãã 484 * n ã 4 ãªã¯ãããå¢çã«ãªãããã« SDU ã®å¾ãã« 0 ã 485 * ãããã£ã³ã°ããããã®åãèæ 486 ®ãã¦éä¿¡ã¦ã£ã³ããããã¡ã® 487 * 空ããµã¤ãºã 4 ãªã¯ãããå¢çã«èª¿æ´ããã 456 * tcp_output と ip_output で、チェックサムを計算するとき、 457 * n が 4 オクテット境界になるように SDU の後ろに 0 を 458 * パッディングする。その分を考慮して送信ウィンドバッファの 459 * 空きサイズを 4 オクテット境界に調整する。 488 460 */ 489 461 error = (uint_t)(((error - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) >> 2 << 2) - cep->swbuf_count); 490 462 491 /* éä¿¡ã¦ã¤ã³ããµã¤ãºã«ãããµã¤ãºã調æ´ããã*/463 /* 送信ウインドサイズによりサイズを調整する。*/ 492 464 if (error > cep->snd_wnd) 493 465 error = cep->snd_wnd; … … 495 467 error = cep->snd_cwnd; 496 468 497 /* ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ãè¶ 498 ããªãããã«ããã*/ 469 /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/ 499 470 if (error > cep->maxseg) 500 471 error = cep->maxseg; 501 472 502 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/473 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/ 503 474 cep->get_buf_len = error; 504 475 505 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å 506 é ãè¨å®ããã*/ 476 /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/ 507 477 *p_buf = cep->sbuf_wptr; 508 478 } 509 479 510 else { /* ãããã¯ã¼ã¯ãããã¡ãä¸æ£*/511 512 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/480 else { /* ネットワークバッファが不正 */ 481 482 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 513 483 tcp_free_swbufq_cs(cep); 514 484 } 515 485 516 /* é信端ç¹ã®ããã¯ã解é¤ããã*/486 /* 通信端点のロックを解除する。*/ 517 487 syscall(sig_sem(cep->semid_lock)); 518 488 … … 521 491 522 492 /* 523 * tcp_send_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããï¼å°ç¨ï¼ã493 * tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。 524 494 */ 525 495 … … 527 497 tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len) 528 498 { 529 /* é信端ç¹ãããã¯ããã*/499 /* 通信端点をロックする。*/ 530 500 syscall(wai_sem(cep->semid_lock)); 531 501 … … 533 503 cep->swbuf_count += len; 534 504 535 /* ãããã¯ã¼ã¯ãããã¡é·ã¨ IP ãã¼ã¿ã°ã©ã é·ãè¨å®ããã*/505 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 536 506 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)); 537 507 SET_IP_SDU_SIZE(cep->swbufq, len + TCP_HDR_SIZE); 538 508 539 /* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/509 /* tcp_get_buf の割当て長をリセットする。*/ 540 510 cep->get_buf_len = 0; 541 511 542 /* é信端ç¹ã®ããã¯ã解é¤ããã*/512 /* 通信端点のロックを解除する。*/ 543 513 syscall(sig_sem(cep->semid_lock)); 544 514 545 /* ãã©ã°ããéä¿¡å¯è½ã«è¨å®ããå¼·å¶çã«éä¿¡ããã*/515 /* フラグを、送信可能に設定し、強制的に送信する。*/ 546 516 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY 547 517 | TCP_CEP_FLG_FORCE … … 551 521 552 522 /* 553 * tcp_free_swbufq_cs -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®è§£æ¾ãæ示ããï¼å°ç¨ï¼ã523 * tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。 554 524 * 555 * 注æ: 556 * å¿ 557 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 558 * æ»ã£ãå¾ã解é¤ããå¿ 559 è¦ãããã 525 * 注意: 526 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 527 * 戻った後、解除する必要がある。 560 528 */ 561 529 … … 563 531 tcp_free_swbufq_cs (T_TCP_CEP *cep) 564 532 { 565 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãå¾ 566 ã¡ãåãæ¶ãã*/ 533 /* 送信ウィンドバッファの空き待ちを取り消す。*/ 567 534 cep->flags &= ~TCP_CEP_FLG_WBCS_NBUF_REQ; 568 535 569 536 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) { 570 537 /* 571 * éä¿¡ã¦ã£ã³ããããã¡ãåé¤ããããã«ããã©ã°ã ACK å®äºã«è¨å®ãã572 * TCP åºåã¿ã¹ã¯ãèµ·åããã538 * 送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、 539 * TCP 出力タスクを起動する。 573 540 */ 574 541 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED; … … 578 545 579 546 /* 580 * tcp_alloc_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããï¼å°ç¨ï¼ã547 * tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。 581 548 */ 582 549 … … 587 554 588 555 /* 589 * éä¿¡ã¦ã£ã³ããããã¡ãæªä½¿ç¨ã®å ´åã®ã¿ã590 * éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããã556 * 送信ウィンドバッファが未使用の場合のみ、 557 * 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。 591 558 */ 592 559 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_FREE) … … 595 562 596 563 /* 597 * tcp_is_swbuf_full_cs -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããï¼å°ç¨ï¼ã564 * tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。 598 565 */ 599 566 … … 606 573 607 574 /* 608 * tcp_init_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãåæåããï¼å°ç¨ï¼ã575 * tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。 609 576 * 610 * 注æ: tcp_get_segment ã§ãããã¯ã¼ã¯ãããã¡ãç²å¾ãã611 * ç´å¾ã«å¼ã³åºããã¨ã577 * 注意: tcp_get_segment でネットワークバッファを獲得した 578 * 直後に呼び出すこと。 612 579 */ 613 580 … … 615 582 tcp_init_swbuf (T_TCP_CEP *cep) 616 583 { 617 /* éä¿¡ã¦ã¤ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/584 /* 送信ウインドバッファの使用中サイズをリセットする。*/ 618 585 cep->swbuf_count = 0; 619 586 620 /* éä¿¡ã¦ã¤ã³ããããã¡ã®ã¢ãã¬ã¹ãè¨å®ããã*/587 /* 送信ウインドバッファのアドレスを設定する。*/ 621 588 cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_NET_HDR_OFFSET(&cep->dstaddr.ipaddr)); 622 589 623 /* ãã©ã°ãããããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿ã«è¨å®ããã*/590 /* フラグを、ネットワークバッファ割当て済みに設定する。*/ 624 591 cep->flags = (cep->flags & ~(TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK)) 625 592 | TCP_CEP_FLG_WBCS_NBUF_READY; … … 627 594 628 595 /* 629 * tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããï¼å°ç¨ï¼ã596 * tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。 630 597 */ 631 598 … … 645 612 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_PEND) { 646 613 647 /* ãããã¯ã¼ã¯ãããã¡ãäºç´ããã*/614 /* ネットワークバッファを予約する。*/ 648 615 cep->swbufq = nbuf; 649 616 nbuf = NULL; 650 617 651 /* ãã©ã°ãäºç´ã«è¨å®ããã*/618 /* フラグを予約に設定する。*/ 652 619 cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_RSVD; 653 620 sel_ix = ix; … … 664 631 665 632 /* 666 * tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãï¼å°ç¨ï¼ã633 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。 667 634 */ 668 635 … … 676 643 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_RSVD) { 677 644 678 /* äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡ãè¿ãã*/645 /* 予約してあるネットワークバッファを返す。*/ 679 646 nbuf = cep->swbufq; 680 647 cep->swbufq = NULL; 681 648 682 /* TCP åºåã¿ã¹ã¯ãèµ·åããã*/649 /* TCP 出力タスクを起動する。*/ 683 650 sig_sem(SEM_TCP_POST_OUTPUT); 684 651 } … … 698 665 699 666 /* 700 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ãªå ´å701 * ãã ããé信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ï¼cep->rbufï¼ã®å¤ã«ããã702 * TCP é信端ç¹æ¯ã«åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã使ç¨ãããã703 * 使ç¨ããªãããåãæ¿ããã704 */ 705 706 /* 707 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã667 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合 668 * ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、 669 * TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、 670 * 使用しないかを切り替える。 671 */ 672 673 /* 674 * tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。 708 675 */ 709 676 … … 718 685 719 686 /* 720 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã687 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 721 688 */ 722 689 … … 731 698 732 699 /* 733 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã700 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 734 701 */ 735 702 … … 744 711 745 712 /* 746 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã713 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 747 714 */ 748 715 … … 755 722 756 723 /* 757 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã724 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 758 725 */ 759 726 … … 770 737 771 738 /* 772 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹773 */ 774 775 /* 776 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æåã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã739 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効 740 */ 741 742 /* 743 * tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。 777 744 */ 778 745 … … 787 754 cep->rwbuf_count -= len; 788 755 789 /* ãããã¯ã¼ã¯ãããã¡ã«ãã¼ã¿ãç¡ããªã£ãã解æ¾ããã*/756 /* ネットワークバッファにデータが無くなったら解放する。*/ 790 757 if (len == qhdr->slen) { 791 758 T_NET_BUF *next; … … 809 776 810 777 /* 811 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã778 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 812 779 */ 813 780 … … 819 786 uint8_t *buf = (uint8_t*)data; 820 787 821 /* é信端ç¹ãããã¯ããã*/788 /* 通信端点をロックする。*/ 822 789 syscall(wai_sem(cep->semid_lock)); 823 790 824 791 /* 825 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã«ãããã¯ã¼ã¯ãããã¡ãç¡ããªãã826 * len ã 0 ã«ãªãã¾ã§ç¶ããã792 * 受信ウィンドバッファキューにネットワークバッファが無くなるか 793 * len が 0 になるまで続ける。 827 794 */ 828 795 while (cep->rwbufq != NULL && len > 0) { … … 830 797 831 798 /* 832 * len ã¨åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®å 833 é ãããã¯ã¼ã¯ãããã¡ã® 834 * ãã¼ã¿æ°ã®å°ããæ¹ã移ããã¼ã¿æ°ã«ããã 799 * len と受信ウィンドバッファキューの先頭ネットワークバッファの 800 * データ数の小さい方を移すデータ数にする。 835 801 */ 836 802 if (len > qhdr->slen) … … 844 810 845 811 /* 846 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã«847 * ãã¼ã¿ãç¡ããªã£ãã解æ¾ããã812 * 受信ウィンドバッファキューのネットワークバッファに 813 * データが無くなったら解放する。 848 814 */ 849 815 tcp_drop_rwbuf_cs(cep, blen); … … 854 820 } 855 821 856 /* é信端ç¹ã®ããã¯ã解é¤ããã*/822 /* 通信端点のロックを解除する。*/ 857 823 syscall(sig_sem(cep->semid_lock)); 858 824 … … 861 827 862 828 /* 863 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã829 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 864 830 */ 865 831 … … 870 836 uint_t len; 871 837 872 /* é信端ç¹ãããã¯ããã*/838 /* 通信端点をロックする。*/ 873 839 syscall(wai_sem(cep->semid_lock)); 874 840 875 841 if (cep->rwbufq == NULL) { 876 842 877 /* åä¿¡ã¦ã£ã³ããããã¡ãå 878 ¨ã¦éæ¾ããã¦ããã¨ãã*/ 843 /* 受信ウィンドバッファが全て開放されているとき。*/ 879 844 *p_buf = NULL; 880 845 len = 0; … … 882 847 else { 883 848 884 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å 885 é ãè¨å®ããã*/ 849 /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/ 886 850 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)); 887 851 *p_buf = GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff; 888 852 889 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/853 /* 受信ウィンドバッファのデータ長を計算する。*/ 890 854 len = qhdr->slen; 891 855 } 892 856 893 /* é信端ç¹ã®ããã¯ã解é¤ããã*/857 /* 通信端点のロックを解除する。*/ 894 858 syscall(sig_sem(cep->semid_lock)); 895 859 896 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/860 /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/ 897 861 cep->rcv_buf_len = len; 898 862 return len; … … 900 864 901 865 /* 902 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã866 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 903 867 * 904 * 注æ: 905 * å¿ 906 è¦ã§ããã°ããã®é¢æ°ãå¼ã³åºãåã«ãé信端ç¹ãããã¯ãã 907 * æ»ã£ãå¾ã解é¤ããå¿ 908 è¦ãããã 868 * 注意: 869 * 必要であれば、この関数を呼び出す前に、通信端点をロックし、 870 * 戻った後、解除する必要がある。 909 871 */ 910 872 … … 928 890 } 929 891 930 /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãºããªã»ããããã*/892 /* 受信ウィンドバッファの使用中サイズをリセットする。*/ 931 893 cep->rwbuf_count = 0; 932 894 } … … 934 896 935 897 /* 936 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã898 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 937 899 * 938 * 注æ: 939 * å 940 ¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã 941 * 並ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã 942 * 追å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã 900 * 注意: 901 * 入力 input は、T_TCP_Q_HDR によりリンクされ、 902 * 並べ替えが終了していなければならない。また、 903 * 追加するデータは、受信ウィンドバッファに収まること。 943 904 */ 944 905 … … 950 911 uint_t inlen, last; 951 912 952 /* é信端ç¹ãããã¯ããã*/913 /* 通信端点をロックする。*/ 953 914 syscall(wai_sem(cep->semid_lock)); 954 915 … … 963 924 964 925 /* 965 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã 966 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æ大ã¨ã³ããªæ°ãè¶ 967 ããã¨ãã¯ã 968 * åä¿¡ããã»ã°ã¡ã³ããç ´æ£ããã 969 * ãã ããSDU é·ã 0 ã®ã»ã°ã¡ã³ã㨠FIN ã»ã°ã¡ã³ãã¯ç ´æ£ããªãã 970 * ãªããæ£å¸¸ã«åä¿¡ããã»ã°ã¡ã³ããç ´æ£ãããããåéåæ°ãå¢å ããã 926 * TCP 通信端点の受信ウィンドバッファの省コピー機能の、 927 * 受信ウィンドバッファキューの最大エントリ数を超えるときは、 928 * 受信したセグメントを破棄する。 929 * ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。 930 * なお、正常に受信したセグメントも破棄するため、再送回数が増加する。 971 931 */ 972 932 syscall(rel_net_buf(input)); 973 933 974 /* é信端ç¹ã®ããã¯ã解é¤ããã*/934 /* 通信端点のロックを解除する。*/ 975 935 syscall(sig_sem(cep->semid_lock)); 976 936 return; … … 983 943 qhdr = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff); 984 944 985 /* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/945 /* 受信済みシーケンス番号を更新する。*/ 986 946 cep->rcv_nxt += inlen; 987 947 988 /* ç·æ¥ãã¼ã¿ã® SDU è£æ£ãè¡ãã*/948 /* 緊急データの SDU 補正を行う。*/ 989 949 if (qhdr->urp > 0 && inlen > 0) { 990 950 inlen -= qhdr->urp; … … 995 955 last = cep->rwbuf_count; 996 956 997 /* ãããã¯ã¼ã¯ãããã¡ãåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®æå¾ã«é£çµããã*/957 /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/ 998 958 qhdr->next = NULL; 999 959 nextp = &cep->rwbufq; … … 1003 963 1004 964 /* 1005 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1006 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1007 * ããªããã¨ãç¥ãããããã§ããã965 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 966 * これは、アプリケーションに、相手からこれ以上データが送られて 967 * こないことを知らせるためである。 1008 968 */ 1009 969 if (inlen > 0) { … … 1013 973 } 1014 974 1015 /* é信端ç¹ã®ããã¯ã解é¤ããã*/975 /* 通信端点のロックを解除する。*/ 1016 976 syscall(sig_sem(cep->semid_lock)); 1017 977 1018 978 #ifdef TCP_CFG_NON_BLOCKING 1019 979 1020 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/980 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ノンブロッキングコール */ 1021 981 1022 982 int_t len; … … 1026 986 1027 987 /* 1028 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1029 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1030 * ããªããã¨ãç¥ãããããã§ããã988 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 989 * これは、アプリケーションに、相手からこれ以上データが送られて 990 * こないことを知らせるためである。 1031 991 */ 1032 992 if (len > 0 || inlen == 0) { 1033 993 1034 /* tcp_rcv_buf ã®å²å½ã¦é·ãè¨å®ããã*/994 /* tcp_rcv_buf の割当て長を設定する。*/ 1035 995 cep->rcv_buf_len = len; 1036 996 1037 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/997 /* 受信ウィンドバッファのアドレスを返す。*/ 1038 998 *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq, 1039 999 GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff; … … 1052 1012 1053 1013 /* 1054 * é信端ç¹ãããã¯ãã¦ã1055 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã1014 * 通信端点をロックして、 1015 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1056 1016 */ 1057 1017 syscall(wai_sem(cep->semid_lock)); … … 1061 1021 } 1062 1022 1063 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1023 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1064 1024 cep->rcv_tskid = TA_NULL; 1065 1025 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; 1066 1026 } 1067 1027 1068 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/1028 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ノンブロッキングコール */ 1069 1029 int_t len; 1070 1030 1071 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/1031 /* 受信ウィンドバッファからデータを取り出す。*/ 1072 1032 if ((len = tcp_read_rwbuf_cs(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) { 1073 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/1033 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 1074 1034 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1075 1035 sig_sem(SEM_TCP_POST_OUTPUT); … … 1077 1037 1078 1038 /* 1079 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã1080 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦1081 * ããªããã¨ãç¥ãããããã§ããã1039 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 1040 * これは、アプリケーションに、相手からこれ以上データが送られて 1041 * こないことを知らせるためである。 1082 1042 */ 1083 1043 if (len > 0 || inlen == 0) { … … 1094 1054 } 1095 1055 1096 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/1056 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 1097 1057 cep->rcv_tskid = TA_NULL; 1098 1058 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 1104 1064 if (inlen == 0 && cep->rwbuf_count == 0) { 1105 1065 /* 1106 * åä¿¡ã¦ã£ã³ããããã¡å 1107 ã®ãã¼ã¿æ°ã 0 ã§ã 1108 * ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã 1109 * é信端ç¹ãããã¯ãã¦ã 1110 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã 1066 * 受信ウィンドバッファ内のデータ数が 0 で、 1067 * 相手から FIN フラグが付いたセグメントを受信したときは、 1068 * 通信端点をロックして、 1069 * 受信ウィンドバッファキューのネットワークバッファを解放する。 1111 1070 */ 1112 1071 syscall(wai_sem(cep->semid_lock)); … … 1116 1075 1117 1076 /* 1118 * åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 1119 ¥ããã inlen == 0 ã®æãå 1120 ¥åã¿ã¹ã¯ãèµ·åºããã 1121 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã 1122 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéãã㦠1123 * ããªããã¨ãç¥ãããããã§ããã 1077 * 受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。 1078 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 1079 * これは、アプリケーションに、相手からこれ以上データが送られて 1080 * こないことを知らせるためである。 1124 1081 */ 1125 1082 if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) { -
azure_iot_hub/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
r388 r389 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$ … … 130 118 131 119 /* 132 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹133 */ 134 135 /* 136 * tcp_read_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãã120 * TCP 通信端点の送信ウィンドバッファの省コピー機能が無効 121 */ 122 123 /* 124 * tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。 137 125 */ 138 126 … … 144 132 uint_t hdr_offset = IF_IP_TCP_HDR_OFFSET(output); 145 133 146 /* SDU ã®å¤§ããããã§ãã¯ããã*/134 /* SDU の大きさをチェックする。*/ 147 135 if (sdu_size < GET_TCP_HDR_SIZE(output, hdr_offset) + len) { 148 136 syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d", … … 153 141 wptr = GET_TCP_SDU(output, hdr_offset); 154 142 155 /* é信端ç¹ãããã¯ããã*/143 /* 通信端点をロックする。*/ 156 144 syscall(wai_sem(cep->semid_lock)); 157 145 … … 159 147 if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) { 160 148 161 /* 転ééå§ãéä¿¡ã¦ã£ã³ããããã¡ã®çµãããè¶ 162 ããã¨ãã®å¦çã*/ 149 /* 転送開始が送信ウィンドバッファの終わりを超えるときの処理 */ 163 150 rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff); 164 151 } … … 166 153 uint_t sub; 167 154 168 /* 転éç¯å²ãã©ã¦ã³ãããã¨ãã®å¦ç*/155 /* 転送範囲がラウンドするときの処理 */ 169 156 sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf)); 170 157 memcpy((void*)wptr, rptr, (size_t)sub); … … 178 165 NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len); 179 166 180 /* é信端ç¹ã®ããã¯ã解é¤ããã*/167 /* 通信端点のロックを解除する。*/ 181 168 syscall(sig_sem(cep->semid_lock)); 182 169 } 183 170 184 171 /* 185 * tcp_drop_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã172 * tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。 186 173 */ 187 174 … … 191 178 uint_t last; 192 179 193 /* é信端ç¹ãããã¯ããã*/180 /* 通信端点をロックする。*/ 194 181 syscall(wai_sem(cep->semid_lock)); 195 182 … … 197 184 198 185 if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz) 199 /* ã©ã¦ã³ãããã¨ãã®è¨ç®*/186 /* ラウンドするときの計算 */ 200 187 cep->sbuf_rptr -= cep->sbufsz - len; 201 188 else … … 203 190 cep->swbuf_count -= (uint16_t)len; 204 191 205 /* é信端ç¹ã®ããã¯ã解é¤ããã*/192 /* 通信端点のロックを解除する。*/ 206 193 syscall(sig_sem(cep->semid_lock)); 207 194 208 195 #ifdef TCP_CFG_NON_BLOCKING 209 196 210 if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/211 212 /* é信端ç¹ãããã¯ããã*/197 if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) { /* ノンブロッキングコール */ 198 199 /* 通信端点をロックする。*/ 213 200 syscall(wai_sem(cep->semid_lock)); 214 201 215 /* éä¿¡ãã¼ã¿é·ãè¨ç®ããã*/202 /* 送信データ長を計算する。*/ 216 203 if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) 217 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/204 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */ 218 205 len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)); 219 206 else 220 207 len = cep->sbufsz - cep->swbuf_count; 221 208 222 /* é信端ç¹ã®ããã¯ã解é¤ããã*/209 /* 通信端点のロックを解除する。*/ 223 210 syscall(sig_sem(cep->semid_lock)); 224 211 225 212 if (len > 0) { 226 213 227 /* tcp_get_buf ã®å²å½ã¦é·ãè¨å®ããã*/214 /* tcp_get_buf の割当て長を設定する。*/ 228 215 cep->get_buf_len = len; 229 216 230 /* éä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/217 /* 送信ウィンドバッファのアドレスを返す。*/ 231 218 *cep->snd_p_buf = cep->sbuf_wptr; 232 219 … … 241 228 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 242 229 243 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/230 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 244 231 cep->snd_tskid = TA_NULL; 245 232 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 250 237 251 238 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT || 252 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) { /* ãã³ããããã³ã°ã³ã¼ã«*/239 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) { /* ノンブロッキングコール */ 253 240 254 241 #else /* of #ifdef TCP_CFG_EXTENTIONS */ 255 242 256 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/243 else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) { /* ノンブロッキングコール */ 257 244 258 245 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ … … 260 247 ER_UINT error; 261 248 262 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/249 /* 送信ウィンドバッファにデータを書き込む。*/ 263 250 error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len); 264 251 265 252 #ifdef TCP_CFG_EXTENTIONS 266 253 267 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/254 /* 送信緊急ポインタを設定する。*/ 268 255 if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB) 269 256 cep->snd_up = cep->snd_una + error; … … 281 268 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); 282 269 283 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/270 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 284 271 cep->snd_tskid = TA_NULL; 285 272 cep->snd_tfn = cep->snd_nblk_tfn = TFN_TCP_UNDEF; … … 289 276 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 290 277 291 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããåºæ¥ããåºåã¿ã¹ã¯ãèµ·åºããã*/278 /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/ 292 279 if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz) 293 280 syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY)); … … 300 287 301 288 if (cep->swbuf_count > 0) { 302 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°åºåããã¹ãããã*/289 /* 送信ウィンドバッファにデータがあれば出力をポストする。*/ 303 290 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 304 291 sig_sem(SEM_TCP_POST_OUTPUT); … … 307 294 308 295 /* 309 * tcp_write_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã296 * tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。 310 297 */ 311 298 … … 315 302 uint_t offset; 316 303 317 /* é信端ç¹ãããã¯ããã*/304 /* 通信端点をロックする。*/ 318 305 syscall(wai_sem(cep->semid_lock)); 319 306 320 /* len ã¨éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã®å°ããæ¹ã移ããã¼ã¿æ°ã«ããã*/307 /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/ 321 308 if (len > (cep->sbufsz - cep->swbuf_count)) 322 309 len = cep->sbufsz - cep->swbuf_count; 323 310 324 /* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/311 /* 書き込みポインタがラウンドするときの処理 */ 325 312 if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) { 326 313 offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf)); … … 336 323 cep->swbuf_count += len - offset; 337 324 338 /* é信端ç¹ã®ããã¯ã解é¤ããã*/325 /* 通信端点のロックを解除する。*/ 339 326 syscall(sig_sem(cep->semid_lock)); 340 327 … … 343 330 344 331 /* 345 * tcp_wait_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 346 ã¤ã 332 * tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。 347 333 */ 348 334 … … 355 341 while (cep->swbuf_count >= cep->sbufsz) { 356 342 /* 357 * éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãããªããã°ãåºåããã¹ããã¦ã 358 * éä¿¡ã¦ã£ã³ããããã¡ã空ãã¾ã§å¾ 359 ã¤ã 343 * 送信ウィンドバッファの空きがなければ、出力をポストして、 344 * 送信ウィンドバッファが空くまで待つ。 360 345 */ 361 346 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; … … 368 353 369 354 /* 370 * éä¿¡ã§ããããCEP ã® FSM ç¶æ 371 ãè¦ãã 372 * éä¿¡ã¦ã£ã³ããããã¡ã空ãã¾ã§å¾ 373 ã¤éã«ãéä¿¡ä¸è½ã«ãªã£ãå ´åã¯ã 374 * ã³ãã¯ã·ã§ã³ãåæããããã¨ãæå³ãã¦ããã 355 * 送信できるか、CEP の FSM 状態を見る。 356 * 送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、 357 * コネクションが切断されたことを意味している。 375 358 */ 376 359 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { … … 382 365 } 383 366 /* 384 * tcp_get_swbuf_addr -- éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã367 * tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。 385 368 */ 386 369 … … 390 373 uint_t len; 391 374 392 /* é信端ç¹ãããã¯ããã*/375 /* 通信端点をロックする。*/ 393 376 syscall(wai_sem(cep->semid_lock)); 394 377 395 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ã®å 396 é ãè¨å®ããã*/ 378 /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/ 397 379 *p_buf = cep->sbuf_wptr; 398 380 399 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããµã¤ãºãè¨ç®ããã*/381 /* 送信ウィンドバッファの空きサイズを計算する。*/ 400 382 if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) 401 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯ãæ¸è¾¼ã¿ãã¤ã³ã¿ããéä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/383 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */ 402 384 len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)); 403 385 else 404 386 len = cep->sbufsz - cep->swbuf_count; 405 387 406 /* é信端ç¹ã®ããã¯ã解é¤ããã*/388 /* 通信端点のロックを解除する。*/ 407 389 syscall(sig_sem(cep->semid_lock)); 408 390 409 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/391 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/ 410 392 cep->get_buf_len = len; 411 393 return (ER_UINT)len; … … 413 395 414 396 /* 415 * tcp_send_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã397 * tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。 416 398 */ 417 399 … … 419 401 tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len) 420 402 { 421 /* é信端ç¹ãããã¯ããã*/403 /* 通信端点をロックする。*/ 422 404 syscall(wai_sem(cep->semid_lock)); 423 405 … … 425 407 cep->swbuf_count += len; 426 408 427 /* æ¸è¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/409 /* 書込みポインタがラウンドするときの処理 */ 428 410 if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz) 429 411 cep->sbuf_wptr = (uint8_t*)cep->sbuf; 430 412 431 /* tcp_get_buf ã®å²å½ã¦é·ããªã»ããããã*/413 /* tcp_get_buf の割当て長をリセットする。*/ 432 414 cep->get_buf_len = 0; 433 415 434 /* é信端ç¹ã®ããã¯ã解é¤ããã*/416 /* 通信端点のロックを解除する。*/ 435 417 syscall(sig_sem(cep->semid_lock)); 436 418 437 /* éä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/419 /* 送信ウィンドバッファがフルのときは強制的に送信する。*/ 438 420 if (cep->swbuf_count >= cep->sbufsz) 439 421 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; … … 441 423 442 424 /* 443 * tcp_is_swbuf_full -- éä¿¡ã¦ã£ã³ããããã¡ãæºæ¯ããã§ãã¯ããã425 * tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。 444 426 */ 445 427 … … 455 437 456 438 /* 457 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãç¡å¹458 */ 459 460 /* 461 * tcp_drop_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããååé¤ããã439 * TCP 通信端点の受信ウィンドバッファの省コピー機能が無効 440 */ 441 442 /* 443 * tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。 462 444 */ 463 445 … … 468 450 cep->rbuf_rptr += len; 469 451 470 /* èªã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/452 /* 読み出しポインタがラウンドするときの処理 */ 471 453 if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz) 472 454 cep->rbuf_rptr = (uint8_t*)cep->rbuf; … … 474 456 475 457 /* 476 * tcp_read_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ããæå®ããããªã¯ãããåèªã¿åºãã458 * tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。 477 459 */ 478 460 … … 482 464 uint_t offset; 483 465 484 /* é信端ç¹ãããã¯ããã*/466 /* 通信端点をロックする。*/ 485 467 syscall(wai_sem(cep->semid_lock)); 486 468 487 /* len ã¨åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿æ°ã®å°ããæ¹ãåãåºããã¼ã¿æ°ã«ããã*/469 /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/ 488 470 if (len > cep->rwbuf_count) 489 471 len = cep->rwbuf_count; 490 472 491 /* èªã¿åºããã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/473 /* 読み出しポインタがラウンドするときの処理 */ 492 474 if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) { 493 475 offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf)); … … 503 485 cep->rbuf_rptr += len - offset; 504 486 505 /* é信端ç¹ã®ããã¯ã解é¤ããã*/487 /* 通信端点のロックを解除する。*/ 506 488 syscall(sig_sem(cep->semid_lock)); 507 489 … … 510 492 511 493 /* 512 * tcp_get_rwbuf_addr -- åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºãã¢ãã¬ã¹ãç²å¾ããã494 * tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。 513 495 */ 514 496 … … 518 500 uint_t len; 519 501 520 /* é信端ç¹ãããã¯ããã*/502 /* 通信端点をロックする。*/ 521 503 syscall(wai_sem(cep->semid_lock)); 522 504 523 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨ç®ããã*/505 /* 受信ウィンドバッファのデータ長を計算する。*/ 524 506 if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) 525 /* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/507 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */ 526 508 len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)); 527 509 else 528 510 len = cep->rwbuf_count; 529 511 530 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ã®ã¢ãã¬ã¹ã®å 531 é ãè¨å®ããã*/ 512 /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/ 532 513 *p_buf = cep->rbuf_rptr; 533 514 534 /* é信端ç¹ã®ããã¯ã解é¤ããã*/515 /* 通信端点のロックを解除する。*/ 535 516 syscall(sig_sem(cep->semid_lock)); 536 517 537 /* åä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿é·ãè¨å®ãããã®å¤ãè¿ãã*/518 /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/ 538 519 cep->rcv_buf_len = len; 539 520 return len; … … 541 522 542 523 /* 543 * tcp_write_rwbuf -- åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã524 * tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。 544 525 * 545 * 注æ: 546 * å 547 ¥å input ã¯ãT_TCP_Q_HDR ã«ãããªã³ã¯ããã 548 * 並ã¹æ¿ããçµäºãã¦ããªããã°ãªããªããã¾ãã 549 * 追å ãããã¼ã¿ã¯ãåä¿¡ã¦ã£ã³ããããã¡ã«åã¾ããã¨ã 526 * 注意: 527 * 入力 input は、T_TCP_Q_HDR によりリンクされ、 528 * 並べ替えが終了していなければならない。また、 529 * 追加するデータは、受信ウィンドバッファに収まること。 550 530 */ 551 531 … … 556 536 uint_t offset, inlen, last; 557 537 558 /* é信端ç¹ãããã¯ããã*/538 /* 通信端点をロックする。*/ 559 539 syscall(wai_sem(cep->semid_lock)); 560 540 561 541 qhdr = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff); 562 542 563 /* åä¿¡æ¸ã¿ã·ã¼ã±ã³ã¹çªå·ãæ´æ°ããã*/543 /* 受信済みシーケンス番号を更新する。*/ 564 544 cep->rcv_nxt += qhdr->slen; 565 545 … … 567 547 inlen = qhdr->slen; 568 548 569 /* ç·æ¥ãã¼ã¿ã® SDU è£æ£ãè¡ãã*/549 /* 緊急データの SDU 補正を行う。*/ 570 550 if (qhdr->urp > 0 && inlen > 0) { 571 551 inlen -= qhdr->urp; … … 575 555 576 556 /* 577 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã578 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦579 * ããªããã¨ãç¥ãããããã§ããã557 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 558 * これは、アプリケーションに、相手からこれ以上データが送られて 559 * こないことを知らせるためである。 580 560 */ 581 561 if (inlen > 0) { 582 562 583 /* æ¸ãè¾¼ã¿ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã®å¦ç*/563 /* 書き込みポインタがラウンドするときの処理 */ 584 564 if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) { 585 565 offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)); … … 604 584 #ifdef TCP_CFG_NON_BLOCKING 605 585 606 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ãã³ããããã³ã°ã³ã¼ã«*/586 if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) { /* ノンブロッキングコール */ 607 587 608 588 int_t len; 609 589 610 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºããã¼ã¿é·ãè¨ç®ããã*/590 /* 受信ウィンドバッファの空きデータ長を計算する。*/ 611 591 if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) { 612 /* ãã¤ã³ã¿ãã©ã¦ã³ãããã¨ãã¯åä¿¡ã¦ã£ã³ããããã¡ã®çµããã¾ã§*/592 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */ 613 593 len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)); 614 594 } … … 616 596 len = cep->rwbuf_count; 617 597 618 /* é信端ç¹ã®ããã¯ã解é¤ããã*/598 /* 通信端点のロックを解除する。*/ 619 599 syscall(sig_sem(cep->semid_lock)); 620 600 621 601 /* 622 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã623 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦624 * ããªããã¨ãç¥ãããããã§ããã602 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 603 * これは、アプリケーションに、相手からこれ以上データが送られて 604 * こないことを知らせるためである。 625 605 */ 626 606 if (len > 0 || inlen == 0) { 627 607 628 /* tcp_rcv_buf ã®å²å½ã¦é·ãè¨å®ããã*/608 /* tcp_rcv_buf の割当て長を設定する。*/ 629 609 cep->rcv_buf_len = len; 630 610 631 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãè¿ãã*/611 /* 受信ウィンドバッファのアドレスを返す。*/ 632 612 *cep->rcv_p_buf = cep->rbuf_rptr; 633 613 … … 646 626 647 627 /* 648 * é信端ç¹ãããã¯ãã¦ã649 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã628 * 通信端点をロックして、 629 * 受信ウィンドバッファキューのネットワークバッファを解放する。 650 630 */ 651 631 syscall(wai_sem(cep->semid_lock)); … … 655 635 } 656 636 657 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/637 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 658 638 cep->rcv_tskid = TA_NULL; 659 639 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; 660 640 } 661 641 662 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ãã³ããããã³ã°ã³ã¼ã«*/642 else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) { /* ノンブロッキングコール */ 663 643 ER_UINT len; 664 644 665 /* é信端ç¹ã®ããã¯ã解é¤ããã*/645 /* 通信端点のロックを解除する。*/ 666 646 syscall(sig_sem(cep->semid_lock)); 667 647 668 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/648 /* 受信ウィンドバッファからデータを取り出す。*/ 669 649 if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) { 670 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/650 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 671 651 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 672 652 sig_sem(SEM_TCP_POST_OUTPUT); … … 674 654 675 655 /* 676 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã677 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéããã¦678 * ããªããã¨ãç¥ãããããã§ããã656 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 657 * これは、アプリケーションに、相手からこれ以上データが送られて 658 * こないことを知らせるためである。 679 659 */ 680 660 if (len > 0 || inlen == 0) { … … 691 671 } 692 672 693 /* è¨æ¶ããã¦ããã¿ã¹ã¯ ID 㨠API æ©è½ã³ã¼ããã¯ãªã¢ã¼ããã*/673 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/ 694 674 cep->rcv_tskid = TA_NULL; 695 675 cep->rcv_tfn = cep->rcv_nblk_tfn = TFN_TCP_UNDEF; … … 700 680 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 701 681 702 /* é信端ç¹ã®ããã¯ã解é¤ããã*/682 /* 通信端点のロックを解除する。*/ 703 683 syscall(sig_sem(cep->semid_lock)); 704 684 705 685 if (inlen == 0 && cep->rwbuf_count == 0) { 706 686 /* 707 * åä¿¡ã¦ã£ã³ããããã¡å 708 ã®ãã¼ã¿æ°ã 0 ã§ã 709 * ç¸æãã FIN ãã©ã°ãä»ããã»ã°ã¡ã³ããåä¿¡ããã¨ãã¯ã 710 * é信端ç¹ãããã¯ãã¦ã 711 * åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã 687 * 受信ウィンドバッファ内のデータ数が 0 で、 688 * 相手から FIN フラグが付いたセグメントを受信したときは、 689 * 通信端点をロックして、 690 * 受信ウィンドバッファキューのネットワークバッファを解放する。 712 691 */ 713 692 syscall(wai_sem(cep->semid_lock)); … … 717 696 718 697 /* 719 * åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãå 720 ¥ããã inlen == 0 ã®æãå 721 ¥åã¿ã¹ã¯ãèµ·åºããã 722 * FIN ãã©ã°ãä»ããã»ã°ã¡ã³ã㯠inlen == 0 ã«ãªããã¨ãããã 723 * ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã«ãç¸æãããã以ä¸ãã¼ã¿ãéãã㦠724 * ããªããã¨ãç¥ãããããã§ããã 698 * 受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。 699 * FIN フラグが付いたセグメントは inlen == 0 になることもある。 700 * これは、アプリケーションに、相手からこれ以上データが送られて 701 * こないことを知らせるためである。 725 702 */ 726 703 if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) -
azure_iot_hub/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
r388 r389 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$ … … 119 107 120 108 /* 121 * å±æé¢æ°109 * 局所関数 122 110 */ 123 111 … … 131 119 132 120 /* 133 * ããã¯ãªãæé121 * バックオフ時間 134 122 * 135 * åéãè¡ããã³ã«ãã¿ã¤ã ã¢ã¦ãã®æéã延é·ããã123 * 再送を行うたびに、タイムアウトの時間を延長する。 136 124 */ 137 125 … … 143 131 }; 144 132 145 #define TCP_TOTAL_BACK_OFF 511 /* ããã¯ãªãæéã®åè¨*/146 147 /* 148 * tcp_timers -- ã¿ã¤ã ã¢ã¦ãå¦ç133 #define TCP_TOTAL_BACK_OFF 511 /* バックオフ時間の合計 */ 134 135 /* 136 * tcp_timers -- タイムアウト処理 149 137 */ 150 138 … … 158 146 159 147 /* 160 * åéã¿ã¤ã148 * 再送タイマ 161 149 */ 162 150 case TCP_TIM_REXMT: 163 151 164 152 /* 165 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ã«ãªã£ãã¨ãã¯ã166 * ã³ãã¯ã·ã§ã³ãåæããã153 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、 154 * コネクションを切断する。 167 155 */ 168 156 if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) { … … 174 162 175 163 /* 176 * åéã¿ã¤ã ã¢ã¦ããè¨ç®ããã164 * 再送タイムアウトを計算する。 177 165 */ 178 166 cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]), … … 182 170 183 171 /* 184 * srtt: å¹³æ»åãããRTT185 * rttvar: å¹³æ»åãããåæ£172 * srtt: 平滑化された RTT 173 * rttvar: 平滑化された分散 186 174 * 187 * åéåæ°ãæ大åéåæ°ã® 1/4 ã«ãªã£ãã¨ãã¯ã188 * å¹³æ»åãããåæ£ (rttvar) ã« srtt ãå ç®ãã189 * å¹³æ»åããã RTT ã 0 ã«ããã175 * 再送回数が最大再送回数の 1/4 になったときは、 176 * 平滑化された分散 (rttvar) に srtt を加算し、 177 * 平滑化された RTT を 0 にする。 190 178 * 191 179 */ … … 196 184 197 185 /* 198 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ199 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ186 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 187 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 200 188 * 201 * ååéä¿¡ãã SEQ (snd_nxt) ã202 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã¾ã§æ»ãã189 * 前回送信した SEQ (snd_nxt) を 190 * 確認された最大送信 SEQ (snd_una) まで戻す。 203 191 */ 204 192 cep->snd_nxt = cep->snd_una; … … 206 194 207 195 /* 208 * rtt: å¾å¾©æéã®è¨æ¸¬ãä¸æ¢ããã196 * rtt: 往復時間の計測を中止する。 209 197 */ 210 198 cep->rtt = 0; 211 199 212 200 /* 213 * éä¿¡ã¦ã¤ã³ãã®è¨å®201 * 送信ウインドの設定 214 202 * 215 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº216 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº217 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº203 * snd_wnd: 相手の受信可能ウィンドサイズ 204 * snd_cwnd: 輻輳ウィンドサイズ 205 * maxseg : 相手の最大受信セグメントサイズ 218 206 * 219 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã220 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã®221 * ã©ã¡ããå°ãããµã¤ãºã® 1/2 ããæ´ã«222 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã§å²ã£ãå¤ã223 * ãã ãã2 以ä¸207 * 相手の受信可能ウィンドサイズ (snd_wnd) か、 208 * 輻輳ウィンドサイズ (snd_cwnd) の 209 * どちらか小さいサイズの 1/2 を、更に 210 * 相手の最大受信セグメントサイズ (maxseg) で割った値。 211 * ただし、2 以上 224 212 */ 225 213 if (cep->snd_wnd < cep->snd_cwnd) … … 232 220 233 221 /* 234 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã¯235 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã«ã236 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ã¯237 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã® win åã«238 * è¨å®ããã222 * 輻輳ウィンドサイズ (snd_cwnd) は 223 * 相手の受信可能ウィンドサイズ (snd_wnd) に、 224 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) は 225 * 相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に 226 * 設定する。 239 227 */ 240 228 cep->snd_cwnd = cep->maxseg; … … 242 230 cep->dupacks = 0; 243 231 244 /* åºåããã¹ãããã*/232 /* 出力をポストする。*/ 245 233 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 246 234 sig_sem(SEM_TCP_POST_OUTPUT); … … 248 236 249 237 /* 250 * æç¶ã¿ã¤ã238 * 持続タイマ 251 239 */ 252 240 case TCP_TIM_PERSIST: 253 241 254 242 /* 255 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ãè¶ 256 ãã¦ãã¦ã 257 * ã¢ã¤ãã«æéããä¿çã¿ã¤ãã®æ¨æºå¤ (TCP_TVAL_KEEP_IDLEã 258 * æ¨æº 2 * 60 * 60 ç§) 以ä¸ãã 259 * åéã¿ã¤ã ã¢ã¦ãå¤ * ããã¯ãªãæéã®åè¨ä»¥ä¸ãªã 260 * ã³ãã¯ã·ã§ã³ãåæããã 243 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、 244 * アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、 245 * 標準 2 * 60 * 60 秒) 以上か、 246 * 再送タイムアウト値 * バックオフ時間の合計以上なら 247 * コネクションを切断する。 261 248 */ 262 249 if (cep->rxtshift > TCP_MAX_REXMT_SHIFT && … … 268 255 } 269 256 270 /* æç¶ã¿ã¤ããåè¨å®ããåºåããã¹ãããã*/257 /* 持続タイマを再設定し、出力をポストする。*/ 271 258 tcp_set_persist_timer(cep); 272 259 … … 276 263 277 264 /* 278 * ä¿ç (keep alive) ã¿ã¤ã265 * 保留 (keep alive) タイマ 279 266 */ 280 267 case TCP_TIM_KEEP: 281 268 282 269 /* 283 * ã³ãã¯ã·ã§ã³ãéè¨ãããã¾ã§ã«ã¿ã¤ã ã¢ã¦ãããã284 * ã³ãã¯ã·ã§ã³ã®éè¨ãä¸æ¢ããã270 * コネクションが開設されるまでにタイムアウトしたら 271 * コネクションの開設を中止する。 285 272 */ 286 273 if (cep->fsm_state < TCP_FSM_ESTABLISHED) { … … 316 303 317 304 /* 318 * 2MSL ã¿ã¤ã305 * 2MSL タイマ 319 306 */ 320 307 case TCP_TIM_2MSL: … … 332 319 333 320 /* 334 * tcp_cancel_timers -- å 335 ¨ã¦ã®ã¿ã¤ãããã£ã³ã»ã«ããã 321 * tcp_cancel_timers -- 全てのタイマをキャンセルする。 336 322 */ 337 323 … … 348 334 349 335 /* 350 * tcp_tw_timo -- Time Wait ç¨ TCP é信端ç¹ã®ã¿ã¤ã ã¢ã¦ãå¦ç336 * tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理 351 337 */ 352 338 … … 360 346 361 347 /* 362 * Time Wait ç¨ TCP é信端ç¹ã§ã¿ã¤ã ã¢ã¦ãã®ã¨ã³ããªãæ¢ç´¢ãã363 * æ¢ç´¢ããã¨ã³ããªã空ãã«ããã348 * Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、 349 * 探索したエントリを空きにする。 364 350 */ 365 351 frees = 0; … … 371 357 372 358 /* 373 * Time Wait ç¨ TCP é信端ç¹ã®ç©ºãã¨ã³ããªãçºçããã 374 * æ¨æº TCP é信端ç¹ã§ Time Wait ä¸ã® TCP é信端ç¹ãæ¢ç´¢ãã 375 * å¿ 376 è¦ãªæ 377 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 378 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 359 * Time Wait 用 TCP 通信端点の空きエントリが発生したら 360 * 標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、 361 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 362 * 標準の TCP 通信端点を開放する。 379 363 */ 380 364 if (frees > 0) { … … 387 371 388 372 /* 389 * ãã£ã¨ãé·ãé Time Wait ãã¦ãã TCP é信端ç¹ãéæ¾ããã373 * もっとも長い間 Time Wait している TCP 通信端点を開放する。 390 374 */ 391 375 while (waits > 0) { … … 410 394 411 395 /* 412 * tcp_slow_timo -- 500 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°396 * tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数 413 397 */ 414 398 … … 452 436 453 437 /* 454 * tcp_fast_timo -- 200 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°438 * tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数 455 439 */ 456 440 … … 476 460 477 461 /* 478 * tcp_range_set -- æéãæå®ããç¯å²ã«è¨å®ããã462 * tcp_range_set -- 時間を指定した範囲に設定する。 479 463 */ 480 464 … … 491 475 492 476 /* 493 * tcp_set_persist_timer -- æç¶ã¿ã¤ãã®è¨å®477 * tcp_set_persist_timer -- 持続タイマの設定 494 478 */ 495 479 … … 500 484 501 485 /* 502 * srtt: å¹³æ»åãããRTT503 * rttvar: å¹³æ»åãããåæ£486 * srtt: 平滑化された RTT 487 * rttvar: 平滑化された分散 504 488 */ 505 489 time = ((cep->srtt >> 2) + cep->rttvar) >> 1; 506 490 507 491 /* 508 * åéã¿ã¤ããè¨å®ããã¦ããã°å復ä¸è½ã¨ã©ã¼492 * 再送タイマも設定されていれば回復不能エラー 509 493 */ 510 494 if (cep->timer[TCP_TIM_REXMT]) … … 512 496 513 497 /* 514 * æç¶ã¿ã¤ããè¨å®ããã498 * 持続タイマを設定する。 515 499 */ 516 500 cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]), … … 519 503 520 504 /* 521 * åéåæ°ãæ´æ°ããã505 * 再送回数を更新する。 522 506 */ 523 507 if (cep->rxtshift < TCP_MAX_REXMT_SHIFT) -
azure_iot_hub/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
r388 r389 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(1000000)/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 137 /* 151 * é¢æ°138 * 関数 152 139 */ 153 140 -
azure_iot_hub/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
r388 r389 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$ … … 130 118 131 119 /* 132 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 133 ¨ã¦ã®æ©è½ã 134 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 120 * TINET をライブラリ化しない場合は、全ての機能を 121 * オブジェクトファイルに出力するため、マクロを有効にする。 135 122 */ 136 123 … … 160 147 161 148 /* 162 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«149 * IPv6 と IPv4 で引数が異なる関数のコンパイル 163 150 */ 164 151 … … 228 215 229 216 /* 230 * tcp_user_closed -- ã¦ã¼ã¶ããã®ã³ãã¯ã·ã§ã³ã®éæ¾217 * tcp_user_closed -- ユーザからのコネクションの開放 231 218 */ 232 219 … … 236 223 switch (cep->fsm_state) { 237 224 238 case TCP_FSM_CLOSED: /* ã¯ãã¼ãº*/239 case TCP_FSM_LISTEN: /* ååãªã¼ãã³*/225 case TCP_FSM_CLOSED: /* クローズ */ 226 case TCP_FSM_LISTEN: /* 受動オープン */ 240 227 cep->fsm_state = TCP_FSM_CLOSED; 241 228 cep = tcp_close(cep); 242 229 break; 243 230 244 case TCP_FSM_SYN_SENT: /* è½åãªã¼ãã³ãSYN éä¿¡æ¸ã¿*/245 case TCP_FSM_SYN_RECVD: /* SYN ãåä¿¡ããSYN éä¿¡æ¸ã¿*/231 case TCP_FSM_SYN_SENT: /* 能動オープン、SYN 送信済み */ 232 case TCP_FSM_SYN_RECVD: /* SYN を受信し、SYN 送信済み */ 246 233 cep->flags |= TCP_CEP_FLG_NEED_FIN; 247 234 break; 248 235 249 case TCP_FSM_ESTABLISHED: /* ã³ãã¯ã·ã§ã³éè¨å®äº*/236 case TCP_FSM_ESTABLISHED: /* コネクション開設完了 */ 250 237 cep->fsm_state = TCP_FSM_FIN_WAIT_1; 251 238 break; 252 239 253 case TCP_FSM_CLOSE_WAIT: /* ç¸æãã FIN åä¿¡ãAPP ã®çµäºå¾ 254 ã¡ */ 240 case TCP_FSM_CLOSE_WAIT: /* 相手から FIN 受信、APP の終了待ち */ 255 241 cep->fsm_state = TCP_FSM_LAST_ACK; 256 242 break; … … 263 249 264 250 /* 265 * tcp_cls_cep -- é信端ç¹ã®ã¯ãã¼ãºãæ¨æºæ©è½ã251 * tcp_cls_cep -- 通信端点のクローズ【標準機能】 266 252 */ 267 253 … … 275 261 #ifndef TCP_CFG_NON_BLOCKING 276 262 277 /* tmout ã TMO_NBLK ãªãã¨ã©ã¼*/263 /* tmout が TMO_NBLK ならエラー */ 278 264 if (tmout == TMO_NBLK) 279 265 return E_PAR; … … 282 268 283 269 /* 284 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã285 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼270 * CEP をロックし、API 機能コードとタスク識別子を記録する。 271 * すでに記録されていれば、ペンディング中なのでエラー 286 272 */ 287 273 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CLS_CEP)) != E_OK) … … 290 276 #ifdef TCP_CFG_NON_BLOCKING 291 277 292 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/293 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/278 /* タイムアウトをチェックする。*/ 279 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 294 280 295 281 if (!IS_PTR_DEFINED(cep->callback)) 296 282 error = E_OBJ; 297 else if (cep->fsm_state == TCP_FSM_CLOSED) { /* ãã§ã«ã¯ãã¼ãºããã¦ããã¨ã*/283 else if (cep->fsm_state == TCP_FSM_CLOSED) { /* すでにクローズされているとき */ 298 284 299 285 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 … … 313 299 } 314 300 else { 315 /* NBLK ã®API æ©è½ã³ã¼ããè¨å®ããã*/301 /* NBLK のAPI 機能コードを設定する。*/ 316 302 cep->rcv_nblk_tfn = TFN_TCP_CLS_CEP; 317 303 318 if ((cep = tcp_user_closed(cep)) != NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/319 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/304 if ((cep = tcp_user_closed(cep)) != NULL) { /* コネクションを切断する。*/ 305 /* 切断セグメント出力をポストする。*/ 320 306 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 321 307 sig_sem(SEM_TCP_POST_OUTPUT); 322 308 } 323 309 324 /* cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã325 * æ¢ã«ã³ãã¯ã·ã§ã³ãåæããã¦ãããã¨ãæå³ãã¦ããã326 * ã¾ãããã®å ´åã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¦ããã310 /* cep が NULL で戻ってきた場合は、 311 * 既にコネクションが切断されていることを意味している。 312 * また、この場合コールバック関数が呼び出されている。 327 313 */ 328 314 return E_WBLK; 329 315 } 330 316 } 331 else { /* éãã³ããããã³ã°ã³ã¼ã«*/332 333 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 334 335 if ((cep = tcp_user_closed(cep)) == NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/336 337 /* cep ã NULL ã§æ»ã£ã¦ããå ´åã¯ã338 * æ¢ã«ã³ãã¯ã·ã§ã³ãåæããã¦ãããã¨ãæå³ãã¦ããã317 else { /* 非ノンブロッキングコール */ 318 319 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 320 321 if ((cep = tcp_user_closed(cep)) == NULL) { /* コネクションを切断する。*/ 322 323 /* cep が NULL で戻ってきた場合は、 324 * 既にコネクションが切断されていることを意味している。 339 325 */ 340 326 return error; 341 327 } 342 328 else { 343 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/329 /* 切断セグメント出力をポストする。*/ 344 330 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 345 331 sig_sem(SEM_TCP_POST_OUTPUT); 346 332 347 /* ã¤ãã³ããã©ã°ã CLOSED ã«ãªãã¾ã§å¾ 348 ã¤ã*/ 333 /* イベントフラグが CLOSED になるまで待つ。*/ 349 334 error = twai_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED, TWF_ORW, &flag, tmout); 350 335 if (error == E_OK && cep->error != E_OK) … … 353 338 if (error != E_OK) { 354 339 if (error == E_RLWAI) { 355 /* tcp_cls_cep ããã£ã³ã»ã«ãããã¨ãã¯ãRST ãéä¿¡ããã*/340 /* tcp_cls_cep がキャンセルされたときは、RST を送信する。*/ 356 341 tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una - 1, 357 342 cep->rbufsz - cep->rwbuf_count, TCP_FLG_RST); 358 343 } 359 344 360 /* ã¿ã¤ãã¼ãåæ¢ããã*/345 /* タイマーを停止する。*/ 361 346 tcp_cancel_timers(cep); 362 347 363 348 /* 364 * é信端ç¹ãããã¯ãã365 * åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã349 * 通信端点をロックし、 350 * 受信再構成キューのネットワークバッファを解放する。 366 351 */ 367 352 syscall(wai_sem(cep->semid_lock)); … … 369 354 syscall(sig_sem(cep->semid_lock)); 370 355 371 /* ç¶æ 372 ãæªä½¿ç¨ã«ããã*/ 356 /* 状態を未使用にする。*/ 373 357 cep->fsm_state = TCP_FSM_CLOSED; 374 358 375 359 /* 376 * 以ä¸ã«é¢ä¿ããªããã©ã°ãã¯ãªã¢ã¼ããã377 * ã»éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½378 * ã»åçãªé信端ç¹ã®çæã»åé¤æ©è½360 * 以下に関係しないフラグをクリアーする。 361 * ・送受信ウィンドバッファの省コピー機能 362 * ・動的な通信端点の生成・削除機能 379 363 */ 380 364 cep->flags &= TCP_CEP_FLG_NOT_CLEAR; 381 365 382 366 /* 383 * é信端ç¹ãããã¯ãã384 * éåä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã367 * 通信端点をロックし、 368 * 送受信ウィンドバッファキューのネットワークバッファを解放する。 385 369 */ 386 370 cep->rwbuf_count = 0; … … 410 394 411 395 /* 412 * tcp_sht_cep -- ãã¼ã¿éä¿¡ã®çµäºãæ¨æºæ©è½ã396 * tcp_sht_cep -- データ送信の終了【標準機能】 413 397 */ 414 398 … … 420 404 421 405 /* 422 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã423 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼406 * CEP をロックし、API 機能コードとタスク識別子を記録する。 407 * すでに記録されていれば、ペンディング中なのでエラー 424 408 */ 425 409 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SHT_CEP)) != E_OK) 426 410 return error; 427 411 428 /* TCP é信端ç¹ã®ã³ãã¯ã·ã§ã³ã確ç«ç¶æ 429 ã§ãªããã°ã¨ã©ã¼ */ 412 /* TCP 通信端点のコネクションが確立状態でなければエラー */ 430 413 if (!TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) { 431 414 if ((error = cep->error) == E_OK) … … 433 416 } 434 417 435 else if ((cep = tcp_user_closed(cep)) != NULL) { /* ã³ãã¯ã·ã§ã³ãåæããã*/436 437 /* åæã»ã°ã¡ã³ãåºåããã¹ãããã*/418 else if ((cep = tcp_user_closed(cep)) != NULL) { /* コネクションを切断する。*/ 419 420 /* 切断セグメント出力をポストする。*/ 438 421 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 439 422 sig_sem(SEM_TCP_POST_OUTPUT); … … 450 433 451 434 /* 452 * tcp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã435 * tcp_snd_dat -- パケットの送信【標準機能】 453 436 */ 454 437 … … 461 444 #ifdef TCP_CFG_NON_BLOCKING 462 445 463 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/446 /* data が NULL か、len < 0 ならエラー */ 464 447 if (data == NULL || len < 0) 465 448 return E_PAR; … … 467 450 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 468 451 469 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/452 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 470 453 if (data == NULL || len < 0 || tmout == TMO_NBLK) 471 454 return E_PAR; … … 474 457 475 458 /* 476 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã477 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼459 * CEP をロックし、API 機能コードとタスク識別子を記録する。 460 * すでに記録されていれば、ペンディング中なのでエラー 478 461 */ 479 462 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_DAT)) != E_OK) 480 463 return error; 481 464 482 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 483 ãè¦ãã*/ 465 /* 送信できるか、通信端点の状態を見る。*/ 484 466 if ((error = tcp_can_send_more(cep, TFN_TCP_SND_DAT, tmout)) != E_OK) 485 467 goto err_ret; … … 487 469 #ifdef TCP_CFG_NON_BLOCKING 488 470 489 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/490 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/491 492 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/471 /* タイムアウトをチェックする。*/ 472 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 473 474 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 493 475 if (!TCP_IS_SWBUF_FULL(cep)) { 494 476 495 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/477 /* 送信ウィンドバッファにデータを書き込む。*/ 496 478 error = TCP_WRITE_SWBUF(cep, data, (uint_t)len); 497 479 498 /* åºåããã¹ãããã*/480 /* 出力をポストする。*/ 499 481 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 500 482 sig_sem(SEM_TCP_POST_OUTPUT); 501 483 502 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/484 /* コールバック関数を呼び出す。*/ 503 485 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 504 486 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)error); … … 518 500 } 519 501 } 520 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 521 522 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 523 524 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 525 ã¤ã*/ 502 else { /* 非ノンブロッキングコール */ 503 504 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 505 506 /* 送信ウィンドバッファが空くのを待つ。*/ 526 507 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 527 508 goto err_ret; 528 509 529 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/510 /* 送信ウィンドバッファにデータを書き込む。*/ 530 511 if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) { 531 512 532 /* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/513 /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/ 533 514 if (TCP_IS_SWBUF_FULL(cep)) 534 515 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; 535 516 536 /* åºåããã¹ãããã*/517 /* 出力をポストする。*/ 537 518 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 538 519 sig_sem(SEM_TCP_POST_OUTPUT); … … 556 537 557 538 /* 558 * tcp_get_buf -- éä¿¡ç¨ãããã¡ã®ç²å¾ãæ¨æºæ©è½ã539 * tcp_get_buf -- 送信用バッファの獲得【標準機能】 559 540 */ 560 541 … … 567 548 #ifdef TCP_CFG_NON_BLOCKING 568 549 569 /* p_buf ã NULL ãªãã¨ã©ã¼*/550 /* p_buf が NULL ならエラー */ 570 551 if (p_buf == NULL) 571 552 return E_PAR; … … 573 554 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 574 555 575 /* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/556 /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */ 576 557 if (p_buf == NULL || tmout == TMO_NBLK) 577 558 return E_PAR; … … 580 561 581 562 /* 582 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã583 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼563 * CEP をロックし、API 機能コードとタスク識別子を記録する。 564 * すでに記録されていれば、ペンディング中なのでエラー 584 565 */ 585 566 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_GET_BUF)) != E_OK) 586 567 return error; 587 568 588 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 589 ãè¦ãã*/ 569 /* 送信できるか、通信端点の状態を見る。*/ 590 570 if ((error = tcp_can_send_more(cep, TFN_TCP_GET_BUF, tmout)) != E_OK) 591 571 goto err_ret; … … 593 573 #ifdef TCP_CFG_NON_BLOCKING 594 574 595 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/596 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/575 /* タイムアウトをチェックする。*/ 576 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 597 577 598 578 if (!TCP_IS_SWBUF_FULL(cep)) { 599 579 600 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/580 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 601 581 error = TCP_GET_SWBUF_ADDR(cep, p_buf); 602 582 603 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/583 /* コールバック関数を呼び出す。*/ 604 584 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 605 585 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)error); … … 618 598 } 619 599 620 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 621 622 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 623 624 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 625 ã¤ã*/ 600 else { /* 非ノンブロッキングコール */ 601 602 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 603 604 /* 送信ウィンドバッファが空くのを待つ。*/ 626 605 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 627 606 goto err_ret; 628 607 629 /* éä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/608 /* 送信ウィンドバッファの空アドレスを獲得する。*/ 630 609 error = TCP_GET_SWBUF_ADDR(cep, p_buf); 631 610 … … 647 626 648 627 /* 649 * tcp_snd_buf -- ãããã¡å 650 ã®ãã¼ã¿ã®éä¿¡ãæ¨æºæ©è½ã 628 * tcp_snd_buf -- バッファ内のデータの送信【標準機能】 651 629 */ 652 630 … … 657 635 ER error; 658 636 659 /* éä¿¡ããé·ã len ããã§ãã¯ããã*/637 /* 送信する長さ len をチェックする。*/ 660 638 if (len < 0) 661 639 return E_PAR; 662 640 663 /* éä¿¡ããé·ãlen ã 0 ã§ããã°ãä½ãããªãã§æ»ãã*/641 /* 送信する長さlen が 0 であれば、何もしないで戻る。*/ 664 642 if (len == 0) 665 643 return E_OK; 666 644 667 645 /* 668 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã669 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼646 * CEP をロックし、API 機能コードとタスク識別子を記録する。 647 * すでに記録されていれば、ペンディング中なのでエラー 670 648 */ 671 649 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_BUF)) != E_OK) 672 650 return error; 673 651 674 /* éä¿¡ããé·ã len ããã§ãã¯ããã*/652 /* 送信する長さ len をチェックする。*/ 675 653 if (len > cep->get_buf_len) { 676 654 error = E_OBJ; … … 678 656 } 679 657 680 /* éä¿¡ã§ããããCEP ã® FSM ç¶æ 681 ãè¦ãã*/ 658 /* 送信できるか、CEP の FSM 状態を見る。*/ 682 659 if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) { 683 660 if ((error = cep->error) == E_OK) … … 686 663 } 687 664 688 /* éä¿¡ã¦ã£ã³ããããã¡ã®ãã¼ã¿ãéä¿¡å¯è½ã«ããã*/665 /* 送信ウィンドバッファのデータを送信可能にする。*/ 689 666 TCP_SEND_SWBUF(cep, (uint_t)len); 690 667 691 /* åºåããã¹ãããã*/668 /* 出力をポストする。*/ 692 669 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 693 670 sig_sem(SEM_TCP_POST_OUTPUT); … … 704 681 705 682 /* 706 * tcp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã683 * tcp_rcv_dat -- パケットの受信【標準機能】 707 684 */ 708 685 … … 715 692 #ifdef TCP_CFG_NON_BLOCKING 716 693 717 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/694 /* data が NULL か、len < 0 ならエラー */ 718 695 if (data == NULL || len < 0) 719 696 return E_PAR; … … 721 698 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 722 699 723 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/700 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 724 701 if (data == NULL || len < 0 || tmout == TMO_NBLK) 725 702 return E_PAR; … … 728 705 729 706 /* 730 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã731 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼707 * CEP をロックし、API 機能コードとタスク識別子を記録する。 708 * すでに記録されていれば、ペンディング中なのでエラー 732 709 */ 733 710 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_DAT)) != E_OK) 734 711 return error; 735 712 736 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 737 ãè¦ãã*/ 713 /* 受信できるか、通信端点の状態を見る。*/ 738 714 if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK) 739 715 goto err_ret; … … 741 717 #ifdef TCP_CFG_NON_BLOCKING 742 718 743 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/744 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/745 746 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/719 /* タイムアウトをチェックする。*/ 720 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 721 722 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/ 747 723 if (cep->rwbuf_count > 0) { 748 724 749 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/725 /* 受信ウィンドバッファからデータを取り出す。*/ 750 726 len = TCP_READ_RWBUF(cep, data, (uint_t)len); 751 727 752 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/728 /* コールバック関数を呼び出す。*/ 753 729 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 754 730 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_DAT, (void*)(uint32_t)len); … … 766 742 } 767 743 } 768 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 769 770 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 771 772 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 773 ¥åãããã¾ã§å¾ 774 ã¤ã*/ 744 else { /* 非ノンブロッキングコール */ 745 746 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 747 748 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 775 749 if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) 776 750 goto err_ret; 777 751 778 /* åä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãåãåºãã*/752 /* 受信ウィンドバッファからデータを取り出す。*/ 779 753 error = TCP_READ_RWBUF(cep, data, (uint_t)len); 780 754 781 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/755 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 782 756 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 783 757 sig_sem(SEM_TCP_POST_OUTPUT); … … 800 774 801 775 /* 802 * tcp_rcv_buf -- åä¿¡ãããã¼ã¿ã®å 803 ¥ã£ããããã¡ã®ç²å¾ãæ¨æºæ©è½ã 776 * tcp_rcv_buf -- 受信したデータの入ったバッファの獲得【標準機能】 804 777 */ 805 778 … … 812 785 #ifdef TCP_CFG_NON_BLOCKING 813 786 814 /* p_buf ã NULL ãªãã¨ã©ã¼*/787 /* p_buf が NULL ならエラー */ 815 788 if (p_buf == NULL) 816 789 return E_PAR; … … 818 791 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 819 792 820 /* p_buf ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/793 /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */ 821 794 if (p_buf == NULL || tmout == TMO_NBLK) 822 795 return E_PAR; … … 825 798 826 799 /* 827 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã828 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼800 * CEP をロックし、API 機能コードとタスク識別子を記録する。 801 * すでに記録されていれば、ペンディング中なのでエラー 829 802 */ 830 803 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_BUF)) != E_OK) 831 804 return error; 832 805 833 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 834 ãè¦ãã*/ 806 /* 受信できるか、通信端点の状態を見る。*/ 835 807 if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK) 836 808 goto err_ret; … … 838 810 #ifdef TCP_CFG_NON_BLOCKING 839 811 840 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/841 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/842 843 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/812 /* タイムアウトをチェックする。*/ 813 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 814 815 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/ 844 816 if (cep->rwbuf_count > 0) { 845 817 846 /* åä¿¡ã¦ã£ã³ããããã¡ã®ç©ºã¢ãã¬ã¹ãç²å¾ããã*/818 /* 受信ウィンドバッファの空アドレスを獲得する。*/ 847 819 error = TCP_GET_RWBUF_ADDR(cep, p_buf); 848 820 849 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/821 /* コールバック関数を呼び出す。*/ 850 822 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 851 823 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)error); … … 862 834 } 863 835 } 864 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 865 866 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 867 868 /* åä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ããªããã°ãå 869 ¥åãããã¾ã§å¾ 870 ã¤ã*/ 836 else { /* 非ノンブロッキングコール */ 837 838 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 839 840 /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/ 871 841 if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) { 872 842 cep->rwbuf_count = 0; … … 874 844 } 875 845 876 /* åä¿¡ã¦ã£ã³ããããã¡ã®ã¢ãã¬ã¹ãç²å¾ããã*/846 /* 受信ウィンドバッファのアドレスを獲得する。*/ 877 847 error = TCP_GET_RWBUF_ADDR(cep, p_buf); 878 848 … … 894 864 895 865 /* 896 * tcp_rel_buf -- åä¿¡ç¨ãããã¡ã®è§£æ¾ãæ¨æºæ©è½ã866 * tcp_rel_buf -- 受信用バッファの解放【標準機能】 897 867 */ 898 868 … … 903 873 ER error; 904 874 905 /* 解æ¾ããé·ã len ããã§ãã¯ããã*/875 /* 解放する長さ len をチェックする。*/ 906 876 if (len < 0) 907 877 return E_PAR; 908 878 909 879 /* 910 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã911 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼880 * CEP をロックし、API 機能コードとタスク識別子を記録する。 881 * すでに記録されていれば、ペンディング中なのでエラー 912 882 */ 913 883 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_REL_BUF)) != E_OK) 914 884 return error; 915 885 916 /* 解æ¾ããé·ã len ããã§ãã¯ããã*/886 /* 解放する長さ len をチェックする。*/ 917 887 if (len > cep->rcv_buf_len) { 918 888 error = E_OBJ; … … 920 890 } 921 891 922 /* é信端ç¹ãããã¯ããã*/892 /* 通信端点をロックする。*/ 923 893 syscall(wai_sem(cep->semid_lock)); 924 894 925 /* åä¿¡ã¦ã£ã³ããããã¡ããåä¿¡ãããªã¯ããããåé¤ããã*/895 /* 受信ウィンドバッファから受信したオクテットを削除する。*/ 926 896 TCP_DROP_RWBUF(cep, (uint_t)len); 927 897 928 /* tcp_rcv_buf ã®å²å½ã¦é·ããªã»ããããã*/898 /* tcp_rcv_buf の割当て長をリセットする。*/ 929 899 cep->rcv_buf_len -= len; 930 900 931 /* é信端ç¹ã®ããã¯ã解é¤ããã*/901 /* 通信端点のロックを解除する。*/ 932 902 syscall(sig_sem(cep->semid_lock)); 933 903 934 /* ç¸æã«ã¦ã£ã³ãã¦ãµã¤ãºãå¤ãã£ããã¨ãç¥ãããããåºåããã¹ãããã*/904 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/ 935 905 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 936 906 sig_sem(SEM_TCP_POST_OUTPUT); … … 947 917 948 918 /* 949 * tcp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«919 * tcp_can_snd -- ペンディングしている送信のキャンセル 950 920 */ 951 921 … … 955 925 ER error = E_OK; 956 926 957 /* é信端ç¹ãããã¯ããã*/927 /* 通信端点をロックする。*/ 958 928 syscall(wai_sem(cep->semid_lock)); 959 929 960 930 /* 961 * snd_tskid ã TA_NULL ãªãã962 * ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼931 * snd_tskid が TA_NULL なら、 932 * ペンディングしていないのでエラー 963 933 */ 964 934 if (cep->snd_tskid == TA_NULL) 965 935 error = EV_NOPND; 966 936 967 /* ãã³ãã£ã³ã°ä¸ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼*/937 /* ペンディング中の API 機能コードと一致しなければエラー */ 968 938 else if (fncd != TFN_TCP_ALL && fncd != cep->snd_tfn) 969 939 error = E_OBJ; 970 940 971 /* å¦çããã£ã³ã»ã«ããã*/941 /* 処理をキャンセルする。*/ 972 942 else { 973 943 974 /* åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/944 /* 受信再構成キューのネットワークバッファを解放する。*/ 975 945 tcp_free_reassq(cep); 976 946 977 /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/947 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/ 978 948 cep->rwbuf_count = 0; 979 949 TCP_FREE_RWBUFQ(cep); 980 950 981 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/951 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 982 952 TCP_FREE_SWBUFQ(cep); 983 953 984 954 #ifdef TCP_CFG_NON_BLOCKING 985 955 986 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) { /* ãã³ããããã³ã°ã³ã¼ã«*/956 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) { /* ノンブロッキングコール */ 987 957 988 958 switch (cep->snd_nblk_tfn) { … … 990 960 case TFN_TCP_CON_CEP: 991 961 /* 992 * é信端ç¹ããåä»å£ã解æ¾ãã993 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã962 * 通信端点から受付口を解放し、 963 * イベントフラグをクローズに設定する。 994 964 */ 995 965 cep->rep = NULL; … … 1038 1008 } 1039 1009 1040 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1010 /* 通信端点のロックを解除する。*/ 1041 1011 syscall(sig_sem(cep->semid_lock)); 1042 1012 … … 1045 1015 1046 1016 /* 1047 * tcp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«1017 * tcp_can_rcv -- ペンディングしている受信のキャンセル 1048 1018 */ 1049 1019 … … 1053 1023 ER error = E_OK; 1054 1024 1055 /* é信端ç¹ãããã¯ããã*/1025 /* 通信端点をロックする。*/ 1056 1026 syscall(wai_sem(cep->semid_lock)); 1057 1027 1058 1028 /* 1059 * rcv_tskid ã TA_NULL ãªãã1060 * ãã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼1029 * rcv_tskid が TA_NULL なら、 1030 * ペンディングしていないのでエラー 1061 1031 */ 1062 1032 if (cep->rcv_tskid == TA_NULL) 1063 1033 error = EV_NOPND; 1064 1034 1065 /* ãã³ãã£ã³ã°ä¸ã® API æ©è½ã³ã¼ãã¨ä¸è´ããªããã°ã¨ã©ã¼*/1035 /* ペンディング中の API 機能コードと一致しなければエラー */ 1066 1036 else if (fncd != TFN_TCP_ALL && fncd != cep->rcv_tfn) 1067 1037 error = E_OBJ; 1068 1038 1069 /* å¦çããã£ã³ã»ã«ããã*/1039 /* 処理をキャンセルする。*/ 1070 1040 else { 1071 1041 1072 /* åä¿¡åæ§æãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1042 /* 受信再構成キューのネットワークバッファを解放する。*/ 1073 1043 tcp_free_reassq(cep); 1074 1044 1075 /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1045 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/ 1076 1046 cep->rwbuf_count = 0; 1077 1047 TCP_FREE_RWBUFQ(cep); 1078 1048 1079 /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ãããã¯ã¼ã¯ãããã¡ã解æ¾ããã*/1049 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ 1080 1050 TCP_FREE_SWBUFQ(cep); 1081 1051 1082 1052 #ifdef TCP_CFG_NON_BLOCKING 1083 1053 1084 if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { /* ãã³ããããã³ã°ã³ã¼ã«*/1054 if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) { /* ノンブロッキングコール */ 1085 1055 1086 1056 switch (cep->rcv_nblk_tfn) { … … 1088 1058 case TFN_TCP_ACP_CEP: 1089 1059 /* 1090 * é信端ç¹ããåä»å£ã解æ¾ãã1091 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã1060 * 通信端点から受付口を解放し、 1061 * イベントフラグをクローズに設定する。 1092 1062 */ 1093 1063 cep->rep = NULL; … … 1142 1112 } 1143 1113 1144 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1114 /* 通信端点のロックを解除する。*/ 1145 1115 syscall(sig_sem(cep->semid_lock)); 1146 1116 … … 1149 1119 1150 1120 /* 1151 * tcp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã1121 * tcp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 1152 1122 */ 1153 1123 … … 1158 1128 ER error = E_OK, snd_err, rcv_err; 1159 1129 1160 /* API æ©è½ã³ã¼ãããã§ãã¯ããã*/1130 /* API 機能コードをチェックする。*/ 1161 1131 if (!VALID_TFN_TCP_CAN(fncd)) 1162 1132 return E_PAR; 1163 1133 1164 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1134 /* TCP 通信端点 ID をチェックする。*/ 1165 1135 if (!VALID_TCP_CEPID(cepid)) 1166 1136 return E_ID; 1167 1137 1168 /* TCP é信端ç¹ãå¾ãã*/1138 /* TCP 通信端点を得る。*/ 1169 1139 cep = GET_TCP_CEP(cepid); 1170 1140 1171 /* TCP é信端ç¹ããã§ãã¯ããã*/1141 /* TCP 通信端点をチェックする。*/ 1172 1142 if (!VALID_TCP_CEP(cep)) 1173 1143 return E_NOEXS; 1174 1144 1175 if (fncd == TFN_TCP_ALL) { /* TFN_TCP_ALL ã®å¦ç*/1145 if (fncd == TFN_TCP_ALL) { /* TFN_TCP_ALL の処理 */ 1176 1146 snd_err = tcp_can_snd(cep, fncd); 1177 1147 rcv_err = tcp_can_rcv(cep, fncd); 1178 1148 1179 1149 /* 1180 * snd_err 㨠rcv_err ã®ã©ã¡ããEV_NOPND1181 * ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼1150 * snd_err と rcv_err のどちらも EV_NOPND 1151 * なら、ペンディングしていないのでエラー 1182 1152 */ 1183 1153 if (snd_err == EV_NOPND && rcv_err == EV_NOPND) … … 1196 1166 } 1197 1167 1198 else if (IS_TFN_TCP_RCV(fncd)) { /* åä¿¡å¦çã®ãã£ã³ã»ã«*/1168 else if (IS_TFN_TCP_RCV(fncd)) { /* 受信処理のキャンセル */ 1199 1169 if ((error = tcp_can_rcv(cep, fncd)) == EV_NOPND) 1200 1170 error = E_OBJ; 1201 1171 } 1202 1172 1203 else { /* éä¿¡å¦çã®ãã£ã³ã»ã«*/1173 else { /* 送信処理のキャンセル */ 1204 1174 if ((error = tcp_can_snd(cep, fncd)) == EV_NOPND) 1205 1175 error = E_OBJ; … … 1216 1186 1217 1187 /* 1218 * tcp_cre_cep -- TCP é信端ç¹ã®çæãæ¡å¼µæ©è½ã1188 * tcp_cre_cep -- TCP 通信端点の生成【拡張機能】 1219 1189 */ 1220 1190 … … 1225 1195 ER error; 1226 1196 1227 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1197 /* TCP 通信端点 ID をチェックする。*/ 1228 1198 if (!VALID_TCP_CEPID(cepid)) 1229 1199 return E_ID; 1230 1200 1231 /* pk_ccep ã NULL ãªãã¨ã©ã¼*/1201 /* pk_ccep が NULL ならエラー */ 1232 1202 if (pk_ccep == NULL) 1233 1203 return E_PAR; 1234 1204 1235 /* TCP é信端ç¹ãå¾ãã*/1205 /* TCP 通信端点を得る。*/ 1236 1206 cep = GET_TCP_CEP(cepid); 1237 1207 1238 /* TCP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/1208 /* TCP 通信端点が、動的生成用でなければエラー */ 1239 1209 if (!DYNAMIC_TCP_CEP(cep)) 1240 1210 return E_ID; 1241 1211 1242 /* é信端ç¹ãããã¯ããã*/1212 /* 通信端点をロックする。*/ 1243 1213 syscall(wai_sem(cep->semid_lock)); 1244 1214 1245 1215 /* 1246 * TCP é信端ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼1216 * TCP 通信端点をチェックする。生成済みであればエラー 1247 1217 */ 1248 1218 if (VALID_TCP_CEP(cep)) … … 1250 1220 else { 1251 1221 1252 /* TCP é信端ç¹çææ 1253 å ±ãã³ãã¼ããã*/ 1254 cep->cepatr = pk_ccep->cepatr; /* é信端ç¹å±æ§ */ 1255 cep->sbuf = pk_ccep->sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ */ 1256 cep->sbufsz = pk_ccep->sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 1257 cep->rbuf = pk_ccep->rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ */ 1258 cep->rbufsz = pk_ccep->rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 1259 cep->callback = (void*)pk_ccep->callback; /* ã³ã¼ã«ãã㯠*/ 1260 1261 /* TCP é信端ç¹ãçææ¸ã¿ã«ããã*/ 1222 /* TCP 通信端点生成情報をコピーする。*/ 1223 cep->cepatr = pk_ccep->cepatr; /* 通信端点属性 */ 1224 cep->sbuf = pk_ccep->sbuf; /* 送信用ウィンドバッファ */ 1225 cep->sbufsz = pk_ccep->sbufsz; /* 送信用ウィンドバッファサイズ */ 1226 cep->rbuf = pk_ccep->rbuf; /* 受信用ウィンドバッファ */ 1227 cep->rbufsz = pk_ccep->rbufsz; /* 受信用ウィンドバッファサイズ */ 1228 cep->callback = (void*)pk_ccep->callback; /* コールバック */ 1229 1230 /* TCP 通信端点を生成済みにする。*/ 1262 1231 cep->flags |= TCP_CEP_FLG_VALID; 1263 1232 error = E_OK; 1264 1233 } 1265 1234 1266 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1235 /* 通信端点のロックを解除する。*/ 1267 1236 syscall(sig_sem(cep->semid_lock)); 1268 1237 … … 1273 1242 1274 1243 /* 1275 * tcp_del_cep -- TCP é信端ç¹ã®åé¤ãæ¡å¼µæ©è½ã1244 * tcp_del_cep -- TCP 通信端点の削除【拡張機能】 1276 1245 */ 1277 1246 … … 1284 1253 ER error; 1285 1254 1286 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1255 /* TCP 通信端点 ID をチェックする。*/ 1287 1256 if (!VALID_TCP_CEPID(cepid)) 1288 1257 return E_ID; 1289 1258 1290 /* TCP é信端ç¹ãå¾ãã*/1259 /* TCP 通信端点を得る。*/ 1291 1260 cep = GET_TCP_CEP(cepid); 1292 1261 1293 /* TCP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/1262 /* TCP 通信端点が、動的生成用でなければエラー */ 1294 1263 if (!DYNAMIC_TCP_CEP(cep)) 1295 1264 return E_ID; 1296 1265 1297 /* é信端ç¹ãããã¯ããã*/1266 /* 通信端点をロックする。*/ 1298 1267 syscall(wai_sem(cep->semid_lock)); 1299 1268 1300 1269 /* 1301 * TCP é信端ç¹ããã§ãã¯ããã以ä¸ã®å ´åã¯ã¨ã©ã¼1302 * ã»æªçæã1303 * ã»ä½¿ç¨ä¸ã1270 * TCP 通信端点をチェックする。以下の場合はエラー 1271 * ・未生成。 1272 * ・使用中。 1304 1273 */ 1305 1274 if (!VALID_TCP_CEP(cep)) … … 1309 1278 else { 1310 1279 1311 /* TCP é信端ç¹ãæªçæã«ããã*/1280 /* TCP 通信端点を未生成にする。*/ 1312 1281 cep->flags &= ~TCP_CEP_FLG_VALID; 1313 1282 error = E_OK; 1314 1283 } 1315 1284 1316 /* é信端ç¹ã®ããã¯ã解é¤ããã*/1285 /* 通信端点のロックを解除する。*/ 1317 1286 syscall(sig_sem(cep->semid_lock)); 1318 1287 … … 1325 1294 1326 1295 /* 1327 * tcp_snd_oob -- ç·æ¥ãã¼ã¿ã®éä¿¡ãæ¡å¼µæ©è½ã1296 * tcp_snd_oob -- 緊急データの送信【拡張機能】 1328 1297 */ 1329 1298 … … 1336 1305 #ifdef TCP_CFG_NON_BLOCKING 1337 1306 1338 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/1307 /* data が NULL か、len < 0 ならエラー */ 1339 1308 if (data == NULL || len < 0) 1340 1309 return E_PAR; … … 1342 1311 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 1343 1312 1344 /* data ã NULLãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/1313 /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */ 1345 1314 if (data == NULL || len < 0 || tmout == TMO_NBLK) 1346 1315 return E_PAR; … … 1349 1318 1350 1319 /* 1351 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã1352 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼1320 * CEP をロックし、API 機能コードとタスク識別子を記録する。 1321 * すでに記録されていれば、ペンディング中なのでエラー 1353 1322 */ 1354 1323 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_OOB)) != E_OK) 1355 1324 return error; 1356 1325 1357 /* éä¿¡ã§ããããé信端ç¹ã®ç¶æ 1358 ãè¦ãã*/ 1326 /* 送信できるか、通信端点の状態を見る。*/ 1359 1327 if ((error = tcp_can_send_more(cep, TFN_TCP_SND_OOB, tmout)) != E_OK) 1360 1328 goto err_ret; … … 1362 1330 #ifdef TCP_CFG_NON_BLOCKING 1363 1331 1364 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/1365 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/1366 1367 /* éä¿¡ã¦ã£ã³ããããã¡ã«ç©ºããããã°ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1332 /* タイムアウトをチェックする。*/ 1333 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 1334 1335 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/ 1368 1336 if (!TCP_IS_SWBUF_FULL(cep)) { 1369 1337 1370 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1338 /* 送信ウィンドバッファにデータを書き込む。*/ 1371 1339 error = TCP_WRITE_SWBUF(cep, data, (uint_t)len); 1372 1340 1373 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/1341 /* 送信緊急ポインタを設定する。*/ 1374 1342 cep->snd_up = cep->snd_una + cep->swbuf_count; 1375 1343 1376 /* åºåããã¹ãããã*/1344 /* 出力をポストする。*/ 1377 1345 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1378 1346 sig_sem(SEM_TCP_POST_OUTPUT); 1379 1347 1380 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/1348 /* コールバック関数を呼び出す。*/ 1381 1349 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1382 1350 (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)error); … … 1396 1364 } 1397 1365 } 1398 else { /* éãã³ããããã³ã°ã³ã¼ã« */ 1399 1400 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1401 1402 /* éä¿¡ã¦ã£ã³ããããã¡ã空ãã®ãå¾ 1403 ã¤ã*/ 1366 else { /* 非ノンブロッキングコール */ 1367 1368 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 1369 1370 /* 送信ウィンドバッファが空くのを待つ。*/ 1404 1371 if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK) 1405 1372 goto err_ret; 1406 1373 1407 /* éä¿¡ã¦ã£ã³ããããã¡ã«ãã¼ã¿ãæ¸ãè¾¼ãã*/1374 /* 送信ウィンドバッファにデータを書き込む。*/ 1408 1375 if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) { 1409 1376 1410 /* éä¿¡ç·æ¥ãã¤ã³ã¿ãè¨å®ããã*/1377 /* 送信緊急ポインタを設定する。*/ 1411 1378 cep->snd_up = cep->snd_una + cep->swbuf_count; 1412 1379 1413 /* ãã¼ã¿ãéä¿¡ãããéä¿¡ã¦ã£ã³ããããã¡ããã«ã®ã¨ãã¯å¼·å¶çã«éä¿¡ããã*/1380 /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/ 1414 1381 if (TCP_IS_SWBUF_FULL(cep)) 1415 1382 cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR; 1416 1383 1417 /* åºåããã¹ãããã*/1384 /* 出力をポストする。*/ 1418 1385 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 1419 1386 sig_sem(SEM_TCP_POST_OUTPUT); … … 1437 1404 1438 1405 /* 1439 * tcp_rcv_oob -- ç·æ¥ãã¼ã¿ã®åä¿¡ãæ¡å¼µæ©è½ã1406 * tcp_rcv_oob -- 緊急データの受信【拡張機能】 1440 1407 * 1441 * 注æ: éä¿¡å´ãè¤æ°ãªã¯ãããã®ãã¼ã¿ãéä¿¡ãã¦ãã1442 * ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ã®ã¿åä¿¡ããã1408 * 注意: 送信側が複数オクテットのデータを送信しても、 1409 * 緊急ポインタが指す 1 オクテットのデータのみ受信する。 1443 1410 */ 1444 1411 … … 1449 1416 uint8_t *urg; 1450 1417 1451 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1418 /* TCP 通信端点 ID をチェックする。*/ 1452 1419 if (!VALID_TCP_CEPID(cepid)) 1453 1420 return E_ID; 1454 1421 1455 /* data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/1422 /* data が NULL か、len < 0 ならエラー */ 1456 1423 if (data == NULL || len < 0) 1457 1424 return E_PAR; 1458 1425 1459 /* TCP é信端ç¹ãå¾ãã*/1426 /* TCP 通信端点を得る。*/ 1460 1427 cep = GET_TCP_CEP(cepid); 1461 1428 1462 /* åä¿¡ã§ããããé信端ç¹ã®ç¶æ 1463 ãè¦ãã*/ 1464 /* åä¿¡ã§ããããfsm_state ãè¦ãã*/ 1429 /* 受信できるか、通信端点の状態を見る。*/ 1430 /* 受信できるか、fsm_state を見る。*/ 1465 1431 if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state)) 1466 1432 return E_OBJ; 1467 1433 1468 1434 /* 1469 * ç·æ¥ãã¼ã¿å 1470 ¥ãã®ã»ã°ã¡ã³ãã® TCP ãããã 1471 * è¨å®ããã¦ããªããã°ãç·æ¥ãã¼ã¿ãåä¿¡ãã¦ããªãã 1435 * 緊急データ入りのセグメントの TCP ヘッダが 1436 * 設定されていなければ、緊急データを受信していない。 1472 1437 */ 1473 1438 if (cep->urg_tcph == NULL) 1474 1439 return E_OBJ; 1475 1440 1476 /* len == 0 ãªããããã¡ãªã¼ãã¼ããã¼*/1441 /* len == 0 ならバッファオーバーフロー */ 1477 1442 if (len == 0) 1478 1443 return E_BOVR; 1479 1444 1480 /* ç·æ¥ãã¤ã³ã¿ãæã 1 ãªã¯ãããã®ãã¼ã¿ãèªã¿åãã*/1445 /* 緊急ポインタが指す 1 オクテットのデータを読み取る。*/ 1481 1446 urg = (uint8_t*)cep->urg_tcph + TCP_DATA_OFF(cep->urg_tcph->doff) + cep->urg_tcph->urp + TCP_CFG_URG_OFFSET; 1482 1447 *(uint8_t*)data = *urg; 1483 1448 1484 /* èªã¿åã£ããã¼ã¿ããå¾ãã® SDU ãåã«è©°ããã*/1449 /* 読み取ったデータから後ろの SDU を前に詰める。*/ 1485 1450 memcpy(urg, urg + 1, cep->urg_tcph->sum - (cep->urg_tcph->urp + TCP_CFG_URG_OFFSET) - 1); 1486 1451 1487 /* tcp_rcv_oob() ãå¼åºããããã¨ç¥ãããããã«ãNULL ãè¨å®ããã*/1452 /* tcp_rcv_oob() が呼出されたこと知らせるために、NULL を設定する。*/ 1488 1453 cep->urg_tcph = NULL; 1489 1454 … … 1500 1465 1501 1466 /* 1502 * tcp_del_rep -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ã1467 * tcp_del_rep -- TCP 受付口の削除【拡張機能】 1503 1468 */ 1504 1469 … … 1512 1477 1513 1478 /* 1514 * TCP åä»å£ ID ããã§ãã¯ããã1515 * IPv6 ç¨ TCP åä»å£ã§ããã°ã1516 * IPv6 ç¨ã®ãTCP åä»å£ã®åé¤é¢æ°ï¼æ¬ä½ï¼ããå¼åºãã1479 * TCP 受付口 ID をチェックする。 1480 * IPv6 用 TCP 受付口であれば、 1481 * IPv6 用の「TCP 受付口の削除関数(本体)」を呼出す。 1517 1482 */ 1518 1483 //NET_DEBUG_TCP3("tcp_del_rep1[r=%d,n=%d,x=%d]\n", … … 1524 1489 1525 1490 /* 1526 * TCP åä»å£ ID ããã§ãã¯ããã1527 * IPv4 ç¨ TCP åä»å£ã§ããã°ã1528 * IPv4 ç¨ã®ãTCP åä»å£ã®åé¤é¢æ°ï¼æ¬ä½ï¼ããå¼åºãã1491 * TCP 受付口 ID をチェックする。 1492 * IPv4 用 TCP 受付口であれば、 1493 * IPv4 用の「TCP 受付口の削除関数(本体)」を呼出す。 1529 1494 */ 1530 1495 else if (VALID_TCP4_REPID(repid)) … … 1541 1506 { 1542 1507 1543 /* TCP åä»å£ ID ããã§ãã¯ããã*/1508 /* TCP 受付口 ID をチェックする。*/ 1544 1509 if (VALID_TCP6_REPID(repid)) 1545 1510 return tcp6_del_rep_body(repid); … … 1557 1522 { 1558 1523 1559 /* TCP åä»å£ ID ããã§ãã¯ããã*/1524 /* TCP 受付口 ID をチェックする。*/ 1560 1525 if (VALID_TCP4_REPID(repid)) 1561 1526 return tcp4_del_rep_body(repid); … … 1570 1535 1571 1536 /* 1572 * tcp_set_opt -- TCP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã1537 * tcp_set_opt -- TCP 通信端点オプションの設定【拡張機能】 1573 1538 * 1574 * 注æ: è¨å®å¯è½ãª TCP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã1539 * 注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。 1575 1540 */ 1576 1541 … … 1582 1547 T_TCP_CEP *cep; 1583 1548 1584 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1549 /* TCP 通信端点 ID をチェックする。*/ 1585 1550 if (!VALID_TCP_CEPID(cepid)) 1586 1551 return E_ID; 1587 1552 1588 /* TCP é信端ç¹ãå¾ãã*/1553 /* TCP 通信端点を得る。*/ 1589 1554 cep = GET_TCP_CEP(cepid); 1590 1555 1591 /* TCP é信端ç¹ããã§ãã¯ããã*/1556 /* TCP 通信端点をチェックする。*/ 1592 1557 if (!VALID_TCP_CEP(cep)) 1593 1558 return E_NOEXS; … … 1599 1564 1600 1565 /* 1601 * tcp_get_opt -- TCP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã1566 * tcp_get_opt -- TCP 通信端点オプションの設定【拡張機能】 1602 1567 * 1603 * 注æ: è¨å®å¯è½ãª TCP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã1568 * 注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。 1604 1569 */ 1605 1570 … … 1611 1576 T_TCP_CEP *cep; 1612 1577 1613 /* TCP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/1578 /* TCP 通信端点 ID をチェックする。*/ 1614 1579 if (!VALID_TCP_CEPID(cepid)) 1615 1580 return E_ID; 1616 1581 1617 /* TCP é信端ç¹ãå¾ãã*/1582 /* TCP 通信端点を得る。*/ 1618 1583 cep = GET_TCP_CEP(cepid); 1619 1584 1620 /* TCP é信端ç¹ããã§ãã¯ããã*/1585 /* TCP 通信端点をチェックする。*/ 1621 1586 if (!VALID_TCP_CEP(cep)) 1622 1587 return E_NOEXS; -
azure_iot_hub/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
r388 r389 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 … … 104 92 105 93 /* 106 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©94 * TINET 1.1 との互換性のための定義 107 95 */ 108 96 … … 117 105 118 106 /* 119 * TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©107 * TINET 1.3 との互換性のための定義 120 108 */ 121 109 … … 127 115 128 116 /* 129 * ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©117 * コールバック関数の定義 130 118 */ 131 119 … … 133 121 134 122 /* 135 * TCP ã§ä½¿ç¨ããå¤æ°ã®åã®å®ç¾©123 * TCP で使用する変数の型の定義 136 124 */ 137 125 … … 142 130 143 131 /* 144 * TCP ã¿ã¤ãå¤æ°145 */ 146 147 #define NUM_TCP_TIMERS 4 /* TCP ã®ã¿ã¤ãæ°*/148 149 /* 150 * TCP åä»å£151 */ 152 153 /* IPv6 ç¨ TCP åä»å£*/132 * TCP タイマ変数 133 */ 134 135 #define NUM_TCP_TIMERS 4 /* TCP のタイマ数 */ 136 137 /* 138 * TCP 受付口 139 */ 140 141 /* IPv6 用 TCP 受付口 */ 154 142 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 168 156 } T_TCP6_REP; 169 157 170 /* IPv4 ç¨ TCP åä»å£*/158 /* IPv4 用 TCP 受付口 */ 171 159 172 160 typedef struct t_tcp4_rep { 173 161 174 162 /* 175 * ITRON TCP/IP API ãTCP åä»å£ã¨åãã¡ã³ã163 * ITRON TCP/IP API、TCP 受付口と同じメンバ 176 164 */ 177 ATR repatr; /* åä»å£å±æ§*/178 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/165 ATR repatr; /* 受付口属性 */ 166 T_IPV4EP myaddr; /* 自分のアドレス */ 179 167 180 168 #ifdef TCP_CFG_EXTENTIONS 181 uint16_t flags; /* åä»å£ãã©ã°*/182 ID semid_lock; /* åä»å£ããã¯*/169 uint16_t flags; /* 受付口フラグ */ 170 ID semid_lock; /* 受付口ロック */ 183 171 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 184 172 … … 202 190 203 191 /* 204 * åä»å£ãã©ã°205 */ 206 207 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* åççæã»åé¤å¯è½åä»å£ã*/208 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* çææ¸ã¿ã§æå¹ãªåä»å£ã*/209 210 /* 211 * TCP é信端ç¹192 * 受付口フラグ 193 */ 194 195 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能受付口。 */ 196 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な受付口。 */ 197 198 /* 199 * TCP 通信端点 212 200 */ 213 201 … … 223 211 224 212 /* 225 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã213 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 226 214 */ 227 ATR cepatr; /* é信端ç¹å±æ§*/228 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡*/229 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/230 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡*/231 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/232 t_tcp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/215 ATR cepatr; /* 通信端点属性 */ 216 void *sbuf; /* 送信用ウィンドバッファ */ 217 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 218 void *rbuf; /* 受信用ウィンドバッファ */ 219 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 220 t_tcp_callback callback; /* コールバック関数 */ 233 221 234 222 /* 235 * TINET ç¬èªã®ã¡ã³ã223 * TINET 独自のメンバ 236 224 */ 237 uint32_t flags; /* é信端ç¹ãã©ã° */ 238 ID semid_lock; /* é信端ç¹ãã㯠*/ 239 ID est_flgid; /* ã³ãã¯ã·ã§ã³ç¶æ 240 ã¤ãã³ããã©ã° */ 241 ID snd_flgid; /* éä¿¡ã¤ãã³ããã©ã° */ 242 ID rcv_flgid; /* åä¿¡ã¤ãã³ããã©ã° */ 243 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å */ 244 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å */ 245 uint8_t *sbuf_rptr; /* éä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 246 uint8_t *sbuf_wptr; /* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 247 uint8_t *rbuf_rptr; /* åä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 248 uint8_t *rbuf_wptr; /* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 249 T_TCP_SEQ snd_ssthresh; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd) */ 250 /* ã®ãããå¤ */ 251 T_TCP_TIME rxtcur; /* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */ 252 T_TCP_TIME srtt; /* å¹³æ»åããã RTT */ 253 T_TCP_TIME rttvar; /* å¹³æ»åãããåæ£ */ 254 T_TCP_WND snd_cwnd; /* 輻輳ã¦ã£ã³ããµã¤ãº */ 225 uint32_t flags; /* 通信端点フラグ */ 226 ID semid_lock; /* 通信端点ロック */ 227 ID est_flgid; /* コネクション状態イベントフラグ */ 228 ID snd_flgid; /* 送信イベントフラグ */ 229 ID rcv_flgid; /* 受信イベントフラグ */ 230 ID snd_tskid; /* 送信タスク識別子 */ 231 ID rcv_tskid; /* 受信タスク識別子 */ 232 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */ 233 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */ 234 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */ 235 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */ 236 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */ 237 /* のしきい値 */ 238 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */ 239 T_TCP_TIME srtt; /* 平滑化された RTT */ 240 T_TCP_TIME rttvar; /* 平滑化された分散 */ 241 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */ 255 242 256 243 /* 257 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº244 * 相手の最大受信セグメントサイズ 258 245 * 259 * ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxseg) ã¨ã 260 * ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxopd) ãå¥ã« 261 * ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã® 262 * ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã 263 * æ¬å®è£ 264 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯ 265 * å®è£ 266 ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã 246 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 247 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 248 * なっている。これは、現在のインターネットでは、オプション付きの 249 * セグメントのほうが多いからと説明されているためである。 250 * 本実装では、最大セグメントサイズオプション以外のオプションは 251 * 実装しないので、t_maxseg の使用する。 267 252 */ 268 253 T_TCP_SEG maxseg; 269 254 270 int16_t snd_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/271 int16_t rcv_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/255 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 256 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 272 257 273 258 #ifdef TCP_CFG_NON_BLOCKING 274 259 275 T_IPEP *p_dstaddr; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/276 T_IPEP *p_myaddr; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/260 T_IPEP *p_dstaddr; /* 相手のアドレスへのポインタ */ 261 T_IPEP *p_myaddr; /* 自分のアドレスへのポインタ */ 277 262 278 263 #if defined(_IP6_CFG) && defined(_IP4_CFG) 279 T_IPV4EP *p_dstaddr4; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/280 T_IPV4EP *p_myaddr4; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/264 T_IPV4EP *p_dstaddr4; /* 相手のアドレスへのポインタ */ 265 T_IPV4EP *p_myaddr4; /* 自分のアドレスへのポインタ */ 281 266 #endif 282 267 283 int16_t snd_nblk_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 284 int16_t rcv_nblk_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 285 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 286 é ã¢ãã¬ã¹ */ 287 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 288 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 289 é ã¢ãã¬ã¹ */ 290 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 291 void **snd_p_buf; /* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 292 void **rcv_p_buf; /* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 268 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 269 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ 270 void *snd_data; /* 送信データ領域の先頭アドレス */ 271 int_t snd_len; /* 送信データ領域の長さ */ 272 void *rcv_data; /* 受信データ領域の先頭アドレス */ 273 int_t rcv_len; /* 受信データ領域の長さ */ 274 void **snd_p_buf; /* 送信バッファへのポインタ */ 275 void **rcv_p_buf; /* 受信バッファへのポインタ */ 293 276 294 277 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 295 278 296 279 #ifdef TCP_CFG_SWBUF_CSAVE 297 T_NET_BUF *swbufq; /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/280 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 298 281 #endif 299 282 300 283 /* 301 * ãã以éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ãã¯ãªã¢ã¼ãããã284 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 302 285 */ 303 286 304 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP ã®ã¿ã¤ã*/305 T_IPEP dstaddr; /* ç¸æã®ã¢ãã¬ã¹*/306 T_IPEP myaddr; /* èªåã®ã¢ãã¬ã¹*/307 T_NET_BUF *reassq; /* åä¿¡åæ§æãã¥ã¼*/287 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 288 T_IPEP dstaddr; /* 相手のアドレス */ 289 T_IPEP myaddr; /* 自分のアドレス */ 290 T_NET_BUF *reassq; /* 受信再構成キュー */ 308 291 309 292 #if defined(_IP6_CFG) … … 311 294 #if defined(_IP4_CFG) 312 295 313 T_TCP4_REP *rep4; /* IPv4 ç¨åä»å£*/296 T_TCP4_REP *rep4; /* IPv4 用受付口 */ 314 297 315 298 #endif /* of #if defined(_IP4_CFG) */ 316 299 317 T_TCP6_REP *rep; /* IPv6 ç¨åä»å£*/300 T_TCP6_REP *rep; /* IPv6 用受付口 */ 318 301 319 302 #else /* of #if defined(_IP6_CFG) */ … … 321 304 #if defined(_IP4_CFG) 322 305 323 T_TCP4_REP *rep; /* IPv4 ç¨åä»å£*/306 T_TCP4_REP *rep; /* IPv4 用受付口 */ 324 307 325 308 #endif /* of #if defined(_IP4_CFG) */ … … 329 312 330 313 #ifdef TCP_CFG_RWBUF_CSAVE 331 T_NET_BUF *rwbufq; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/314 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 332 315 #endif 333 316 334 317 #ifdef TCP_CFG_EXTENTIONS 335 T_TCP_HDR *urg_tcph; /* ç·æ¥ãã¼ã¿å 336 ¥ãã®ã»ã°ã¡ã³ãã® TCP ããã */ 337 T_TCP_SEQ snd_up; /* éä¿¡ããç·æ¥ãã¤ã³ã¿ */ 338 T_TCP_SEQ rcv_up; /* åä¿¡ããç·æ¥ãã¤ã³ã¿ */ 318 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 319 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 320 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 339 321 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 340 322 341 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 342 /* 確èªãããæ大éä¿¡ SEQ */ 343 T_TCP_SEQ snd_max; /* éä¿¡ããæ大 SEQ */ 344 T_TCP_SEQ snd_nxt; /* 次ã«éä¿¡ãã SEQ */ 345 T_TCP_SEQ snd_old_nxt; /* å 346 ã® snd_nxt */ 347 T_TCP_SEQ snd_wl1; /* ååã¦ã£ã³ããæ´æ°ãã SEQ */ 348 T_TCP_SEQ snd_wl2; /* ååã¦ã£ã³ããæ´æ°ãã ACK */ 349 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 350 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 351 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 352 ãã¦ããæå°ã® SEQ */ 353 T_TCP_SEQ rcv_adv; /* åä¿¡ãæå¾ 354 ãã¦ããæ大㮠SEQ */ 355 T_TCP_SEQ rcv_wnd; /* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 356 T_TCP_SEQ rtseq; /* æéè¨æ¸¬ãå§ãã SEQ */ 357 T_TCP_SEQ last_ack_sent; /* æå¾ã«éä¿¡ãã ACK */ 358 T_TCP_TIME idle; /* ã¢ã¤ãã«æé */ 359 ER error; /* éåæã«çºçããã¨ã©ã¼ */ 360 ER net_error; /* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ 361 */ 362 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 363 T_TCP_WND max_sndwnd; /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº */ 364 T_TCP_TIME rtt; /* å¾å¾©æé */ 365 uint16_t swbuf_count; /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 366 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 367 uint16_t rcv_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 368 uint16_t get_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 369 uint8_t rxtshift; /* åéä¿¡åæ°ã® log(2) */ 370 uint8_t fsm_state; /* FSM ç¶æ 371 */ 372 uint8_t dupacks; /* åé ACK æ° */ 323 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 324 /* 確認された最大送信 SEQ */ 325 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */ 326 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */ 327 T_TCP_SEQ snd_old_nxt; /* 元の snd_nxt */ 328 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */ 329 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */ 330 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 331 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 332 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 333 T_TCP_SEQ rcv_adv; /* 受信を期待している最大の SEQ */ 334 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */ 335 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */ 336 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */ 337 T_TCP_TIME idle; /* アイドル時間 */ 338 ER error; /* 非同期に発生したエラー */ 339 ER net_error; /* ネットワークのエラー状態 */ 340 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 341 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */ 342 T_TCP_TIME rtt; /* 往復時間 */ 343 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */ 344 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 345 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */ 346 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */ 347 uint8_t rxtshift; /* 再送信回数の log(2) */ 348 uint8_t fsm_state; /* FSM 状態 */ 349 uint8_t dupacks; /* 再送 ACK 数 */ 373 350 374 351 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 375 uint16_t rwbufq_entries; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ã¨ã³ããªæ°*/352 uint16_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 376 353 #endif 377 354 … … 382 359 383 360 /* 384 * Time Wait ç¨ TCP é信端ç¹361 * Time Wait 用 TCP 通信端点 385 362 */ 386 363 387 364 typedef struct t_tcp_twcep { 388 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 389 T_TCP_TIME timer_2msl; /* 2MSL ã¿ã¤ã */ 390 T_IPEP dstaddr; /* ç¸æã®ã¢ãã¬ã¹ */ 391 T_IPEP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 392 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 393 /* 確èªãããæ大éä¿¡ SEQ */ 394 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 395 ãã¦ããæå°ã® SEQ */ 396 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 397 uint8_t fsm_state; /* FSM ç¶æ 398 */ 399 uint8_t flags; /* é信端ç¹ãã©ã° */ 365 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 366 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 367 T_IPEP dstaddr; /* 相手のアドレス */ 368 T_IPEP myaddr; /* 自分のアドレス */ 369 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 370 /* 確認された最大送信 SEQ */ 371 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 372 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 373 uint8_t fsm_state; /* FSM 状態 */ 374 uint8_t flags; /* 通信端点フラグ */ 400 375 401 376 } T_TCP_TWCEP; … … 404 379 405 380 /* 406 * TCP é信端ç¹ã®ç¶æ 407 ãã©ã° 408 */ 409 410 #define TCP_CEP_FLG_IPV4 ULONG_C(0x00000001) /* IPv4 ç¨ã */ 411 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000100) /* ç´ã¡ã«ç¸æã« ACK ãéãã */ 412 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000200) /* ACK ãé 413 延ããã */ 414 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000400) /* FIN ãéã£ã¦ããã */ 415 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000800) /* SYN ãéä¿¡ããã */ 416 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00001000) /* FIN ãéä¿¡ããã */ 417 #define TCP_CEP_FLG_FORCE ULONG_C(0x00002000) /* å¼·å¶éä¿¡ã */ 418 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00004000) /* push ããªãã */ 419 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00008000) /* é 420 延ããªãã */ 421 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00010000) /* å¼·å¶éä¿¡ããå¾ãã©ã°ãã¯ãªã¢ã¼ããã*/ 422 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00020000) /* éä¿¡ãéå§ããã */ 423 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00040000) /* éä¿¡ãäºç´ããã */ 424 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00100000) /* åççæã»åé¤å¯è½é信端ç¹ã */ 425 #define TCP_CEP_FLG_VALID ULONG_C(0x00200000) /* çææ¸ã¿ã§æå¹ãªé信端ç¹ã */ 426 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00400000) /* éä¿¡ããå¾ã³ãã¯ã·ã§ã³ãéããã*/ 427 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00800000) /* éä¿¡ããå¾ãsnd_nxt ãå 428 ã«æ»ãã*/ 429 430 /* éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ */ 431 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x80000000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦è¦æ±*/ 432 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x70000000) /* ãã¹ã¯ */ 433 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* éä¿¡ã¦ã£ã³ããããã¡æªä½¿ç¨ */ 434 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x10000000) /* ç¸æã®åä¿¡ã¦ã£ã³ãã®éãå¾ 435 ã¡ */ 436 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x20000000) /* ãããã¯ã¼ã¯ãããã¡äºç´å¾ 437 ã¡ */ 438 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x30000000) /* ãããã¯ã¼ã¯ãããã¡äºç´æ¸ã¿ */ 439 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x40000000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿*/ 440 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x50000000) /* éä¿¡å¯è½ */ 441 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x60000000) /* éä¿¡æ¸ã¿ã§ãACKå¾ 442 ã¡ */ 443 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x70000000) /* éä¿¡æ¸ã¿ã§ãACKå®äº */ 444 445 /* åæåããé¤å¤ãããã©ã°ã®å®ç¾© */ 381 * TCP 通信端点の状態フラグ 382 */ 383 384 #define TCP_CEP_FLG_IPV4 ULONG_C(0x00000001) /* IPv4 用。 */ 385 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000100) /* 直ちに相手に ACK を送る。 */ 386 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000200) /* ACK を遅延する。 */ 387 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000400) /* FIN を送ってある。 */ 388 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000800) /* SYN を送信する。 */ 389 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00001000) /* FIN を送信する。 */ 390 #define TCP_CEP_FLG_FORCE ULONG_C(0x00002000) /* 強制送信。 */ 391 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00004000) /* push しない。 */ 392 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00008000) /* 遅延しない。 */ 393 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00010000) /* 強制送信した後フラグをクリアーする。*/ 394 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00020000) /* 送信を開始する。 */ 395 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00040000) /* 送信を予約する。 */ 396 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00100000) /* 動的生成・削除可能通信端点。 */ 397 #define TCP_CEP_FLG_VALID ULONG_C(0x00200000) /* 生成済みで有効な通信端点。 */ 398 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00400000) /* 送信した後コネクションを閉じる。*/ 399 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00800000) /* 送信した後、snd_nxt を元に戻す。*/ 400 401 /* 送受信ウィンドバッファの省コピー機能 */ 402 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x80000000) /* ネットワークバッファ割当て要求*/ 403 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x70000000) /* マスク */ 404 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* 送信ウィンドバッファ未使用 */ 405 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x10000000) /* 相手の受信ウィンドの開き待ち */ 406 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x20000000) /* ネットワークバッファ予約待ち */ 407 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x30000000) /* ネットワークバッファ予約済み */ 408 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x40000000) /* ネットワークバッファ割当て済み*/ 409 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x50000000) /* 送信可能 */ 410 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x60000000) /* 送信済みで、ACK待ち */ 411 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x70000000) /* 送信済みで、ACK完了 */ 412 413 /* 初期化から除外するフラグの定義 */ 446 414 #define TCP_CEP_FLG_NOT_CLEAR (TCP_CEP_FLG_WBCS_NBUF_REQ|TCP_CEP_FLG_WBCS_MASK|\ 447 415 TCP_CEP_FLG_DYNAMIC|TCP_CEP_FLG_VALID|TCP_CEP_FLG_IPV4) 448 416 449 417 /* 450 * é信端ç¹ã¤ãã³ããã©ã° 451 */ 452 453 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* ã³ãã¯ã·ã§ã³ç¢ºç« */ 454 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* æªä½¿ç¨ç¶æ 455 */ 456 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* éä¿¡ã¦ã£ã³ããããã¡ç©ºã */ 457 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* éä¿¡ã¦ã£ã³ããããã¡ãã¼ã¿ãã*/ 458 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* å 459 ¨ã¤ãã³ã */ 460 461 /* 462 * 追å API æ©è½ã»äºè±¡ã³ã¼ã 463 */ 464 465 /* TCP é¢ä¿ */ 418 * 通信端点イベントフラグ 419 */ 420 421 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* コネクション確立 */ 422 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* 未使用状態 */ 423 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* 送信ウィンドバッファ空き */ 424 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり*/ 425 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* 全イベント */ 426 427 /* 428 * 追加 API 機能・事象コード 429 */ 430 431 /* TCP 関係 */ 466 432 467 433 #define TFN_TCP_UNDEF (0) 468 434 469 435 /* 470 * srtt: å¹³æ»åãããRTT471 * rttvar: å¹³æ»åãããåæ£472 * rtt: 測å®ãããå¾å¾©æé436 * srtt: 平滑化された RTT 437 * rttvar: 平滑化された分散 438 * rtt: 測定された往復時間 473 439 * 474 * å¹³æ»åããã RTT (srtt) ã¨å¹³æ»åãããåæ£ (rttvar) ã475 * æ´æ°åã§è¨ç®ããããã«ãå·¦ã·ãããã¦ã¹ã±ã¼ã«ããã476 * srtt 㯠2 é²å°æ°ç¹ä»¥ä¸ 3 ãããã477 * rttvar 㯠2 é²å°æ°ç¹ä»¥ä¸ 2 ããããä¿æããã440 * 平滑化された RTT (srtt) と平滑化された分散 (rttvar) を 441 * 整数型で計算するために、左シフトしてスケールする。 442 * srtt は 2 進小数点以下 3 ビット、 443 * rttvar は 2 進小数点以下 2 ビットを保持する。 478 444 */ 479 445 480 446 #define TCP_DELTA_SHIFT 2 481 /* å·®å = rtt/8 + srtt*7/8 ã®è¨ç®ã®ããã®ã·ããå¤*/447 /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値 */ 482 448 #define TCP_SRTT_SHIFT (TCP_DELTA_SHIFT + 3) 483 /* srtt ã®ã·ããå¤ã3(+2)ããã*/449 /* srtt のシフト値、3(+2)ビット */ 484 450 #define TCP_RTTVAR_SHIFT (TCP_DELTA_SHIFT + 2) 485 /* rttvar ã®ã·ããå¤ã2(+2)ããã*/451 /* rttvar のシフト値、2(+2)ビット */ 486 452 #define TCP_SRTT_SCALE (1<<TCP_SRTT_SHIFT) 487 453 #define TCP_RTTVAR_SCALE (1<<TCP_RTTVAR_SHIFT) 488 454 489 455 /* 490 * é«éå転éãéå§ããåé ACK æ°ã®ãããå¤456 * 高速再転送を開始する再送 ACK 数のしきい値 491 457 */ 492 458 … … 494 460 495 461 /* 496 * åä¿¡åæ§æãã¥ã¼ã§ã® TCP ããã462 * 受信再構成キューでの TCP ヘッダ 497 463 */ 498 464 499 465 typedef struct t_tcp_q_hdr { 500 uint16_t sport; /* éä¿¡å 501 ãã¼ãçªå· */ 502 uint16_t dport; /* å®å 503 ãã¼ãçªå· */ 504 505 uint32_t seq; /* SEQ çªå· */ 506 507 T_NET_BUF *next; /* 次ã®ã»ã°ã¡ã³ããå 508 㯠ACK çªå·(ack) */ 509 510 uint8_t doff; /* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã) */ 511 uint8_t flags; /* ãã©ã°(ä¸ä½6ããã) */ 512 uint16_t soff; /* SDU ãªãã»ãããå 513 ã¯ã¦ã£ã³ããµã¤ãº(win) */ 514 515 uint16_t slen; /* SDU é·ãå 516 ã¯ãã§ãã¯ãµã (sum) */ 517 uint16_t urp; /* ç·æ¥ãã¤ã³ã¿ï¼SDU é·è£æ£ï¼ */ 466 uint16_t sport; /* 送信元ポート番号 */ 467 uint16_t dport; /* 宛先ポート番号 */ 468 469 uint32_t seq; /* SEQ 番号 */ 470 471 T_NET_BUF *next; /* 次のセグメント、元は ACK 番号(ack) */ 472 473 uint8_t doff; /* データオフセット(上位4ビット) */ 474 uint8_t flags; /* フラグ(下位6ビット) */ 475 uint16_t soff; /* SDU オフセット、元はウィンドサイズ(win) */ 476 477 uint16_t slen; /* SDU 長、元はチェックサム(sum) */ 478 uint16_t urp; /* 緊急ポインタ(SDU 長補正) */ 518 479 } __attribute__((packed, aligned(2)))T_TCP_Q_HDR; 519 480 … … 521 482 522 483 /* 523 * ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©524 */ 525 526 #define TMIN_TCP_REPID 1 /* TCP åä»å£ ID ã®æå°å¤*/527 #define TMIN_TCP6_REPID 1 /* TCP/IPv6 åä»å£ ID ã®æå°å¤*/528 #define TMIN_TCP4_REPID (TNUM_TCP6_REPID+1) /* TCP/IPv4 åä»å£ ID ã®æå°å¤*/529 530 #define TMIN_TCP_CEPID 1 /* TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/531 #define TMIN_TCP6_CEPID 1 /* TCP/IPv6 éä¿¡ç«¯ç¹ ID ã®æå°å¤*/532 #define TMIN_TCP4_CEPID (TNUM_TCP6_CEPID+1) /* TCP/IPv4 éä¿¡ç«¯ç¹ ID ã®æå°å¤*/533 534 #define TMIN_TCP_TWCEPID 1 /* Time Wait ç¨ TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/535 536 /* 537 * å¶å¾¡ã»ã°ã¡ã³ãï¼ãã¼ã¿ãªãï¼ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡484 * オブジェクト ID の最小値の定義 485 */ 486 487 #define TMIN_TCP_REPID 1 /* TCP 受付口 ID の最小値 */ 488 #define TMIN_TCP6_REPID 1 /* TCP/IPv6 受付口 ID の最小値 */ 489 #define TMIN_TCP4_REPID (TNUM_TCP6_REPID+1) /* TCP/IPv4 受付口 ID の最小値 */ 490 491 #define TMIN_TCP_CEPID 1 /* TCP 通信端点 ID の最小値 */ 492 #define TMIN_TCP6_CEPID 1 /* TCP/IPv6 通信端点 ID の最小値 */ 493 #define TMIN_TCP4_CEPID (TNUM_TCP6_CEPID+1) /* TCP/IPv4 通信端点 ID の最小値 */ 494 495 #define TMIN_TCP_TWCEPID 1 /* Time Wait 用 TCP 通信端点 ID の最小値 */ 496 497 /* 498 * 制御セグメント(データなし)サイズのネットワークバッファ 538 499 */ 539 500 … … 541 502 542 503 typedef struct t_net_buf_cseg { 543 uint16_t len; /* ãã¼ã¿ã®é·ã*/544 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/545 uint8_t flags; /* ãã©ã°*/504 uint16_t len; /* データの長さ */ 505 uint8_t idix; /* mpfid のインデックス */ 506 uint8_t flags; /* フラグ */ 546 507 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 547 508 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 551 512 #endif 552 513 uint8_t buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE]; 553 /* ãããã¡æ¬ä½*/514 /* バッファ本体 */ 554 515 } T_NET_BUF_CSEG; 555 516 … … 557 518 558 519 /* 559 * SNMP 㮠管çæ 560 å ±ãã¼ã¹ (MIB) 520 * SNMP の 管理情報ベース (MIB) 561 521 */ 562 522 … … 575 535 576 536 /* 577 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã578 */ 579 580 /* TCP åä»å£*/537 * 関数シミュレーションマクロ 538 */ 539 540 /* TCP 受付口 */ 581 541 582 542 #define VALID_TCP6_REPID(id) (TMIN_TCP6_REPID<=(id)&&(id)<=tmax_tcp6_repid) … … 604 564 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 605 565 606 /* TCP é信端ç¹*/566 /* TCP 通信端点 */ 607 567 608 568 #define VALID_TCP_CEPID(id) (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid) … … 634 594 635 595 /* 636 * å 637 ¨åå¤æ° 596 * 全域変数 638 597 */ 639 598 … … 642 601 extern T_TCP_STATS tcp_stats; 643 602 644 /* TCP åä»å£*/603 /* TCP 受付口 */ 645 604 646 605 extern T_TCP6_REP tcp6_rep[]; … … 663 622 #endif 664 623 665 /* TCP é信端ç¹*/624 /* TCP 通信端点 */ 666 625 667 626 extern T_TCP_CEP tcp_cep[]; … … 679 638 680 639 /* 681 * Inline é¢æ°640 * Inline 関数 682 641 */ 683 642 … … 685 644 686 645 /* 687 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã688 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°689 */ 690 691 /* 692 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã646 * TCP 通信端点の受信ウィンドバッファの省コピー機能が 647 * 無効の場合は何もしないためのダミーの関数 648 */ 649 650 /* 651 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 693 652 */ 694 653 … … 703 662 704 663 /* 705 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿ã706 * æå¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°707 */ 708 709 /* 710 * tcp_read_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãã664 * TCP 通信端点の送信ウィンドバッファの省コピー機能のみが 665 * 有効の場合は何もしないためのダミーの関数 666 */ 667 668 /* 669 * tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。 711 670 */ 712 671 … … 721 680 722 681 /* 723 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã724 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°725 */ 726 727 /* 728 * tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã682 * TCP 通信端点の送信ウィンドバッファの省コピー機能が 683 * 無効の場合は何もしないためのダミーの関数 684 */ 685 686 /* 687 * tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。 729 688 */ 730 689 … … 735 694 736 695 /* 737 * tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããã696 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。 738 697 */ 739 698 … … 744 703 745 704 /* 746 * tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããã705 * tcp_push_res_nbuf -- ネットワークバッファを予約する。 747 706 */ 748 707 … … 754 713 755 714 /* 756 * tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãã715 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。 757 716 */ 758 717 … … 766 725 767 726 /* 768 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã727 * TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ 769 728 */ 770 729 … … 800 759 801 760 /* 802 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã761 * TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ 803 762 */ 804 763 … … 851 810 852 811 /* 853 * é¢æ°812 * 関数 854 813 */ 855 814 … … 886 845 887 846 /* 888 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°889 */ 890 891 /* 892 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã893 * é¢æ°ã®é¸æã«ä½¿ç¨ããã847 * TCP 通信端点の受信ウィンドバッファ用関数 848 */ 849 850 /* 851 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、 852 * 関数の選択に使用する。 894 853 */ 895 854 … … 901 860 902 861 /* 903 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°862 * TCP 通信端点の受信ウィンドバッファの省コピー機能用関数 904 863 */ 905 864 … … 911 870 912 871 /* 913 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°872 * TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数 914 873 */ 915 874 … … 921 880 922 881 /* 923 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°924 */ 925 926 /* 927 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã928 * é¢æ°ã®é¸æã«ä½¿ç¨ããã882 * TCP 通信端点の送信ウィンドバッファ用関数 883 */ 884 885 /* 886 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、 887 * 関数の選択に使用する。 929 888 */ 930 889 … … 943 902 944 903 /* 945 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°904 * TCP 通信端点の送信ウィンドバッファの省コピー機能用関数 946 905 */ 947 906 … … 957 916 958 917 /* 959 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°918 * TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数 960 919 */ 961 920 … … 973 932 974 933 /* 975 * TCP ãããã®ãã¬ã¼ã¹åºåæ©è½ç¨é¢æ°934 * TCP ヘッダのトレース出力機能用関数 976 935 */ 977 936 extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep); 978 937 extern void tcp_input_trace (T_NET_BUF *input, T_TCP_CEP *cep); 979 938 980 /* TCP åºåã¿ã¹ã¯*/939 /* TCP 出力タスク */ 981 940 982 941 extern void tcp_output_task(intptr_t exinf); -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 85 73 86 74 /* 87 * tcp_cre_rep -- TCP åä»å£ã®çæãæ¡å¼µæ©è½ã75 * tcp_cre_rep -- TCP 受付口の生成【拡張機能】 88 76 */ 89 77 … … 96 84 ER error; 97 85 98 /* TCP åä»å£ ID ããã§ãã¯ããã*/86 /* TCP 受付口 ID をチェックする。*/ 99 87 if (!VALID_TCP_REPID(repid)) 100 88 return E_ID; 101 89 102 /* pk_crep ã NULL ãªãã¨ã©ã¼*/90 /* pk_crep が NULL ならエラー */ 103 91 if (pk_crep == NULL) 104 92 return E_PAR; … … 107 95 108 96 /* 109 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã110 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼97 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 98 * IPv4 射影アドレスが指定されたらエラー 111 99 */ 112 100 if (in6_is_addr_ipv4mapped(&pk_crep->myaddr.ipaddr)) … … 115 103 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 116 104 117 /* TCP åä»å£ãå¾ãã*/105 /* TCP 受付口を得る。*/ 118 106 rep = GET_TCP_REP(repid); 119 107 120 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/108 /* TCP 受付口が、動的生成用でなければエラー */ 121 109 if (!DYNAMIC_TCP_REP(rep)) 122 110 return E_ID; 123 111 124 /* åä»å£ãããã¯ããã*/112 /* 受付口をロックする。*/ 125 113 syscall(wai_sem(rep->semid_lock)); 126 114 127 115 /* 128 * TCP åä»å£ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼116 * TCP 受付口をチェックする。生成済みであればエラー 129 117 */ 130 118 if (VALID_TCP_REP(rep)) … … 132 120 else { 133 121 134 /* TCP åä»å£çææ 135 å ±ãã³ãã¼ããã*/ 136 rep->repatr = pk_crep->repatr; /* åä»å£å±æ§ */ 137 rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr; /* èªåã®ã¢ãã¬ã¹ */ 138 rep->myaddr.portno = pk_crep->myaddr.portno; /* èªåã®ã¢ãã¬ã¹ */ 139 140 /* TCP åä»å£ãçææ¸ã¿ã«ããã*/ 122 /* TCP 受付口生成情報をコピーする。*/ 123 rep->repatr = pk_crep->repatr; /* 受付口属性 */ 124 rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr; /* 自分のアドレス */ 125 rep->myaddr.portno = pk_crep->myaddr.portno; /* 自分のアドレス */ 126 127 /* TCP 受付口を生成済みにする。*/ 141 128 rep->flags |= TCP_REP_FLG_VALID; 142 129 error = E_OK; 143 130 } 144 131 145 /* åä»å£ã®ããã¯ã解é¤ããã*/132 /* 受付口のロックを解除する。*/ 146 133 syscall(sig_sem(rep->semid_lock)); 147 134 … … 154 141 155 142 /* 156 * tcp_find_cep_rep -- TCP åä»å£ããªã³ã¯ãã¦ãã TCP é信端ç¹ãå¾ãã143 * tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。 157 144 */ 158 145 … … 176 163 177 164 /* 178 * tcp_del_rep_body -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ãã®æ¬ä½165 * tcp_del_rep_body -- TCP 受付口の削除【拡張機能】の本体 179 166 */ 180 167 … … 186 173 ER error = E_OK; 187 174 188 /* TCP åä»å£ ID ã®ãã§ãã¯ã¯çµäºãã¦ããã*/189 190 /* TCP åä»å£ãå¾ãã*/175 /* TCP 受付口 ID のチェックは終了している。*/ 176 177 /* TCP 受付口を得る。*/ 191 178 rep = GET_TCP_REP(repid); 192 179 193 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/180 /* TCP 受付口が、動的生成用でなければエラー */ 194 181 if (!DYNAMIC_TCP_REP(rep)) 195 182 return E_ID; 196 183 197 /* åä»å£ãããã¯ããã*/184 /* 受付口をロックする。*/ 198 185 syscall(wai_sem(rep->semid_lock)); 199 186 200 /* TCP åä»å£ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼*/187 /* TCP 受付口をチェックする。未生成の場合はエラー */ 201 188 if (!VALID_TCP_REP(rep)) 202 189 error = E_NOEXS; … … 204 191 if ((cep = TCP_FIND_CEP_REP(rep)) != NULL) { 205 192 /* 206 * ãã§ã«ååãªã¼ãã³ãã¦ããã¨ã207 * ï¼tcp_acp_cep ãå¼ã°ãã¦ããã¨ãï¼ã¯ã208 * tcp_acp_cep ãçµäºãããã193 * すでに受動オープンしているとき 194 *(tcp_acp_cep が呼ばれているとき)は、 195 * tcp_acp_cep を終了させる。 209 196 */ 210 197 211 /* é信端ç¹ãããã¯ããã*/198 /* 通信端点をロックする。*/ 212 199 syscall(wai_sem(cep->semid_lock)); 213 200 214 201 /* 215 * é信端ç¹ããåä»å£ã解æ¾ãã216 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã202 * 通信端点から受付口を解放し、 203 * イベントフラグをクローズに設定する。 217 204 */ 218 205 cep->rep = NULL; … … 254 241 cep->rcv_tfn = TFN_TCP_UNDEF; 255 242 256 /* é信端ç¹ã®ããã¯ã解é¤ããã*/243 /* 通信端点のロックを解除する。*/ 257 244 syscall(sig_sem(cep->semid_lock)); 258 245 … … 261 248 error = E_OK; 262 249 263 /* TCP åä»å£ãæªçæã«ããã*/250 /* TCP 受付口を未生成にする。*/ 264 251 rep->flags &= ~TCP_REP_FLG_VALID; 265 252 } 266 253 267 /* åä»å£ã®ããã¯ã解é¤ããã*/254 /* 受付口のロックを解除する。*/ 268 255 syscall(sig_sem(rep->semid_lock)); 269 256 … … 280 267 281 268 /* 282 * tcp_acp_cep -- æ¥ç¶è¦æ±å¾ 283 ã¡ (ååãªã¼ãã³)ãæ¨æºæ©è½ã 269 * tcp_acp_cep -- 接続要求待ち (受動オープン)【標準機能】 284 270 */ 285 271 … … 297 283 298 284 /* 299 * API (tcp6_acp_cep 㨠tcp_acp_cep) ã¨ã300 * TCP é信端ç¹ã®ãããã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼285 * API (tcp6_acp_cep と tcp_acp_cep) と、 286 * TCP通信端点のプロトコルが矛盾していればエラー 301 287 */ 302 288 … … 317 303 #endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */ 318 304 319 /* TCP åä»å£ããã§ãã¯ããã*/305 /* TCP 受付口をチェックする。*/ 320 306 if (!VALID_TCP_REPID(repid)) 321 307 return E_ID; … … 323 309 #ifdef TCP_CFG_NON_BLOCKING 324 310 325 /* p_dstaddr ã NULL ãªãã¨ã©ã¼*/311 /* p_dstaddr が NULL ならエラー */ 326 312 if (p_dstaddr == NULL) 327 313 return E_PAR; … … 329 315 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 330 316 331 /* p_dstaddr ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/317 /* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */ 332 318 if (p_dstaddr == NULL || tmout == TMO_NBLK) 333 319 return E_PAR; … … 338 324 339 325 /* 340 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã341 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼326 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 327 * IPv4 射影アドレスが指定されたらエラー 342 328 */ 343 329 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 347 333 348 334 /* 349 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã350 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼335 * CEP をロックし、API 機能コードとタスク識別子を記録する。 336 * すでに記録されていれば、ペンディング中なのでエラー 351 337 */ 352 338 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_ACP_CEP)) != E_OK) 353 339 return error; 354 340 355 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 356 ã§ãªããã°ã¨ã©ã¼ã*/ 341 /* CEP の FSM がクローズ状態でなければエラー。*/ 357 342 if (cep->fsm_state != TCP_FSM_CLOSED) { 358 343 error = E_OBJ; … … 361 346 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 362 347 363 /* TCP é信端ç¹ãåæåããã*/348 /* TCP 通信端点を初期化する。*/ 364 349 tcp_init_cep(cep); 365 350 366 /* TCP åä»å£ãå¾ãã*/351 /* TCP 受付口を得る。*/ 367 352 368 353 rep = GET_TCP_REP(repid); … … 370 355 #ifdef TCP_CFG_EXTENTIONS 371 356 372 /* TCP åä»å£ãããã¯ããã*/357 /* TCP 受付口をロックする。*/ 373 358 syscall(wai_sem(rep->semid_lock)); 374 359 375 /* TCP åä»å£ããã§ãã¯ããã*/360 /* TCP 受付口をチェックする。*/ 376 361 if (!VALID_TCP_REP(rep)) { 377 362 syscall(sig_sem(rep->semid_lock)); … … 382 367 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 383 368 384 /* TCP é信端ç¹ã«TCPåä»å£ãè¨é²ããã*/369 /* TCP 通信端点にTCP受付口を記録する。*/ 385 370 386 371 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 404 389 #ifdef TCP_CFG_EXTENTIONS 405 390 406 /* TCP åä»å£ã®ããã¯ã解é¤ããã*/391 /* TCP 受付口のロックを解除する。*/ 407 392 syscall(sig_sem(rep->semid_lock)); 408 393 409 394 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 410 395 411 /* TCP åä»å£ã®ã¢ãã¬ã¹ãã³ãã¼ããã*/396 /* TCP 受付口のアドレスをコピーする。*/ 412 397 413 398 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4) … … 428 413 #if API_PROTO == API_PROTO_IPV4 429 414 430 /* TCP é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«ãè¨å®ããã*/415 /* TCP 通信端点のネットワーク層プロトコルを設定する。*/ 431 416 cep->flags |= TCP_CEP_FLG_IPV4; 432 417 433 418 #endif /* of #if API_PROTO == API_PROTO_IPV4 */ 434 419 435 /* é信端ç¹ãè¨å®ããã*/420 /* 通信端点を設定する。*/ 436 421 cep->fsm_state = TCP_FSM_LISTEN; 437 422 438 423 #ifdef TCP_CFG_NON_BLOCKING 439 424 440 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/425 /* タイムアウトをチェックする。*/ 441 426 if (tmout == TMO_NBLK) { 442 /* ãã³ããããã³ã°ã³ã¼ã«*/427 /* ノンブロッキングコール */ 443 428 444 429 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 470 455 471 456 /* 472 * FSM ã ESTABLISHED ã«ãªãã¾ã§å¾ 473 ã¤ã 474 * FSM ã CLOSED ã«ãªã£ãå ´åã¯ãã¨ã©ã¼ãçºçãããã¨ãæå³ãã¦ããã 457 * FSM が ESTABLISHED になるまで待つ。 458 * FSM が CLOSED になった場合は、エラーが発生したことを意味している。 475 459 */ 476 460 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 486 470 487 471 if (error == E_OK) { 488 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/472 /* 相手のアドレスをコピーする。*/ 489 473 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4) 490 474 p_dstaddr->ipaddr = ntohl(cep->dstaddr.ipaddr.s6_addr32[3]); … … 496 480 else { 497 481 /* 498 * é信端ç¹ããåä»å£ã解æ¾ãã499 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã482 * 通信端点から受付口を解放し、 483 * イベントフラグをクローズに設定する。 500 484 */ 501 485 cep->rep = NULL; … … 526 510 527 511 /* 528 * tcp_con_cep -- æ¥ç¶è¦æ± (è½åãªã¼ãã³)ãæ¨æºæ©è½ã512 * tcp_con_cep -- 接続要求 (能動オープン)【標準機能】 529 513 */ 530 514 … … 541 525 542 526 /* 543 * API (tcp6_acp_cep 㨠tcp_acp_cep) ã¨ã544 * TCP é信端ç¹ã®ãããã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼527 * API (tcp6_acp_cep と tcp_acp_cep) と、 528 * TCP通信端点のプロトコルが矛盾していればエラー 545 529 */ 546 530 … … 562 546 563 547 /* 564 * ãã¦å 565 ããã«ããã£ã¹ãã¢ãã¬ã¹ãªãã¨ã©ã¼ 548 * あて先がマルチキャストアドレスならエラー 566 549 */ 567 550 … … 581 564 582 565 /* 583 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã584 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼566 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 567 * IPv4 射影アドレスが指定されたらエラー 585 568 */ 586 569 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 592 575 593 576 /* 594 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ãªãã¨ã©ã¼577 * p_dstaddr または p_myaddr が NULL ならエラー 595 578 */ 596 579 if (p_myaddr == NULL || p_dstaddr == NULL) … … 600 583 601 584 /* 602 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ã603 * tmout ã TMO_NBLK ãªãã¨ã©ã¼585 * p_dstaddr または p_myaddr が NULL 、 586 * tmout が TMO_NBLK ならエラー 604 587 */ 605 588 if (p_myaddr == NULL || p_dstaddr == NULL || tmout == TMO_NBLK) … … 609 592 610 593 /* 611 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã612 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼594 * CEP をロックし、API 機能コードとタスク識別子を記録する。 595 * すでに記録されていれば、ペンディング中なのでエラー 613 596 */ 614 597 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CON_CEP)) != E_OK) 615 598 return error; 616 599 617 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 618 ã§ãªããã°ã¨ã©ã¼ã*/ 600 /* CEP の FSM がクローズ状態でなければエラー。*/ 619 601 if (cep->fsm_state != TCP_FSM_CLOSED) { 620 602 error = E_OBJ; … … 623 605 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 624 606 625 /* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/607 /* シーケンス番号を初期化する。*/ 626 608 if (tcp_iss == 0) 627 609 tcp_init_iss(); 628 610 629 /* é信端ç¹ãåæåããã*/611 /* 通信端点を初期化する。*/ 630 612 tcp_init_cep(cep); 631 613 632 614 /* 633 * IP ã¢ãã¬ã¹ãè¨å®ããã634 * p_myaddr ã NADR (-1) ã§ã¯ãªããèª IP ã¢ãã¬ã¹ã ANY ã§ãªããã°ã635 * æå®ããã IP ã¢ãã¬ã¹ãå²ãå½ã¦ãã615 * IP アドレスを設定する。 616 * p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、 617 * 指定された IP アドレスを割り当てる。 636 618 */ 637 619 … … 663 645 #if API_PROTO == API_PROTO_IPV4 664 646 665 /* TCP é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«ãè¨å®ããã*/647 /* TCP 通信端点のネットワーク層プロトコルを設定する。*/ 666 648 cep->flags |= TCP_CEP_FLG_IPV4; 667 649 668 650 #endif /* of #if API_PROTO == API_PROTO_IPV4 */ 669 651 670 /* é信端ç¹ãè¨å®ããã*/652 /* 通信端点を設定する。*/ 671 653 //NET_DEBUG_TCP5("tcp_con_cep3[c=%d,d=%lI.%d,s=%lI.%d]\n", 672 654 cep->fsm_state = TCP_FSM_SYN_SENT; … … 678 660 #ifdef TCP_CFG_NON_BLOCKING 679 661 680 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/662 /* タイムアウトをチェックする。*/ 681 663 if (tmout == TMO_NBLK) { 682 /* ãã³ããããã³ã°ã³ã¼ã«*/664 /* ノンブロッキングコール */ 683 665 684 666 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 709 691 cep->snd_nblk_tfn = TFN_TCP_CON_CEP; 710 692 711 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/693 /* コネクションの開設をポストする。*/ 712 694 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 713 695 sig_sem(SEM_TCP_POST_OUTPUT); … … 719 701 720 702 /* 721 * p_myaddr ã NADR (-1) ãã722 * èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã703 * p_myaddr が NADR (-1) か、 704 * 自ポート番号が TCP_PORTANY なら、自動で割り当てる。 723 705 */ 724 706 if (p_myaddr == NADR || p_myaddr->portno == TCP_PORTANY) … … 727 709 goto err_ret; 728 710 729 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/711 /* コネクションの開設をポストする。*/ 730 712 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 731 713 sig_sem(SEM_TCP_POST_OUTPUT); 732 714 733 715 /* 734 * ã¤ãã³ãã ESTABLISHED ã«ãªãã¾ã§å¾ 735 ã¤ã 736 * ã¤ãã³ãã CLOSED ã«ãªã£ãå ´åã¯ãä½ããã®ã¨ã©ã¼ãçºçãããã 737 * æ¥ç¶è¦æ±ãæå¦ããããã¨ãæå³ãã¦ããã 716 * イベントが ESTABLISHED になるまで待つ。 717 * イベントが CLOSED になった場合は、何らかのエラーが発生したか、 718 * 接続要求が拒否されたことを意味している。 738 719 */ 739 720 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 750 731 if (error != E_OK) { 751 732 /* 752 * é信端ç¹ããåä»å£ã解æ¾ãã753 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã733 * 通信端点から受付口を解放し、 734 * イベントフラグをクローズに設定する。 754 735 */ 755 736 cep->rep = NULL; -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp.cfg
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain;charset=UTF-8
r388 r389 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 }); -
azure_iot_hub/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
r388 r389 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 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 78 66 79 67 /* 80 * udp_reply_no_port -- éä¿¡å 81 ã«ãã¼ããå®ç¾©ããã¦ããªããã¨ãéç¥ããã 68 * udp_reply_no_port -- 送信元にポートが定義されていないことを通知する。 82 69 */ 83 70 … … 91 78 NET_COUNT_MIB(udp_stats.udpNoPorts, 1); 92 79 93 /* ãã¼ã«ã« IP ã¢ãã¬ã¹ã«å±ãããã¼ã¿ã°ã©ã ã®ã¿ ICMP ã¨ã©ã¼ãéç¥ããã*/80 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/ 94 81 if (ntohl(GET_IP4_HDR(input)->dst) == IF_GET_IFNET()->in4_ifaddr.addr) { 95 82 syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport)); 96 83 97 84 icmp_error(ICMP4_UNREACH_PORT, input); 98 /* icmp_error ã§ã¯ããããã¯ã¼ã¯ãããã¡ input ãè¿å´ããªãã®ã§ä¸ã¸æããã*/85 /* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/ 99 86 100 87 } -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udp4_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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 #ifdef ETHER_CFG_MULTICAST 87 75 /* 88 * udp4_is_dstaddr_accept -- UDP ã®ãã¦å 89 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 76 * udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 90 77 * 91 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ã以ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã78 * DHCP_CFG が定義されているときは、以下のデータグラムを受信する。 92 79 * 93 * ã»ãã¦å 94 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 95 * ã»ãã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾© 80 * ・あて先アドレスがブロードキャスト 81 * ・ローカルアドレスが未定義 96 82 */ 97 83 … … 116 102 #else 117 103 /* 118 * udp4_is_dstaddr_accept -- UDP ã®ãã¦å 119 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 104 * udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 120 105 * 121 * DHCP_CFG ãå®ç¾©ããã¦ããã¨ãã¯ã以ä¸ã®ãã¼ã¿ã°ã©ã ãåä¿¡ããã106 * DHCP_CFG が定義されているときは、以下のデータグラムを受信する。 122 107 * 123 * ã»ãã¦å 124 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 125 * ã»ãã¼ã«ã«ã¢ãã¬ã¹ãæªå®ç¾© 108 * ・あて先アドレスがブロードキャスト 109 * ・ローカルアドレスが未定義 126 110 */ 127 111 … … 146 130 147 131 /* 148 * udp_dstaddr_accept -- UDP ã®ãã¦å 149 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 132 * udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 150 133 * 151 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã134 * 以下の場合もデータグラムを受信する。 152 135 * 153 * ã»ãã¦å 154 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 136 * ・あて先アドレスがブロードキャスト 155 137 */ 156 138 … … 176 158 177 159 /* 178 * udp4_is_dstaddr_accept -- UDP ã®ãã¦å 179 ã¢ãã¬ã¹ãæ£ããããã§ãã¯ããã 160 * udp4_is_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。 180 161 * 181 * 以ä¸ã®å ´åããã¼ã¿ã°ã©ã ãåä¿¡ããã162 * 以下の場合もデータグラムを受信する。 182 163 * 183 * ã»ãã¦å 184 ã¢ãã¬ã¹ãããã¼ããã£ã¹ã 164 * ・あて先アドレスがブロードキャスト 185 165 */ 186 166 -
azure_iot_hub/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
r388 r389 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 * SNMP 㮠管çæ 128 å ±ãã¼ã¹ (MIB) 115 * SNMP の 管理情報ベース (MIB) 129 116 */ 130 117 … … 134 121 135 122 /* 136 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«123 * IPv6 と IPv4 で引数が異なる関数のコンパイル 137 124 */ 138 125 -
azure_iot_hub/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
r388 r389 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$ … … 124 112 125 113 /* 126 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«114 * IPv6 と IPv4 で引数が異なる関数のコンパイル 127 115 */ 128 116 … … 166 154 167 155 /* 168 * UDP åºåã¿ã¹ã¯169 * ãã³ããããã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ã使ç¨ããã156 * UDP 出力タスク 157 * ノンブロッキングコールを組み込んだとき使用する。 170 158 */ 171 159 … … 182 170 #if defined(_IP6_CFG) && !defined(SUPPORT_TCP) 183 171 184 /* IPv6 ã®ã¹ãã¼ãã¬ã¹ã»ã¢ãã¬ã¹èªåè¨å®ãå®è¡ããã*/172 /* IPv6 のステートレス・アドレス自動設定を実行する。*/ 185 173 in6_if_up(IF_GET_IFNET()); 186 174 … … 189 177 while (true) { 190 178 191 /* åºåããã¹ããããã¾ã§å¾ 192 ã¤ã*/ 179 /* 出力がポストされるまで待つ。*/ 193 180 syscall(wai_sem(SEM_UDP_POST_OUTPUT)); 194 181 -
azure_iot_hub/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
r388 r389 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$ … … 126 114 127 115 /* 128 * å±æå¤æ°116 * 局所変数 129 117 */ 130 118 131 119 #if (defined(_IP6_CFG) && TNUM_UDP6_CEPID > 0) || (defined(_IP4_CFG) && TNUM_UDP4_CEPID > 0) 132 120 133 static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO; /* èªåå²ãå½ã¦çªå·*/121 static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO; /* 自動割り当て番号 */ 134 122 135 123 #endif /* of #if (defined(_IP6_CFG) && TNUM_UDP6_CEPID > 0) || (defined(_IP4_CFG) && TNUM_UDP4_CEPID > 0) */ 136 124 137 125 /* 138 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«126 * IPv6 と IPv4 で引数が異なる関数のコンパイル 139 127 */ 140 128 -
azure_iot_hub/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
r388 r389 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$ … … 81 69 82 70 /* 83 * ãã³ããããã³ã°ã³ã¼ã«ãçµè¾¼ã¾ãªãå ´åã«ãªã³ã¯ãããé¢æ°ã®å®ç¾©71 * ノンブロッキングコールを組込まない場合にリンクされる関数の定義 84 72 */ 85 73 … … 128 116 129 117 /* 130 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 131 ¨ã¦ã®æ©è½ã 132 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 118 * TINET をライブラリ化しない場合は、全ての機能を 119 * オブジェクトファイルに出力するため、マクロを有効にする。 133 120 */ 134 121 … … 149 136 150 137 /* 151 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«138 * IPv6 と IPv4 で引数が異なる関数のコンパイル 152 139 */ 153 140 … … 252 239 253 240 /* 254 * udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã241 * udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 255 242 */ 256 243 … … 260 247 udp_can_cep (ID cepid, FN fncd) 261 248 { 262 /* IPv6 ç¨ã® UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/249 /* IPv6 用の UDP 通信端点 ID をチェックする。*/ 263 250 if (VALID_UDP6_CEPID(cepid)) { 264 251 265 /* UDP é信端ç¹ãå¾ã¦ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/252 /* UDP 通信端点を得てメイン関数を呼び出す。*/ 266 253 return udp6_cancel_cep(GET_UDP6_CEP(cepid), fncd); 267 254 } 268 255 269 /* IPv4 ç¨ã® UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/256 /* IPv4 用の UDP 通信端点 ID をチェックする。*/ 270 257 else if (VALID_UDP4_CEPID(cepid)) { 271 258 272 /* UDP é信端ç¹ãå¾ã¦ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/259 /* UDP 通信端点を得てメイン関数を呼び出す。*/ 273 260 return udp4_cancel_cep(GET_UDP4_CEP(cepid), fncd); 274 261 } -
azure_iot_hub/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
r388 r389 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 * TINET ãã©ã¤ãã©ãªåããªãå ´åã¯ãå 128 ¨ã¦ã®æ©è½ã 129 * ãªãã¸ã§ã¯ããã¡ã¤ã«ã«åºåããããããã¯ããæå¹ã«ããã 115 * TINET をライブラリ化しない場合は、全ての機能を 116 * オブジェクトファイルに出力するため、マクロを有効にする。 130 117 */ 131 118 … … 142 129 143 130 /* 144 * IPv6 㨠IPv4 ã§å¼æ°ãç°ãªãé¢æ°ã®ã³ã³ãã¤ã«131 * IPv6 と IPv4 で引数が異なる関数のコンパイル 145 132 */ 146 133 -
azure_iot_hub/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
r388 r389 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 … … 95 83 96 84 /* 97 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©85 * TINET 1.1 との互換性のための定義 98 86 */ 99 87 … … 108 96 109 97 /* 110 * ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©98 * コールバック関数の定義 111 99 */ 112 100 … … 124 112 125 113 /* 126 * UDP é信端ç¹127 */ 128 129 /* IPv6 ç¨ UDP é信端ç¹*/114 * UDP 通信端点 115 */ 116 117 /* IPv6 用 UDP 通信端点 */ 130 118 131 119 typedef struct t_udp6_cep { 132 120 133 121 /* 134 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã122 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 135 123 */ 136 ATR cepatr; /* UDP é信端ç¹å±æ§*/137 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/138 t_udp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/124 ATR cepatr; /* UDP 通信端点属性 */ 125 T_IPV6EP myaddr; /* 自分のアドレス */ 126 t_udp_callback callback; /* コールバック関数 */ 139 127 140 128 /* 141 * TINET ç¬èªã®ã¡ã³ã129 * TINET 独自のメンバ 142 130 */ 143 uint16_t flags; /* é信端ç¹ãã©ã°*/144 ID semid_lock; /* é信端ç¹ããã¯*/145 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å*/146 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å*/147 ID rcvqid; /* éã³ã¼ã«ããã¯ç¨åä¿¡ãã¥ã¼èå¥å*/148 T_NET_BUF *cb_netbuf; /* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/131 uint16_t flags; /* 通信端点フラグ */ 132 ID semid_lock; /* 通信端点ロック */ 133 ID snd_tskid; /* 送信タスク識別子 */ 134 ID rcv_tskid; /* 受信タスク識別子 */ 135 ID rcvqid; /* 非コールバック用受信キュー識別子*/ 136 T_NET_BUF *cb_netbuf; /* コールバック用受信ネットワークバッファ*/ 149 137 150 138 #ifdef UDP_CFG_NON_BLOCKING 151 139 152 T_IPV6EP *snd_p_dstaddr; /* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 153 T_IPV6EP *rcv_p_dstaddr; /* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 154 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 155 é ã¢ãã¬ã¹ */ 156 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 157 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 158 é ã¢ãã¬ã¹ */ 159 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 140 T_IPV6EP *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/ 141 T_IPV6EP *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/ 142 void *snd_data; /* 送信データ領域の先頭アドレス */ 143 int_t snd_len; /* 送信データ領域の長さ */ 144 void *rcv_data; /* 受信データ領域の先頭アドレス */ 145 int_t rcv_len; /* 受信データ領域の長さ */ 160 146 161 147 #endif /* of #ifdef UDP_CFG_NON_BLOCKING */ 162 148 163 149 #ifdef UDP_CFG_EXTENTIONS 164 ER error; /* å¾ 165 ã¡ä¸ã«çºçããã¨ã©ã¼ */ 150 ER error; /* 待ち中に発生したエラー */ 166 151 #endif 167 152 … … 174 159 } T_UDP6_CEP; 175 160 176 /* IPv4 ç¨ UDP é信端ç¹*/161 /* IPv4 用 UDP 通信端点 */ 177 162 178 163 typedef struct t_udp4_cep { 179 164 180 165 /* 181 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã166 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 182 167 */ 183 ATR cepatr; /* UDP é信端ç¹å±æ§*/184 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/185 t_udp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/168 ATR cepatr; /* UDP 通信端点属性 */ 169 T_IPV4EP myaddr; /* 自分のアドレス */ 170 t_udp_callback callback; /* コールバック関数 */ 186 171 187 172 /* 188 * TINET ç¬èªã®ã¡ã³ã173 * TINET 独自のメンバ 189 174 */ 190 uint16_t flags; /* é信端ç¹ãã©ã°*/191 ID semid_lock; /* é信端ç¹ããã¯*/192 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å*/193 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å*/194 ID rcvqid; /* éã³ã¼ã«ããã¯ç¨åä¿¡ãã¥ã¼èå¥å*/195 T_NET_BUF *cb_netbuf; /* ã³ã¼ã«ããã¯ç¨åä¿¡ãããã¯ã¼ã¯ãããã¡*/175 uint16_t flags; /* 通信端点フラグ */ 176 ID semid_lock; /* 通信端点ロック */ 177 ID snd_tskid; /* 送信タスク識別子 */ 178 ID rcv_tskid; /* 受信タスク識別子 */ 179 ID rcvqid; /* 非コールバック用受信キュー識別子*/ 180 T_NET_BUF *cb_netbuf; /* コールバック用受信ネットワークバッファ*/ 196 181 197 182 #ifdef UDP_CFG_NON_BLOCKING 198 183 199 T_IPV4EP *snd_p_dstaddr; /* éä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 200 T_IPV4EP *rcv_p_dstaddr; /* åä¿¡ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/ 201 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 202 é ã¢ãã¬ã¹ */ 203 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 204 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 205 é ã¢ãã¬ã¹ */ 206 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 184 T_IPV4EP *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/ 185 T_IPV4EP *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/ 186 void *snd_data; /* 送信データ領域の先頭アドレス */ 187 int_t snd_len; /* 送信データ領域の長さ */ 188 void *rcv_data; /* 受信データ領域の先頭アドレス */ 189 int_t rcv_len; /* 受信データ領域の長さ */ 207 190 208 191 #endif /* of #ifdef UDP_CFG_NON_BLOCKING */ 209 192 210 193 #ifdef UDP_CFG_EXTENTIONS 211 ER error; /* å¾ 212 ã¡ä¸ã«çºçããã¨ã©ã¼ */ 194 ER error; /* 待ち中に発生したエラー */ 213 195 #endif 214 196 … … 236 218 237 219 /* 238 * UDP é信端ç¹ãã©ã° 239 */ 240 241 #define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200) /* éä¿¡ãéå§ããã */ 242 #define UDP_CEP_FLG_DYNAMIC UINT_C(0x0400) /* åççæã»åé¤å¯è½é信端ç¹ã */ 243 #define UDP_CEP_FLG_VALID UINT_C(0x0800) /* çææ¸ã¿ã§æå¹ãªé信端ç¹ã */ 244 245 /* 246 * ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾© 247 */ 248 249 #define TMIN_UDP_CEPID 1 /* UDP éä¿¡ç«¯ç¹ ID ã®æå°å¤ */ 250 #define TMIN_UDP6_CEPID 1 /* UDP/IPv6 éä¿¡ç«¯ç¹ ID ã®æå°å¤ */ 251 #define TMIN_UDP4_CEPID (TNUM_UDP6_CEPID+1) /* UDP/IPv4 éä¿¡ç«¯ç¹ ID ã®æå°å¤ */ 252 253 /* 254 * SNMP 㮠管çæ 255 å ±ãã¼ã¹ (MIB) 220 * UDP 通信端点フラグ 221 */ 222 223 #define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200) /* 送信を開始する。 */ 224 #define UDP_CEP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能通信端点。 */ 225 #define UDP_CEP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な通信端点。 */ 226 227 /* 228 * オブジェクト ID の最小値の定義 229 */ 230 231 #define TMIN_UDP_CEPID 1 /* UDP 通信端点 ID の最小値 */ 232 #define TMIN_UDP6_CEPID 1 /* UDP/IPv6 通信端点 ID の最小値 */ 233 #define TMIN_UDP4_CEPID (TNUM_UDP6_CEPID+1) /* UDP/IPv4 通信端点 ID の最小値 */ 234 235 /* 236 * SNMP の 管理情報ベース (MIB) 256 237 */ 257 238 … … 264 245 265 246 /* 266 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã247 * 関数シミュレーションマクロ 267 248 */ 268 249 … … 286 267 287 268 /* 288 * å 289 ¨åå¤æ° 269 * 全域変数 290 270 */ 291 271 292 272 extern T_UDP_STATS udp_stats; 293 273 294 /* UDP é信端ç¹*/274 /* UDP 通信端点 */ 295 275 296 276 extern T_UDP6_CEP udp6_cep[]; … … 314 294 315 295 /* 316 * TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©296 * TINET 1.3 との互換性のための定義 317 297 */ 318 298 … … 321 301 322 302 /* 323 * é¢æ°303 * 関数 324 304 */ 325 305 … … 350 330 extern void udp4_input_select (T_UDP4_CEP *cep, T_NET_BUF *input, uint_t off); 351 331 352 /* ãã³ããããã³ã°ã³ã¼ã«ãè¡ãå ´åã«çµã¿è¾¼ãã¿ã¹ã¯*/332 /* ノンブロッキングコールを行う場合に組み込むタスク */ 353 333 354 334 extern void udp_output_task(intptr_t exinf); -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_input.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 80 68 81 69 /* 82 * udp_input_select -- UDP ã®å 83 ¥åå¦çã®é¸æ 70 * udp_input_select -- UDP の入力処理の選択 84 71 */ 85 72 … … 93 80 para.len = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE); 94 81 95 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/82 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 96 83 if (psnd_dtq(cep->rcvqid, (intptr_t)input) != E_OK) { 97 84 NET_COUNT_UDP(net_count_udp.in_err_packets, 1); … … 103 90 #ifdef UDP_CFG_NON_BLOCKING 104 91 105 else if (cep->rcv_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/106 107 /* p_dstaddr ãè¨å®ããã*/92 else if (cep->rcv_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 93 94 /* p_dstaddr を設定する。*/ 108 95 cep->rcv_p_dstaddr->portno = ntohs(udph->sport); 109 96 IN_COPY_TO_HOST(&cep->rcv_p_dstaddr->ipaddr, input); 110 97 111 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/98 /* データをバッファに移す。*/ 112 99 memcpy(cep->rcv_data, GET_UDP_SDU(input, off), 113 100 (size_t)(para.len < cep->rcv_len ? para.len : cep->rcv_len)); … … 130 117 else if (IS_PTR_DEFINED(cep->callback)) { 131 118 132 /* ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºãã*/119 /* コールバック関数を呼び出す。*/ 133 120 cep->cb_netbuf = input; 134 121 … … 148 135 #endif 149 136 /* 150 * ãããã¯ã¼ã¯ãããã¡ããã®ã¾ã¾ã§ããã°ãã³ã¼ã«ããã¯é¢æ°å 151 㧠152 * ãã¼ã¿ãèªã¿åºããªãã£ããã¨ã«ãªãã®ã§ãæ¨ã¦ãã 137 * ネットワークバッファがそのままであれば、コールバック関数内で 138 * データを読み出さなかったことになるので、捨てる。 153 139 */ 154 140 if (cep->cb_netbuf != NULL) { … … 169 155 170 156 /* 171 * udp_input -- UDP ã®å 172 ¥åé¢æ° 157 * udp_input -- UDP の入力関数 173 158 */ 174 159 … … 191 176 NET_COUNT_MIB(udp_stats.udpInDatagrams, 1); 192 177 193 /* ãããé·ããã§ãã¯ããã*/178 /* ヘッダ長をチェックする。*/ 194 179 if (input->len < hlen + UDP_HDR_SIZE) 195 180 goto buf_rel; … … 197 182 udph = (T_UDP_HDR *)(input->buf + *offp); 198 183 199 /* ãã¼ã¿ã°ã©ã é·ããã§ãã¯ãã*/184 /* データグラム長をチェックする */ 200 185 ulen = ntohs(udph->ulen); 201 186 if (ulen != input->len - hlen) 202 187 goto buf_rel; 203 188 204 /* å®å 205 ãã¼ãã 0 ã®ãã¼ã¿ã°ã©ã ã¯ç ´æ£ãããRFC768 */ 189 /* 宛先ポートが 0 のデータグラムは破棄する。RFC768 */ 206 190 if (udph->dport == 0) 207 191 goto buf_rel; … … 209 193 #ifdef UDP_CFG_IN_CHECKSUM 210 194 211 /* ãã§ãã¯ãµã ããã§ãã¯ãã*/195 /* チェックサムをチェックする */ 212 196 if (udph->sum && IN_CKSUM(input, IPPROTO_UDP, *offp, ulen) != 0) 213 197 goto buf_rel; … … 219 203 #if TNUM_UDP4_CEPID > 0 220 204 221 /* UDP é信端ç¹ãå¾ãã*/205 /* UDP 通信端点を得る。*/ 222 206 cep = udp4_find_cep(input, *offp); 223 207 … … 233 217 #else /* of #if TNUM_UDP4_CEPID > 0 */ 234 218 235 cep = 0; /* warning åé¿ç¨ã®ããã¼*/219 cep = 0; /* warning 回避用のダミー */ 236 220 if ((cep6 = udp6_find_cep(input, *offp)) != NULL) 237 221 udp6_input_select(cep6, input, *offp); … … 245 229 #else /* of #if defined(_IP6_CFG) && defined(_IP4_CFG) && API_PROTO == API_PROTO_IPV4 */ 246 230 247 /* UDP é信端ç¹ãå¾ãã*/231 /* UDP 通信端点を得る。*/ 248 232 cep = UDP_FIND_CEP(input, *offp); 249 233 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_output.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 78 66 79 67 /* 80 * udp_output -- UDP ã®åºåé¢æ°81 * ãã³ããããã³ã°ã³ã¼ã«ãçµã¿è¾¼ãã ã¨ã使ç¨ããã68 * udp_output -- UDP の出力関数 69 * ノンブロッキングコールを組み込んだとき使用する。 82 70 */ 83 71 … … 93 81 #endif /* of #ifdef UDP_CFG_OUT_CHECKSUM */ 94 82 95 /* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/83 /* IP データグラムを割り当てる。*/ 96 84 if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + cep->snd_len), 0, 97 85 &cep->snd_p_dstaddr->ipaddr, … … 102 90 } 103 91 104 /* UDP ãããã«æ 105 å ±ãè¨å®ããã*/ 92 /* UDP ヘッダに情報を設定する。*/ 106 93 udph = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET(output)); 107 94 udph->sport = htons(cep->myaddr.portno); … … 110 97 udph->sum = 0; 111 98 112 /* ãã¼ã¿ãã³ãã¼ããã*/99 /* データをコピーする。*/ 113 100 memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET(output)), 114 101 cep->snd_data, (size_t)cep->snd_len); … … 119 106 (uint_t)(UDP_HDR_SIZE + cep->snd_len)); 120 107 121 /* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå 122 ¥ããã*/ 108 /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/ 123 109 if (sum == 0) 124 110 sum = UINT_C(0xffff); … … 127 113 #endif/* of #ifdef UDP_CFG_OUT_CHECKSUM */ 128 114 129 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/115 /* ネットワークバッファ長を調整する。*/ 130 116 output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE(output) + cep->snd_len); 131 117 132 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/118 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 133 119 if ((error = IP_OUTPUT(output, TMO_UDP_OUTPUT)) != E_OK) 134 120 goto err_ret; -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_subr.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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$ … … 78 66 79 67 /* 80 * udp_alloc_auto_port -- èªåå²ãå½ã¦ãã¼ãçªå·ãè¨å®ããã68 * udp_alloc_auto_port -- 自動割り当てポート番号を設定する。 81 69 */ 82 70 … … 114 102 115 103 /* 116 * udp_alloc_port -- æå®ããããã¼ãçªå·ãè¨å®ããã104 * udp_alloc_port -- 指定されたポート番号を設定する。 117 105 */ 118 106 … … 134 122 135 123 /* 136 * udp_find_cep -- ãã¼ãçªå·ãã UDP é信端ç¹ãå¾ãã124 * udp_find_cep -- ポート番号から UDP 通信端点を得る。 137 125 */ 138 126 … … 146 134 147 135 /* 148 * IP ã¢ãã¬ã¹ã¨ãã¼ãçªå·ãä¸è´ããé信端ç¹ãæ¢ç´¢ããã136 * IP アドレスとポート番号が一致する通信端点を探索する。 149 137 */ 150 138 for (cep = &UDP_CEP[TMAX_UDP_CEPID]; cep -- != UDP_CEP; ) { … … 159 147 160 148 /* 161 * udp_notify -- ICMP ã¨ã©ã¼ã®å¦ç149 * udp_notify -- ICMP エラーの処理 162 150 */ 163 151 -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 36 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次の条件を満たすこと. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 83 71 84 72 /* 85 * udp_send_data -- ãã±ããéä¿¡ã®ä¸»è¦é¨73 * udp_send_data -- パケット送信の主要部 86 74 */ 87 75 … … 101 89 NET_COUNT_UDP(net_count_udp.out_packets, 1); 102 90 103 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/91 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 104 92 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) 105 93 syscall(get_tim(&before)); 106 94 107 /* IP ãã¼ã¿ã°ã©ã ãå²ãå½ã¦ãã*/95 /* IP データグラムを割り当てる。*/ 108 96 if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0, 109 97 &p_dstaddr->ipaddr, … … 113 101 goto err_ret; 114 102 115 /* IP ãã¼ã¿ã°ã©ã å²ãå½ã¦ã®æéã tmout ããæ¸ããã*/103 /* IP データグラム割り当ての時間を tmout から減ずる。*/ 116 104 if (!(tmout == TMO_POL || tmout == TMO_FEVR)) { 117 105 syscall(get_tim(&after)); … … 124 112 } 125 113 126 /* UDP ãããã«æ 127 å ±ãè¨å®ããã*/ 114 /* UDP ヘッダに情報を設定する。*/ 128 115 udph = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET(output)); 129 116 udph->sport = htons(cep->myaddr.portno); … … 132 119 udph->sum = 0; 133 120 134 /* ãã¼ã¿ãã³ãã¼ããã*/121 /* データをコピーする。*/ 135 122 memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET(output)), data, (size_t)len); 136 123 … … 139 126 sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET(output), (uint_t)(UDP_HDR_SIZE + len)); 140 127 141 /* è¨ç®ãããã§ãã¯ãµã ã®å¤ã 0 ãªã 0xffff ãå 142 ¥ããã*/ 128 /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/ 143 129 if (sum == 0) 144 130 sum = 0xffff; … … 147 133 #endif /* of #ifdef UDP_CFG_OUT_CHECKSUM */ 148 134 149 /* ãããã¯ã¼ã¯ãããã¡é·ã調æ´ããã*/135 /* ネットワークバッファ長を調整する。*/ 150 136 output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE(output) + len); 151 137 152 /* ãããã¯ã¼ã¯å±¤ (IP) ã®åºåé¢æ°ãå¼ã³åºãã*/138 /* ネットワーク層 (IP) の出力関数を呼び出す。*/ 153 139 if ((error = IP_OUTPUT(output, tmout)) == E_OK) { 154 140 NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1); … … 166 152 167 153 /* 168 * udp_cancel_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çããã£ã³ã»ã«ããã169 * 170 * udp_can_cep ããå¼åºãããã¡ã¤ã³é¢æ°154 * udp_cancel_cep -- ペンディングしている処理をキャンセルする。 155 * 156 * udp_can_cep から呼出されるメイン関数 171 157 */ 172 158 … … 178 164 ER error = E_OK, snd_err, rcv_err; 179 165 180 /* UDP é信端ç¹ããã§ãã¯ããã*/166 /* UDP 通信端点をチェックする。*/ 181 167 if (!VALID_UDP_CEP(cep)) 182 168 return E_NOEXS; 183 169 184 /* API æ©è½ã³ã¼ãããã§ãã¯ããã*/170 /* API 機能コードをチェックする。*/ 185 171 if (!VALID_TFN_UDP_CAN(fncd)) 186 172 return E_PAR; 187 173 188 /* é信端ç¹ãããã¯ããã*/174 /* 通信端点をロックする。*/ 189 175 syscall(wai_sem(cep->semid_lock)); 190 176 191 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL ã®å¦ç*/177 if (fncd == TFN_UDP_ALL) { /* TFN_UDP_ALL の処理 */ 192 178 193 179 snd_err = UDP_CAN_SND(cep, E_RLWAI); … … 195 181 196 182 /* 197 * snd_err 㨠rcv_err ã®ã©ã¡ããEV_NOPND198 * ãªãããã³ãã£ã³ã°ãã¦ããªãã®ã§ã¨ã©ã¼183 * snd_err と rcv_err のどちらも EV_NOPND 184 * なら、ペンディングしていないのでエラー 199 185 */ 200 186 if (snd_err == EV_NOPND && rcv_err == EV_NOPND) … … 212 198 } 213 199 } 214 else if (fncd == TFN_UDP_SND_DAT) { /* éä¿¡å¦çã®ãã£ã³ã»ã«*/200 else if (fncd == TFN_UDP_SND_DAT) { /* 送信処理のキャンセル */ 215 201 if ((error = UDP_CAN_SND(cep, E_RLWAI)) == EV_NOPND) 216 202 error = E_OBJ; 217 203 } 218 else if (fncd == TFN_UDP_RCV_DAT) { /* åä¿¡å¦çã®ãã£ã³ã»ã«*/204 else if (fncd == TFN_UDP_RCV_DAT) { /* 受信処理のキャンセル */ 219 205 if ((error = UDP_CAN_RCV(cep, E_RLWAI)) == EV_NOPND) 220 206 error = E_OBJ; … … 223 209 error = E_PAR; 224 210 225 /* é信端ç¹ãããã¯ã解é¤ããã*/211 /* 通信端点をロックを解除する。*/ 226 212 syscall(sig_sem(cep->semid_lock)); 227 213 … … 236 222 237 223 /* 238 * udp_can_cep -- ãã³ãã£ã³ã°ãã¦ããå¦çã®ãã£ã³ã»ã«ãæ¨æºæ©è½ã224 * udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】 239 225 */ 240 226 … … 246 232 T_UDP_CEP *cep; 247 233 248 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/234 /* UDP 通信端点 ID をチェックする。*/ 249 235 if (!VALID_UDP_CEPID(cepid)) 250 236 return E_ID; 251 237 252 /* UDP é信端ç¹ãå¾ãã*/238 /* UDP 通信端点を得る。*/ 253 239 cep = GET_UDP_CEP(cepid); 254 240 255 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/241 /* メイン関数を呼び出す。*/ 256 242 return UDP_CANCEL_CEP(cep, fncd); 257 243 } … … 264 250 265 251 /* 266 * udp_cre_cep -- UDP é信端ç¹ã®çæãæ¡å¼µæ©è½ã252 * udp_cre_cep -- UDP 通信端点の生成【拡張機能】 267 253 */ 268 254 … … 275 261 ER error; 276 262 277 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/263 /* UDP 通信端点 ID をチェックする。*/ 278 264 if (!VALID_UDP_CEPID(cepid)) 279 265 return E_ID; 280 266 281 /* pk_ccep ã NULL ãªãã¨ã©ã¼*/267 /* pk_ccep が NULL ならエラー */ 282 268 if (pk_ccep == NULL) 283 269 return E_PAR; … … 286 272 287 273 /* 288 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã289 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼274 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 275 * IPv4 射影アドレスが指定されたらエラー 290 276 */ 291 277 if (in6_is_addr_ipv4mapped(&pk_ccep->myaddr.ipaddr)) … … 294 280 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 295 281 296 /* UDP é信端ç¹ãå¾ãã*/282 /* UDP 通信端点を得る。*/ 297 283 cep = GET_UDP_CEP(cepid); 298 284 299 /* UDP é信端ç¹ããã§ãã¯ããã*/285 /* UDP 通信端点をチェックする。*/ 300 286 if (VALID_UDP_CEP(cep)) 301 287 return E_OBJ; 302 288 303 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/289 /* UDP 通信端点が、動的生成用でなければエラー */ 304 290 if (!DYNAMIC_UDP_CEP(cep)) 305 291 return E_ID; 306 292 307 /* é信端ç¹ãããã¯ããã*/293 /* 通信端点をロックする。*/ 308 294 syscall(wai_sem(cep->semid_lock)); 309 295 310 296 /* 311 * UDP é信端ç¹ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼297 * UDP 通信端点をチェックする。生成済みであればエラー 312 298 */ 313 299 if (VALID_UDP_CEP(cep)) … … 316 302 317 303 /* 318 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã304 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 319 305 */ 320 306 if (pk_ccep->myaddr.portno == UDP_PORTANY) … … 324 310 325 311 if (error == E_OK) { 326 /* UDP é信端ç¹çææ 327 å ±ãã³ãã¼ããã*/ 328 cep->cepatr = pk_ccep->cepatr; /* é信端ç¹å±æ§ */ 329 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* èªåã®ã¢ãã¬ã¹ */ 330 cep->callback = (void*)pk_ccep->callback; /* ã³ã¼ã«ãã㯠*/ 331 332 /* UDP é信端ç¹ãçææ¸ã¿ã«ããã*/ 312 /* UDP 通信端点生成情報をコピーする。*/ 313 cep->cepatr = pk_ccep->cepatr; /* 通信端点属性 */ 314 cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr; /* 自分のアドレス */ 315 cep->callback = (void*)pk_ccep->callback; /* コールバック */ 316 317 /* UDP 通信端点を生成済みにする。*/ 333 318 cep->flags |= UDP_CEP_FLG_VALID; 334 319 } 335 320 } 336 321 337 /* é信端ç¹ã®ããã¯ã解é¤ããã*/322 /* 通信端点のロックを解除する。*/ 338 323 syscall(sig_sem(cep->semid_lock)); 339 324 … … 346 331 347 332 /* 348 * udp_delete_cep -- UDP é信端ç¹ãåé¤ããã349 * 350 * udp_del_cep ããå¼åºãããã¡ã¤ã³é¢æ°333 * udp_delete_cep -- UDP 通信端点を削除する。 334 * 335 * udp_del_cep から呼出されるメイン関数 351 336 */ 352 337 … … 356 341 ER error; 357 342 358 /* UDP é信端ç¹ããã§ãã¯ããã*/343 /* UDP 通信端点をチェックする。*/ 359 344 if (!VALID_UDP_CEP(cep)) 360 345 return E_NOEXS; 361 346 362 /* UDP é信端ç¹ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/347 /* UDP 通信端点が、動的生成用でなければエラー */ 363 348 if (!DYNAMIC_UDP_CEP(cep)) 364 349 return E_ID; 365 350 366 /* é信端ç¹ãããã¯ããã*/351 /* 通信端点をロックする。*/ 367 352 syscall(wai_sem(cep->semid_lock)); 368 353 369 354 /* 370 * UDP é信端ç¹ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼371 * ã»æªçæã355 * UDP 通信端点をチェックする。未生成の場合はエラー 356 * ・未生成。 372 357 */ 373 358 if (!VALID_UDP_CEP(cep)) … … 377 362 UDP_CAN_RCV(cep, E_DLT); 378 363 379 /* UDP é信端ç¹ãæªçæã«ããã*/364 /* UDP 通信端点を未生成にする。*/ 380 365 cep->flags &= ~UDP_CEP_FLG_VALID; 381 366 error = E_OK; 382 367 } 383 368 384 /* é信端ç¹ã®ããã¯ã解é¤ããã*/369 /* 通信端点のロックを解除する。*/ 385 370 syscall(sig_sem(cep->semid_lock)); 386 371 … … 389 374 390 375 /* 391 * udp_del_cep -- UDP é信端ç¹ã®åé¤ãæ¡å¼µæ©è½ã376 * udp_del_cep -- UDP 通信端点の削除【拡張機能】 392 377 */ 393 378 … … 397 382 T_UDP_CEP *cep; 398 383 399 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/384 /* UDP 通信端点 ID をチェックする。*/ 400 385 if (!VALID_UDP_CEPID(cepid)) 401 386 return E_ID; 402 387 403 /* UDP é信端ç¹ãå¾ãã*/388 /* UDP 通信端点を得る。*/ 404 389 cep = GET_UDP_CEP(cepid); 405 390 406 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/391 /* メイン関数を呼び出す。*/ 407 392 return UDP_DELETE_CEP(cep); 408 393 } … … 413 398 414 399 /* 415 * udp_set_option -- UDP é信端ç¹ãªãã·ã§ã³ãè¨å®ããã416 * 417 * udp_set_opt ããå¼åºãããã¡ã¤ã³é¢æ°400 * udp_set_option -- UDP 通信端点オプションを設定する。 401 * 402 * udp_set_opt から呼出されるメイン関数 418 403 */ 419 404 … … 421 406 UDP_SET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen) 422 407 { 423 /* UDP é信端ç¹ããã§ãã¯ããã*/408 /* UDP 通信端点をチェックする。*/ 424 409 if (!VALID_UDP_CEP(cep)) 425 410 return E_NOEXS; … … 463 448 464 449 /* 465 * udp_set_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®è¨å®ãæ¡å¼µæ©è½ã466 * 467 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã450 * udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】 451 * 452 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 468 453 */ 469 454 … … 473 458 T_UDP_CEP *cep; 474 459 475 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/460 /* UDP 通信端点 ID をチェックする。*/ 476 461 if (!VALID_UDP_CEPID(cepid)) 477 462 return E_ID; 478 463 479 /* UDP é信端ç¹ãå¾ãã*/464 /* UDP 通信端点を得る。*/ 480 465 cep = GET_UDP_CEP(cepid); 481 466 482 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/467 /* メイン関数を呼び出す。*/ 483 468 return UDP_SET_OPTION(cep, optname, optval, optlen); 484 469 } … … 489 474 490 475 /* 491 * udp_get_option -- UDP é信端ç¹ãªãã·ã§ã³ãç²å¾ããã492 * 493 * udp_get_opt ããå¼åºãããã¡ã¤ã³é¢æ°476 * udp_get_option -- UDP 通信端点オプションを獲得する。 477 * 478 * udp_get_opt から呼出されるメイン関数 494 479 */ 495 480 … … 497 482 UDP_GET_OPTION (T_UDP_CEP *cep, int_t optname, void *optval, int_t optlen) 498 483 { 499 /* UDP é信端ç¹ããã§ãã¯ããã*/484 /* UDP 通信端点をチェックする。*/ 500 485 if (!VALID_UDP_CEP(cep)) 501 486 return E_NOEXS; … … 529 514 530 515 /* 531 * udp_get_opt -- UDP é信端ç¹ãªãã·ã§ã³ã®ç²å¾ãæ¡å¼µæ©è½ã532 * 533 * 注æ: è¨å®å¯è½ãª UDP é信端ç¹ãªãã·ã§ã³ã¯ç¡ããããE_PAR ãè¿ãããã516 * udp_get_opt -- UDP 通信端点オプションの獲得【拡張機能】 517 * 518 * 注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。 534 519 */ 535 520 … … 539 524 T_UDP_CEP *cep; 540 525 541 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/526 /* UDP 通信端点 ID をチェックする。*/ 542 527 if (!VALID_UDP_CEPID(cepid)) 543 528 return E_ID; 544 529 545 /* UDP é信端ç¹ãå¾ãã*/530 /* UDP 通信端点を得る。*/ 546 531 cep = GET_UDP_CEP(cepid); 547 532 548 /* ã¡ã¤ã³é¢æ°ãå¼ã³åºãã*/533 /* メイン関数を呼び出す。*/ 549 534 return UDP_GET_OPTION(cep, optname, optval, optlen); 550 535 } … … 561 546 562 547 /* 563 * udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«548 * udp_can_snd -- ペンディングしている送信のキャンセル 564 549 */ 565 550 … … 567 552 UDP_CAN_SND (T_UDP_CEP *cep, ER error) 568 553 { 569 if (cep->snd_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/554 if (cep->snd_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 570 555 571 556 #ifdef UDP_CFG_EXTENTIONS 572 557 573 /* å¾ 574 ã¡ä¸ã«çºçããã¨ã©ã¼æ 575 å ±ãè¨å®ããã*/ 558 /* 待ち中に発生したエラー情報を設定する。*/ 576 559 cep->error = error; 577 560 … … 581 564 cep->snd_tskid = TA_NULL; 582 565 } 583 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/566 else /* どちらでもないならペンディングしていない */ 584 567 error = EV_NOPND; 585 568 … … 592 575 593 576 /* 594 * udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«577 * udp_can_rcv -- ペンディングしている受信のキャンセル 595 578 */ 596 579 … … 598 581 UDP_CAN_RCV (T_UDP_CEP *cep, ER error) 599 582 { 600 if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/583 if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 601 584 602 585 #ifdef UDP_CFG_EXTENTIONS 603 586 604 /* å¾ 605 ã¡ä¸ã«çºçããã¨ã©ã¼æ 606 å ±ãè¨å®ããã*/ 587 /* 待ち中に発生したエラー情報を設定する。*/ 607 588 cep->error = error; 608 589 … … 612 593 cep->rcv_tskid = TA_NULL; 613 594 } 614 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/595 else /* どちらでもないならペンディングしていない */ 615 596 error = EV_NOPND; 616 597 … … 623 604 624 605 /* 625 * udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã606 * udp_snd_dat -- パケットの送信【標準機能】 626 607 */ 627 608 … … 632 613 ER error; 633 614 634 /* p_dstaddr ã¾ã㯠data ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/615 /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */ 635 616 if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK) 636 617 return E_PAR; 637 618 638 /* ãã¼ã¿é·ããã§ãã¯ããã*/619 /* データ長をチェックする。*/ 639 620 if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU) 640 621 return E_PAR; … … 643 624 644 625 /* 645 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã646 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼626 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 627 * IPv4 射影アドレスが指定されたらエラー 647 628 */ 648 629 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 651 632 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 652 633 653 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/634 /* UDP 通信端点 ID をチェックする。*/ 654 635 if (!VALID_UDP_CEPID(cepid)) 655 636 return E_ID; 656 637 657 /* UDP é信端ç¹ãå¾ãã*/638 /* UDP 通信端点を得る。*/ 658 639 cep = GET_UDP_CEP(cepid); 659 640 660 /* UDP é信端ç¹ããã§ãã¯ããã*/641 /* UDP 通信端点をチェックする。*/ 661 642 if (!VALID_UDP_CEP(cep)) 662 643 return E_NOEXS; 663 644 664 645 /* 665 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã646 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 666 647 */ 667 648 if (cep->myaddr.portno == UDP_PORTANY) { … … 670 651 } 671 652 672 /* é信端ç¹ãããã¯ããã*/653 /* 通信端点をロックする。*/ 673 654 syscall(wai_sem(cep->semid_lock)); 674 655 675 656 if (cep->snd_tskid != TA_NULL) { 676 657 677 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/658 /* 非ノンブロッキングコールでペンディング中 */ 678 659 error = E_QOVR; 679 660 680 /* é信端ç¹ãããã¯ã解é¤ããã*/661 /* 通信端点をロックを解除する。*/ 681 662 syscall(sig_sem(cep->semid_lock)); 682 663 } 683 664 else { 684 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/665 /* 現在のタスク識別子を記録する。*/ 685 666 get_tid(&(cep->snd_tskid)); 686 667 687 668 #ifdef UDP_CFG_EXTENTIONS 688 669 689 /* å¾ 690 ã¡ä¸ã«çºçããã¨ã©ã¼æ 691 å ±ããªã»ããããã*/ 670 /* 待ち中に発生したエラー情報をリセットする。*/ 692 671 cep->error = E_OK; 693 672 694 673 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 695 674 696 /* é信端ç¹ãããã¯ã解é¤ããã*/675 /* 通信端点をロックを解除する。*/ 697 676 syscall(sig_sem(cep->semid_lock)); 698 677 699 /* ãã±ãããéä¿¡ããã*/678 /* パケットを送信する。*/ 700 679 error = UDP_SEND_DATA(cep, p_dstaddr, data, len, tmout); 701 680 702 681 #ifdef UDP_CFG_EXTENTIONS 703 682 704 /* å¾ 705 ã¡ä¸ã«çºçããã¨ã©ã¼æ 706 å ±ãè¿ãã*/ 683 /* 待ち中に発生したエラー情報を返す。*/ 707 684 if (error == E_RLWAI) 708 685 error = cep->error; … … 719 696 720 697 /* 721 * udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã698 * udp_rcv_dat -- パケットの受信【標準機能】 722 699 */ 723 700 … … 731 708 uint_t ulen, uhoff; 732 709 733 /* p_dstaddr ã¾ã㯠data ã NULL ãlen < 0 ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/710 /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */ 734 711 if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK) 735 712 return E_PAR; 736 713 737 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/714 /* UDP 通信端点 ID をチェックする。*/ 738 715 if (!VALID_UDP_CEPID(cepid)) 739 716 return E_ID; 740 717 741 /* UDP é信端ç¹ãå¾ãã*/718 /* UDP 通信端点を得る。*/ 742 719 cep = GET_UDP_CEP(cepid); 743 720 744 /* UDP é信端ç¹ããã§ãã¯ããã*/721 /* UDP 通信端点をチェックする。*/ 745 722 if (!VALID_UDP_CEP(cep)) 746 723 return E_NOEXS; 747 724 748 /* é信端ç¹ãããã¯ããã*/725 /* 通信端点をロックする。*/ 749 726 syscall(wai_sem(cep->semid_lock)); 750 727 751 728 if (cep->rcv_tskid != TA_NULL) { 752 729 753 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/730 /* 非ノンブロッキングコールでペンディング中 */ 754 731 error = E_QOVR; 755 732 756 /* é信端ç¹ãããã¯ã解é¤ããã*/733 /* 通信端点をロックを解除する。*/ 757 734 syscall(sig_sem(cep->semid_lock)); 758 735 } 759 736 else { 760 737 761 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/738 /* 現在のタスク識別子を記録する。*/ 762 739 get_tid(&(cep->rcv_tskid)); 763 740 764 741 #ifdef UDP_CFG_EXTENTIONS 765 742 766 /* å¾ 767 ã¡ä¸ã«çºçããã¨ã©ã¼æ 768 å ±ããªã»ããããã*/ 743 /* 待ち中に発生したエラー情報をリセットする。*/ 769 744 cep->error = E_OK; 770 745 771 746 #endif /* of #ifdef UDP_CFG_EXTENTIONS */ 772 747 773 /* é信端ç¹ãããã¯ã解é¤ããã*/748 /* 通信端点をロックを解除する。*/ 774 749 syscall(sig_sem(cep->semid_lock)); 775 750 776 /* å 777 ¥åãããã¾ã§å¾ 778 ã¤ã*/ 751 /* 入力があるまで待つ。*/ 779 752 if (cep->cb_netbuf != NULL) { 780 753 781 754 /* 782 * ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸ãã 783 * udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã 784 * ãã§ã«å 785 ¥åæ¸ã¿ã§ããã 755 * ここにくる場合は、コールバック関数の中から 756 * udp_rcv_dat を呼び出していることになり、 757 * すでに入力済みである。 786 758 */ 787 759 input = cep->cb_netbuf; … … 792 764 #ifdef UDP_CFG_EXTENTIONS 793 765 794 /* å¾ 795 ã¡ä¸ã«çºçããã¨ã©ã¼æ 796 å ±ãè¿ãã*/ 766 /* 待ち中に発生したエラー情報を返す。*/ 797 767 if (error == E_RLWAI) 798 768 error = cep->error; … … 804 774 } 805 775 806 /* p_dstaddr ãè¨å®ããã*/776 /* p_dstaddr を設定する。*/ 807 777 uhoff = (uint_t)GET_UDP_HDR_OFFSET(input); 808 778 udph = GET_UDP_HDR(input, uhoff); … … 810 780 IN_COPY_TO_HOST(&p_dstaddr->ipaddr, input); 811 781 812 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/782 /* データをバッファに移す。*/ 813 783 ulen = ntohs(udph->ulen); 814 784 if (ulen - UDP_HDR_SIZE > len) -
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/udpn_usrreq_nblk.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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 84 72 /* 85 * udp_can_snd -- ãã³ãã£ã³ã°ãã¦ããéä¿¡ã®ãã£ã³ã»ã«73 * udp_can_snd -- ペンディングしている送信のキャンセル 86 74 */ 87 75 … … 89 77 UDP_CAN_SND (T_UDP_CEP *cep, ER error) 90 78 { 91 if (cep->snd_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/79 if (cep->snd_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 92 80 if (IS_PTR_DEFINED(cep->callback)) 93 81 … … 101 89 cep->snd_p_dstaddr = NULL; 102 90 } 103 else if (cep->snd_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/91 else if (cep->snd_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 104 92 105 93 #ifdef UDP_CFG_EXTENTIONS 106 94 107 /* å¾ 108 ã¡ä¸ã«çºçããã¨ã©ã¼æ 109 å ±ãè¨å®ããã*/ 95 /* 待ち中に発生したエラー情報を設定する。*/ 110 96 cep->error = error; 111 97 … … 115 101 cep->snd_tskid = TA_NULL; 116 102 } 117 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/103 else /* どちらでもないならペンディングしていない */ 118 104 error = EV_NOPND; 119 105 … … 126 112 127 113 /* 128 * udp_can_rcv -- ãã³ãã£ã³ã°ãã¦ããåä¿¡ã®ãã£ã³ã»ã«114 * udp_can_rcv -- ペンディングしている受信のキャンセル 129 115 */ 130 116 … … 132 118 UDP_CAN_RCV (T_UDP_CEP *cep, ER error) 133 119 { 134 if (cep->rcv_p_dstaddr != NULL) { /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/120 if (cep->rcv_p_dstaddr != NULL) { /* ノンブロッキングコールでペンディング中 */ 135 121 if (IS_PTR_DEFINED(cep->callback)) 136 122 … … 144 130 cep->rcv_p_dstaddr = NULL; 145 131 } 146 else if (cep->rcv_tskid != TA_NULL) { /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/132 else if (cep->rcv_tskid != TA_NULL) { /* 非ノンブロッキングコールでペンディング中 */ 147 133 148 134 #ifdef UDP_CFG_EXTENTIONS 149 135 150 /* å¾ 151 ã¡ä¸ã«çºçããã¨ã©ã¼æ 152 å ±ãè¨å®ããã*/ 136 /* 待ち中に発生したエラー情報を設定する。*/ 153 137 cep->error = error; 154 138 … … 158 142 cep->rcv_tskid = TA_NULL; 159 143 } 160 else /* ã©ã¡ãã§ããªããªããã³ãã£ã³ã°ãã¦ããªã*/144 else /* どちらでもないならペンディングしていない */ 161 145 error = EV_NOPND; 162 146 … … 169 153 170 154 /* 171 * udp_snd_dat -- ãã±ããã®éä¿¡ãæ¨æºæ©è½ã155 * udp_snd_dat -- パケットの送信【標準機能】 172 156 */ 173 157 … … 178 162 ER error; 179 163 180 /* p_dstaddr ã¾ã㯠data ã NULL ãªãã¨ã©ã¼*/164 /* p_dstaddr または data が NULL ならエラー */ 181 165 if (p_dstaddr == NULL || data == NULL) 182 166 return E_PAR; 183 167 184 /* ãã¼ã¿é·ããã§ãã¯ããã*/168 /* データ長をチェックする。*/ 185 169 if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU) 186 170 return E_PAR; … … 189 173 190 174 /* 191 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã192 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼175 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 176 * IPv4 射影アドレスが指定されたらエラー 193 177 */ 194 178 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 197 181 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 198 182 199 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/183 /* UDP 通信端点 ID をチェックする。*/ 200 184 if (!VALID_UDP_CEPID(cepid)) 201 185 return E_ID; 202 186 203 /* UDP é信端ç¹ãå¾ãã*/187 /* UDP 通信端点を得る。*/ 204 188 cep = GET_UDP_CEP(cepid); 205 189 206 /* UDP é信端ç¹ããã§ãã¯ããã*/190 /* UDP 通信端点をチェックする。*/ 207 191 if (!VALID_UDP_CEP(cep)) 208 192 return E_NOEXS; 209 193 210 194 /* 211 * èªãã¼ãçªå·ã UDP_PORTANY ãªããèªåã§å²ãå½ã¦ãã195 * 自ポート番号が UDP_PORTANY なら、自動で割り当てる。 212 196 */ 213 197 if (cep->myaddr.portno == UDP_PORTANY) { … … 217 201 218 202 /* 219 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã203 * タイムアウトをチェックする。 220 204 */ 221 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/222 223 /* é信端ç¹ãããã¯ããã*/205 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 206 207 /* 通信端点をロックする。*/ 224 208 syscall(wai_sem(cep->semid_lock)); 225 209 226 210 if (cep->snd_p_dstaddr != NULL) { 227 211 228 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/212 /* ノンブロッキングコールでペンディング中 */ 229 213 error = E_QOVR; 230 214 231 /* é信端ç¹ãããã¯ã解é¤ããã*/215 /* 通信端点をロックを解除する。*/ 232 216 syscall(sig_sem(cep->semid_lock)); 233 217 } 234 218 else if (cep->snd_tskid != TA_NULL) { 235 219 236 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/237 error = E_OBJ; 238 239 /* é信端ç¹ãããã¯ã解é¤ããã*/220 /* 非ノンブロッキングコールでペンディング中 */ 221 error = E_OBJ; 222 223 /* 通信端点をロックを解除する。*/ 240 224 syscall(sig_sem(cep->semid_lock)); 241 225 } … … 246 230 cep->snd_len = len; 247 231 248 /* é信端ç¹ãããã¯ã解é¤ããã*/232 /* 通信端点をロックを解除する。*/ 249 233 syscall(sig_sem(cep->semid_lock)); 250 234 … … 254 238 } 255 239 } 256 else { /* éãã³ããããã³ã°ã³ã¼ã«*/240 else { /* 非ノンブロッキングコール */ 257 241 258 /* é信端ç¹ãããã¯ããã*/242 /* 通信端点をロックする。*/ 259 243 syscall(wai_sem(cep->semid_lock)); 260 244 261 245 if (cep->snd_p_dstaddr != NULL) { 262 246 263 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/264 error = E_OBJ; 265 266 /* é信端ç¹ãããã¯ã解é¤ããã*/247 /* ノンブロッキングコールでペンディング中 */ 248 error = E_OBJ; 249 250 /* 通信端点をロックを解除する。*/ 267 251 syscall(sig_sem(cep->semid_lock)); 268 252 } 269 253 else if (cep->snd_tskid != TA_NULL) { 270 254 271 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/255 /* 非ノンブロッキングコールでペンディング中 */ 272 256 error = E_QOVR; 273 257 274 /* é信端ç¹ãããã¯ã解é¤ããã*/258 /* 通信端点をロックを解除する。*/ 275 259 syscall(sig_sem(cep->semid_lock)); 276 260 } 277 261 else { 278 262 279 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/263 /* 現在のタスク識別子を記録する。*/ 280 264 get_tid(&(cep->snd_tskid)); 281 265 282 /* é信端ç¹ãããã¯ã解é¤ããã*/283 syscall(sig_sem(cep->semid_lock)); 284 285 /* ãã±ãããéä¿¡ããã*/266 /* 通信端点をロックを解除する。*/ 267 syscall(sig_sem(cep->semid_lock)); 268 269 /* パケットを送信する。*/ 286 270 error = UDP_SEND_DATA(cep, p_dstaddr, data, len, tmout); 287 271 } … … 296 280 297 281 /* 298 * udp_rcv_dat -- ãã±ããã®åä¿¡ãæ¨æºæ©è½ã282 * udp_rcv_dat -- パケットの受信【標準機能】 299 283 */ 300 284 … … 308 292 uint_t ulen, uhoff; 309 293 310 /* p_dstaddr ã¾ã㯠data ã NULL ããlen < 0 ãªãã¨ã©ã¼*/294 /* p_dstaddr または data が NULL か、len < 0 ならエラー */ 311 295 if (p_dstaddr == NULL || data == NULL || len < 0) 312 296 return E_PAR; 313 297 314 /* UDP éä¿¡ç«¯ç¹ ID ããã§ãã¯ããã*/298 /* UDP 通信端点 ID をチェックする。*/ 315 299 if (!VALID_UDP_CEPID(cepid)) 316 300 return E_ID; 317 301 318 /* UDP é信端ç¹ãå¾ãã*/302 /* UDP 通信端点を得る。*/ 319 303 cep = GET_UDP_CEP(cepid); 320 304 321 /* UDP é信端ç¹ããã§ãã¯ããã*/305 /* UDP 通信端点をチェックする。*/ 322 306 if (!VALID_UDP_CEP(cep)) 323 307 return E_NOEXS; 324 308 325 309 /* 326 * ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã310 * タイムアウトをチェックする。 327 311 */ 328 312 329 if (tmout == TMO_NBLK) { /* ãã³ããããã³ã°ã³ã¼ã«*/330 331 /* é信端ç¹ãããã¯ããã*/313 if (tmout == TMO_NBLK) { /* ノンブロッキングコール */ 314 315 /* 通信端点をロックする。*/ 332 316 syscall(wai_sem(cep->semid_lock)); 333 317 334 318 if (cep->rcv_p_dstaddr != NULL) 335 319 336 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/320 /* ノンブロッキングコールでペンディング中 */ 337 321 error = E_QOVR; 338 322 339 323 else if (cep->rcv_tskid != TA_NULL) 340 324 341 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/325 /* 非ノンブロッキングコールでペンディング中 */ 342 326 error = E_OBJ; 343 327 else { … … 348 332 } 349 333 350 /* é信端ç¹ãããã¯ã解é¤ããã*/334 /* 通信端点をロックを解除する。*/ 351 335 syscall(sig_sem(cep->semid_lock)); 352 336 return error; 353 337 } 354 else { /* éãã³ããããã³ã°ã³ã¼ã«*/355 356 /* é信端ç¹ãããã¯ããã*/338 else { /* 非ノンブロッキングコール */ 339 340 /* 通信端点をロックする。*/ 357 341 syscall(wai_sem(cep->semid_lock)); 358 342 359 343 if (cep->rcv_p_dstaddr != NULL) { 360 344 361 /* ãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/362 error = E_OBJ; 363 364 /* é信端ç¹ãããã¯ã解é¤ããã*/345 /* ノンブロッキングコールでペンディング中 */ 346 error = E_OBJ; 347 348 /* 通信端点をロックを解除する。*/ 365 349 syscall(sig_sem(cep->semid_lock)); 366 350 } 367 351 else if (cep->rcv_tskid != TA_NULL) { 368 352 369 /* éãã³ããããã³ã°ã³ã¼ã«ã§ãã³ãã£ã³ã°ä¸*/353 /* 非ノンブロッキングコールでペンディング中 */ 370 354 error = E_QOVR; 371 355 372 /* é信端ç¹ãããã¯ã解é¤ããã*/356 /* 通信端点をロックを解除する。*/ 373 357 syscall(sig_sem(cep->semid_lock)); 374 358 } 375 359 else { 376 360 377 /* ç¾å¨ã®ã¿ã¹ã¯èå¥åãè¨é²ããã*/361 /* 現在のタスク識別子を記録する。*/ 378 362 get_tid(&(cep->rcv_tskid)); 379 363 380 /* é信端ç¹ãããã¯ã解é¤ããã*/ 381 syscall(sig_sem(cep->semid_lock)); 382 383 /* å 384 ¥åãããã¾ã§å¾ 385 ã¤ã*/ 364 /* 通信端点をロックを解除する。*/ 365 syscall(sig_sem(cep->semid_lock)); 366 367 /* 入力があるまで待つ。*/ 386 368 if (cep->cb_netbuf != NULL) { 387 369 388 370 /* 389 * ããã«ããå ´åã¯ãã³ã¼ã«ããã¯é¢æ°ã®ä¸ãã 390 * udp_rcv_dat ãå¼ã³åºãã¦ãããã¨ã«ãªãã 391 * ãã§ã«å 392 ¥åæ¸ã¿ã§ããã 371 * ここにくる場合は、コールバック関数の中から 372 * udp_rcv_dat を呼び出していることになり、 373 * すでに入力済みである。 393 374 */ 394 375 input = cep->cb_netbuf; … … 400 381 } 401 382 402 /* p_dstaddr ãè¨å®ããã*/383 /* p_dstaddr を設定する。*/ 403 384 uhoff = (uint_t)GET_UDP_HDR_OFFSET(input); 404 385 udph = GET_UDP_HDR(input, uhoff); … … 406 387 IN_COPY_TO_HOST(&p_dstaddr->ipaddr, input); 407 388 408 /* ãã¼ã¿ããããã¡ã«ç§»ãã*/389 /* データをバッファに移す。*/ 409 390 ulen = ntohs(udph->ulen); 410 391 if (ulen - UDP_HDR_SIZE > len)
Note:
See TracChangeset
for help on using the changeset viewer.