]> git.llucax.com Git - z.facultad/75.74/practicos.git/commitdiff
Arreglado bug del MTU. TP moralmente finalizado.
authorLeandro Lucarella <llucax@gmail.com>
Fri, 2 Jun 2006 06:31:51 +0000 (06:31 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 2 Jun 2006 06:31:51 +0000 (06:31 +0000)
practicas/pipi/src/dev.cpp
practicas/pipi/src/dev.h
practicas/pipi/src/ipin.cpp
practicas/pipi/src/ipout.cpp
practicas/pipi/src/test_ipin.cpp
practicas/pipi/src/test_ipout.cpp

index 494d1887f78c9259f775820d881ba70e0ed8c999..932df00036d3f9f9a93075fa80809efc872ea1c3 100644 (file)
@@ -16,9 +16,12 @@ struct Frame
     char frame[1];
 };
 
-Dev::Dev(mac_type mac, size_t mtu, key_t key) throw (std::runtime_error):
+Dev::Dev(mac_type mac, size_t mtu, key_t key)
+    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");
     que_id = msgget(key, 0666); // Debe estar previamente creada
     if (que_id == -1)
         throw std::runtime_error("No se pudo crear la cola");
@@ -38,7 +41,7 @@ void Dev::transmit(const std::string& data, const mac_type& mac)
     int res = msgsnd(que_id, f, mtu + sizeof(size_t), 0);
 #ifdef DEBUG
     std::cout << "Dev::transmit(msgtype/mac = " << f->mac << ", size = "
-        << f->size << ", data = " << f->frame << ")\n";
+        << f->size << ")\n";
 #endif
     free(f);
     if (res == -1)
@@ -60,7 +63,7 @@ std::string Dev::receive() throw (std::runtime_error)
     free(f);
 #ifdef DEBUG
     std::cout << "Dev::receive(msgtype/mac = " << mac << ", size = "
-        << s.size() << ", data = " << s << ")\n";
+        << s.size() << ")\n";
 #endif
     return s;
 }
index f8bd771719dbfeb16aac3e8f0abac0ef01b60551..129f78f94eb4e716ec7b45a335111ca1905e290c 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdexcept>
 
 #define DEV_DEFAULT_KEY 0x1abcdef1
+#define DEV_MAX_MTU 1500
 
 /// Dispositivo de red (capa de enlace)
 struct Dev
@@ -22,8 +23,8 @@ struct Dev
     int que_id;
 
     /// Constructor
-    Dev(mac_type mac, size_t mtu = 1500, key_t key = DEV_DEFAULT_KEY)
-        throw (std::runtime_error);
+    Dev(mac_type mac, size_t mtu = DEV_MAX_MTU, key_t key = DEV_DEFAULT_KEY)
+        throw (std::runtime_error, std::logic_error);
 
     /// Envía un frame
     void transmit(const std::string& data, const mac_type& mac)
index a9029c67c14b994b502f9100117ee5cd70340bb7..55bc85626cf086b438b1c4b7cd1a8e591a268b06 100644 (file)
@@ -36,6 +36,8 @@ std::string IPIn::recv(uint8_t proto, IPAddr& src, IPAddr& dst) throw (std::runt
         IPHeader iph(buf);
 #ifdef DEBUG
         log << "IPIn::recv: IPHeader: " << iph << "\n";
+        std::string tmp = buf.substr(iph.header_len());
+        log << "\tdata (" << tmp.size() << ") = " << tmp << "\n";
 #endif
         if (iph.version != 4)
         {
index cf5c28c905a23a895316a89e9435d89a6f371815..3e8dadc899ae045a388d5f2d1f48c5ec522df62c 100644 (file)
@@ -35,7 +35,7 @@ bool IPOut::send(const std::string& data, uint8_t proto, IPAddr dst, IPAddr src,
         std::string buf = forward_que.receive();
         IPHeader iph(buf);
 #ifdef DEBUG
-        log << "IPOut::send: A forwardear => IPHeader: " << iph << "\n";
+        log << "IPOut::send: A forwardear\n";
 #endif
         send(iph, buf.substr(iph.header_len()));
     }
@@ -83,7 +83,8 @@ bool IPOut::send(IPHeader iph, std::string data) throw (std::runtime_error)
         buf += data.substr(i * max_payload, max_payload);
 #ifdef DEBUG
         log << "IPOut::send: Fragmento 0 => IPHeader: " << iph2 << "\n";
-        log << "\tbuf (" << buf.size() << ") = " << buf << "\n";
+        std::string tmp = data.substr(i * max_payload, max_payload);
+        log << "\tdata (" << tmp.size() << ") = " << tmp << "\n";
 #endif
         r->iface->transmit(buf, r->gateway ? r->gateway : IPAddr(iph.dst));
     }
index a3c8e5f186268ec85de6c232a8b5bb6f562c3b25..1d21ab6a3942d3062ba0f10d57a3c6f3b45d574f 100644 (file)
@@ -35,7 +35,7 @@ int main(int argc, char* argv[])
     Dev dev(addr, mtu, queue_id);
     int que_id = msgget(queue_id+1, IPC_CREAT | 0666);
     assert(que_id != -1);
-    Dev fwque(addr, mtu, queue_id+1);
+    Dev fwque(addr, DEV_MAX_MTU, queue_id+1);
     IPIn ipin(addr, dev, fwque, router, forward);
     struct msqid_ds minfo;
     for (msgctl(dev.que_id, IPC_STAT, &minfo); minfo.msg_qnum;
index ec4430f63fe5b48d0297494aa49590c629d90c47..1dd289ff6d48fa0afe15bb94c8dfdab844c18d0a 100644 (file)
@@ -42,7 +42,7 @@ int main(int argc, char* argv[])
     que_id = msgget(queue_id+1, IPC_CREAT | 0666); assert(que_id != -1);
     std::ifstream ifs(fname.c_str()); assert(ifs);
     Dev dev(addr, mtu, queue_id);
-    Dev fwque(addr, mtu, queue_id+1);
+    Dev fwque(addr, DEV_MAX_MTU, queue_id+1);
     RouteTable table(dev);
     add_routes(table, ifs, dev);
     IPOut ipout(addr, table, fwque);