support de l'alumage des interface reseau

This commit is contained in:
Marc
2022-02-15 12:31:06 +01:00
parent a5f8ef486a
commit 1edb531e1a
11 changed files with 167 additions and 23 deletions
+43
View File
@@ -0,0 +1,43 @@
#include "nodeparams.hpp"
#include <iostream>
#include <sys/ioctl.h>
#include <net/if.h>
#include <net/route.h>
#include <linux/sockios.h>
#include <unistd.h>
#include <node.h>
const int inet_sock_fd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
namespace ioctlNode {
int setflags(const char* iface, short flags) {
struct ifreq ifr;
ifr.ifr_flags = flags;
strncpy(ifr.ifr_name, iface, IFNAMSIZ);
return ioctl(inet_sock_fd, SIOCSIFFLAGS, &ifr);
}
void nodeSetFlags(const nodeparam& args) {
v8::Isolate* isolate = args.GetIsolate();
if (args.Length() < 2 || !args[0]->IsString() || !args[1]->IsUint32()) {
isolate->ThrowException(v8::Exception::TypeError(
v8::String::NewFromUtf8(isolate, "Invalid arguments ip.srtFlags").ToLocalChecked()));
return;
}
short flags = (short) argToInt(args[1]);
std::string path = argToString(args[0]);
args.GetReturnValue().Set(setflags(path.c_str(), flags));
}
void Initialize(v8::Local<v8::Object> exports) {
NODE_SET_METHOD(exports, "setFlags", nodeSetFlags);
}
NODE_MODULE(ioctl_api, Initialize)
}
+7
View File
@@ -0,0 +1,7 @@
#include <string>
#include <v8.h>
#define nodeparam v8::FunctionCallbackInfo<v8::Value>
#define argToInt(arg) arg.As<v8::Number>()->Value()
#define argToString(arg) std::string(*v8::String::Utf8Value(isolate, arg))
+32
View File
@@ -0,0 +1,32 @@
#include <unistd.h>
#include <node.h>
#include <fcntl.h>
#include <string>
#include <netinet/in.h>
#define nodeparam v8::FunctionCallbackInfo<v8::Value>
namespace ioctlNode {
void nodeSocket(const nodeparam& args) {
v8::Isolate* isolate = args.GetIsolate();
if (args.Length() != 3 || !args[0]->IsUint32() || !args[1]->IsUint32() || !args[2]->IsUint32()) {
isolate->ThrowException(v8::Exception::TypeError(
v8::String::NewFromUtf8(isolate, "Argument 1, 2 & 3 must be numbers").ToLocalChecked()));
return;
}
const int domain = args[0].As<v8::Number>()->Value();
const int type = args[1].As<v8::Number>()->Value();
const int protocol = args[2].As<v8::Number>()->Value();
args.GetReturnValue().Set(socket(domain ,type, protocol));
}
void Initialize(v8::Local<v8::Object> exports) {
NODE_SET_METHOD(exports, "socket", nodeSocket);
}
NODE_MODULE(ioctl_api, Initialize)
}
-20
View File
@@ -12,26 +12,6 @@ async function main() {
const { fHook } = require("./hook.js") const { fHook } = require("./hook.js")
console.clear() console.clear()
console.log(`
_______ _________ ______ _______ _______
( ____ \\|\\ /|\\__ __/( ___ \\ ( ____ )( ___ )|\\ /|
| ( \\/| ) ( | ) ( | ( ) )| ( )|| ( ) |( \\ / )
| | | (___) | | | | (__/ / | (____)|| (___) | \\ (_) /
| | | ___ | | | | __ ( | __)| ___ | ) _ (
| | | ( ) | | | | ( \\ \\ | (\\ ( | ( ) | / ( ) \\
| (____/\\| ) ( |___) (___| )___) )| ) \\ \\__| ) ( |( / \\ )
(_______/|/ \\|\\_______/|/ \\___/ |/ \\__/|/ \\||/ \\|
_______ _______
( ___ )( ____ \\
| ( ) || ( \\/
| | | || (_____
| | | |(_____ )
| | | | ) |
| (___) |/\\____) |
(_______)\\_______)
`)
await initd() await initd()
+6
View File
@@ -0,0 +1,6 @@
//@ts-check
//@ts-expect-error
const { ioctl } = require('./ioctl.node')
module.exports = { ioctl }
+35
View File
@@ -0,0 +1,35 @@
//@ts-check
//@ts-expect-error
const ip = require('./ip.node')
const flags = {
IFF_UP: 0x1, /* Interface is up. */
IFF_BROADCAST: 0x2, /* Broadcast address valid. */
IFF_DEBUG: 0x4, /* Turn on debugging. */
IFF_LOOPBACK: 0x8, /* Is a loopback net. */
IFF_POINTOPOINT: 0x10, /* Interface is point-to-point link. */
IFF_NOTRAILERS: 0x20, /* Avoid use of trailers. */
IFF_RUNNING: 0x40, /* Resources allocated. */
IFF_NOARP: 0x80, /* No address resolution protocol. */
IFF_PROMISC: 0x100, /* Receive all packets. */
/* Not supported */
IFF_ALLMULTI: 0x200, /* Receive all multicast packets. */
IFF_MASTER: 0x400, /* Master of a load balancer. */
IFF_SLAVE: 0x800, /* Slave of a load balancer. */
IFF_MULTICAST: 0x1000, /* Supports multicast. */
IFF_PORTSEL: 0x2000, /* Can set media type. */
IFF_AUTOMEDIA: 0x4000, /* Auto media select active. */
IFF_DYNAMIC: 0x8000 /* Dialup device with changing addresses. */
}
/**
* @param { string } interface
* @param { number } flags
* @return { number }
*/
function setFlags(interface, flags) {
return ip.setFlags(interface, flags)
}
module.exports = { setFlags, flags }
BIN
View File
Binary file not shown.
Binary file not shown.
+28
View File
@@ -0,0 +1,28 @@
//@ts-check
//@ts-expect-error
const csocket = require('./socket.node')
/**
* @param { number } domain
* @param { number } type
* @param { number } protocol
* @return { number }
*/
function socket(domain, type, protocol) {
return csocket.socket(domain, type, protocol)
}
const socketTypes = {
SOCK_DGRAM : 1, /* Connectionless, unreliable datagrams of fixed maximum length. */
SOCK_STREAM : 2, /* Sequenced, reliable, connection-based byte streams. */
SOCK_RAW : 3, /* Raw protocol interface. */
SOCK_RDM : 4, /* Reliably-delivered messages. */
SOCK_SEQPACKET : 5, /* Sequenced, reliable, connection-based, datagrams of fixed maximum length. */
SOCK_DCCP : 6, /* Datagram Congestion Control Protocol. */
SOCK_PACKET : 10, /* Linux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level. */
SOCK_CLOEXEC : 0o2000000, /* Atomically set close-on-exec flag for the new descriptor(s). */
SOCK_NONBLOCK : 0o0000200 /* Atomically mark descriptor(s) as non-blocking. */
}
module.exports = { socketTypes, socket }
+15
View File
@@ -0,0 +1,15 @@
const ip = require('../../chibrax/ip')
//async is optional but recomended for optimisation (optimisations are yet to be implemented)
async function init() {
ip.setFlags('lo', ip.flags.IFF_UP | ip.flags.IFF_LOOPBACK | ip.flags.IFF_RUNNING)
}
const after = ['filesystem.js'] // list of init script to load before
const before = []
module.exports = {
init,
after,
before
}
+1 -3
View File
@@ -11,6 +11,4 @@ qemu-system-x86_64\
-k fr\ -k fr\
-vga qxl\ -vga qxl\
-audiodev pa,id=hda,out.mixing-engine=on \ -audiodev pa,id=hda,out.mixing-engine=on \
-device intel-hda -device hda-output,audiodev=hda \ -device intel-hda -device hda-output,audiodev=hda
-netdev user,id=net0 \
-device virtio-net-pci,netdev=net0