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)
}