]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/dev.h
Queda lo mínimo del DNS implementado. Una prueba simple en una red sin routers
[z.facultad/75.74/practicos.git] / practicas / pipi / src / dev.h
index d0acea653a6a170a099084c740669ea7880c3821..f06e8b12e094838ea235ce097e9427ebecec20d5 100644 (file)
@@ -1,32 +1,42 @@
 #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: