]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/ethernetframe.h
12052026bd61bf9739b16b1a7e3d4820f26439b8
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ethernetframe.h
1 #ifndef _ETHERNETFRAME_H_
2 #define _ETHERNETFRAME_H_
3
4 #include "frame.h"
5 #include <string>
6 #include <stdexcept>
7
8 /// Frame de la capa física (en este caso es un mensaje enviado a una cola)
9 template < size_t Size = 1500 >
10 struct EthernetFrame: Frame
11 {
12
13     // Atributos
14     mac_type _mac;
15     size_t _len;
16     char _frame[Size];
17
18     /// Constructor
19     EthernetFrame(const mac_type& mac):
20         _mac(mac)
21     {}
22
23     /// Constructor
24     EthernetFrame(const mac_type& mac, const std::string& d)
25         throw (std::logic_error): _mac(mac)
26     { data(d); }
27
28     /// Setea MAC
29     void mac(const mac_type& mac)
30     { _mac = mac; }
31
32     /// Obtiene MAC
33     mac_type mac() const
34     { return _mac; }
35
36     /// Obtiene longitud
37     size_t len() const
38     { return _len; }
39
40     /// Obtiene tamaño
41     size_t size() const
42     { return Size; }
43
44     /// Setea datos
45     void data(const std::string& d) throw (std::logic_error)
46     {
47         if (d.size() > Size)
48             throw std::logic_error("dato más grande que el frame");
49         _len = d.size();
50         memcpy(_frame, d.c_str(), _len);
51     }
52
53     /// Obtiene datos
54     std::string data() const
55     { return _frame; }
56
57 };
58
59 #endif // _ETHERNETFRAME_H_
60
61 // vim: set et sw=4 sts=4 :