mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-13 06:29:47 -04:00
ifconfig program
This commit is contained in:
parent
54a5669fad
commit
2ad062c464
14
programs/ifconfig/Makefile
Normal file
14
programs/ifconfig/Makefile
Normal file
@ -0,0 +1,14 @@
|
||||
.PHONY: default clean
|
||||
|
||||
EXEC_NAME=ifconfig
|
||||
|
||||
default: link
|
||||
|
||||
include ../../cpp.mk
|
||||
|
||||
$(eval $(call program_compile_cpp_folder,src))
|
||||
$(eval $(call program_link_executable,$(EXEC_NAME)))
|
||||
|
||||
clean:
|
||||
@ echo -e "Remove compiled files"
|
||||
@ rm -rf debug
|
111
programs/ifconfig/src/main.cpp
Normal file
111
programs/ifconfig/src/main.cpp
Normal file
@ -0,0 +1,111 @@
|
||||
//=======================================================================
|
||||
// Copyright Baptiste Wicht 2013-2016.
|
||||
// Distributed under the terms of the MIT License.
|
||||
// (See accompanying file LICENSE or copy at
|
||||
// http://www.opensource.org/licenses/MIT)
|
||||
//=======================================================================
|
||||
|
||||
#include <tlib/file.hpp>
|
||||
#include <tlib/system.hpp>
|
||||
#include <tlib/errors.hpp>
|
||||
#include <tlib/print.hpp>
|
||||
#include <tlib/directory_entry.hpp>
|
||||
|
||||
static constexpr const size_t BUFFER_SIZE = 4096;
|
||||
|
||||
std::string read_file(const std::string& path){
|
||||
auto fd = tlib::open(path.c_str());
|
||||
|
||||
if(fd.valid()){
|
||||
auto info = tlib::stat(*fd);
|
||||
|
||||
if(info.valid()){
|
||||
auto size = info->size;
|
||||
|
||||
auto buffer = new char[size+1];
|
||||
|
||||
auto content_result = tlib::read(*fd, buffer, size);
|
||||
|
||||
if(content_result.valid()){
|
||||
if(*content_result != size){
|
||||
//TODO Read more
|
||||
} else {
|
||||
buffer[size] = '\0';
|
||||
tlib::close(*fd);
|
||||
return buffer;
|
||||
}
|
||||
} else {
|
||||
tlib::printf("cat: error: %s\n", std::error_message(content_result.error()));
|
||||
}
|
||||
} else {
|
||||
tlib::printf("cat: error: %s\n", std::error_message(info.error()));
|
||||
}
|
||||
|
||||
tlib::close(*fd);
|
||||
} else {
|
||||
tlib::printf("cat: error: %s\n", std::error_message(fd.error()));
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
int main(int /*argc*/, char* /*argv*/[]){
|
||||
auto fd = tlib::open("/sys/net/");
|
||||
|
||||
if(fd.valid()){
|
||||
auto info = tlib::stat(*fd);
|
||||
|
||||
if(info.valid()){
|
||||
auto entries_buffer = new char[BUFFER_SIZE];
|
||||
|
||||
auto entries_result = tlib::entries(*fd, entries_buffer, BUFFER_SIZE);
|
||||
|
||||
if(entries_result.valid()){
|
||||
size_t position = 0;
|
||||
|
||||
while(true){
|
||||
auto entry = reinterpret_cast<tlib::directory_entry*>(entries_buffer + position);
|
||||
|
||||
std::string base_path = "/sys/net/";
|
||||
std::string entry_name = &entry->name;
|
||||
|
||||
auto enabled = read_file(base_path + entry_name + "/enabled");
|
||||
|
||||
if(enabled == "true"){
|
||||
auto driver = read_file(base_path + entry_name + "/driver");
|
||||
auto ip = read_file(base_path + entry_name + "/ip");
|
||||
auto mac = read_file(base_path + entry_name + "/mac");
|
||||
|
||||
tlib::printf("%10s inet %s\n", &entry->name, ip.c_str());
|
||||
|
||||
if(!mac.empty() && mac != "0"){
|
||||
tlib::printf("%10s ether %s\n", "", mac.c_str());
|
||||
}
|
||||
|
||||
tlib::printf("%10s driver %s\n", "", driver.c_str());
|
||||
}
|
||||
|
||||
if(!entry->offset_next){
|
||||
break;
|
||||
}
|
||||
|
||||
tlib::printf("\n");
|
||||
|
||||
position += entry->offset_next;
|
||||
}
|
||||
} else {
|
||||
tlib::printf("ifconfig: error: %s\n", std::error_message(entries_result.error()));
|
||||
}
|
||||
|
||||
delete[] entries_buffer;
|
||||
} else {
|
||||
tlib::printf("ifconfig: error: %s\n", std::error_message(info.error()));
|
||||
}
|
||||
|
||||
tlib::close(*fd);
|
||||
} else {
|
||||
tlib::printf("ifconfig: error: %s\n", std::error_message(fd.error()));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user