#ifndef _DEV_H_
#define _DEV_H_
-#include "frame.h"
-#include "media.h"
#include <stdexcept>
+#define DEV_MAX_MTU 1500
+
/// Dispositivo de red (capa de enlace)
struct Dev
{
+ /// Tipo de la mac
+ typedef long mac_type;
+
/// Dirección MAC
- Frame::mac_type mac;
+ mac_type mac;
- /// Medio físico
- Media& media;
+ /// MTU
+ size_t mtu;
/// Constructor
- Dev(const Frame::mac_type& mac, Media& media):
- mac(mac), media(media)
- {}
+ Dev(mac_type mac, size_t mtu = DEV_MAX_MTU)
+ throw (std::runtime_error, std::logic_error):
+ mac(mac), mtu(mtu)
+ {
+ if (mtu > DEV_MAX_MTU)
+ throw std::logic_error("MTU más grande que DEV_MAX_MTU");
+ }
/// Envía un frame
- void send(const Frame& frame) throw (std::runtime_error)
- { media.transmit(frame); }
+ virtual void transmit(const std::string& data, const mac_type& mac)
+ throw (std::runtime_error, std::logic_error) = 0;
/// Recibe un frame
- void recv(Frame& frame) throw (std::runtime_error)
- { media.receive(frame); }
+ virtual std::string receive()
+ throw (std::runtime_error) = 0;
+
+ /// Destructor virtual por si las moscas
+ virtual ~Dev() {}
// Nada de andar copiando placas...
private: