#include "nodeparams.hpp" #include #include #include #include #include #include #include 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 exports) { NODE_SET_METHOD(exports, "setFlags", nodeSetFlags); } NODE_MODULE(ioctl_api, Initialize) }