This shows you the differences between two versions of the page.
|
pc:laboratoare:03 [2022/03/15 10:55] radu.ciobanu [Sume de control] Fix weird typo |
pc:laboratoare:03 [2022/03/23 18:33] (current) vlad_andrei.badoiu [Exerciții] |
||
|---|---|---|---|
| Line 27: | Line 27: | ||
| * beginning at location "addr". | * beginning at location "addr". | ||
| */ | */ | ||
| - | register long sum = 0; | + | uint32_t sum = 0; |
| + | /* | ||
| + | Move through the buffer two bytes at the time, | ||
| + | cast the bytes to a number and add them to the sum | ||
| + | */ | ||
| while( count > 1 ) { | while( count > 1 ) { | ||
| /* This is the inner loop */ | /* This is the inner loop */ | ||
| - | sum += * (unsigned short) addr++; | + | sum += * (uint16_t *) addr; |
| + | addr += 2; | ||
| count -= 2; | count -= 2; | ||
| } | } | ||
| Line 37: | Line 41: | ||
| /* Add left-over byte, if any */ | /* Add left-over byte, if any */ | ||
| if( count > 0 ) | if( count > 0 ) | ||
| - | sum += * (unsigned char *) addr; | + | sum += * (uint8_t *) addr; |
| /* Fold 32-bit sum to 16 bits */ | /* Fold 32-bit sum to 16 bits */ | ||
| Line 65: | Line 69: | ||
| </code> | </code> | ||
| * Intercalăm biții de paritate cu cei originali: p1, p2, d1, p3, d2, d3, d4 | * Intercalăm biții de paritate cu cei originali: p1, p2, d1, p3, d2, d3, d4 | ||
| - | <note warning> | ||
| - | d1 ar trebui sa fie mereu cel mai semnificativ bit (MSB) | ||
| - | |||
| - | </note> | ||
| Pentru a corecta o eroare în biții transmiși, trebuie sa calculam sindromul(z), astfel: | Pentru a corecta o eroare în biții transmiși, trebuie sa calculam sindromul(z), astfel: | ||
| * Pornim de la un sir de 7 biți: r1, r2, r3, r4, r5, r6, r7 | * Pornim de la un sir de 7 biți: r1, r2, r3, r4, r5, r6, r7 | ||
| Line 87: | Line 87: | ||
| Pentru laboratorul acesta veți folosi scheletul oferit la adresa: [[https://gitlab.cs.pub.ro/protocoale-de-comunicatie/pcom-laboratoare-public/-/tree/master/lab3|lab3]] | Pentru laboratorul acesta veți folosi scheletul oferit la adresa: [[https://gitlab.cs.pub.ro/protocoale-de-comunicatie/pcom-laboratoare-public/-/tree/master/lab3|lab3]] | ||
| - | 1(5p). In funcția inet_csum din schelet, implementați algoritmul Internet Checksum, asa cum este descris aici [[https://datatracker.ietf.org/doc/html/rfc1071#section-4|Computing the Internet Checksum]]. Verificați ca au fost transmise corect pachetele. **In scriptul ''run_experiment.sh'' avem campurile CORRUPTION care manipuleaza rata de corupere a pachetelor.** | + | 1(5p). In funcția inet_csum din schelet, implementați algoritmul Internet Checksum, asa cum a fost descris in laborator. Verificați ca au fost transmise corect pachetele. **In scriptul ''run_experiment.sh'' avem campurile CORRUPTION care manipuleaza rata de corupere a pachetelor.** |
| 2(3p). In funcția hamming_4to7 din schelet, implementați codarea Hamming, cum a fost descrisa in laborator. Ca input veti primi un byte ce are ultimii 4 biti setati la nibbleul ce trebuie codat, restul bitilor vor fi 0. La output veti returna un byte cu utlimii 7 biti setati la valoare codata a inputului. | 2(3p). In funcția hamming_4to7 din schelet, implementați codarea Hamming, cum a fost descrisa in laborator. Ca input veti primi un byte ce are ultimii 4 biti setati la nibbleul ce trebuie codat, restul bitilor vor fi 0. La output veti returna un byte cu utlimii 7 biti setati la valoare codata a inputului. | ||
| Line 95: | Line 95: | ||
| </note> | </note> | ||
| - | 3(2p). In funcția hamming_7to4 din schelet (in ''common.h''), implementati decodarea Hamming, cum a fost descrisa în laborator Inputul și outputul vor fi interschimbate fata de cele de la exercițiul 1. Deocamdată nu este necesara calcularea sindromului sau corectarea erorilor. | + | 3(2p). In funcția hamming_7to4 din schelet (in ''send.c''), implementati decodarea Hamming, cum a fost descrisa în laborator Inputul și outputul vor fi interschimbate fata de cele de la exercițiul 1. Deocamdată nu este necesara calcularea sindromului sau corectarea erorilor. |
| - | 4(1p). In funcția hamming_7to4 din schelet (in ''common.h''), implementați corectarea erorilor folosind sindromul. Adaugați erori la poziții aleatoare în pachete. Tratând atât cazul în care are loc o eroare pe octet, cat și mai multe. Observați daca checksum-ul încă este corect. | + | 4(1p). In funcția hamming_7to4 din schelet (in ''recv.c''), implementați corectarea erorilor folosind sindromul. Adaugați erori la poziții aleatoare în pachete. Tratând atât cazul în care are loc o eroare pe octet, cat și mai multe. Observați daca checksum-ul încă este corect. |
| <note warning> | <note warning> | ||
| Pentru a depana problemele va recomandam crash course-ul de [[https://ocw.cs.pub.ro/courses/programare/tutoriale/debugging|Debugging]]. | Pentru a depana problemele va recomandam crash course-ul de [[https://ocw.cs.pub.ro/courses/programare/tutoriale/debugging|Debugging]]. | ||
| + | </note> | ||
| + | |||
| + | <note> | ||
| + | O posibila solutie a laboratorului se gaseste [[https://ocw.cs.pub.ro/courses/_media/pc/laboratoare/lab3_sol.zip|aici]] | ||
| </note> | </note> | ||