Socket buffers and other network related information.
[cascardo/kernel/slides/.git] / 15net / net
1 %Network Subsystem
2 %Thadeu Cascardo
3
4 # Socket Buffers
5
6 * include linux/skbuff.h
7 * struct sk\\_buff
8         - struct net\\_device *dev
9 * alloc\\_skb(len, gfp)
10 * dev\\_alloc\\_skb(len) - uses ATOMIC, reserves PAD
11 * netdev\\_alloc\\_skb(netdev, len) - uses ATOMIC, since 2.6.18
12
13 # Diagram
14
15 * head - start of allocated buffer
16 * end - end of allocated buffer
17 * data - start of data, giving space after headroom
18 * tail - end of used space
19 * headroom - space between head and data
20 * tailroom - space between tail and end
21
22 # Socket Buffers operations
23
24 * skb\\_put(skb, len) - adds data to end of skb
25 * skb\\_push(skb, len) - adds data to start of skb
26 * skb\\_pull(skb, len) - allocates headroom
27 * skb\\_headroom and skb\\_tailroom
28 * skb\\_reserve - only allowed for empty buffer, reserves headroom
29 * skb\\_orphan - release it from its socket holder
30         
31
32 # Changes in net device
33
34 * Use netdev\\_priv, no priv anymore
35 * struct net\\_device\\_ops introduced in 2.6.29, with compatibility provided
36   for drivers
37 * Compatibility removed in 2.6.31
38 * netdev\\_tx\\_t: NETDEV\\_TX\\_OK, NETDEV\\_TX\\_BUSY, NETDEV\\_TX\\_LOCKED
39
40 # Other recent changes
41
42 * Some members moved to netdev\\_queue to increase cache-line usage
43 * GRO/GSO
44 * Multi-queue support
45 * RPS - Packet Steering