]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/ipheader.h
Se generaliza el devque para seguir (ab)usándolo como cola y poder pedir de
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipheader.h
1 #ifndef _IPHEADER_H_
2 #define _IPHEADER_H_
3
4 #include "ipaddr.h"
5 #include <string>
6 #include <ostream>
7 #include <stdint.h>
8
9 /// Dispositivo de red (capa de enlace)
10 struct IPHeader
11 {
12
13     // Campos
14     uint8_t version;
15     //TODO IHL
16     //TODO TOS
17     uint16_t total_len;
18     uint16_t id;
19     uint16_t reserved_flag: 1;
20     uint16_t df: 1;
21     uint16_t mf: 1;
22     uint16_t offset: 13;
23     uint8_t ttl;
24     uint8_t proto;
25     uint16_t checksum;
26     uint32_t src;
27     uint32_t dst;
28
29     IPHeader(uint8_t version, uint16_t total_len, uint16_t id, bool df,
30             bool mf, uint16_t offset, uint8_t ttl, uint8_t proto,
31             const IPAddr& src, const IPAddr& dst);
32
33     IPHeader(const std::string& s);
34
35     static size_t header_len();
36
37     bool check_checksum() const;
38
39     void do_checksum();
40
41 };
42
43 std::ostream& operator<<(std::ostream& os, const IPHeader& iph);
44
45 #endif // _IPHEADER_H_
46
47 // vim: set et sw=4 sts=4 :