tuntap2
Version:
a opensource, asynchronized, napi-based, business friendly tuntap device driver addon for nodejs.
105 lines • 2.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.tuntap = exports.Tun = exports.Tap = void 0;
const Tuntap_1 = require("./src/ts/Tuntap");
// this file only contains wrapper class for tuntap class.
/**
* Tun interface, a Layer 2 virtual interface.
* @class Tun
* @extends {TuntapB}
*/
class Tun extends Tuntap_1.Tuntap {
constructor() {
super('tun');
}
/**
* setting the mac of a Tun interface is illegal as tun devices is running on layer 3
* @throws 'method not support by a tun device.'
* @memberof Tun
* @since 0.1.0
*/
set mac(mac) {
throw new Error('method not support by a tun device.');
}
}
exports.Tun = Tun;
/**
* Tap interface, a Layer 2 virtual interface.
* The tap device allows
* @class Tap
* @extends {TuntapB}
*/
class Tap extends Tuntap_1.Tuntap {
constructor() {
super('tap');
}
}
exports.Tap = Tap;
/**
* a compatibility Wrapper for module `node-tuntap`
*
* @example
* ```js
* try {
var tt = tuntap({
type: 'tun', // 'tun' or 'tap'
mtu: 1500,
addr: '192.168.123.1',
mask: '255.255.255.192',
up: true,
//name is unacceptable
//dest,persist,ethtype_comp,running is not used
});
} catch(e) {
console.log('Tuntap creation error: ', e);
process.exit(0);
}
tt.pipe(tt);
* ```
*/
const tuntap = function (options) {
if (options.name) {
throw `setting a name of a tuntap device is not supported`;
}
if (options.type != 'tun' && options.type != 'tap') {
throw `illegal type ${options.type}`;
}
const device = new Tuntap_1.Tuntap(options.type);
if (options.mtu) {
device.mtu = options.mtu;
}
let mask = 32;
if (options.mask) {
const maskSplited = options.mask.split('.');
if (maskSplited.length != 4) {
throw `illegal net mask!`;
}
mask = 0;
maskSplited.forEach(((segment) => {
let numberSegment = parseInt(segment) & 0xff;
let hasOne = false;
for (let i = 0; i < 8; i++) {
if (numberSegment & 0x01) {
hasOne = true;
mask++;
}
else {
if (hasOne == true) {
throw `illegal netmask`;
}
}
numberSegment = numberSegment >> 1;
}
}));
}
if (options.addr) {
let addr = [options.addr, mask].join('/');
device.ipv4 = addr;
}
if (options.up) {
device.isUp = true;
}
return device;
};
exports.tuntap = tuntap;
//# sourceMappingURL=index.js.map
;