Changeset 318 for asp3_gr_sakura/trunk/tinet/net/ethernet.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/tinet/net/ethernet.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 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_raw_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºç¡ã197 * ether_raw_output -- Ethernet インタフェースの出力関数、MAC アドレス解決無し 212 198 */ 213 199 … … 217 203 ER error = E_OK; 218 204 219 /* Ethernet åºåãã¥ã¼ã«æå 220 ¥ããã*/ 205 /* Ethernet 出力キューに投入する。*/ 221 206 if ((error = tsnd_dtq(DTQ_ETHER_OUTPUT, (intptr_t)output, tmout)) != E_OK) { 222 207 NET_COUNT_ETHER(net_count_ether.out_err_packets, 1); 223 208 NET_COUNT_MIB(if_stats.ifOutDiscards, 1); 224 209 225 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/210 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 226 211 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 227 212 syscall(rel_net_buf(output)); … … 236 221 237 222 /* 238 * ether_output -- Ethernet ã¤ã³ã¿ãã§ã¼ã¹ã®åºåé¢æ°ãMAC ã¢ãã¬ã¹è§£æ±ºæã223 * ether_output -- Ethernet インタフェースの出力関数、MAC アドレス解決有り 239 224 */ 240 225 … … 245 230 ER error = E_OK; 246 231 247 /* éä¿¡å 248 MAC ã¢ãã¬ã¹ãè¨å®ããã*/ 232 /* 送信元 MAC アドレスを設定する。*/ 249 233 ic = IF_ETHER_NIC_GET_SOFTC(); 250 234 memcpy(GET_ETHER_HDR(output)->shost, ic->ifaddr.lladdr, ETHER_ADDR_LEN); … … 255 239 256 240 case ETHER_TYPE_IP: /* IPv4 */ 257 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ãªãã¢ãã¬ã¹è§£æ±ºæ¸*/241 if (arp_resolve(&ic->ifaddr, output, *(uint32_t*)dst)) { /* true ならアドレス解決済 */ 258 242 error = ether_raw_output(output, tmout); 259 243 } … … 270 254 error = ether_raw_output(output, tmout); 271 255 272 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/256 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 273 257 else if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 274 258 syscall(rel_net_buf(output)); … … 284 268 NET_COUNT_MIB(if_stats.ifOutErrors, 1); 285 269 286 /* IF ã§ãããã¯ã¼ã¯ãããã¡ãéæ¾ããªããã©ã°ããã§ãã¯ããã*/270 /* IF でネットワークバッファを開放しないフラグをチェックする。*/ 287 271 if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) { 288 272 syscall(rel_net_buf(output)); … … 301 285 302 286 /* 303 * Ethernet åºåã¿ã¹ã¯287 * Ethernet 出力タスク 304 288 */ 305 289 … … 355 339 356 340 /* 357 * Ethernet å 358 ¥åã¿ã¹ã¯ 341 * Ethernet 入力タスク 359 342 */ 360 343 … … 369 352 uint8_t rcount = 0; 370 353 371 /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/354 /* ネットワークインタフェース管理を初期化する。*/ 372 355 ifinit(); 373 356 374 /* ã¤ã¼ãµããããããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ç®¡çãåæåããã*/357 /* イーサネットネットワークインタフェース管理を初期化する。*/ 375 358 376 359 #if defined(_IP4_CFG) 377 360 378 ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL; /* IPv4 ã¢ãã¬ã¹*/379 ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK; /* ãµãããããã¹ã¯*/361 ether_ifnet.in4_ifaddr.addr = IPV4_ADDR_LOCAL; /* IPv4 アドレス */ 362 ether_ifnet.in4_ifaddr.mask = IPV4_ADDR_LOCAL_MASK; /* サブネットマスク */ 380 363 381 364 #endif /* of #if defined(_IP4_CFG) */ 382 365 383 /* NIC ãåæåããã*/366 /* NIC を初期化する。*/ 384 367 ic = IF_ETHER_NIC_GET_SOFTC(); 385 368 IF_ETHER_NIC_PROBE(ic); 386 369 IF_ETHER_NIC_INIT(ic); 387 370 388 /* Ethernet åºåã¿ã¹ã¯ãèµ·åãã*/371 /* Ethernet 出力タスクを起動する */ 389 372 syscall(act_tsk(ETHER_OUTPUT_TASK)); 390 373 391 /* ãããã¯ã¼ã¯ã¿ã¤ãã¿ã¹ã¯ãèµ·åãã*/374 /* ネットワークタイマタスクを起動する */ 392 375 syscall(act_tsk(NET_TIMER_TASK)); 393 376 … … 399 382 #if defined(_IP4_CFG) 400 383 401 /* ARP ãåæåããã*/384 /* ARP を初期化する。*/ 402 385 arp_init(); 403 386 … … 406 389 ether_ifnet.ic = ic; 407 390 408 /* ä¹±æ°çæãåæåããã*/391 /* 乱数生成を初期化する。*/ 409 392 net_srand(0); 410 393 … … 418 401 proto = ntohs(eth->type); 419 402 420 /* ä¹±æ°çæãåæåããã*/403 /* 乱数生成を初期化する。*/ 421 404 if (rcount == 0) { 422 405
Note:
See TracChangeset
for help on using the changeset viewer.