Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tinet/net/ethernet.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$ … … 45 33 46 34 /* 47 * Ethernet å¦çã¿ã¹ã¯ã®æ¬ä½35 * Ethernet 処理タスクの本体 48 36 */ 49 37 … … 93 81 94 82 /* 95 * å¤æ°83 * 変数 96 84 */ 97 85 … … 106 94 107 95 /* 108 * å¤æ°109 */ 110 111 /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½*/96 * 変数 97 */ 98 99 /* ネットワークインタフェース構造体 */ 112 100 113 101 static T_IFNET ether_ifnet; … … 115 103 #ifdef SUPPORT_MIB 116 104 117 /* SNMP 㮠管çæ 118 å ±ãã¼ã¹ (MIB) */ 105 /* SNMP の 管理情報ベース (MIB) */ 119 106 120 107 T_IF_STATS if_stats; … … 125 112 126 113 /* 127 * é¢æ°114 * 関数 128 115 */ 129 116 … … 131 118 132 119 /* 133 * ieee_802_input -- IEEE 802.3 å 134 ¥åå¦ç 120 * ieee_802_input -- IEEE 802.3 入力処理 135 121 */ 136 122 … … 150 136 151 137 /* 152 * ether_srand -- ä¹±æ°ãåæå¤ãè¿ãã138 * ether_srand -- 乱数を初期値を返す。 153 139 */ 154 140 … … 178 164 179 165 /* 180 * ether_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã166 * ether_get_ifnet -- ネットワークインタフェース構造体を返す。 181 167 */ 182 168 … … 190 176 191 177 /* 192 * ether_in6_resolve_multicast -- ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ178 * ether_in6_resolve_multicast -- イーサネットのマルチキャストアドレスへの変換 193 179 */ 194 180 … … 196 182 ether_in6_resolve_multicast (T_ETHER_ADDR *ifaddr, const T_IN6_ADDR *maddr) 197 183 { 198 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ããã§ãã¯ããã*/184 /* マルチキャストアドレスかチェックする。*/ 199 185 if (!IN6_IS_ADDR_MULTICAST(maddr)) 200 186 return E_PAR; 201 187 202 /* ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ*/188 /* イーサネットのマルチキャストアドレスへの変換 */ 203 189 ether_map_ipv6_multicast(ifaddr, maddr); 204 190 … … 209 195 210 196 /** 211 * ether_set_link_up -- ãªã³ã¯ããã¨ãã«NICããå¼ã³åºããã197 * ether_set_link_up -- リンクしたときにNICから呼び出される 212 198 */ 213 199 void … … 219 205 if (ether_ifnet.flags & IF_FLAG_UP) { 220 206 #if defined(_IP4_CFG) && defined(SUPPORT_ETHER) 221 /* ARP åæ§ç¯ï¼*/207 /* ARP再構築? */ 222 208 #endif /* #if defined(_IP4_CFG) && defined(SUPPORT_ETHER) */ 223 209 224 210 #ifdef SUPPORT_IGMP 225 /* IGMP åå*/211 /* IGMP参加 */ 226 212 #endif /* #ifdef SUPPORT_IGMP */ 227 213 } … … 233 219 234 220 /** 235 * ether_set_link_up -- ãªã³ã¯ãåæããã¨ãã«NICããå¼ã³åºããã221 * ether_set_link_up -- リンクが切断したときにNICから呼び出される 236 222 */ 237 223 void … … 247 233 248 234 /* 249 * ether_set_up -- DHCP ã§ã¢ãã¬ã¹ãè¨å®ãããã¨ãå¼ã³åºããã235 * ether_set_up -- DHCPでアドレスが設定されたとき呼び出される 250 236 */ 251 237 … … 262 248 263 249 /* 264 * ether_set_down -- DHCP ã§ã¢ãã¬ã¹ã解æ¾ãããã¨ãå¼ã³åºããã250 * ether_set_down -- DHCPでアドレスが解放されたとき呼び出される 265 251 */ 266 252 … … 277 263 278 264 /* 279 * ether_set_link_callback -- ãªã³ã¯ç¶æ 280 å¤åæã®ã³ã¼ã«ããã¯ç»é² 265 * ether_set_link_callback -- リンク状態変化時のコールバック登録 281 266 */ 282 267 … … 291 276 292 277 /* 293 * ether_raw_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºç¡ã278 * ether_raw_output -- Ethernet インタフェースの出力関数、MAC アドレス解決無し 294 279 */ 295 280 … … 299 284 ER error = E_OK; 300 285 301 /* Ethernet åºåãã¥ã¼ã«æå 302 ¥ããã*/ 286 /* Ethernet 出力キューに投入する。*/ 303 287 if ((error = tsnd_dtq(DTQ_ETHER_OUTPUT, (intptr_t)output, tmout)) != E_OK) { 304 288 NET_COUNT_ETHER(net_count_ether.out_err_packets, 1); 305 289 NET_COUNT_MIB(if_stats.ifOutDiscards, 1); 306 290 307 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/291 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 308 292 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 309 293 syscall(rel_net_buf(output)); … … 318 302 319 303 /* 320 * ether_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºæã304 * ether_output -- Ethernet インタフェースの出力関数、MAC アドレス解決有り 321 305 */ 322 306 … … 328 312 T_ETHER_HDR *eth; 329 313 330 /* éä¿¡å 331 MAC ã¢ãã¬ã¹ãè¨å®ããã*/ 314 /* 送信元 MAC アドレスを設定する。*/ 332 315 ic = IF_ETHER_NIC_GET_SOFTC(); 333 316 eth = GET_ETHER_HDR(output); … … 340 323 case ETHER_TYPE_IP: /* IPv4 */ 341 324 #ifdef ETHER_CFG_MULTICAST 342 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´å*/325 /* マルチキャストアドレスの場合 */ 343 326 if(IN4_IS_ADDR_MULTICAST(*(uint32_t*)dst)){ 344 /* ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ*/327 /* イーサネットのマルチキャストアドレスへの変換 */ 345 328 ether_map_ipv4_multicast((T_ETHER_ADDR *)ð->dhost, *(T_IN4_ADDR*)dst); 346 329 error = ether_raw_output(output, tmout); … … 348 331 } 349 332 #endif 350 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ãªãã¢ãã¬ã¹è§£æ±ºæ¸*/333 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ならアドレス解決済 */ 351 334 error = ether_raw_output(output, tmout); 352 335 } … … 363 346 error = ether_raw_output(output, tmout); 364 347 365 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/348 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 366 349 else if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 367 350 syscall(rel_net_buf(output)); … … 377 360 NET_COUNT_MIB(if_stats.ifOutErrors, 1); 378 361 379 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/362 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 380 363 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 381 364 syscall(rel_net_buf(output)); … … 394 377 395 378 /* 396 * Ethernet åºåã¿ã¹ã¯379 * Ethernet 出力タスク 397 380 */ 398 381 … … 448 431 449 432 /* 450 * Ethernet å 451 ¥åã¿ã¹ã¯ 433 * Ethernet 入力タスク 452 434 */ 453 435 … … 462 444 uint8_t rcount = 0; 463 445 464 /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/446 /* ネットワークインタフェース管理を初期化する。*/ 465 447 ifinit(); 466 448 467 /* ã¤ã¼ãµããããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/449 /* イーサネットネットワークインタフェース管理を初期化する。*/ 468 450 469 451 #if defined(_IP4_CFG) 470 452 471 ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL; /* IPv4 ã¢ãã¬ã¹*/472 ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK; /* ãµãããããã¹ã¯*/453 ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL; /* IPv4 アドレス */ 454 ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK; /* サブネットマスク */ 473 455 474 456 #endif /* of #if defined(_IP4_CFG) */ 475 457 476 /* NIC ãåæåããã*/458 /* NIC を初期化する。*/ 477 459 ic = IF_ETHER_NIC_GET_SOFTC(); 478 460 IF_ETHER_NIC_PROBE(ic); 479 461 IF_ETHER_NIC_INIT(ic); 480 462 481 /* Ethernet åºåã¿ã¹ã¯ãèµ·åãã*/463 /* Ethernet 出力タスクを起動する */ 482 464 syscall(act_tsk(ETHER_OUTPUT_TASK)); 483 465 484 /* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ãèµ·åãã*/466 /* ネットワークタイマタスクを起動する */ 485 467 syscall(act_tsk(NET_TIMER_TASK)); 486 468 … … 492 474 #if defined(_IP4_CFG) 493 475 494 /* ARP ãåæåããã*/476 /* ARP を初期化する。*/ 495 477 arp_init(); 496 478 … … 499 481 ether_ifnet.ic = ic; 500 482 501 /* ä¹±æ°çæãåæåããã*/483 /* 乱数生成を初期化する。*/ 502 484 net_srand(0); 503 485 … … 511 493 proto = ntohs(eth->type); 512 494 513 /* ä¹±æ°çæãåæåããã*/495 /* 乱数生成を初期化する。*/ 514 496 if (rcount == 0) { 515 497
Note:
See TracChangeset
for help on using the changeset viewer.