Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
pc/laboratoare/03.1647334506.txt.gz · Last modified: 2022/03/15 10:55 by radu.ciobanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0