X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;ds=sidebyside;f=15net%2Fnet;h=0a3d40310116f554e0cb9ce0e6e32bfab2c499ac;hb=6fc670e3b167d4e412e44f6fb909df0ad7ff0421;hp=88907c93cc04492e048484680ecf2ce2e0e98170;hpb=ca9630fd6c5da2f223f2086318e6aac0ac00f22a;p=cascardo%2Fkernel%2Fslides%2F.git diff --git a/15net/net b/15net/net index 88907c9..0a3d403 100644 --- a/15net/net +++ b/15net/net @@ -9,6 +9,7 @@ * alloc\\_skb(len, gfp) * dev\\_alloc\\_skb(len) - uses ATOMIC, reserves PAD * netdev\\_alloc\\_skb(netdev, len) - uses ATOMIC, since 2.6.18 +* kfree\\_skb, dev\\_kfree\\_skb # Diagram @@ -27,7 +28,65 @@ * skb\\_headroom and skb\\_tailroom * skb\\_reserve - only allowed for empty buffer, reserves headroom * skb\\_orphan - release it from its socket holder - + +# Network Device + +* include linux/netdevice.h +* struct net\\_device + - char name[] + - features + - stats + - netdev\\_ops + - ethtool\\_ops + - header\\_ops + - flags + - mtu + - type + - hard\\_header\\_len + +# Network Device Setup + +* alloc\\_netdev(szpriv, name, setup) +* setup function +* include linux/etherdevice.h +* ether\\_setup +* alloc\\_etherdev +* register\\_netdev +* unregister\\_netdev +* free\\_netdev + +# Network Device Operations + +* struct net\\_device\\_ops +* ndo\\_init +* ndo\\_open + - should call netif\\_start\\_queue +* ndo\\_stop + - should call netif\\_stop\\_queue + +# Network Device Address + +* struct net\\_device + - dev\\_addr +* random\\_ether\\_addr +* struct net\\_device\\_ops + - ndo\\_set\\_mac\\_address +* eth\\_mac\\_addr + +# Transmission + +* ndo\\_start\\_xmit +* called with a held lock + +# Limits on transmission + +* When TX buffers are full, xmit may call netif\\_stop\\_queue +* Should arrange to get netif\\_wake\\_queue called after TX buffers are free + again + +# Transmission timeout + +# NAPI # Changes in net device