[so2] Ixia Challenge - intrebari alloc_netdev

Adrian Stanciu adrian.stanciu.pub at gmail.com
Mon Mar 13 21:03:48 EET 2017


2017-03-13 11:52 GMT+02:00 Matei Oprea via so2 <so2 at cursuri.cs.pub.ro>:
> Hello,

Salut,

>
> Am si eu o intrebare legata de alloc_netdev [0]. Am ales sa inregistrez asa
> device-ul in retea. Dupa cum se poate vedea, primeste 3 argumente dintre
> care ultimul este un callback.
>
> Toate bune si frumoase dar am 2 probleme cu functia asta:
>
> 1. Primesc eroare cum ca are nevoie de 4 argumente, nu 3 cum e trecut in
> documentatie. Vad ca asta e un bug de pe vremea cand kernelul era la vers
> 3.4, din cate m-am documentat. Versiunea de kernel locala e 4.6.7. Distro-ul
> e Fedora. De asemenea, vad ca si vm-ul vostru ruleaza tot 4.ceva ...
>
> Inca n-am gasit vreo rezolvare pentru chestia asta, poate are cineva vreo
> idee.

Îți recomand să compilezi direct pentru kernelul 4.9.11, cel
configurat în mașina virtuală SO2 [3].
Astfel nu vei fi nevoit să portezi la final implementarea ta pentru
kernelul folosit de vmchecker.

Iar testarea să o faci tot în mașina virtuală.

> 2. Practic, ca sa initializez device-ul ar trebui sa-i pasez in functia de
> probe, o referinta la pci_dev din argumentele pe care le primeste functia de
> probe, right [1][2] ? Daca da, cum pot sa fac asta in callback-ul de la
> alloc_netdev? Pentru ca callback-ul primeste un struct net_device *dev si
> atat...

Aici îți recomand să folosești alloc_etherdev [4]. Este simplu și
corect. Poți să urmărești cum e folosit în implementarea oficială e100
[5].

alloc_etherdev întoarce un pointer la un struct net_device și primește
ca parametru size-ul unei structuri definite de tine (acel struct
nic). În struct nic-ul tău poți să ții ce date ai nevoie (printre care
și un pointer la struct pci_dev). struct nic reprezintă datele private
ale struct net_device (vezi netdev_priv [6]).

> Thanks :)
>
> [0] - https://www.fsl.cs.sunysb.edu/kernel-api/re640.html
> [1] -
> http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L569
> [2] -
> http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L2858
> --

[3] https://ocw.cs.pub.ro/courses/so2/resurse/masini-virtuale
[4] http://lxr.free-electrons.com/source/include/linux/etherdevice.h#L54
[5] http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L2843
[6] http://lxr.free-electrons.com/source/drivers/net/ethernet/intel/e100.c#L2855

Adrian


More information about the so2 mailing list