From 9371b78d0594d156b2ad9174b116f04abac64911 Mon Sep 17 00:00:00 2001 From: Marc Date: Mon, 21 Feb 2022 10:12:32 +0100 Subject: [PATCH] removed nodefiles and added raise interface functionnality --- clibs/ip.cc | 34 ++++++++++++- clibs/socket.cc | 32 ------------ rootfs overrides/core/.gitignore | 7 +-- rootfs overrides/core/ip.js | 10 +++- rootfs overrides/core/ip.node | Bin 22184 -> 0 bytes rootfs overrides/core/socket.node | Bin 17128 -> 0 bytes rootfs overrides/usr/bin/ifflags.js | 73 ++++++++++++++++++++++++++++ rootfs overrides/usr/bin/ifup.js | 25 ++++++++++ 8 files changed, 141 insertions(+), 40 deletions(-) delete mode 100644 clibs/socket.cc delete mode 100755 rootfs overrides/core/ip.node delete mode 100755 rootfs overrides/core/socket.node create mode 100644 rootfs overrides/usr/bin/ifflags.js create mode 100644 rootfs overrides/usr/bin/ifup.js diff --git a/clibs/ip.cc b/clibs/ip.cc index 9ec0432..826ac44 100644 --- a/clibs/ip.cc +++ b/clibs/ip.cc @@ -6,10 +6,11 @@ #include #include #include +#include const int inet_sock_fd = socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0); -namespace ioctlNode { +namespace ipNode { int setflags(const char* iface, short flags) { struct ifreq ifr; @@ -19,6 +20,34 @@ namespace ioctlNode { return ioctl(inet_sock_fd, SIOCSIFFLAGS, &ifr); } + int getIfreq(struct ifreq *ifr ) { + return ioctl(inet_sock_fd, SIOCGIFFLAGS, ifr); + } + + void nodeGetFlags(const nodeparam& args) { + v8::Isolate* isolate = args.GetIsolate(); + + if (args.Length() < 1 || !args[0]->IsString()) { + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Invalid arguments ip.getflags").ToLocalChecked())); + return; + } + + std::string iface = argToString(args[0]); + + struct ifreq ifr; + strncpy(ifr.ifr_name, iface.c_str(), IFNAMSIZ); + int err = getIfreq(&ifr); + + if(err != 0) { + char errstr[36]; + sprintf(errstr, "Error while getting flags %d", errno); + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, errstr).ToLocalChecked())); + } + args.GetReturnValue().Set(ifr.ifr_flags); + } + void nodeSetFlags(const nodeparam& args) { v8::Isolate* isolate = args.GetIsolate(); @@ -36,8 +65,9 @@ namespace ioctlNode { void Initialize(v8::Local exports) { NODE_SET_METHOD(exports, "setFlags", nodeSetFlags); + NODE_SET_METHOD(exports, "getFlags", nodeGetFlags); } - NODE_MODULE(ioctl_api, Initialize) + NODE_MODULE(ip_api, Initialize) } diff --git a/clibs/socket.cc b/clibs/socket.cc deleted file mode 100644 index 39ae133..0000000 --- a/clibs/socket.cc +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include -#include - -#define nodeparam v8::FunctionCallbackInfo - -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()->Value(); - const int type = args[1].As()->Value(); - const int protocol = args[2].As()->Value(); - - args.GetReturnValue().Set(socket(domain ,type, protocol)); - } - - - void Initialize(v8::Local exports) { - NODE_SET_METHOD(exports, "socket", nodeSocket); - } - - NODE_MODULE(ioctl_api, Initialize) -} diff --git a/rootfs overrides/core/.gitignore b/rootfs overrides/core/.gitignore index e47f72a..987abd0 100644 --- a/rootfs overrides/core/.gitignore +++ b/rootfs overrides/core/.gitignore @@ -1,6 +1,3 @@ -syscall.node -ioctl.node -mount.node -file.node node_modules -package-lock.json \ No newline at end of file +package-lock.json +*.node \ No newline at end of file diff --git a/rootfs overrides/core/ip.js b/rootfs overrides/core/ip.js index 78ad4fd..4f7b155 100644 --- a/rootfs overrides/core/ip.js +++ b/rootfs overrides/core/ip.js @@ -32,4 +32,12 @@ function setFlags(interface, flags) { return ip.setFlags(interface, flags) } -module.exports = { setFlags, flags } \ No newline at end of file +/** + * @param { string } interface + * @returns { number } + */ +function getFlags(interface) { + return ip.getFlags(interface); +} + +module.exports = { setFlags, getFlags, flags } \ No newline at end of file diff --git a/rootfs overrides/core/ip.node b/rootfs overrides/core/ip.node deleted file mode 100755 index 02da8a3baac156caef819326c973d137caa0f466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22184 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 diff --git a/rootfs overrides/core/socket.node b/rootfs overrides/core/socket.node deleted file mode 100755 index ca92f15ba61edc698a9a6df665f8c7579583ab8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17128 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 LU%9-nf?fY#Ca5J< diff --git a/rootfs overrides/usr/bin/ifflags.js b/rootfs overrides/usr/bin/ifflags.js new file mode 100644 index 0000000..5bbded3 --- /dev/null +++ b/rootfs overrides/usr/bin/ifflags.js @@ -0,0 +1,73 @@ +//@ts-check +const ip = require('../../core/ip') +const fs = require('fs') +const { exit } = require('process') + +function usage() { + console.log('invalid syntax') + console.log('ifup [interface name]') +} + +if ( process.argv.length !== 4 ){ + usage() + exit(1) +} + +if ( !fs.existsSync('/sys/class/net/' + process.argv[3]) ) { + console.log("Interface not found") + exit(1) +} + + +let flagsStr = '' +let flags = ip.getFlags(process.argv[3]) + +if(flags & ip.flags.IFF_ALLMULTI) { + flagsStr += 'IFF_ALLMULTI\n' +} +if(flags & ip.flags.IFF_AUTOMEDIA) { + flagsStr += 'IFF_AUTOMEDIA\n' +} +if(flags & ip.flags.IFF_BROADCAST) { + flagsStr += 'IFF_BROADCAST\n' +} +if(flags & ip.flags.IFF_DEBUG) { + flagsStr += 'IFF_DEBUG\n' +} +if(flags & ip.flags.IFF_DYNAMIC) { + flagsStr += 'IFF_DYNAMIC\n' +} +if(flags & ip.flags.IFF_LOOPBACK) { + flagsStr += 'IFF_LOOPBACK\n' +} +if(flags & ip.flags.IFF_MASTER) { + flagsStr += 'IFF_MASTER\n' +} +if(flags & ip.flags.IFF_MULTICAST) { + flagsStr += 'IFF_MULTICAST\n' +} +if(flags & ip.flags.IFF_NOARP) { + flagsStr += 'IFF_NOARP\n' +} +if(flags & ip.flags.IFF_NOTRAILERS) { + flagsStr += 'IFF_NOTRAILERS\n' +} +if(flags & ip.flags.IFF_POINTOPOINT) { + flagsStr += 'IFF_POINTOPOINT\n' +} +if(flags & ip.flags.IFF_PORTSEL) { + flagsStr += 'IFF_PORTSEL\n' +} +if(flags & ip.flags.IFF_PROMISC) { + flagsStr += 'IFF_PROMISC\n' +} +if(flags & ip.flags.IFF_RUNNING) { + flagsStr += 'IFF_RUNNING\n' +} +if(flags & ip.flags.IFF_SLAVE) { + flagsStr += 'IFF_SLAVE\n' +} +if(flags & ip.flags.IFF_UP) { + flagsStr += 'IFF_SLAVE\n' +} +console.log(flagsStr) \ No newline at end of file diff --git a/rootfs overrides/usr/bin/ifup.js b/rootfs overrides/usr/bin/ifup.js new file mode 100644 index 0000000..289d123 --- /dev/null +++ b/rootfs overrides/usr/bin/ifup.js @@ -0,0 +1,25 @@ +//@ts-check +const ip = require('../../core/ip') +const fs = require('fs') +const { exit } = require('process') + +function usage() { + console.log('invalid syntax') + console.log('ifup [interface name]') +} + +if ( process.argv.length !== 4 ){ + usage() + exit(1) +} + +if ( !fs.existsSync('/sys/class/net/' + process.argv[3]) ) { + console.log("Interface not found") + exit(1) +} + +let flags = ip.getFlags(process.argv[3]) + +flags |= ip.flags.IFF_UP + +ip.setFlags(process.argv[3], flags) \ No newline at end of file