{"id":58,"date":"2024-03-09T15:08:03","date_gmt":"2024-03-09T07:08:03","guid":{"rendered":"http:\/\/104.46.213.183\/?p=58"},"modified":"2024-03-09T15:08:03","modified_gmt":"2024-03-09T07:08:03","slug":"lab-net","status":"publish","type":"post","link":"https:\/\/www.yewpo.top\/index.php\/58\/","title":{"rendered":"Lab net"},"content":{"rendered":"<h1>Lab net<\/h1>\n<blockquote>\n<p>\u5b9e\u73b0\u7f51\u5361\u9a71\u52a8\u7a0b\u5e8f\u4e2d\u7684\u63a5\u53d7\u548c\u53d1\u9001\u90e8\u5206<\/p>\n<p>\u672c\u5b9e\u9a8c\u7684\u96be\u5ea6\uff1ahard\uff0chard\u7684\u539f\u56e0\u4e3b\u8981\u662f\u5f88\u5927\u4e00\u90e8\u5206\u65f6\u95f4\u7528\u4e8e\u8bfb\u624b\u518c\u53bb\u4e86\u3002<\/p>\n<\/blockquote>\n<h2>1 reading<\/h2>\n<blockquote>\n<p>\u672c\u5b9e\u9a8c\u8bf4\u660e\u4e2d\u8981\u6c42\u9605\u8bfb\u4e00\u4e0b\u4e09\u4efd\u6750\u6599<\/p>\n<ul>\n<li>\u8bfe\u7a0b\u6559\u6750<code>xv6 book<\/code>\u7b2c5\u7ae0\uff0c\u6709\u5173\u8bbe\u5907\u4e2d\u65ad\uff0c\u5e76\u4ecb\u7ecd\u4e86<code>xv6<\/code>d\u7684<code>uart<\/code>\u90e8\u5206<\/li>\n<li>\u7f51\u7edc\u4e86\u89e3<code>IP, UDP, ARP<\/code>\u7684\u76f8\u5173\u77e5\u8bc6\uff0cIP\uff0c UDP\u4e0d\u7528\u591a\u8bf4\uff0cARP\uff08address resolution protocol\uff09\u662f\u4ecb\u4e8e\u94fe\u8def\u5c42\u548c\u7f51\u7edc\u5c42\u7684\u4e00\u4e2a\u534f\u8bae\uff0c\u5229\u7528\u672c\u5730\u7f13\u5b58\u6216\u8005\u662f\u5e7f\u64ad\u67e5\u627e\u76ee\u7684ip\u7684MAC\u5730\u5740\u3002<\/li>\n<li>\u6bd4\u8f83\u67af\u71e5\u7684<a href=\"https:\/\/pdos.csail.mit.edu\/6.828\/2022\/readings\/8254x_GBe_SDM.pdf\">E1000 Software Developer\u2019s Manual<\/a>\uff0c\u4e2d\u7684<code>\u7b2c2\u7ae0\uff0c3.2\u8282\uff0c3.3\u8282\uff0c3.4\u8282\uff0c4.1\u8282\uff08\u4e0d\u5305\u62ec\u5b50\u8282\uff09\uff0c\u7b2c13\u7ae0\uff0c\u7b2c14\u7ae0<\/code>\u3002\n<ul>\n<li>\u7b2c2\u7ae0\u662f\u5bf9\u4e8ee1000\u7684\u6574\u4f53\u6982\u8ff0<\/li>\n<li>3.2\u8282\u662f\u5bf9<code>receive descriptor<\/code>\u4ee5\u53ca<code>receive descriptor ring struct<\/code>\u7684\u8be6\u7ec6\u4ecb\u7ecd<\/li>\n<li>3.3\u8282\u662f\u5bf9<code>transmit descriptor<\/code>\u7684\u8be6\u7ec6\u4ecb\u7ecd<\/li>\n<li>3.4\u8282\u662f\u5bf9<code>transmit descriptor ring struct<\/code>\u7684\u8be6\u7ec6\u4ecb\u7ecd<\/li>\n<li>4.1\u8282\u662f\u5bf9<code>PCI registers<\/code>\u7684\u8be6\u7ec6\u4ecb\u7ecd<\/li>\n<li>13\u7ae0\u662f\u5bf9\u4e8e<code>e1000 registers<\/code>\u7684\u8be6\u7ec6\u4ecb\u7ecd<\/li>\n<li>14\u7ae0\u63cf\u8ff0\u5982\u4f55\u5bf9\u8bbe\u5907\u521d\u59cb\u5316\u548c\u91cd\u7f6e\uff0c\u5b9e\u9a8c\u8bf4\u660e\u4e2d\u8868\u793a\u9605\u8bfb\u8fd9\u4e00\u7ae0\u6709\u52a9\u4e8e\u7406\u89e3<code>e1000_init()<\/code>\u51fd\u6570\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u5b9e\u9a8c\uff0c\u8fd8\u9700\u8981\u5145\u5206\u9605\u8bfb\u5b9e\u9a8c\u8bf4\u660e\u548c<strong>hints<\/strong>\uff0c\u4f60\u53ef\u80fd\u4f1a\u53d1\u73b0\u6309\u7167hints\u7684\u63cf\u8ff0\u5199\u4ee3\u7801\u5c31\u53ef\u4ee5\u5b8c\u6210\u672c\u5b9e\u9a8c\u4e86\u3002<\/p>\n<h3>1.1 xv6 book<\/h3>\n<p>\u9605\u8bfb\u7b2c5\u7ae0\u53ef\u80fd\u5bf9\u672c\u5b9e\u9a8c\u7528\u5904\u4e0d\u5230\uff0c\u4f46\u662f\u6709\u52a9\u4e8e\u542c\u8be5\u8bfe\u7a0b\u7684\u7f51\u8bfe\u3002<\/p>\n<h3>1.2 e1000 Software Developer\u2019s Manual<\/h3>\n<p>\u6211\u6bd4\u8f83\u8be6\u7ec6\u7684\u9605\u8bfb\u5b8c\u4e86\u5b9e\u9a8c\u8981\u6c42\u7684\u7b2c3\u7ae0\u7684\u5185\u5bb9\uff0c\u8be5\u90e8\u5206\u5bf9\u5b9e\u9a8c\u4ee3\u7801\u7684\u7406\u89e3\u975e\u5e38\u5927\uff0c\u5c24\u5176\u662f\u4ee3\u7801\u4e2d\u7684\u5b8f\u3002\u5176\u4ed6\u8981\u6c42\u90e8\u5206\u53ef\u4ee5\u7565\u8bfb\u3002<\/p>\n<h4>1.2.1 receive descriptor(RDESC)<\/h4>\n<p>\u8be5\u7ed3\u6784\u7684\u5c5e\u6027\u56fe\u5982\u4e0b<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113144114248.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113144114248.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113144114248\" \/><\/div><\/p>\n<h5>1.2.1.1 buffer address<\/h5>\n<p>\u8be5\u5c5e\u6027\u63cf\u8ff0\u4e86RAM\u4e2d\u7684\u4e00\u4e2a\u5730\u5740\uff0c\u5e76\u4e14\u5e0c\u671b\u8be5\u8bbe\u5907\u4f7f\u7528DMA\uff08DIRECT MEMORY ACCESS\uff09\u673a\u5236\uff0c\u5c06\u63a5\u53d7\u5230\u7684\u6570\u636e\u5305\u76f4\u63a5\u50a8\u5b58\u5728\u8be5\u7269\u7406\u5730\u5740\u6240\u5728\u7684\u4f4d\u7f6e\u4e0a\uff0c\u4e00\u904d\u540e\u7eed\u7a0b\u5e8f\u5bf9\u5176\u5904\u7406\u3002<\/p>\n<h5>1.2.1.2 length<\/h5>\n<p>\u8be5\u5c5e\u6027\u63cf\u8ff0\u4e86\u63a5\u6536\u5230\u7684\u6570\u636e\u5305\u7684\u5185\u5bb9\u957f\u5ea6\u3002<\/p>\n<h5>1.2.1.3 packet checksum\uff08PCS\uff09<\/h5>\n<p>\u6570\u636e\u5305\u6821\u9a8c\u4f4d\uff0c\u5177\u4f53\u7ec6\u8282\u8bf7\u67e5\u770b\u624b\u518c\uff0c\u5bf9\u4e8e\u672c\u5b9e\u9a8c\u7528\u5904\u4e0d\u5927\u3002<\/p>\n<h5>1.2.1.4 status<\/h5>\n<p>status\u5177\u4f53\u4f4d\u56fe\u5982\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113144846041.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113144846041.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113144846041\" \/><\/div><\/p>\n<p>PIF(pass in filter), IPCS(IP checksum), TCPCS(TCP\/UDP checksum), RSV(RERSERVE\u4fdd\u7559\u4f4d)\uff0cIXSM\uff08ignore checksu)\u8fd9\u4e9b\u4f4d\u5bf9\u672c\u5b9e\u9a8c\u4f5c\u7528\u4e0d\u5927\uff0c\u901a\u8fc7\u8fd9\u4e9b\u82f1\u6587\u63cf\u8ff0\u5927\u81f4\u7406\u89e3\u5373\u53ef\u3002<\/p>\n<hr \/>\n<p>EOP\uff08end of packet\uff09\u8be5\u4f4d\u4e00\u822c\u5728\u6570\u636e\u5305\u6700\u540e\u4e00\u4e2a\u63cf\u8ff0\u7b26\u4e2d\u8bbe\u7f6e\uff0c\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u6570\u636e\u5305\u7684\u7ed3\u675f\u63cf\u8ff0\u7b26\u3002<\/p>\n<p>DD\uff08descriptor done\uff09\u8be5\u4f4d\u7531\u786c\u4ef6\u8bbe\u7f6e\uff0c\u8868\u793a\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u5df2\u7ecf\u88ab\u786c\u4ef6\u5904\u7406\u5b8c\u6210\u3002<\/p>\n<h5>1.2.1.5 error<\/h5>\n<p>\u8be5\u90e8\u5206\u63cf\u8ff0\u4e86\u4e00\u4e9b\u9519\u8bef\uff0c\u5bf9\u4e8e\u672c\u5b9e\u9a8c\u5f71\u54cd\u4e0d\u5927\uff0c\u7ec6\u8282\u8bf7\u67e5\u770b\u624b\u518c\u3002<\/p>\n<h5>1.2.1.6 special<\/h5>\n<p>\u8be5\u90e8\u5206\u4f4d\u56fe\u5982\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113145644352.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113145644352.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113145644352\" \/><\/div><\/p>\n<p>PRI\u63cf\u8ff0\u4e86\u7528\u6237\u7684\u6743\u9650<\/p>\n<p>CFI\u63cf\u8ff0\u4e86VLAN\u7684\u5f62\u5f0f\u6807\u51c6<\/p>\n<p>VLAN\u63cf\u8ff0\u4e86LAN ID<\/p>\n<h4>1.2.2 receive descriptor queue structure(RX-RING)<\/h4>\n<h5>1.2.2.1 \u7ed3\u6784\u56fe<\/h5>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113150148077.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113150148077.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113150148077\" \/><\/div><\/p>\n<h5>1.2.2.2 \u76f8\u5e94\u7684\u8bbe\u5907\u5bc4\u5b58\u5668<\/h5>\n<ul>\n<li>receive descriptor base address(RDBAL &amp; RDBAH)\uff1a\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u73af\u7ed3\u6784\u7684\u8d77\u59cb\u5730\u5740\u3002\uff08\u56e0\u4e3a\u670964\u4f4d\uff0c\u6240\u4ee5\u5206\u6210\u4e86\u4f4e\u4f4d\u5bc4\u5b58\u5668\uff08L\uff09\uff0c\u548c\u9ad8\u4f4d\u5bc4\u5b58\u5668\uff08H\uff09\uff09<\/li>\n<li>receive descriptor length(RDLEN)\uff1a\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u73af\u6240\u5206\u914d\u7684\u5b57\u8282\u957f\u5ea6\u3002<\/li>\n<li>receive descriptor head(RDH)\uff1a\u63cf\u8ff0\u4e86\u8bbe\u5907\u80fd\u5904\u7406\u7684\u90e8\u5206\u7684\u8d77\u59cb\u4f4d\u7f6e\u3002<\/li>\n<li>receive descriptor tail(RDT)\uff1a\u63cf\u8ff0\u4e86\u8bbe\u5907\u80fd\u5904\u7406\u7684\u90e8\u5206\u7684\u672b\u5c3e\u4f4d\u7f6e\u7684\u4e0b\u4e00\u4e2a\u4f4d\u7f6e\u3002\uff08\u672c\u5b9e\u9a8c\u7a0b\u5e8f\u5e76\u6ca1\u6709\u6309\u7167\u8fd9\u4e2a\u8981\u6c42\u8bbe\u7f6e\u8fd9\u4e2a\u5bc4\u5b58\u5668\uff0c<strong>\u5b9e\u9a8c\u7a0b\u5e8f\u4e2d\uff0c\u5c06\u8be5\u5bc4\u5b58\u5668\u7406\u89e3\u4e3a\uff1a\u63cf\u8ff0\u4e86\u8bbe\u5907\u80fd\u5904\u7406\u7684\u90e8\u5206\u7684\u672b\u5c3e\u4f4d\u7f6e<\/strong>\uff09<\/li>\n<\/ul>\n<h4>1.2.3 transmit descriptor(TDESC)<\/h4>\n<p>\u8be5\u7ed3\u6784\u7684\u5c5e\u6027\u56fe\u5982\u4e0b\uff1a\uff08legacy\uff09<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113151139919.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113151139919.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113151139919\" \/><\/div><\/p>\n<h5>1.2.3.1 buffer address<\/h5>\n<p>\u8be5\u5c5e\u6027\u63cf\u8ff0\u4e86\u5e0c\u671b\u8bbe\u5907\u5904\u7406\u5e76\u4f20\u8f93\u7684\u6570\u636e\u5305\u6240\u5728RAM\u5730\u5740\u3002<\/p>\n<h5>1.2.3.2 length<\/h5>\n<p>\u8be5\u5c5e\u6027\u63cf\u8ff0\u4e86\u5e0c\u671b\u8bbe\u5907\u5904\u7406\u5e76\u4f20\u8f93\u7684\u6570\u636e\u5305\u7684\u957f\u5ea6<\/p>\n<h5>1.2.3.3 CSO\uff08checksum offset\uff09<\/h5>\n<p>\u6821\u9a8c\u4f4d\u504f\u79fb\u91cf\uff0c\u5bf9\u672c\u5b9e\u9a8c\u65e0\u5f71\u54cd<\/p>\n<h5>1.2.3.4 CMD<\/h5>\n<p>\u547d\u4ee4\u5c5e\u6027<\/p>\n<p>\u76f8\u5e94\u4f4d\u5982\u4e0b\uff1a<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113151740874.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113151740874.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113151740874\" \/><\/div><\/p>\n<p>\u5bf9\u4e8e\u672c\u5b9e\u9a8c\uff0c\u6211\u4eec\u53ea\u9700\u8981\u7406\u89e3RS\u548cEOP\u4e24\u4f4d\u3002<\/p>\n<p>RS\uff08report status\uff09\uff1a\u8be5\u4f4d\u88ab\u8bbe\u7f6e\u4ee5\u540e\uff0c\u5e0c\u671b\u8bbe\u5907\u80fd\u53ca\u65f6\u53cd\u9988\u8be5\u63cf\u8ff0\u7b26\u7684\u72b6\u6001\u3002<\/p>\n<p>EOP\uff08end of packet\uff09\uff1a\u8be5\u4f4d\u88ab\u8bbe\u7f6e\u4ee5\u540e\uff0c\u8868\u793a\u8be5\u63cf\u8ff0\u7b26\u662f\u6574\u4e2a\u6570\u636e\u5305\u7684\u6700\u540e\u4e00\u4e2a\u63cf\u8ff0\u7b26\u3002<\/p>\n<p>\u5176\u4ed6\u4f4d\u7684\u8be6\u60c5\u8bf7\u67e5\u770b\u624b\u518c\u3002<\/p>\n<h5>1.2.3.5 STA<\/h5>\n<p>\u4f4d\u56fe\u5982\u4e0b<\/p>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113153034533.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113153034533.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113153034533\" \/><\/div><\/p>\n<p>RSV\u4e3a\u4fdd\u7559\u4f4d<\/p>\n<p>LC,EC\u5206\u522b\u8868\u793a\u5355\u51b2\u7a81\u548c\u591a\u51b2\u7a81\uff08\u8be5\u5b9e\u9a8c\u4e0d\u9700\u8981\u8fd9\u4e24\u4f4d\uff09<\/p>\n<p>DD\u540cRDESC\uff0c\u8868\u793a\u8bbe\u5907\u5df2\u7ecf\u5904\u7406\u597d\u8be5\u63cf\u8ff0\u7b26\u3002<\/p>\n<h5>1.2.3.6 RSV<\/h5>\n<p>\u4fdd\u7559\u4f4d<\/p>\n<h5>1.2.3.7 CSS<\/h5>\n<p>checksum start field\u6821\u9a8c\u4f4d\u5176\u5b9e\u4f4d\u7f6e<\/p>\n<h5>1.2.3.8 special<\/h5>\n<p>\u7c7b\u4f3c\u4e8eRDESC\u7684special\uff0c\u5177\u4f53\u8bf7\u67e5\u770b\u624b\u518c\uff0c\u672c\u5b9e\u9a8c\u65e0\u9700\u8be5\u5c5e\u6027\u3002<\/p>\n<h4>1.2.4 transmit descriptor ring structure(TX-RING)<\/h4>\n<h5>1.2.4.1 \u7ed3\u6784\u56fe<\/h5>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113153715848.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/raw.githubusercontent.com\/YEWPO\/yewpoblogonlinePic\/main\/image-20221113153715848.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20221113153715848\" \/><\/div><\/p>\n<h5>1.2.4.2 \u76f8\u5e94\u7684\u5bc4\u5b58\u5668<\/h5>\n<ul>\n<li>transmit descriptor base address(TDBAL &amp; TDBAH)\uff1a\u63cf\u8ff0\u4e86\u8be5\u73af\u7684\u8d77\u59cb\u5730\u5740\u3002<\/li>\n<li>transmit descriptor length(TDLEN)\uff1a\u63cf\u8ff0\u4e86\u5206\u914d\u7ed9\u8be5\u73af\u7684\u7269\u7406\u5185\u5b58\u7684\u5b57\u8282\u957f\u5ea6\uff0c\u5fc5\u987b128\u4f4d\u5bf9\u9f50\u3002<\/li>\n<li>transmit descriptor head(TDH)\uff1a\u5f85\u8bbe\u5907\u5904\u7406\u7684\u63cf\u8ff0\u7b26\u7684\u8d77\u59cb\u4f4d\u7f6e\u3002<\/li>\n<li>transmit descriptor tail(TDT)\uff1a\u5f85\u8bbe\u5907\u5904\u7406\u7684\u63cf\u8ff0\u7b26\u7684\u672b\u5c3e\u4f4d\u7f6e\u7684\u4e0b\u4e00\u4e2a\u4f4d\u7f6e\u3002<\/li>\n<\/ul>\n<p>\u4ee5\u4e0a\u5c31\u662f\u8fd9\u4e2a\u53c2\u8003\u6750\u6599\u5bf9\u672c\u5b9e\u9a8c\u975e\u5e38\u5173\u952e\u7684\u90e8\u5206\u3002<\/p>\n<h3>1.3 lab material &amp; hints<\/h3>\n<p>\u8be5\u90e8\u5206\u5c06\u8be5\u8bbe\u5907\u7684\u5de5\u4f5c\u539f\u7406\u4ece\u6bd4\u8f83\u5bb9\u6613\u7406\u89e3\u7684\u65b9\u5411\u8fdb\u884c\u4ecb\u7ecd\uff0chints\u57fa\u672c\u624b\u628a\u624b\u6559\u4f60\u5982\u4f55\u5199\u51fa\u4ee3\u7801\u3002\u9605\u8bfb\u7684\u4e3b\u8981\u95ee\u9898\u5c31\u662f\u82f1\u8bed\u6c34\u5e73\u4e0d\u591f\u30020.0<\/p>\n<p>\u5177\u4f53\u5c06\u5728\u4e0b\u9762\u4e24\u4e2a\u5b9e\u73b0\u73af\u8282\u63cf\u8ff0\u3002<\/p>\n<h2>2 e1000_transmit(struct mbuf *m)<\/h2>\n<blockquote>\n<p>\u5b9e\u73b0\u53d1\u9001<\/p>\n<\/blockquote>\n<p>\u5b9e\u9a8c\u4ee3\u7801\u4e3a\u6211\u4eec\u51c6\u5907\u4e86\u4e24\u4e2a\u73af\uff1a<code>rx_ring, tx_ring<\/code>\u957f\u5ea6\u4e3a16\uff0c\u4e14\u5bf9\u5e94\u51c6\u5907\u4e86<code>message buffer(mbuf)<\/code>\uff1b\u7ed3\u6784\u4f53\u90fd\u6709\u5728\u5934\u6587\u4ef6\u4e2d\u63cf\u8ff0\u3002<\/p>\n<h3>2.1 \u7406\u89e3TX\u73af<\/h3>\n<p>\u5728\u73af\u4e2d\u5934\u6307\u9488\u548c\u5c3e\u6307\u9488\u5305\u56f4\u7684\u7a7a\u95f4\u91cc\u8868\u793a\u5e26\u8bbe\u5907\u5904\u7406\u5e76\u4e14\u53d1\u9001\u7684\u63cf\u8ff0\u7b26\uff0c\u800c\u9634\u5f71\u90e8\u5206\u662f\u6211\u4eec\u53ef\u4ee5\u6dfb\u52a0\u65b0\u7684\u63cf\u8ff0\u7b26\u7684\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5728\u9634\u5f71\u90e8\u5206\u5904\u7406\u3002<\/p>\n<h3>2.2 \u5b9e\u73b0\u8fc7\u7a0b<\/h3>\n<ol>\n<li>\u6211\u4eec\u901a\u8fc7TDT\u5bc4\u5b58\u5668\u83b7\u5f97\u9634\u5f71\u90e8\u5206\u7684\u4e00\u4e2a\u53ef\u4ee5\u5904\u7406\u7684\u4f4d\u7f6e\uff08\u53ef\u80fd\u8fd9\u4e2a\u4f4d\u7f6e\u4e0d\u662f\u9634\u5f71\u4f4d\u7f6e\uff0c\u6bd4\u5982\u6ee1\u73af\u7684\u60c5\u51b5\uff09<\/li>\n<li>\u901a\u8fc7\u5224\u65ad\u63cf\u8ff0\u7b26\u7684STA\u4e2d\u7684DD\u4f4d\u6765\u5224\u65ad\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u53ef\u4e0d\u53ef\u4ee5\u7528\u3002\u5982\u679c\u6ca1\u6709\u8bbe\u7f6e\uff0c\u8868\u793a\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u8bbe\u5907\u6ca1\u6709\u5904\u7406\u5b8c\uff0c\u7136\u540e\u8fd4\u56de\u9519\u8bef\u7801\u3002<\/li>\n<li>\u5982\u679cDD\u88ab\u8bbe\u7f6e\uff0c\u8868\u793a\u8be5\u63cf\u8ff0\u7b26\u5df2\u7ecf\u88ab\u8bbe\u5907\u5904\u7406\u5b8c\u4e86\uff0c\u5219mbuf\u7a7a\u95f4\u53ef\u4ee5\u88ab\u91ca\u653e\uff0c\u6240\u4ee5\u6211\u4eec\u8c03\u7528<code>mbuffree<\/code>\u51fd\u6570\u91ca\u653e\u8fd9\u4e2a\u7a7a\u95f4\u3002\u5982\u679cmbuf\u4e0d\u5b58\u5728\uff0c\u6211\u4eec\u5c31\u4e0d\u7ba1\u4ed6\u3002<\/li>\n<li>\u5c06mbuf\u7684addr\u6307\u9488\u6307\u5411\u65b0\u7684\u8981\u4f20\u8f93\u7684mbuf\u7684\u4fe1\u606f\u5934\uff08mbuf\u4e2d\u7684head\u5c5e\u6027\uff09\uff0c\u5e76\u5c06\u8be5\u63cf\u8ff0\u7b26\u7684length\u8bbe\u7f6e\u4e3a\u8be5mbuf\u7684length\uff0c\u518d\u8bbe\u7f6e\u8be5\u63cf\u8ff0\u7b26CMD\u5c5e\u6027\u4e2d\u7684RS\u548cEOP\u4f4d\uff0c\u8868\u793a\u9700\u8981\u8bbe\u5907\u53ca\u65f6\u53cd\u9988\u5904\u7406\u4fe1\u606f\u5e76\u4e14\u544a\u77e5\u8be5\u63cf\u8ff0\u7b26\u4e3a\u4e00\u4e2a\u6570\u636e\u5305\u7ed3\u675f\u7684\u63cf\u8ff0\u7b26\u3002<\/li>\n<li>\u5c06\u8be5mbuf\u5730\u5740\u4fdd\u5b58\u5728<code>rx_mbuf<\/code>\u4e2d\uff0c\u4ee5\u4fbf\u540e\u9762\u5bf9\u8be5\u7a7a\u95f4\u8fdb\u884c\u91ca\u653e\u3002<\/li>\n<li>\u66f4\u65b0TDT\u5bc4\u5b58\u5668\u6307\u5411\u5f53\u524d\u4f4d\u7f6e\u3002<\/li>\n<\/ol>\n<h3>2.3 \u9501\u95ee\u9898<\/h3>\n<p>\u6709\u53ef\u80fd\u591a\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8981\u53d1\u9001\u4fe1\u606f\uff0c\u6240\u4ee5\u8fd9\u4e2a\u51fd\u6570\u9700\u8981\u4e00\u4e2a\u9501\u3002<\/p>\n<h3>2.4 \u4ee3\u7801<\/h3>\n<pre><code class=\"language-C\">int\ne1000_transmit(struct mbuf *m)\n{\n  \/\/\n  \/\/ Your code here.\n  \/\/\n  \/\/ the mbuf contains an ethernet frame; program it into\n  \/\/ the TX descriptor ring so that the e1000 sends it. Stash\n  \/\/ a pointer so that it can be freed after sending.\n  \/\/\n\n  acquire(&amp;e1000_lock);\n  int index = regs[E1000_TDT];\n\n  if (!(tx_ring[index].status &amp; E1000_TXD_STAT_DD)) {\n    release(&amp;e1000_lock);\n    return -1;\n  }\n\n  if (tx_mbufs[index]) {\n    mbuffree(tx_mbufs[index]);\n    tx_mbufs[index] = 0;\n  }\n\n  tx_ring[index].addr = (uint64)m-&gt;head;\n  tx_ring[index].length = m-&gt;len;\n  tx_ring[index].cmd = E1000_TXD_CMD_RS | E1000_TXD_CMD_EOP;\n  tx_mbufs[index] = m;\n\n  regs[E1000_TDT] = (index + 1) % TX_RING_SIZE;\n  release(&amp;e1000_lock);\n  return 0;\n}<\/code><\/pre>\n<h2>3 e1000_recv()<\/h2>\n<blockquote>\n<p>\u5b9e\u73b0\u63a5\u53d7\uff0c<strong>\u8be5\u51fd\u6570\u8981\u68c0\u67e5\u6240\u6709\u63a5\u53d7\u5230\u7684\u6570\u636e\u5305<\/strong>\uff0c\u4e0d\u540c\u4e8etransmit\u53ea\u5904\u7406\u4e00\u4e2a\u5305\u3002<\/p>\n<\/blockquote>\n<h3>3.1 \u7406\u89e3RX\u73af<\/h3>\n<p>\u5728\u5934\u6307\u9488\u548c\u5c3e\u6307\u9488\uff08\u4e0d\u540c\u4e8e\u624b\u518c\u7684\u5c3e\u6307\u9488\uff0c\u89c1<code>1.2.2.2<\/code>\uff09\u5305\u56f4\u7684\u533a\u57df\uff0c\u8868\u793a\u8bbe\u5907\u53ef\u4ee5\u5904\u7406\u7684\u90e8\u5206\u3002\u8be5\u5904\u7406\u7406\u89e3\u4e3a\uff0c\u5c06\u65b0\u6536\u5230\u7684\u4fe1\u606f\u63cf\u8ff0\u7b26\u5199\u5728\u8be5\u63cf\u8ff0\u7b26\u4e0a\uff0c\u6240\u4ee5\u8fd9\u4e00\u90e8\u5206\u533a\u57df\u5e94\u8be5\u662f\u7a7a\u7684\u63cf\u8ff0\u7b26\uff0c\u53ef\u4ee5\u53c2\u8003<code>e1000_init()<\/code>\u51fd\u6570\u5bf9\u8be5\u90e8\u5206\u7684\u5206\u914d\u3002\u800c\u9634\u5f71\u53cd\u800c\u4e0d\u662f\u7a7a\u95f2\u7684\u63cf\u8ff0\u7b26\uff0c\u8fd9\u4e9b\u63cf\u8ff0\u7b26\u662f\u6211\u4eec\u53ef\u4ee5\u5904\u7406\u7684\uff0c\u5df2\u7ecf\u63a5\u53d7\u5230\u7684\u63cf\u8ff0\u7b26\u3002<\/p>\n<h3>3.2 \u5b9e\u73b0\u8fc7\u7a0b<\/h3>\n<ol>\n<li>\u901a\u8fc7RDT\u83b7\u5f97\u4e00\u4e2a\u53ef\u4ee5\u5904\u7406\u7684\u63cf\u8ff0\u7b26\u4f4d\u7f6e\u3002\uff08<strong>\u56e0\u4e3a\u8be5\u5c3e\u6307\u9488\u4e0d\u540c\u4e8e\u624b\u518c\u4e2d\u7684\u5c3e\u6307\u9488\uff0c\u6240\u4ee5\u6211\u4eec\u5f97\u5230RDT\u540e\u8981\u52a0\u4e00\u518d\u53d6\u957f\u5ea6\u7684\u4f59\u6570\u624d\u662f\u6211\u4eec\u53ef\u80fd\u53ef\u4ee5\u5904\u7406\u7684\u63cf\u8ff0\u7b26\u7684\u4f4d\u7f6e<\/strong>\uff09\u4e3a\u4e86\u80fd\u591f\u5904\u7406\u6240\u6709\u53ef\u4ee5\u5904\u7406\u7684\u6570\u636e\u5305\uff0c\u6240\u4ee5\u6211\u4eec\u7528\u4e00\u4e2a\u6b7b\u5faa\u73af\u3002<\/li>\n<li>\u901a\u8fc7\u68c0\u67e5\u63cf\u8ff0\u7b26\u7684STA\u4e2d\u7684DD\u4e3a\u662f\u5426\u8bbe\u7f6e\uff0c\u6211\u4eec\u53ef\u4ee5\u5224\u65ad\u8be5\u63cf\u8ff0\u7b26\u662f\u5426\u53ef\u7528\uff0c\u5982\u679c\u4e0d\u53ef\u7528\u5c31\u7ed3\u675f\u63a5\u53d7\u3002<\/li>\n<li>\u5982\u679c\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u53ef\u7528\uff0c\u6211\u4eec\u628ambuf\u4e2dlength\u66f4\u65b0\u4e3a\u63a5\u53d7\u5230\u7684\u63cf\u8ff0\u7b26\u4e2d\u7684length\uff0c\u5e76\u5c06\u8fd9\u4e2ambuf\u4f20\u9012\u7ed9\u7f51\u7edc\u6808\uff08net_rx()\uff09\u3002<\/li>\n<li>\u5206\u914d\u65b0\u7684mbuf\uff08mbufalloc()\uff09\u7ed9\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u4ee5\u4fbf\u65b0\u7684\u4fe1\u606f\u8fdb\u5165\uff0c\u5e76\u6e05\u9664STA\u57df\u3002<\/li>\n<li>\u66f4\u65b0RDT\uff0c\u91cd\u590d1<\/li>\n<\/ol>\n<h3>3.3 \u9501\u95ee\u9898<\/h3>\n<p>\u8bbe\u5907\u5904\u7406\u662f\u4e00\u4e2a\u4e00\u4e2a\u5904\u7406\u7684\uff0c\u63a5\u53d7\u4e2d\u65ad\u4e5f\u662f\u5468\u671f\u4ea7\u751f\uff0c\u6240\u4ee5\u4e0d\u5b58\u5728\u7ade\u4e89\u95ee\u9898\u3002<\/p>\n<h3>3.4 \u4ee3\u7801<\/h3>\n<pre><code class=\"language-C\">static void\ne1000_recv(void)\n{\n  \/\/\n  \/\/ Your code here.\n  \/\/\n  \/\/ Check for packets that have arrived from the e1000\n  \/\/ Create and deliver an mbuf for each packet (using net_rx()).\n  \/\/\n\n  for (;;) {\n    int index = regs[E1000_RDT];\n    index = (index + 1) % RX_RING_SIZE;\n\n    if (!(rx_ring[index].status &amp; E1000_RXD_STAT_DD)) {\n      break;\n    }\n\n    rx_mbufs[index]-&gt;len = rx_ring[index].length;\n    net_rx(rx_mbufs[index]);\n\n    rx_mbufs[index] = mbufalloc(0);\n    rx_ring[index].addr = (uint64)rx_mbufs[index]-&gt;head;\n    rx_ring[index].status = 0x00;\n\n    regs[E1000_RDT] = index;\n  }\n}<\/code><\/pre>\n<h2>4 END<\/h2>\n<p>\u81ea\u5df1\u6309\u7167hints\u5b9e\u73b0\u4e86\u53d1\u9001\uff0c\u4f46\u662f\u56e0\u4e3a\u82f1\u8bed\u6c34\u5e73\u4e0d\u8db3\uff0c\u6ca1\u80fd\u6210\u529f\u5c06\u63a5\u53d7\u90e8\u5206\u7684hints\u7ffb\u8bd1\u6210\u53ef\u8fd0\u884c\u4ee3\u7801\uff0c\u8fd0\u884c\u540e\u6ca1\u6709\u5730\u65b9\u4e0b\u624b\u8fdb\u884c\u8c03\u8bd5\uff0c\u8fd9\u4e00\u90e8\u5206\u53c2\u8003\u4e86\u4e00\u4e0b\u535a\u5ba2\u624d\u53d1\u73b0\u6211\u6709\u7406\u89e3\u9519\u8bef\u3002<\/p>\n<p>\u6d4b\u8bd5\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<pre><code>== Test running nettests ==\n$ make qemu-gdb\n(4.3s)\n== Test   nettest: ping ==\n  nettest: ping: OK\n== Test   nettest: single process ==\n  nettest: single process: OK\n== Test   nettest: multi-process ==\n  nettest: multi-process: OK\n== Test   nettest: DNS ==\n  nettest: DNS: OK\n== Test time ==\ntime: OK\nScore: 100\/100<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>xv6\u64cd\u4f5c\u7cfb\u7edf\u5b9e\u9a8c7\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[14],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-os","tag-xv6"],"_links":{"self":[{"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/comments?post=58"}],"version-history":[{"count":0,"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/posts\/58\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/media?parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/categories?post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yewpo.top\/index.php\/wp-json\/wp\/v2\/tags?post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}