@lifo-sh/core 0.4.6 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/dist/{awk-BFrGImnt.js → awk-Bhywv7pU.js} +1 -1
- package/dist/base64-ncdb27yL.js +72 -0
- package/dist/{basename-MGz8cBxd.js → basename-D-_r1VN_.js} +1 -1
- package/dist/browser-Bymgnrli.js +35 -0
- package/dist/{cat-BnEyWWFr.js → cat-DSe6FHma.js} +1 -1
- package/dist/{chmod-CdrI3hZV.js → chmod-BZIlNR2-.js} +1 -1
- package/dist/{chown-7yY3iC6J.js → chown-BAOEOuMn.js} +1 -1
- package/dist/commands/net/curl.d.ts +2 -2
- package/dist/commands/net/curl.d.ts.map +1 -1
- package/dist/commands/net/forward.d.ts +14 -0
- package/dist/commands/net/forward.d.ts.map +1 -0
- package/dist/commands/net/host.d.ts +14 -0
- package/dist/commands/net/host.d.ts.map +1 -0
- package/dist/commands/net/ifconfig.d.ts +8 -0
- package/dist/commands/net/ifconfig.d.ts.map +1 -0
- package/dist/commands/net/ip.d.ts +14 -0
- package/dist/commands/net/ip.d.ts.map +1 -0
- package/dist/commands/net/netstat.d.ts +8 -0
- package/dist/commands/net/netstat.d.ts.map +1 -0
- package/dist/commands/net/ports.d.ts +8 -0
- package/dist/commands/net/ports.d.ts.map +1 -0
- package/dist/commands/net/route.d.ts +8 -0
- package/dist/commands/net/route.d.ts.map +1 -0
- package/dist/commands/net/test-registry.d.ts +8 -0
- package/dist/commands/net/test-registry.d.ts.map +1 -0
- package/dist/commands/net/tunnel-v2.d.ts +4 -0
- package/dist/commands/net/tunnel-v2.d.ts.map +1 -0
- package/dist/commands/net/tunnel.d.ts +6 -0
- package/dist/commands/net/tunnel.d.ts.map +1 -0
- package/dist/commands/registry.d.ts +1 -0
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/system/fastfetch.d.ts +4 -0
- package/dist/commands/system/fastfetch.d.ts.map +1 -0
- package/dist/commands/system/kill.d.ts +2 -2
- package/dist/commands/system/kill.d.ts.map +1 -1
- package/dist/commands/system/lifo.d.ts +17 -0
- package/dist/commands/system/lifo.d.ts.map +1 -1
- package/dist/commands/system/logout.d.ts +5 -0
- package/dist/commands/system/logout.d.ts.map +1 -0
- package/dist/commands/system/man.d.ts.map +1 -1
- package/dist/commands/system/newtab.d.ts +8 -0
- package/dist/commands/system/newtab.d.ts.map +1 -0
- package/dist/commands/system/node.d.ts +2 -2
- package/dist/commands/system/node.d.ts.map +1 -1
- package/dist/commands/system/npm.d.ts +20 -7
- package/dist/commands/system/npm.d.ts.map +1 -1
- package/dist/commands/system/ps.d.ts +3 -2
- package/dist/commands/system/ps.d.ts.map +1 -1
- package/dist/commands/system/sha256sum.d.ts +4 -0
- package/dist/commands/system/sha256sum.d.ts.map +1 -0
- package/dist/commands/system/sl.d.ts +4 -0
- package/dist/commands/system/sl.d.ts.map +1 -0
- package/dist/commands/system/systemctl.d.ts +4 -0
- package/dist/commands/system/systemctl.d.ts.map +1 -0
- package/dist/commands/system/top.d.ts +2 -2
- package/dist/commands/system/top.d.ts.map +1 -1
- package/dist/commands/system/whoami.d.ts.map +1 -1
- package/dist/commands/text/base64.d.ts +4 -0
- package/dist/commands/text/base64.d.ts.map +1 -0
- package/dist/commands/text/less.d.ts +4 -0
- package/dist/commands/text/less.d.ts.map +1 -0
- package/dist/commands/text/nano.d.ts +4 -0
- package/dist/commands/text/nano.d.ts.map +1 -0
- package/dist/commands/text/seq.d.ts +4 -0
- package/dist/commands/text/seq.d.ts.map +1 -0
- package/dist/commands/text/strings.d.ts +4 -0
- package/dist/commands/text/strings.d.ts.map +1 -0
- package/dist/commands/text/tac.d.ts +4 -0
- package/dist/commands/text/tac.d.ts.map +1 -0
- package/dist/commands/types.d.ts +1 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/{cp-7dOXCu3Q.js → cp-DOXzF2_m.js} +1 -1
- package/dist/{cut-vn4vxL9L.js → cut-B4rQvMRc.js} +1 -1
- package/dist/{diff-DnKPewP-.js → diff-BndHU0Ne.js} +1 -1
- package/dist/{dirname-B3ciBZhS.js → dirname-wtPE8QZ6.js} +1 -1
- package/dist/{du-i2qiYYnL.js → du-BLkl3BkN.js} +1 -1
- package/dist/fastfetch-aPM9Z3ym.js +310 -0
- package/dist/{file-Dd6iLk05.js → file-DfmI5Gyk.js} +1 -1
- package/dist/{find-Cz4GdaPT.js → find-Wdkys9OU.js} +1 -1
- package/dist/{grep-DYSAPbxr.js → grep-xmx3I05f.js} +1 -1
- package/dist/{gunzip-BHAbNGHO.js → gunzip-Dbr2fm5t.js} +1 -1
- package/dist/{gzip-JLrrHn6u.js → gzip-D1GwSnNe.js} +1 -1
- package/dist/{head-bFamSv7p.js → head-DUXuKw3m.js} +1 -1
- package/dist/index-Djm2onjx.js +13915 -0
- package/dist/index.d.ts +28 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -65
- package/dist/kernel/ServiceManager.d.ts +51 -0
- package/dist/kernel/ServiceManager.d.ts.map +1 -0
- package/dist/kernel/index.d.ts +11 -0
- package/dist/kernel/index.d.ts.map +1 -1
- package/dist/kernel/network/Bridge.d.ts +110 -0
- package/dist/kernel/network/Bridge.d.ts.map +1 -0
- package/dist/kernel/network/DNSResolver.d.ts +55 -0
- package/dist/kernel/network/DNSResolver.d.ts.map +1 -0
- package/dist/kernel/network/NetworkInterface.d.ts +83 -0
- package/dist/kernel/network/NetworkInterface.d.ts.map +1 -0
- package/dist/kernel/network/NetworkNamespace.d.ts +98 -0
- package/dist/kernel/network/NetworkNamespace.d.ts.map +1 -0
- package/dist/kernel/network/NetworkStack.d.ts +178 -0
- package/dist/kernel/network/NetworkStack.d.ts.map +1 -0
- package/dist/kernel/network/NetworkStack.example.d.ts +8 -0
- package/dist/kernel/network/NetworkStack.example.d.ts.map +1 -0
- package/dist/kernel/network/NetworkStack.test.d.ts +2 -0
- package/dist/kernel/network/NetworkStack.test.d.ts.map +1 -0
- package/dist/kernel/network/PortBridge.d.ts +49 -0
- package/dist/kernel/network/PortBridge.d.ts.map +1 -0
- package/dist/kernel/network/RoutingTable.d.ts +55 -0
- package/dist/kernel/network/RoutingTable.d.ts.map +1 -0
- package/dist/kernel/network/Socket.d.ts +65 -0
- package/dist/kernel/network/Socket.d.ts.map +1 -0
- package/dist/kernel/network/index.d.ts +11 -0
- package/dist/kernel/network/index.d.ts.map +1 -0
- package/dist/kernel/network/tunnel/BaseTunnel.d.ts +55 -0
- package/dist/kernel/network/tunnel/BaseTunnel.d.ts.map +1 -0
- package/dist/kernel/network/tunnel/VETHPair.d.ts +71 -0
- package/dist/kernel/network/tunnel/VETHPair.d.ts.map +1 -0
- package/dist/kernel/network/tunnel/WebSocketTunnel.d.ts +89 -0
- package/dist/kernel/network/tunnel/WebSocketTunnel.d.ts.map +1 -0
- package/dist/kernel/network/types.d.ts +159 -0
- package/dist/kernel/network/types.d.ts.map +1 -0
- package/dist/kernel/storage/ContentStore.d.ts +3 -1
- package/dist/kernel/storage/ContentStore.d.ts.map +1 -1
- package/dist/kernel/unit-parser.d.ts +22 -0
- package/dist/kernel/unit-parser.d.ts.map +1 -0
- package/dist/less-VW-Lb-t9.js +230 -0
- package/dist/{ls-BSsn2qVd.js → ls-DjuSFYCA.js} +1 -1
- package/dist/{man-CJ5pI0_W.js → man-Dg26tZ-a.js} +19 -6
- package/dist/{mkdir-CF_ugDtu.js → mkdir-qMgrbMfK.js} +1 -1
- package/dist/{mktemp-CaEiJi87.js → mktemp-BNrdUgqA.js} +1 -1
- package/dist/{mv-BSS_QQM-.js → mv-DxovuvmA.js} +1 -1
- package/dist/nano-CVa6vpFX.js +304 -0
- package/dist/{nl-D30ka89P.js → nl-E4qmf3dZ.js} +1 -1
- package/dist/node-compat/crypto.d.ts +8 -1
- package/dist/node-compat/crypto.d.ts.map +1 -1
- package/dist/node-compat/dns.d.ts +117 -0
- package/dist/node-compat/dns.d.ts.map +1 -0
- package/dist/node-compat/esbuild.d.ts +10 -0
- package/dist/node-compat/esbuild.d.ts.map +1 -0
- package/dist/node-compat/fs.d.ts +25 -5
- package/dist/node-compat/fs.d.ts.map +1 -1
- package/dist/node-compat/http.d.ts +54 -9
- package/dist/node-compat/http.d.ts.map +1 -1
- package/dist/node-compat/index.d.ts.map +1 -1
- package/dist/node-compat/module.d.ts +55 -0
- package/dist/node-compat/module.d.ts.map +1 -0
- package/dist/node-compat/path.d.ts +28 -0
- package/dist/node-compat/path.d.ts.map +1 -1
- package/dist/node-compat/process.d.ts +67 -2
- package/dist/node-compat/process.d.ts.map +1 -1
- package/dist/node-compat/readline.d.ts +79 -0
- package/dist/node-compat/readline.d.ts.map +1 -0
- package/dist/node-compat/rimraf.d.ts +23 -0
- package/dist/node-compat/rimraf.d.ts.map +1 -0
- package/dist/node-compat/tty.d.ts +32 -0
- package/dist/node-compat/tty.d.ts.map +1 -0
- package/dist/node-compat/url.d.ts +4 -0
- package/dist/node-compat/url.d.ts.map +1 -1
- package/dist/node-compat/util.d.ts +21 -1
- package/dist/node-compat/util.d.ts.map +1 -1
- package/dist/{realpath-BWqrTa-J.js → realpath-BaYc6QSr.js} +1 -1
- package/dist/{rev-Cfja5xbl.js → rev-CtqOEUEH.js} +1 -1
- package/dist/{rm-DUR35EZn.js → rm-DtLSFhWn.js} +1 -1
- package/dist/{rmdir-DXjx17-Z.js → rmdir-k65U0Fef.js} +1 -1
- package/dist/sandbox/Sandbox.d.ts.map +1 -1
- package/dist/sandbox/types.d.ts +2 -2
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/{sed-YKJ5wcuu.js → sed-BpypU_CO.js} +1 -1
- package/dist/seq-B01YKIbO.js +37 -0
- package/dist/sha256sum-x-mlDY9n.js +64 -0
- package/dist/shell/ProcessRegistry.d.ts +144 -0
- package/dist/shell/ProcessRegistry.d.ts.map +1 -0
- package/dist/shell/ProcessRegistry.example.d.ts +8 -0
- package/dist/shell/ProcessRegistry.example.d.ts.map +1 -0
- package/dist/shell/ProcessRegistry.test.d.ts +2 -0
- package/dist/shell/ProcessRegistry.test.d.ts.map +1 -0
- package/dist/shell/Shell.d.ts +10 -2
- package/dist/shell/Shell.d.ts.map +1 -1
- package/dist/shell/interpreter.d.ts +4 -0
- package/dist/shell/interpreter.d.ts.map +1 -1
- package/dist/shell/terminal-stdin.d.ts +4 -0
- package/dist/shell/terminal-stdin.d.ts.map +1 -1
- package/dist/sl-Dv4iPBN6.js +138 -0
- package/dist/{sort-C2sQ841N.js → sort-C1n7kWmJ.js} +1 -1
- package/dist/{stat-gLLpq3JZ.js → stat-Co_5pgto.js} +1 -1
- package/dist/strings-tFgYFAvp.js +42 -0
- package/dist/tac-BQvVvnoM.js +31 -0
- package/dist/{tail-FnC8M40k.js → tail-CLWVwfZD.js} +1 -1
- package/dist/{tar-tfiT1iFt.js → tar-wo7UUSK5.js} +1 -1
- package/dist/{tee-CoymtuKa.js → tee-DlyeS1Yd.js} +1 -1
- package/dist/{touch-C4pyouV6.js → touch-DVzPgqSy.js} +1 -1
- package/dist/{tree-DfPczgli.js → tree-DHBQhXD7.js} +1 -1
- package/dist/{uniq-Dhsoj7Lk.js → uniq-CmmP6k_t.js} +1 -1
- package/dist/{unzip-CqIKZ8NK.js → unzip-BIOvH2jT.js} +1 -1
- package/dist/{wc-DBPO6xRf.js → wc-DfI1Q3lo.js} +1 -1
- package/dist/{wget-CYImxeOz.js → wget-Dd25MxcO.js} +1 -1
- package/dist/whoami-C_q-p-Vo.js +25 -0
- package/dist/{zip-TPdwPkrA.js → zip-Cc3IoNSB.js} +1 -1
- package/package.json +6 -3
- package/dist/index-BVIfyOAv.js +0 -8578
- package/dist/whoami-B1237V5e.js +0 -8
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { NetworkNamespace as INetworkNamespace, RouteEntry, Socket } from './types.js';
|
|
2
|
+
import { NetworkInterface } from './NetworkInterface.js';
|
|
3
|
+
/**
|
|
4
|
+
* Network namespace implementation
|
|
5
|
+
* Provides network isolation like Linux network namespaces
|
|
6
|
+
*/
|
|
7
|
+
export declare class NetworkNamespace implements INetworkNamespace {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
interfaces: Map<string, NetworkInterface>;
|
|
11
|
+
routes: RouteEntry[];
|
|
12
|
+
sockets: Map<number, Socket>;
|
|
13
|
+
arpTable: Map<string, string>;
|
|
14
|
+
private nextFd;
|
|
15
|
+
constructor(id: string, name: string);
|
|
16
|
+
/**
|
|
17
|
+
* Add interface to namespace
|
|
18
|
+
*/
|
|
19
|
+
addInterface(iface: NetworkInterface): void;
|
|
20
|
+
/**
|
|
21
|
+
* Remove interface from namespace
|
|
22
|
+
*/
|
|
23
|
+
removeInterface(name: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Get interface by name
|
|
26
|
+
*/
|
|
27
|
+
getInterface(name: string): NetworkInterface | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get all interfaces
|
|
30
|
+
*/
|
|
31
|
+
getAllInterfaces(): NetworkInterface[];
|
|
32
|
+
/**
|
|
33
|
+
* Add route
|
|
34
|
+
*/
|
|
35
|
+
addRoute(route: RouteEntry): void;
|
|
36
|
+
/**
|
|
37
|
+
* Remove route
|
|
38
|
+
*/
|
|
39
|
+
removeRoute(destination: string, iface: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Get all routes
|
|
42
|
+
*/
|
|
43
|
+
getRoutes(): RouteEntry[];
|
|
44
|
+
/**
|
|
45
|
+
* Add socket to namespace
|
|
46
|
+
*/
|
|
47
|
+
addSocket(socket: Socket): void;
|
|
48
|
+
/**
|
|
49
|
+
* Remove socket from namespace
|
|
50
|
+
*/
|
|
51
|
+
removeSocket(fd: number): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Get socket by file descriptor
|
|
54
|
+
*/
|
|
55
|
+
getSocket(fd: number): Socket | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Get all sockets
|
|
58
|
+
*/
|
|
59
|
+
getAllSockets(): Socket[];
|
|
60
|
+
/**
|
|
61
|
+
* Allocate file descriptor for new socket
|
|
62
|
+
*/
|
|
63
|
+
allocateFd(): number;
|
|
64
|
+
/**
|
|
65
|
+
* Add ARP entry (IP -> MAC mapping)
|
|
66
|
+
*/
|
|
67
|
+
addArpEntry(ip: string, mac: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Remove ARP entry
|
|
70
|
+
*/
|
|
71
|
+
removeArpEntry(ip: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Lookup MAC address for IP
|
|
74
|
+
*/
|
|
75
|
+
arpLookup(ip: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Get all ARP entries
|
|
78
|
+
*/
|
|
79
|
+
getArpTable(): Map<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* Clear all ARP entries
|
|
82
|
+
*/
|
|
83
|
+
clearArpTable(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Clone namespace (for creating new network namespace)
|
|
86
|
+
*/
|
|
87
|
+
clone(newId: string, newName: string): NetworkNamespace;
|
|
88
|
+
/**
|
|
89
|
+
* Get namespace statistics
|
|
90
|
+
*/
|
|
91
|
+
getStats(): {
|
|
92
|
+
interfaces: number;
|
|
93
|
+
routes: number;
|
|
94
|
+
sockets: number;
|
|
95
|
+
arpEntries: number;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=NetworkNamespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkNamespace.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/NetworkNamespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,OAAO,CAAC,MAAM,CAAK;gBAEP,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IASpC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAI3C;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIxD;;OAEG;IACH,gBAAgB,IAAI,gBAAgB,EAAE;IAItC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMjC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAQxD;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;IAIzB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAInC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACH,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlC;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAWvD;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB;CAQF"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { NetworkInterface } from './NetworkInterface.js';
|
|
2
|
+
import { NetworkNamespace } from './NetworkNamespace.js';
|
|
3
|
+
import { DNSResolver } from './DNSResolver.js';
|
|
4
|
+
import { Socket } from './Socket.js';
|
|
5
|
+
import { IPAddress, SocketType, SocketAddress, Packet, RouteEntry, NetworkTunnel } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Virtual network stack
|
|
8
|
+
* Provides Linux-like networking with interfaces, routing, sockets, DNS, and tunneling
|
|
9
|
+
*/
|
|
10
|
+
export declare class NetworkStack {
|
|
11
|
+
private namespaces;
|
|
12
|
+
private routingTable;
|
|
13
|
+
private dnsResolver;
|
|
14
|
+
private portBindings;
|
|
15
|
+
private nextNamespaceId;
|
|
16
|
+
private tunnels;
|
|
17
|
+
private vethPairs;
|
|
18
|
+
private bridges;
|
|
19
|
+
private nextTunnelId;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Initialize default namespace with loopback interface
|
|
23
|
+
*/
|
|
24
|
+
private initDefaultNamespace;
|
|
25
|
+
/**
|
|
26
|
+
* Create new network namespace
|
|
27
|
+
*/
|
|
28
|
+
createNamespace(name: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Delete network namespace
|
|
31
|
+
*/
|
|
32
|
+
deleteNamespace(id: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Get namespace by ID
|
|
35
|
+
*/
|
|
36
|
+
getNamespace(id: string): NetworkNamespace | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Get all namespaces
|
|
39
|
+
*/
|
|
40
|
+
getAllNamespaces(): NetworkNamespace[];
|
|
41
|
+
/**
|
|
42
|
+
* Create network interface
|
|
43
|
+
*/
|
|
44
|
+
createInterface(name: string, type: 'loopback' | 'ethernet' | 'tunnel', namespace?: string, options?: {
|
|
45
|
+
mtu?: number;
|
|
46
|
+
mac?: string;
|
|
47
|
+
addresses?: IPAddress[];
|
|
48
|
+
}): NetworkInterface;
|
|
49
|
+
/**
|
|
50
|
+
* Delete network interface
|
|
51
|
+
*/
|
|
52
|
+
deleteInterface(name: string, namespace?: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get interface
|
|
55
|
+
*/
|
|
56
|
+
getInterface(name: string, namespace?: string): NetworkInterface | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Get all interfaces in namespace
|
|
59
|
+
*/
|
|
60
|
+
getAllInterfaces(namespace?: string): NetworkInterface[];
|
|
61
|
+
/**
|
|
62
|
+
* Add route
|
|
63
|
+
*/
|
|
64
|
+
addRoute(route: RouteEntry): void;
|
|
65
|
+
/**
|
|
66
|
+
* Remove route
|
|
67
|
+
*/
|
|
68
|
+
removeRoute(destination: string, iface: string, namespace?: string): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Get routes
|
|
71
|
+
*/
|
|
72
|
+
getRoutes(namespace?: string): RouteEntry[];
|
|
73
|
+
/**
|
|
74
|
+
* Lookup route for destination
|
|
75
|
+
*/
|
|
76
|
+
lookupRoute(ip: string, namespace?: string): RouteEntry | null;
|
|
77
|
+
/**
|
|
78
|
+
* Create socket
|
|
79
|
+
*/
|
|
80
|
+
createSocket(type: SocketType, namespace?: string): Socket;
|
|
81
|
+
/**
|
|
82
|
+
* Bind socket to port
|
|
83
|
+
*/
|
|
84
|
+
bindSocket(socket: Socket, address: SocketAddress, handler?: (socket: Socket) => void | Promise<void>): void;
|
|
85
|
+
/**
|
|
86
|
+
* Unbind socket
|
|
87
|
+
*/
|
|
88
|
+
private unbindSocket;
|
|
89
|
+
/**
|
|
90
|
+
* Get port binding key
|
|
91
|
+
*/
|
|
92
|
+
private getBindingKey;
|
|
93
|
+
/**
|
|
94
|
+
* Send packet
|
|
95
|
+
*/
|
|
96
|
+
sendPacket(packet: Packet, namespace?: string): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Route packet to listening socket
|
|
99
|
+
*/
|
|
100
|
+
private routeToSocket;
|
|
101
|
+
/**
|
|
102
|
+
* Get DNS resolver
|
|
103
|
+
*/
|
|
104
|
+
getDNS(): DNSResolver;
|
|
105
|
+
/**
|
|
106
|
+
* Resolve hostname
|
|
107
|
+
*/
|
|
108
|
+
resolveHostname(hostname: string): Promise<string>;
|
|
109
|
+
/**
|
|
110
|
+
* Get all sockets in namespace
|
|
111
|
+
*/
|
|
112
|
+
getAllSockets(namespace?: string): Socket[];
|
|
113
|
+
/**
|
|
114
|
+
* Get formatted routing table
|
|
115
|
+
*/
|
|
116
|
+
getRoutingTableString(namespace?: string): string;
|
|
117
|
+
/**
|
|
118
|
+
* Add tunnel to network stack
|
|
119
|
+
*/
|
|
120
|
+
addTunnel(name: string, tunnel: NetworkTunnel): void;
|
|
121
|
+
/**
|
|
122
|
+
* Remove tunnel from network stack
|
|
123
|
+
*/
|
|
124
|
+
removeTunnel(name: string): Promise<boolean>;
|
|
125
|
+
/**
|
|
126
|
+
* Get tunnel by name
|
|
127
|
+
*/
|
|
128
|
+
getTunnel(name: string): NetworkTunnel | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* Get all tunnels
|
|
131
|
+
*/
|
|
132
|
+
getAllTunnels(): NetworkTunnel[];
|
|
133
|
+
/**
|
|
134
|
+
* Get tunnels by namespace
|
|
135
|
+
*/
|
|
136
|
+
getTunnelsByNamespace(namespace: string): NetworkTunnel[];
|
|
137
|
+
/**
|
|
138
|
+
* Add VETH pair
|
|
139
|
+
*/
|
|
140
|
+
addVETHPair(id: string, vethPair: any): void;
|
|
141
|
+
/**
|
|
142
|
+
* Remove VETH pair
|
|
143
|
+
*/
|
|
144
|
+
removeVETHPair(id: string): Promise<boolean>;
|
|
145
|
+
/**
|
|
146
|
+
* Get VETH pair by ID or interface name
|
|
147
|
+
*/
|
|
148
|
+
getVETHPair(idOrName: string): any | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* Get all VETH pairs
|
|
151
|
+
*/
|
|
152
|
+
getAllVETHPairs(): any[];
|
|
153
|
+
/**
|
|
154
|
+
* Generate next tunnel ID
|
|
155
|
+
*/
|
|
156
|
+
getNextTunnelId(): string;
|
|
157
|
+
/**
|
|
158
|
+
* Add bridge to network stack
|
|
159
|
+
*/
|
|
160
|
+
addBridge(name: string, bridge: any): void;
|
|
161
|
+
/**
|
|
162
|
+
* Remove bridge from network stack
|
|
163
|
+
*/
|
|
164
|
+
removeBridge(name: string): Promise<boolean>;
|
|
165
|
+
/**
|
|
166
|
+
* Get bridge by name
|
|
167
|
+
*/
|
|
168
|
+
getBridge(name: string): any | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* Get all bridges
|
|
171
|
+
*/
|
|
172
|
+
getAllBridges(): any[];
|
|
173
|
+
/**
|
|
174
|
+
* Get bridges by namespace
|
|
175
|
+
*/
|
|
176
|
+
getBridgesByNamespace(namespace: string): any[];
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=NetworkStack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkStack.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/NetworkStack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkStack.example.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/NetworkStack.example.ts"],"names":[],"mappings":"AACA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkStack.test.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/NetworkStack.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { VirtualRequestHandler } from '../index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Port Bridge - Bridges virtual ports to real host network
|
|
4
|
+
* Allows accessing virtual HTTP servers from the host machine
|
|
5
|
+
*/
|
|
6
|
+
export declare class PortBridge {
|
|
7
|
+
private portRegistry;
|
|
8
|
+
private forwardedPorts;
|
|
9
|
+
constructor(portRegistry: Map<number, VirtualRequestHandler>);
|
|
10
|
+
/**
|
|
11
|
+
* Forward a virtual port to the real host network
|
|
12
|
+
* Returns a URL that can be accessed from the host browser
|
|
13
|
+
*/
|
|
14
|
+
forward(virtualPort: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Stop forwarding a port
|
|
17
|
+
*/
|
|
18
|
+
unforward(virtualPort: number): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Handle a real HTTP request and forward to virtual port
|
|
21
|
+
*/
|
|
22
|
+
handleRequest(realPort: number, method: string, path: string, headers: Record<string, string>, body: string): Promise<{
|
|
23
|
+
statusCode: number;
|
|
24
|
+
headers: Record<string, string>;
|
|
25
|
+
body: string;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Get all forwarded ports
|
|
29
|
+
*/
|
|
30
|
+
getForwardedPorts(): Array<{
|
|
31
|
+
virtual: number;
|
|
32
|
+
real: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Create a simple browser-accessible proxy endpoint
|
|
36
|
+
* Returns HTML with a link to access the virtual server
|
|
37
|
+
*/
|
|
38
|
+
createAccessPage(virtualPort: number): string;
|
|
39
|
+
/**
|
|
40
|
+
* Find an available real port number
|
|
41
|
+
*/
|
|
42
|
+
private findAvailablePort;
|
|
43
|
+
/**
|
|
44
|
+
* Create a simple in-browser proxy using fetch
|
|
45
|
+
* This allows accessing virtual servers via URLs like /proxy/3000/
|
|
46
|
+
*/
|
|
47
|
+
installBrowserProxy(): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=PortBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortBridge.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/PortBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAmC,MAAM,aAAa,CAAC;AAE1F;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,cAAc,CAA6B;gBAEvC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAI5D;;;OAGG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAUpC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAsDjF;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAO7D;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAsD7C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;OAGG;IACH,mBAAmB,IAAI,IAAI;CAK5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { RouteEntry } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Routing table for IP packet routing
|
|
4
|
+
* Implements longest prefix matching
|
|
5
|
+
*/
|
|
6
|
+
export declare class RoutingTable {
|
|
7
|
+
private routes;
|
|
8
|
+
/**
|
|
9
|
+
* Add route to table
|
|
10
|
+
*/
|
|
11
|
+
addRoute(route: RouteEntry): void;
|
|
12
|
+
/**
|
|
13
|
+
* Remove route from table
|
|
14
|
+
*/
|
|
15
|
+
removeRoute(destination: string, iface: string, namespace: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Lookup route for destination IP
|
|
18
|
+
* Uses longest prefix matching
|
|
19
|
+
*/
|
|
20
|
+
lookup(ip: string, namespace: string): RouteEntry | null;
|
|
21
|
+
/**
|
|
22
|
+
* Get all routes for namespace
|
|
23
|
+
*/
|
|
24
|
+
getRoutes(namespace?: string): RouteEntry[];
|
|
25
|
+
/**
|
|
26
|
+
* Clear all routes
|
|
27
|
+
*/
|
|
28
|
+
clear(namespace?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Check if IP matches route destination
|
|
31
|
+
* Returns prefix length if match, null otherwise
|
|
32
|
+
*/
|
|
33
|
+
private matchesRoute;
|
|
34
|
+
/**
|
|
35
|
+
* Convert IPv4 address to bit array
|
|
36
|
+
*/
|
|
37
|
+
private ipToBits;
|
|
38
|
+
/**
|
|
39
|
+
* Sort routes by prefix length (longest first) then metric
|
|
40
|
+
*/
|
|
41
|
+
private sortRoutes;
|
|
42
|
+
/**
|
|
43
|
+
* Get prefix length from CIDR notation
|
|
44
|
+
*/
|
|
45
|
+
private getPrefixLength;
|
|
46
|
+
/**
|
|
47
|
+
* Format routing table for display
|
|
48
|
+
*/
|
|
49
|
+
toString(namespace?: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* Convert CIDR to netmask
|
|
52
|
+
*/
|
|
53
|
+
private cidrToNetmask;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=RoutingTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoutingTable.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/RoutingTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAoB;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAejC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAa3E;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAkBxD;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;IAO3C;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA4BpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAuBpC;;OAEG;IACH,OAAO,CAAC,aAAa;CAYtB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Socket as ISocket, SocketType, SocketState, SocketAddress, Packet } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Virtual socket implementation
|
|
4
|
+
* Mimics POSIX socket API
|
|
5
|
+
*/
|
|
6
|
+
export declare class Socket implements ISocket {
|
|
7
|
+
fd: number;
|
|
8
|
+
type: SocketType;
|
|
9
|
+
state: SocketState;
|
|
10
|
+
localAddress?: SocketAddress;
|
|
11
|
+
remoteAddress?: SocketAddress;
|
|
12
|
+
namespace: string;
|
|
13
|
+
private receiveQueue;
|
|
14
|
+
private acceptQueue;
|
|
15
|
+
private backlog;
|
|
16
|
+
private receiveWaiters;
|
|
17
|
+
private acceptWaiters;
|
|
18
|
+
private closeCallback?;
|
|
19
|
+
constructor(fd: number, type: SocketType, namespace: string, closeCallback?: () => void);
|
|
20
|
+
/**
|
|
21
|
+
* Bind socket to address
|
|
22
|
+
*/
|
|
23
|
+
bind(address: SocketAddress): void;
|
|
24
|
+
/**
|
|
25
|
+
* Connect to remote address
|
|
26
|
+
*/
|
|
27
|
+
connect(address: SocketAddress): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Listen for connections
|
|
30
|
+
*/
|
|
31
|
+
listen(backlog?: number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Accept incoming connection
|
|
34
|
+
*/
|
|
35
|
+
accept(): Promise<Socket>;
|
|
36
|
+
/**
|
|
37
|
+
* Send data through socket
|
|
38
|
+
*/
|
|
39
|
+
send(data: Uint8Array): Promise<number>;
|
|
40
|
+
/**
|
|
41
|
+
* Receive data from socket
|
|
42
|
+
*/
|
|
43
|
+
recv(maxBytes: number): Promise<Uint8Array>;
|
|
44
|
+
/**
|
|
45
|
+
* Close socket
|
|
46
|
+
*/
|
|
47
|
+
close(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Deliver packet to socket (called by NetworkStack)
|
|
50
|
+
*/
|
|
51
|
+
deliverPacket(packet: Packet): void;
|
|
52
|
+
/**
|
|
53
|
+
* Allocate ephemeral port (49152-65535)
|
|
54
|
+
*/
|
|
55
|
+
private allocateEphemeralPort;
|
|
56
|
+
/**
|
|
57
|
+
* Allocate ephemeral file descriptor
|
|
58
|
+
*/
|
|
59
|
+
private allocateEphemeralFd;
|
|
60
|
+
/**
|
|
61
|
+
* Get socket info string (for netstat)
|
|
62
|
+
*/
|
|
63
|
+
toString(): string;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=Socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Socket.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/Socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,IAAI,OAAO,EACjB,UAAU,EACV,WAAW,EACX,aAAa,EACb,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,MAAO,YAAW,OAAO;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,aAAa,CAAC,CAAa;gBAGjC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,IAAI;IAS5B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQlC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD;;OAEG;IACH,MAAM,CAAC,OAAO,SAAM,GAAG,IAAI;IAa3B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAiB/B;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7C;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmBjD;;OAEG;IACH,KAAK,IAAI,IAAI;IA2Bb;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IA+BnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,QAAQ,IAAI,MAAM;CAYnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network stack exports
|
|
3
|
+
*/
|
|
4
|
+
export { NetworkStack } from './NetworkStack.js';
|
|
5
|
+
export { NetworkInterface } from './NetworkInterface.js';
|
|
6
|
+
export { NetworkNamespace } from './NetworkNamespace.js';
|
|
7
|
+
export { RoutingTable } from './RoutingTable.js';
|
|
8
|
+
export { DNSResolver } from './DNSResolver.js';
|
|
9
|
+
export { Socket } from './Socket.js';
|
|
10
|
+
export type { IPAddress, InterfaceState, InterfaceStats, NetworkInterface as INetworkInterface, RouteEntry, SocketType, SocketState, SocketAddress, Socket as ISocket, Packet, DNSRecordType, DNSRecord, NetworkNamespace as INetworkNamespace, TunnelType, NetworkTunnel, PortBinding, } from './types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kernel/network/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,YAAY,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,gBAAgB,IAAI,iBAAiB,EACrC,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,MAAM,IAAI,OAAO,EACjB,MAAM,EACN,aAAa,EACb,SAAS,EACT,gBAAgB,IAAI,iBAAiB,EACrC,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { NetworkTunnel, Packet, TunnelType } from '../types.js';
|
|
2
|
+
import { NetworkInterface } from '../NetworkInterface.js';
|
|
3
|
+
import { NetworkStack } from '../NetworkStack.js';
|
|
4
|
+
/**
|
|
5
|
+
* Base class for all tunnel implementations
|
|
6
|
+
* Provides common functionality for tunnel management
|
|
7
|
+
*/
|
|
8
|
+
export declare abstract class BaseTunnel implements Omit<NetworkTunnel, 'interface'> {
|
|
9
|
+
id: string;
|
|
10
|
+
abstract type: TunnelType;
|
|
11
|
+
state: 'up' | 'down';
|
|
12
|
+
interface: NetworkInterface;
|
|
13
|
+
config: Record<string, unknown>;
|
|
14
|
+
protected networkStack: NetworkStack;
|
|
15
|
+
protected namespace: string;
|
|
16
|
+
protected mtu: number;
|
|
17
|
+
constructor(id: string, networkStack: NetworkStack, namespace?: string, mtu?: number);
|
|
18
|
+
/**
|
|
19
|
+
* Get tunnel interface name prefix (tun, gre, etc.)
|
|
20
|
+
*/
|
|
21
|
+
protected abstract getTunnelPrefix(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Bring tunnel up
|
|
24
|
+
*/
|
|
25
|
+
up(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Bring tunnel down
|
|
28
|
+
*/
|
|
29
|
+
down(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Setup routing for tunnel (override if needed)
|
|
32
|
+
*/
|
|
33
|
+
protected setupRouting(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Teardown routing for tunnel (override if needed)
|
|
36
|
+
*/
|
|
37
|
+
protected teardownRouting(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Send packet through tunnel (must be implemented by subclass)
|
|
40
|
+
*/
|
|
41
|
+
abstract send(packet: Packet): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Receive packet from tunnel (must be implemented by subclass)
|
|
44
|
+
*/
|
|
45
|
+
abstract recv(): Promise<Packet>;
|
|
46
|
+
/**
|
|
47
|
+
* Update tunnel statistics
|
|
48
|
+
*/
|
|
49
|
+
protected updateStats(bytes: number, direction: 'tx' | 'rx', error?: boolean): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get tunnel status string
|
|
52
|
+
*/
|
|
53
|
+
toString(): string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=BaseTunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTunnel.d.ts","sourceRoot":"","sources":["../../../../src/kernel/network/tunnel/BaseTunnel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;GAGG;AACH,8BAAsB,UAAW,YAAW,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,KAAK,EAAE,IAAI,GAAG,MAAM,CAAU;IAC9B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;gBAGpB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,YAAY,EAC1B,SAAS,SAAY,EACrB,GAAG,SAAO;IAaZ;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,MAAM;IAE5C;;OAEG;IACG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,UAAQ,GAAG,IAAI;IAcjF;;OAEG;IACH,QAAQ,IAAI,MAAM;CAQnB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Packet } from '../types.js';
|
|
2
|
+
import { NetworkInterface } from '../NetworkInterface.js';
|
|
3
|
+
import { NetworkStack } from '../NetworkStack.js';
|
|
4
|
+
/**
|
|
5
|
+
* VETH Pair - Virtual Ethernet Device Pair
|
|
6
|
+
*
|
|
7
|
+
* Creates two virtual network interfaces that are directly connected.
|
|
8
|
+
* Packets sent to one end appear immediately on the other end.
|
|
9
|
+
* Like a virtual Ethernet cable connecting two namespaces.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
* ip link add veth0 type veth peer name veth1
|
|
13
|
+
* ip link set veth1 netns container1
|
|
14
|
+
*/
|
|
15
|
+
export declare class VETHPair {
|
|
16
|
+
id: string;
|
|
17
|
+
veth0: NetworkInterface;
|
|
18
|
+
veth1: NetworkInterface;
|
|
19
|
+
state: 'up' | 'down';
|
|
20
|
+
private networkStack;
|
|
21
|
+
private queue0;
|
|
22
|
+
private queue1;
|
|
23
|
+
private waiters0;
|
|
24
|
+
private waiters1;
|
|
25
|
+
constructor(id: string, name0: string, name1: string, networkStack: NetworkStack, namespace0?: string, namespace1?: string);
|
|
26
|
+
/**
|
|
27
|
+
* Bring both interfaces up
|
|
28
|
+
*/
|
|
29
|
+
up(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Bring both interfaces down
|
|
32
|
+
*/
|
|
33
|
+
down(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Send packet from veth0 to veth1
|
|
36
|
+
*/
|
|
37
|
+
send0to1(packet: Packet): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Send packet from veth1 to veth0
|
|
40
|
+
*/
|
|
41
|
+
send1to0(packet: Packet): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Receive packet on veth0 (sent from veth1)
|
|
44
|
+
*/
|
|
45
|
+
recv0(): Promise<Packet>;
|
|
46
|
+
/**
|
|
47
|
+
* Receive packet on veth1 (sent from veth0)
|
|
48
|
+
*/
|
|
49
|
+
recv1(): Promise<Packet>;
|
|
50
|
+
/**
|
|
51
|
+
* Move one end of the VETH pair to a different namespace
|
|
52
|
+
*/
|
|
53
|
+
moveToNamespace(which: 0 | 1, namespace: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Generate MAC address for VETH interface
|
|
56
|
+
*/
|
|
57
|
+
private generateMAC;
|
|
58
|
+
/**
|
|
59
|
+
* Get VETH pair status string
|
|
60
|
+
*/
|
|
61
|
+
toString(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Get interface by name
|
|
64
|
+
*/
|
|
65
|
+
getInterface(name: string): NetworkInterface | null;
|
|
66
|
+
/**
|
|
67
|
+
* Get peer interface
|
|
68
|
+
*/
|
|
69
|
+
getPeer(name: string): NetworkInterface | null;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=VETHPair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VETHPair.d.ts","sourceRoot":"","sources":["../../../../src/kernel/network/tunnel/VETHPair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,IAAI,GAAG,MAAM,CAAU;IAE9B,OAAO,CAAC,YAAY,CAAe;IAGnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAuC;gBAGrD,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,UAAU,SAAY,EACtB,UAAU,SAAY;IAcxB;;OAEG;IACG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7C;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAc9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAc9B;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrE;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAUlB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAMnD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAK/C"}
|