support de l'alumage des interface reseau
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -12,26 +12,6 @@ async function main() {
|
||||
const { fHook } = require("./hook.js")
|
||||
|
||||
console.clear()
|
||||
console.log(`
|
||||
_______ _________ ______ _______ _______
|
||||
( ____ \\|\\ /|\\__ __/( ___ \\ ( ____ )( ___ )|\\ /|
|
||||
| ( \\/| ) ( | ) ( | ( ) )| ( )|| ( ) |( \\ / )
|
||||
| | | (___) | | | | (__/ / | (____)|| (___) | \\ (_) /
|
||||
| | | ___ | | | | __ ( | __)| ___ | ) _ (
|
||||
| | | ( ) | | | | ( \\ \\ | (\\ ( | ( ) | / ( ) \\
|
||||
| (____/\\| ) ( |___) (___| )___) )| ) \\ \\__| ) ( |( / \\ )
|
||||
(_______/|/ \\|\\_______/|/ \\___/ |/ \\__/|/ \\||/ \\|
|
||||
|
||||
_______ _______
|
||||
( ___ )( ____ \\
|
||||
| ( ) || ( \\/
|
||||
| | | || (_____
|
||||
| | | |(_____ )
|
||||
| | | | ) |
|
||||
| (___) |/\\____) |
|
||||
(_______)\\_______)
|
||||
|
||||
`)
|
||||
|
||||
await initd()
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
//@ts-check
|
||||
//@ts-expect-error
|
||||
const { ioctl } = require('./ioctl.node')
|
||||
|
||||
|
||||
module.exports = { ioctl }
|
||||
@@ -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 }
|
||||
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
@@ -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 }
|
||||
@@ -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
@@ -11,6 +11,4 @@ qemu-system-x86_64\
|
||||
-k fr\
|
||||
-vga qxl\
|
||||
-audiodev pa,id=hda,out.mixing-engine=on \
|
||||
-device intel-hda -device hda-output,audiodev=hda \
|
||||
-netdev user,id=net0 \
|
||||
-device virtio-net-pci,netdev=net0
|
||||
-device intel-hda -device hda-output,audiodev=hda
|
||||
|
||||
Reference in New Issue
Block a user