Fixes memory issues with network interface

When the vector grows, it invalidates the network interface pointers
This commit is contained in:
Baptiste Wicht 2016-09-09 17:42:59 +02:00
parent b2f77b6036
commit 54a5669fad
5 changed files with 23 additions and 5 deletions

View File

@ -15,6 +15,7 @@
namespace loopback {
void init_driver(network::interface_descriptor& interface);
void finalize_driver(network::interface_descriptor& interface);
} //end of namespace loopback

View File

@ -17,6 +17,7 @@
namespace rtl8139 {
void init_driver(network::interface_descriptor& interface, pci::device_descriptor& pci_device);
void finalize_driver(network::interface_descriptor& interface);
} //end of namespace rtl8139

View File

@ -45,12 +45,14 @@ void send_packet(network::interface_descriptor& interface, network::ethernet::pa
void loopback::init_driver(network::interface_descriptor& interface){
logging::logf(logging::log_level::TRACE, "loopback: Initialize loopback driver\n");
loopback_t* desc = new loopback_t();
desc->interface = &interface;
interface.driver_data = desc;
interface.driver_data = new loopback_t();
interface.hw_send = send_packet;
interface.ip_address = network::ip::make_address(127, 0, 0, 1);
//TODO interface.mac_address = mac;
}
void loopback::finalize_driver(network::interface_descriptor& interface){
auto* desc = static_cast<loopback_t*>(interface.driver_data);
desc->interface = &interface;
}

View File

@ -229,7 +229,6 @@ void rtl8139::init_driver(network::interface_descriptor& interface, pci::device_
logging::logf(logging::log_level::TRACE, "rtl8139: Initialize RTL8139 driver on pci:%u:%u:%u\n", uint64_t(pci_device.bus), uint64_t(pci_device.device), uint64_t(pci_device.function));
rtl8139_t* desc = new rtl8139_t();
desc->interface = &interface;
interface.driver_data = desc;
interface.hw_send = send_packet;
@ -327,3 +326,8 @@ void rtl8139::init_driver(network::interface_descriptor& interface, pci::device_
logging::logf(logging::log_level::TRACE, "rtl8139: MAC Address %h \n", mac);
}
void rtl8139::finalize_driver(network::interface_descriptor& interface){
auto* desc = static_cast<rtl8139_t*>(interface.driver_data);
desc->interface = &interface;
}

View File

@ -162,6 +162,16 @@ void network::init(){
loopback::init_driver(interface);
sysfs_publish(interface);
for(auto& interface : interfaces){
if(interface.enabled){
if(interface.driver == "loopback"){
loopback::finalize_driver(interface);
} else if(interface.driver == "rtl8139"){
rtl8139::finalize_driver(interface);
}
}
}
}
void network::finalize(){