UNPKG

tuntap2

Version:

a opensource, asynchronized, napi-based, business friendly tuntap device driver addon for nodejs.

103 lines (99 loc) 2.55 kB
import {Tuntap} from './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 { 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:string){ throw new Error('method not support by a tun device.'); } } /** * Tap interface, a Layer 2 virtual interface. * The tap device allows * @class Tap * @extends {TuntapB} */ class Tap extends Tuntap { constructor() { super('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: any){ 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(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: string) => { 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; } export {Tap, Tun, tuntap};