]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi-2da-entrega/src/dev.h
Tag de 2da entrega.
[z.facultad/75.74/practicos.git] / practicas / pipi-2da-entrega / src / dev.h
1 #ifndef _DEV_H_
2 #define _DEV_H_
3
4 #include <stdexcept>
5
6 #define DEV_MAX_MTU 1500
7
8 /// Dispositivo de red (capa de enlace)
9 struct Dev
10 {
11
12     /// Tipo de la mac
13     typedef long mac_type;
14
15     /// Dirección MAC
16     mac_type mac;
17
18     /// MTU
19     size_t mtu;
20
21     /// Constructor
22     Dev(mac_type mac, size_t mtu = DEV_MAX_MTU)
23         throw (std::runtime_error, std::logic_error):
24             mac(mac), mtu(mtu)
25     {
26         if (mtu > DEV_MAX_MTU)
27             throw std::logic_error("MTU más grande que DEV_MAX_MTU");
28     }
29
30     /// Envía un frame
31     virtual void transmit(const std::string& data, const mac_type& mac)
32         throw (std::runtime_error, std::logic_error) = 0;
33
34     /// Recibe un frame
35     virtual std::string receive()
36         throw (std::runtime_error) = 0;
37
38     /// Destructor virtual por si las moscas
39     virtual ~Dev() {}
40
41     // Nada de andar copiando placas...
42     private:
43     Dev(const Dev&);
44     Dev& operator=(const Dev&);
45
46 };
47
48 #endif // _DEV_H_
49
50 // vim: set et sw=4 sts=4 :