{"id":4559,"date":"2016-01-11T16:07:47","date_gmt":"2016-01-11T16:07:47","guid":{"rendered":"http:\/\/blog.bachi.net\/?p=4559"},"modified":"2016-01-13T17:19:50","modified_gmt":"2016-01-13T17:19:50","slug":"linux-kernel-development-network-drivers","status":"publish","type":"post","link":"https:\/\/blog.bachi.net\/?p=4559","title":{"rendered":"Linux Kernel Development: Network Drivers"},"content":{"rendered":"<p><a href=\"http:\/\/www.ecsl.cs.sunysb.edu\/elibrary\/linux\/network\/net.pdf\">Linux Networking Subsystem<\/a>, 2004 for Linux Kernel 2.4.18<br \/>\n<a href=\"http:\/\/www.haifux.org\/lectures\/172\/netLec.pdf\">Linux Kernel Networking<\/a> (Presentation), 2007 for Linux Kernel 2.6.23<br \/>\n<a href=\"https:\/\/datatag.web.cern.ch\/datatag\/papers\/tr-datatag-2004-1.pdf\">A Map of the Networking Code in Linux Kernel 2.4.20<\/a>, 2004<\/p>\n<h3>O&#8217;Reilly<\/h3>\n<p><a href=\"http:\/\/shop.oreilly.com\/product\/9780596005658.do\">Understanding the Linux Kernel, 3rd Edition<\/a>, 2005<br \/>\n<a href=\"http:\/\/shop.oreilly.com\/product\/9780596002558.do\">Understanding Linux Network Internals<\/a>, 2005<br \/>\n<a href=\"http:\/\/shop.oreilly.com\/product\/9780596005900.do\">Linux Device Drivers, 3rd Edition<\/a>, 2005<\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/cd\/E37670_01\/E52461\/html\/ch06s07.html\">Oracle Linux: 6.7 About Network Device Drivers<\/a><br \/>\n<a href=\"http:\/\/stackoverflow.com\/questions\/14319770\/linux-network-drivers-net-device-ops\">linux network drivers \u2014 net_device_ops<\/a><br \/>\n<a href=\"http:\/\/forum.kernelnewbies.org\/read.php?12,27482\">struct net_device and net_device_ops<\/a><\/p>\n<p><a href=\"http:\/\/www.cubrid.org\/blog\/dev-platform\/understanding-tcp-ip-network-stack\/\">Understanding TCP\/IP Network Stack &#038; Writing Network Apps<\/a><br \/>\n<a href=\"https:\/\/wiki.openwrt.org\/doc\/networking\/praxis\">Networking in the Linux Kernel<\/a><br \/>\n<a href=\"https:\/\/www.coverfire.com\/articles\/queueing-in-the-linux-network-stack\/\">Queueing in the Linux Network Stack<\/a><br \/>\n<a href=\"https:\/\/www.kernel.org\/doc\/Documentation\/networking\/scaling.txt\">Scaling in the Linux Networking Stack<\/a> (TXT)<br \/>\n<a href=\"http:\/\/www.linuxfoundation.org\/collaborate\/workgroups\/networking\/kernel_flow\">Networking \u203a kernel_flow<\/a><br \/>\n<a href=\"https:\/\/blog.cloudflare.com\/single-rx-queue-kernel-bypass-with-netmap\/\">Single RX queue kernel bypass in Netmap for high packet rate networking<\/a><\/p>\n<h4>struct net_device, struct net<\/h4>\n<p><a href=\"http:\/\/stackoverflow.com\/questions\/32223367\/what-is-the-difference-between-register-pernet-subsys-and-register-pernet-device\">what is the difference between register_pernet_subsys and register_pernet_device?<\/a><br \/>\n<a href=\"http:\/\/stackoverflow.com\/questions\/4494307\/getting-list-of-network-devices-inside-the-linux-kernel\">Getting list of network devices inside the Linux kernel<\/a><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;linux\/netdevice.h&gt;\r\n\r\nstruct net_device *dev;\r\n\r\ndev = first_net_device(&amp;init_net);\r\nwhile (dev) {\r\n    printk(KERN_INFO &quot;found &#x5B;%s]\\n&quot;, dev-&gt;name);\r\n    dev = next_net_device(dev);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Linux Networking Subsystem, 2004 for Linux Kernel 2.4.18 Linux Kernel Networking (Presentation), 2007 for Linux Kernel 2.6.23 A Map of the Networking Code in Linux Kernel 2.4.20, 2004 O&#8217;Reilly Understanding the Linux Kernel, 3rd Edition, 2005 Understanding Linux Network Internals, 2005 Linux Device Drivers, 3rd Edition, 2005 Oracle Linux: 6.7 About Network Device Drivers linux [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4559","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/4559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4559"}],"version-history":[{"count":12,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/4559\/revisions"}],"predecessor-version":[{"id":4584,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/4559\/revisions\/4584"}],"wp:attachment":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}