This is an old revision of the document!
Să se scrie un driver pentru placa de rețea Intel 82559ER (device întâlnit şi sub numele de e100 sau eepro100). Modulul va trebui să suporte cele două device-uri de rețea configurate în maşina virtuală qemu. Specificațiile acestora le găsiți în următoarele documente:
Nu va trebui să ciți în întregime documentele de mai sus, ci doar secțiunile indicate în enunț.
struct pci_driver
şi inițializați următoarele câmpuri.name
- numele driverului, acesta va fi inițializat cu valoarea e100-ix
.id_table
- structură care identifică unic deviceul e100 în sistem. Vendor ID şi device ID vor fi găsite în secțiunea 4 din manualul dezvoltatorului..probe
- funcție apelată de subsystemul PCI din kernel atunci când în urma parcurgerii device-urilor din sistem se va găsi un device cu identitatea dată de .id_table
..remove
- funcție apelată atunci când driver-ul sau device-ul sunt scoase din sistem.init
a modulului înregistrați structura pci_driver
. Operația aceasta va avea ca efect apelarea funcției probe
exit
a modului deînregistrați structura pci_driver
. Operația aceasta va avea ca efect apelarea funcției remove
ixeth0
, respectiv ixeth1
)probe
) atunci când se descoperă un device de rețea pe magistrala PCIalloc etherdev
pentru a aloca memoriendo_open
, ndo_stop
şi ndo_start_xmit
din câmpul netdev_ops
register_netdev
pentru înregistrareremove
) atunci când device-ul sau modulul sunt înlăturateunregister_netdev
pentru deînregistrarefree_netdev
pentru eliberare de memorie.ndo_start_xmit
e100
copiază datele într-o zonă DMA şi generează o întrerupere pentru a informa procesorul de sosirea unui nou pachet.Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul unor teste publice.
Pentru a vă mări șansele de a obține nota maximă, citiți și respectați coding style-ul kernelului Linux descris din documentul Coding Style.
De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul:
/path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/src-file.c
sudo apt-get install sparse
cd /path/to/linux-4.9.11 make C=2 /path/to/your/src-file.c
sudo apt-get install cppcheck
cppcheck /path/to/your/src-file.c
Tema valorează 2 puncte şi intră în competiția Ixia Challenge dacă se trimite până la data Duminică, 26 Martie 2017, ora 23:00. După această dată tema valoreaza 1 punct minus depunctarea pentru întârziere.
Depunctările generale pentru teme se găsesc pe pagina de Indicații generale.
În cazuri excepționale (tema trece testele prin nerespectarea cerințelor) și în cazul în care tema nu trece toate testele se poate scădea mai mult decât este menționat mai sus.
Arhiva temei va fi submisă pe vmchecker, în conformitate cu precizările din pagina de reguli.
Din interfața vmchecker alegeți opțiunea Ixia Challenge - e100
, aferentă acestei teme.
dev_addr
din structura net_device
înaintea înregistrării netdevice-ului în kernel (register_netdevice
) în funcția probe
.Pentru întrebări legate de temă puteți consulta arhivele listei de discuții sau puteți trimite un e-mail (trebuie să fiți înregistrați).