[so2] Ixia Challenge - intrebari alloc_netdev

Matei Oprea eu at opreamatei.ro
Tue Mar 14 23:58:14 EET 2017


2017-03-13 21:03 GMT+02:00 Adrian Stanciu <adrian.stanciu.pub at gmail.com>:

> 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
>


Mersi frumos, o sa incerc sa folosesc alloc_etherdev atunci. Sa stii ca
folosesc kernelul vostru pentru compilare. Tot nu vrea. :) Anyways, nu mai
face sens in cazul in care folosesc alloc_etherdev.

-- 
Oprea Matei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20170314/a1c16ec8/attachment.html>


More information about the so2 mailing list