This shows you the differences between two versions of the page.
so2:teme:tema4 [2018/02/28 17:32] elena.sandulescu |
so2:teme:tema4 [2020/05/03 22:28] (current) constantin.ghioc [Tema 4 - Transport protocol] |
||
---|---|---|---|
Line 4: | Line 4: | ||
====== Tema 4 - Transport protocol ====== | ====== Tema 4 - Transport protocol ====== | ||
- | * Termen de predare: **Duminică, 17 Mai 2018, ora 23:00 ** | + | * Termen de predare: **Duminică, 17 Mai 2020, ora 23:00 ** |
===== Obiectivele temei ===== | ===== Obiectivele temei ===== | ||
Line 63: | Line 63: | ||
* pentru restul operațiilor vor trebui folosite stub-urile predefinite în kernel (''sock_no_*'') | * pentru restul operațiilor vor trebui folosite stub-urile predefinite în kernel (''sock_no_*'') | ||
+ | <code> | ||
+ | |||
+ | static const struct proto_ops stp_ops = { | ||
+ | .family = PF_STP, | ||
+ | .owner = THIS_MODULE, | ||
+ | .release = stp_release, | ||
+ | .bind = stp_bind, | ||
+ | .connect = stp_connect, | ||
+ | .socketpair = sock_no_socketpair, | ||
+ | .accept = sock_no_accept, | ||
+ | .getname = sock_no_getname, | ||
+ | .poll = datagram_poll, | ||
+ | .ioctl = sock_no_ioctl, | ||
+ | .listen = sock_no_listen, | ||
+ | .shutdown = sock_no_shutdown, | ||
+ | .setsockopt = sock_no_setsockopt, | ||
+ | .getsockopt = sock_no_getsockopt, | ||
+ | .sendmsg = stp_sendmsg, | ||
+ | .recvmsg = stp_recvmsg, | ||
+ | .mmap = sock_no_mmap, | ||
+ | .sendpage = sock_no_sendpage, | ||
+ | }; | ||
+ | |||
+ | </code> | ||
Operațiile pe sockeți folosesc un tip de adrese numit ''sockaddr_stp'', tip definit în [[http://elf.cs.pub.ro/so2/res/teme/stp.h | header-ul temei]]. Pentru operația de //bind// se vor lua în considerare doar portul și indexul interfeței pe care se bind-uiește socketul. Pentru operația de //receive// se vor completa doar câmpurile ''addr'' și ''port'' din structură cu adresa MAC a host-ului care a trimis pachetul și cu portul de pe care a fost trimis. De asemenea, la trimiterea unui pachet, host-ul destinație se va obține din câmpurile ''addr'' și ''port'' ale acestei structuri. | Operațiile pe sockeți folosesc un tip de adrese numit ''sockaddr_stp'', tip definit în [[http://elf.cs.pub.ro/so2/res/teme/stp.h | header-ul temei]]. Pentru operația de //bind// se vor lua în considerare doar portul și indexul interfeței pe care se bind-uiește socketul. Pentru operația de //receive// se vor completa doar câmpurile ''addr'' și ''port'' din structură cu adresa MAC a host-ului care a trimis pachetul și cu portul de pe care a fost trimis. De asemenea, la trimiterea unui pachet, host-ul destinație se va obține din câmpurile ''addr'' și ''port'' ale acestei structuri. | ||
Line 84: | Line 108: | ||
===== Testare ===== | ===== Testare ===== | ||
+ | /* | ||
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 [[http://elf.cs.pub.ro/so2/res/teme/5-stp.zip| teste publice]]. | 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 [[http://elf.cs.pub.ro/so2/res/teme/5-stp.zip| teste publice]]. | ||
Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | Indicații despre utilizarea suitei de teste se găsesc în fișierul ''README'' din cadrul arhivei. | ||
+ | */ | ||
+ | Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul testelor publice care se găsesc în noua infrastructură. Pentru testarea locală folosiți următoarele comezi: | ||
+ | <code bash> | ||
+ | $ git clone https://github.com/linux-kernel-labs/linux.git | ||
+ | $ cd linux/tools/labs | ||
+ | $ LABS=assignments/4-stp make skels | ||
+ | # dezvoltarea temei se va efectua în directorul 4-stp/ | ||
+ | $ make build | ||
+ | $ make copy | ||
+ | $ make boot | ||
+ | </code> | ||
+ | |||
==== tcpdump ==== | ==== tcpdump ==== | ||
Line 121: | Line 158: | ||
==== Notare ==== | ==== Notare ==== | ||
- | Tema valorează un punct. | + | Tema valorează 1.5 puncte. |
==== Depunctări ==== | ==== Depunctări ==== |