Understanding Linux Network Internals by Christian Benvenuti This errata page lists errors corrected in the 5/08 printing. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification (14) 3rd par Because of the waste cause by looping ... should be Because of the waste caused by looping ... [39] code line above "Cloning and copying buffers" skb_shinfo(skb)->dataref++; should be skb_shinfo(skb)->nr_frags++; {40} Figure 2-9; Interchange sk_shinfo(clone) and sk_shinfo(skb (42) Code at bottom of page; ___function_name should be __function_name [47] unsigned char addr_len, line 3; Ethernet addresses are 6 octets long. 8 should be: 6 (51) 3rd paragraph; all_multi should be allmulti (57) figure 2-11; One of the directories, listed in the figure reads "kernal", but that should be "kernel". (68) Figure 3-3; sysctel_jiffies should be sysctl_jiffies sysctel_local_port_range should be sysctl_local_port_range sysct1_local_port_range should be sysctl_local_port_range (69) Figure 3-4; SIOC S DEL DLCI should be SIOC DEL DLCI {76} Figure 4-2; The connection from Network A to Network F is not shown.There is one line missing between Network F and Network A (it would be a line like the one between Network E and Network F). (93) First call of module_param(); module_param(multicast_filter_limit, int 0444); should be module_param(multicast_filter_limit, int, 0444); (97) Figure 5-3.; request_model should be request_module. Under request_module, arg[i] should be arg[1]. Under /sbin/modprobe, insmod3c59x should be "insmod 3c59x". (98) kmod bullet 1 line 4; prorobe.conf should be modprobe.conf. (131) 12th line from the bottom; However, a few architectures discard it a runtime... should be However, a few architectures discard it at runtime... {140} Figure 8-1 (a); the second call of alloc_etherdev() should be alloc_netdev() (144) Footnote +; In line 2, "habit" should be "habitat". (150) Split Operations: netdev_run_todo last line of first paragraph after head; reference to Figure 8-4 should be 8-5(a) (150) Figure 8-4; dev->unit should be dev->uninit "dev->destruct or" should be dev->destructor (160) Figure 8-6; The transision [Send notification]-> should not be labeled with the word "no." (164) Figure 8-7; kevent_wq should be keventd_wq (167) Figure 8-8; The second ocurrence of SIOCGMIIREG should be SIOCSMIIREG The first ocurrence of SIOCGMIIRG should be SIOCGMIIREG The second ocurrence of SIOCGMIIRG should be SIOCSMIIREG (168) Last line of first paragraph; 8-9 should be 8-8. (178) Line 2 of paragraph 3; "the does" should be "does". {183} 2nd paragraph; "vortex_interrupt keeps processing incoming frames until the register says..." should be "vortex_interrupt keeps processing incoming frames as long as the register says..." (192) do_IRQ line 3; "transmission" should be "execution" (194) raise_softirq_irqoff line 1; __cpu_raise_softirq should be __raise_softirq_irqoff {195} line 30 (including lines of code); "(there are no softirqs pending, etc.)" should be: "(there are softirqs pending, etc.)" (204) Talklet Processing, line 1; "low-latency" should be "low-priority". "high-latency" should be "high-priority". {209} First line of last paragraph.; softnet_data->blog_dev should be softnet_data.backlog_dev (211) Line 3 of last paragraph.; open should be opened (216) Figure 10-1; _LINK_STATE_RX_SCHED should be __LINK_STATE_RX_SCHED (220) in Figure 10-3 NETROLL should be NETPOLL and Move cpu out of the throttling stats should be Move cpu out of the throttling state (233) Figure 10-6; refont should be reference count (232) First line of last paragraph.; dev->quota should be backlog_dev->quota (237) Line 4 of fourth paragraph from the bottom; above should be upper (238) bullet 1; L4 should be L3 (240) Figure 11-1 (a); (__LINK_STATE_RX_SCHED)) should be (__LINK_STATE_RX_SCHED) (240) Figure 11-1 (b): engress should be egress {244} 1st paragraph; .., output_queue is used by both NAPI and non-NAPI devices, and poll_list is used only to handle NON-NAPI devices should be .., output_queue is used by both NAPI and non-NAPI devices, and poll_list is used only to handle NAPI devices [250] 2nd bullet in middle of page; "In this case, the function does not actually fail, but generates a warning with a call to BUG()" should be "In this case, the BUG macro is invoked, leading to a kernel panic" (254) Figure 11-4 (b); netif_x should be netif_rx (268) 5th(?) paragraph - near middle of the page; In "...and Ethereal are common users of AF_SOCKET sockets.", AF_SOCKET should be AF_PACKET [273] Figure 13-4 (occurs twice in figure); Dst MAC-00:20.... should be Dst MAC=00:20... (281) Last line of last paragraph; isdiscussed should be is discussed (283) Figure 13-8 (a), Protocol field; 1534 should be 1536 (284) last paragraph (above 1st bullet); "The two most significant bits of the first byte..." should read "The two least significant bits of the first byte..." (305) 3rd paragraph; In the sentence "...from Bridge 1's perspective, Hosts A, B, C and D are all located in LAN2,..." Bridge 1 should be: Bridge 2 (308) Last paragraph, line 5.; 14-8 should be 14-9 {324} Figure 15-8(b) caption.; BPDU should be TCN BPDU (347) Ingress BPDUs, paragraph 2, line 2.; Figure 15-7 should be Figure 15-8 (351) 2nd-to-last bullet, line 2; old, disabled should be old disabled (361) Paragraph 1, line 3.; Ethernel should be Ethernet (371) Figure 16-11; ENGRESS should be EGRESS (377) Figure 16-12; E thernet should be Ethernet (385) br_transmit_config line 2; ...in Chapter 15." should be ...in Chapter 15. {390} NETDEV_UP, line 2.; br_stp_enabled_port should be br_stp_enable_port {395} Table 17-3, argument for showstp; BRCTL_SET_BRIDGE_INFO should be BRCTL_GET_BRIDGE_INFO {397} CLASS_DEV_ATTR line; S_IURGO should be S_IRUGO {398} BRPORT_ATTR line; S_IURGO should be S_IRUGO (432) Checksums, line 2; Some checksums cannot only detect errors... should be Some checksums can not only detect errors... (444) third bullet from the top; (see the section ?Long-Living IP Peer Information? in Chapter 23. should be (see the section ?Long-Living IP Peer Information? in Chapter 23). [451] line 1 and 2; 'See the section "Local Delivery" in Chapter 20 should be ...in Chapter 35 {452} Paragraph 2, line 2.; ip_option should be ip_options {471} ip_forward_finish line 5; if (unlikely(opt->optlen) { should be if (unlikely(opt->optlen) ) (490) Figure 21-7; X+S1+S2<+PMTU should be X+S1+S2<=PMTU (491) Figure 21-8; dala_len should be data_len (493) Further handling of the buffers, paragraph 1, line3; sw_write_queue should be sk_write_queue (500) Figure 21-11.; MSG_MOER should be MSG_MORE (506) Figure 21-12(b); ip_push_peinding_frames caller should be ip_push_peinding_frame's caller (517) Line 1 of 3rd displayed block of code; sk2 should be skb2 (524) Line4 from the bottom; Last Recently Used (LRU) should be Least Recently Used (LRU) (531) Last line above Figure 22-2.; both F3 and F4 (which is completely included). should be both F3 (which is completely included) and F4. (536) Last line of paragraph 2; base should be basis {537} Line 5 of bullet 2.; the most recently used should be the least recently used (539) Figure 23-1; Delete the "No" above "Is the Create flag set?", and add a "Yes" below. (542) Paragraph 2, line 3.; IPSTATS_MIX_XXX should be IPSTATS_MIB_XXX (553) Table 23-2; ipfrag_high_tresh should be ipfrag_high_thresh and ipfrag_low_tresh should be ipfrag_low_thresh (556) Figure 23-3; skhuff.h should be skbuff.h (577) Paragraph 2, line 7.; The figure also shows that... should be Figure 24-4 also shows that... (581) Paragraph 4, line 8.; traceroute, which needs to plays with... should be traceroute, which needs to play with... (581) Last paragraph, line 1.; ...and the ones used to store... should be ...and the one used to store... (592) Bottom of page; Add: 5. Router RT2 forwards the packet to Host Y. (592) Figure 25-3; (2) should be (3) (3) should be (4) (4) should be (5) Add (2) to the right of the icon for Router RT1. {593} ICMP_TIME_EXCEEDED paragraph 2, line 3.; The intermediate host that drops the packet... should be The intermediate router that drops the packet... (610) Paragraph 2, line 1; xlim_allow should be xrlim_allow (615) Figure 25-13; Low Warning Message should be Log Warning Message (615) Figure 25-13; Delete the "Yes" on the arrow out of [Deliver ICMP to raw IP sockets]. (619) ICMP_MIB_INXXX, ICMP_MIB_OUTXXX; there is one per-ICMP should be there is one per ICMP (631) Line 3.; CMSA/CD should be CSMA/CD (658) Paragraph 4, line 4.; "Figure 26-12" should be "Figure 26-13". {658} Figure 27-4; The arrow pointing from NUD_STALE to NUD_REACHABLE should actually point the other way around (from NUD_REACHABLE to NUD_STALE). (661) Last line.; the section "Final Common Processing in Chapter 28). should be the section "Final Common Processing" in Chapter 28). (662) 2nd line NEIGH_UPDATE_ISROUTER Should be NEIGH_UPDATE_F_ISROUTER (663) Figure 27-5(a), block b.; NUD_VALUE should be NUD_VALID (681) Figure 27-9, top left; Form? should be From? (681) Figure 27-9, lower middle; proxy_len should be proxy_qlen [692] 5th paragraph, 1st sentence; "The input skb buffer, ip_finish_output2, includes the packet data..." should read "The skb buffer input to ip_finish_output2, includes the packet data..." or "The input skb buffer includes the packet data..." (694) Figure 27-13(a), lower left; dst->hh (neigh hh init) should be dst->hh (neigh_hh_init) (707) Figure 28-5 (error occurs in three places); AROP_ should be ARPOP_ (712) First line of last paragraph.; HostC should be Host C (721) Last line of first displayed source code.; Delete the final #endif (742) Bullet (b), line 1 of paragraph 2; A2 should be A (742) Bullet (b), line 3 of paragraph 3.; accordingly to should be according to (744) ARPD, line 3.; system performances should be system performance (745) First entry under Kernel Side; neigh_apps_ns should be neigh_app_ns (745) Figure 28-22 (error occurs in two places); RTN_ should be RTM_ (747) Figure 28-23 (error occurs in two places); RTN_ should be RTM_ (759) unsigned long confirmed, last line.; ...described in . should be ...described in "Updating a Neighbor's Information: neigh_update" in Chapter 27. (762) int entry_size, line 2.; ...includes a field whose size depends on the protocol (primary_key), should be ...includes a field (primary_key) whose size depends on the protocol, (813) Figure 31-5(c); In the last line of the ip route add command, 10.0.0.2.1 should be 10.0.2.1 (849) Figure 32-6.; The No branch of "Have all next hops been marked DEAD?" is not labeled. (885) First line.; "is" should be "is not". (893) Bullet 2, line 4.; "any" should be "an". (898) Bullet 4, line 1.; "indegiven" should be "given". (934) Figure 35-8(b) caption.; p_route_output_slow should be ip_route_output_slow. (961) Footnote +, line 5.; "where as" should be "whereas". (982) metrics, paragraph 2, line 3.; "options" should be "option".