X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/3de68addc94548e2191d83b7aa4ebec21957391e..1a2bb56c4c44080e941e6a7dc2420a404bceba5b:/practicas/pipi/src/dev.h?ds=inline diff --git a/practicas/pipi/src/dev.h b/practicas/pipi/src/dev.h index d0acea6..f06e8b1 100644 --- a/practicas/pipi/src/dev.h +++ b/practicas/pipi/src/dev.h @@ -1,32 +1,42 @@ #ifndef _DEV_H_ #define _DEV_H_ -#include "frame.h" -#include "media.h" #include +#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: