Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/net/ethernet.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/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
r270 r321 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次の条件を満たすこと. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 45 33 46 34 /* 47 * Ethernet å¦çã¿ã¹ã¯ã®æ¬ä½35 * Ethernet 処理タスクの本体 48 36 */ 49 37 … … 92 80 93 81 /* 94 * å¤æ°82 * 変数 95 83 */ 96 84 … … 105 93 106 94 /* 107 * å¤æ°108 */ 109 110 /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½*/95 * 変数 96 */ 97 98 /* ネットワークインタフェース構造体 */ 111 99 112 100 #if defined(SUPPORT_INET4) 113 101 114 102 static T_IFNET ether_ifnet = { 115 NULL, /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ 116 å ± */ 103 NULL, /* ネットワークインタフェースのソフトウェア情報 */ 117 104 { 118 IPV4_ADDR_LOCAL, /* IPv4 ã¢ãã¬ã¹*/119 IPV4_ADDR_LOCAL_MASK, /* ãµãããããã¹ã¯*/105 IPV4_ADDR_LOCAL, /* IPv4 アドレス */ 106 IPV4_ADDR_LOCAL_MASK, /* サブネットマスク */ 120 107 }, 121 108 }; … … 126 113 127 114 static T_IFNET ether_ifnet = { 128 NULL, /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ 129 å ± */ 130 {0}, /* IPv6 ã¢ãã¬ã¹æ 131 å ± */ 132 {0}, /* ãã«ããã£ã¹ã IPv6 ã¢ãã¬ã¹ */ 133 0, /* ãã©ã° */ 115 NULL, /* ネットワークインタフェースのソフトウェア情報 */ 116 {0}, /* IPv6 アドレス情報 */ 117 {0}, /* マルチキャスト IPv6 アドレス */ 118 0, /* フラグ */ 134 119 }; 135 120 … … 139 124 140 125 /* 141 * SNMP 㮠管çæ 142 å ±ãã¼ã¹ (MIB) 126 * SNMP の 管理情報ベース (MIB) 143 127 */ 144 128 … … 150 134 151 135 /* 152 * é¢æ°136 * 関数 153 137 */ 154 138 … … 156 140 157 141 /* 158 * ieee_802_input -- IEEE 802.3 å 159 ¥åå¦ç 142 * ieee_802_input -- IEEE 802.3 入力処理 160 143 */ 161 144 … … 175 158 176 159 /* 177 * ether_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã160 * ether_get_ifnet -- ネットワークインタフェース構造体を返す。 178 161 */ 179 162 … … 187 170 188 171 /* 189 * ether_in6_resolve_multicast -- ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ172 * ether_in6_resolve_multicast -- イーサネットのマルチキャストアドレスへの変換 190 173 */ 191 174 … … 193 176 ether_in6_resolve_multicast (T_ETHER_ADDR *ifaddr, T_IN6_ADDR *maddr) 194 177 { 195 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ããã§ãã¯ããã*/178 /* マルチキャストアドレスかチェックする。*/ 196 179 if (!IN6_IS_ADDR_MULTICAST(maddr)) 197 180 return E_PAR; 198 181 199 /* ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ*/182 /* イーサネットのマルチキャストアドレスへの変換 */ 200 183 ether_map_ipv6_multicast(ifaddr, maddr); 201 184 … … 249 232 250 233 /* 251 * ether_raw_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºç¡ã234 * ether_raw_output -- Ethernet インタフェースの出力関数、MAC アドレス解決無し 252 235 */ 253 236 … … 257 240 ER error = E_OK; 258 241 259 /* Ethernet åºåãã¥ã¼ã«æå 260 ¥ããã*/ 242 /* Ethernet 出力キューに投入する。*/ 261 243 if ((error = tsnd_dtq(DTQ_ETHER_OUTPUT, (intptr_t)output, tmout)) != E_OK) { 262 244 NET_COUNT_ETHER(net_count_ether.out_err_packets, 1); 263 245 NET_COUNT_MIB(if_stats.ifOutDiscards, 1); 264 246 265 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/247 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 266 248 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 267 249 syscall(rel_net_buf(output)); … … 276 258 277 259 /* 278 * ether_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºæã260 * ether_output -- Ethernet インタフェースの出力関数、MAC アドレス解決有り 279 261 */ 280 262 … … 286 268 T_ETHER_HDR *eth; 287 269 288 /* éä¿¡å 289 MAC ã¢ãã¬ã¹ãè¨å®ããã*/ 270 /* 送信元 MAC アドレスを設定する。*/ 290 271 ic = IF_ETHER_NIC_GET_SOFTC(); 291 272 eth = GET_ETHER_HDR(output); … … 298 279 case ETHER_TYPE_IP: /* IPv4 */ 299 280 #ifdef ETHER_CFG_MULTICAST 300 /* ãã«ããã£ã¹ãã¢ãã¬ã¹ã®å ´å*/281 /* マルチキャストアドレスの場合 */ 301 282 if(IN4_IS_ADDR_MULTICAST(*(uint32_t*)dst)){ 302 /* ã¤ã¼ãµãããã®ãã«ããã£ã¹ãã¢ãã¬ã¹ã¸ã®å¤æ*/283 /* イーサネットのマルチキャストアドレスへの変換 */ 303 284 ether_map_ipv4_multicast((T_ETHER_ADDR *)ð->dhost, *(T_IN4_ADDR*)dst); 304 285 error = ether_raw_output(output, tmout); … … 306 287 } 307 288 #endif 308 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ãªãã¢ãã¬ã¹è§£æ±ºæ¸*/289 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ならアドレス解決済 */ 309 290 error = ether_raw_output(output, tmout); 310 291 } … … 321 302 error = ether_raw_output(output, tmout); 322 303 323 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/304 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 324 305 else if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 325 306 syscall(rel_net_buf(output)); … … 335 316 NET_COUNT_MIB(if_stats.ifOutErrors, 1); 336 317 337 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/318 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 338 319 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 339 320 syscall(rel_net_buf(output)); … … 352 333 353 334 /* 354 * Ethernet åºåã¿ã¹ã¯335 * Ethernet 出力タスク 355 336 */ 356 337 … … 406 387 407 388 /* 408 * Ethernet å 409 ¥åã¿ã¹ã¯ 389 * Ethernet 入力タスク 410 390 */ 411 391 … … 419 399 uint16_t proto; 420 400 421 /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/401 /* ネットワークインタフェース管理を初期化する。*/ 422 402 ifinit(); 423 403 424 /* NIC ãåæåããã*/404 /* NIC を初期化する。*/ 425 405 ic = IF_ETHER_NIC_GET_SOFTC(); 426 406 IF_ETHER_NIC_PROBE(ic); 427 407 IF_ETHER_NIC_INIT(ic); 428 408 429 /* Ethernet åºåã¿ã¹ã¯ãèµ·åãã*/409 /* Ethernet 出力タスクを起動する */ 430 410 syscall(act_tsk(ETHER_OUTPUT_TASK)); 431 411 432 /* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ãèµ·åãã*/412 /* ネットワークタイマタスクを起動する */ 433 413 syscall(act_tsk(NET_TIMER_TASK)); 434 414 … … 440 420 #if defined(SUPPORT_INET4) 441 421 442 /* ARP ãåæåããã*/422 /* ARP を初期化する。*/ 443 423 arp_init(); 444 424
Note:
See TracChangeset
for help on using the changeset viewer.