Path: blob/main/core/kernel/src/wasm/posix/netif.ts
1068 views
/*1Functions from net/if.h23NOTE: node.js has require('os').networkInterfaces(), but it is not equivalent4to the system calls in net/if.h. E.g., on my mac if_indextoname(2) is "gif0",5but "gif0" isn't in require('os').networkInterfaces(). This is because6networkInterface "Returns an object containing network interfaces that7have been assigned a network address." and gif0 hasn't been.8*/910import { notImplemented } from "./util";11import constants from "./constants";1213export default function netif({ posix, recv, send, callFunction }) {14return {15// char *if_indextoname(unsigned int ifindex, char *ifname);16if_indextoname: (ifindex: number, ifnamePtr: number): number => {17const { if_indextoname } = posix;18if (if_indextoname == null) {19notImplemented("if_indextoname");20}21let ifname;22try {23ifname = if_indextoname(ifindex);24} catch (_err) {25return 0;26}27send.string(ifname, {28ptr: ifnamePtr,29len: constants.IFNAMSIZ,30});31return ifnamePtr;32},3334// unsigned int if_nametoindex(const char *ifname);35if_nametoindex: (ifnamePtr: number): number => {36const { if_nametoindex } = posix;37if (if_nametoindex == null) {38notImplemented("if_nametoindex");39}40const ifname = recv.string(ifnamePtr);41try {42return if_nametoindex(ifname);43} catch (_err) {44return 0;45}46},4748if_nameindex: (): number => {49const { if_nameindex } = posix;50try {51if (if_nameindex == null) {52const ptr = callFunction("createNameIndexArray", 0);53if (ptr == 0) {54throw Error("out of memory");55}56return ptr;57}58const ni = if_nameindex();59const ptr = callFunction("createNameIndexArray", ni.length);60if (ptr == 0) {61throw Error("out of memory");62}63for (let i = 0; i < ni.length; i++) {64callFunction(65"setNameIndexElement",66ptr,67i,68ni[i][0],69send.string(ni[i][1])70);71}72return ptr;73} catch (err) {74// ret = 0 since pointer and null pointer indicates error.75err.ret = 0;76throw err;77}78},7980if_freenameindex: (ptr): void => {81callFunction("freeNameIndexArray", ptr);82},83};84}858687