mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-13 14:36:37 -04:00
Fixes memory issues with network interface
When the vector grows, it invalidates the network interface pointers
This commit is contained in:
parent
b2f77b6036
commit
54a5669fad
@ -15,6 +15,7 @@
|
||||
namespace loopback {
|
||||
|
||||
void init_driver(network::interface_descriptor& interface);
|
||||
void finalize_driver(network::interface_descriptor& interface);
|
||||
|
||||
} //end of namespace loopback
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user