mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-13 22:47:15 -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 {
|
namespace loopback {
|
||||||
|
|
||||||
void init_driver(network::interface_descriptor& interface);
|
void init_driver(network::interface_descriptor& interface);
|
||||||
|
void finalize_driver(network::interface_descriptor& interface);
|
||||||
|
|
||||||
} //end of namespace loopback
|
} //end of namespace loopback
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
namespace rtl8139 {
|
namespace rtl8139 {
|
||||||
|
|
||||||
void init_driver(network::interface_descriptor& interface, pci::device_descriptor& pci_device);
|
void init_driver(network::interface_descriptor& interface, pci::device_descriptor& pci_device);
|
||||||
|
void finalize_driver(network::interface_descriptor& interface);
|
||||||
|
|
||||||
} //end of namespace rtl8139
|
} //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){
|
void loopback::init_driver(network::interface_descriptor& interface){
|
||||||
logging::logf(logging::log_level::TRACE, "loopback: Initialize loopback driver\n");
|
logging::logf(logging::log_level::TRACE, "loopback: Initialize loopback driver\n");
|
||||||
|
|
||||||
loopback_t* desc = new loopback_t();
|
interface.driver_data = new loopback_t();
|
||||||
desc->interface = &interface;
|
|
||||||
|
|
||||||
interface.driver_data = desc;
|
|
||||||
interface.hw_send = send_packet;
|
interface.hw_send = send_packet;
|
||||||
|
|
||||||
interface.ip_address = network::ip::make_address(127, 0, 0, 1);
|
interface.ip_address = network::ip::make_address(127, 0, 0, 1);
|
||||||
//TODO interface.mac_address = mac;
|
//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));
|
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();
|
rtl8139_t* desc = new rtl8139_t();
|
||||||
desc->interface = &interface;
|
|
||||||
|
|
||||||
interface.driver_data = desc;
|
interface.driver_data = desc;
|
||||||
interface.hw_send = send_packet;
|
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);
|
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);
|
loopback::init_driver(interface);
|
||||||
|
|
||||||
sysfs_publish(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(){
|
void network::finalize(){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user