static apr_status_t dir_cleanup(void *thedir) { lkl_dir_t *dir = thedir; apr_status_t rc; rc = lkl_sys_close(dir->fd); return rc; }
int lkl_netdev_get_ifindex(int id) { struct lkl_ifreq ifr; int sock, ret; sock = lkl_sys_socket(LKL_AF_INET, LKL_SOCK_DGRAM, 0); if (sock < 0) return sock; snprintf(ifr.lkl_ifr_name, sizeof(ifr.lkl_ifr_name), "eth%d", id); ret = lkl_sys_ioctl(sock, LKL_SIOCGIFINDEX, (long)&ifr); lkl_sys_close(sock); return ret < 0 ? ret : ifr.lkl_ifr_ifindex; }
int lkl_set_ipv4_gateway(unsigned int addr) { struct lkl_rtentry re; int err, sock = lkl_sys_socket(LKL_AF_INET, LKL_SOCK_DGRAM, 0); if (sock < 0) return sock; memset(&re, 0, sizeof(re)); set_sockaddr((struct lkl_sockaddr_in *) &re.rt_dst, 0, 0); set_sockaddr((struct lkl_sockaddr_in *) &re.rt_genmask, 0, 0); set_sockaddr((struct lkl_sockaddr_in *) &re.rt_gateway, addr, 0); re.rt_flags = LKL_RTF_UP | LKL_RTF_GATEWAY; err = lkl_sys_ioctl(sock, LKL_SIOCADDRT, (long)&re); lkl_sys_close(sock); return err; }
static apr_status_t file_cleanup(wapr_file_t *file) { apr_status_t rv = APR_SUCCESS; int rc; rc = lkl_sys_close(file->filedes); if (0 == rc) { file->filedes = -1; if (file->flags & APR_DELONCLOSE) lkl_sys_unlink(file->fname); if (file->thlock) rv = apr_thread_mutex_destroy(file->thlock); } else rv = -rc; return rv; }
int lkl_if_set_mtu(int ifindex, int mtu) { struct lkl_ifreq ifr; int err, sock; sock = lkl_sys_socket(LKL_AF_INET, LKL_SOCK_DGRAM, 0); if (sock < 0) return sock; err = ifindex_to_name(sock, &ifr, ifindex); if (err < 0) return err; ifr.lkl_ifr_mtu = mtu; err = lkl_sys_ioctl(sock, LKL_SIOCSIFMTU, (long)&ifr); lkl_sys_close(sock); return err; }
int lkl_if_up(int ifindex) { struct lkl_ifreq ifr; int err, sock = lkl_sys_socket(LKL_AF_INET, LKL_SOCK_DGRAM, 0); if (sock < 0) return sock; err = ifindex_to_name(sock, &ifr, ifindex); if (err < 0) return err; err = lkl_sys_ioctl(sock, LKL_SIOCGIFFLAGS, (long)&ifr); if (!err) { ifr.lkl_ifr_flags |= LKL_IFF_UP; err = lkl_sys_ioctl(sock, LKL_SIOCSIFFLAGS, (long)&ifr); } lkl_sys_close(sock); return err; }
static void test_list_files(char * path) { int fd = lkl_sys_open(path, O_RDONLY|O_LARGEFILE|O_DIRECTORY, 0); if (fd >= 0) { char x[4096]; int count, reclen; struct __kernel_dirent *de; count = lkl_sys_getdents(fd, (struct __kernel_dirent*) x, sizeof(x)); ASSERT(count > 0); de=(struct __kernel_dirent*)x; while (count > 0) { reclen = de->d_reclen; DbgPrint("%s %ld\n", de->d_name, de->d_ino); de = (struct __kernel_dirent*) ((char*)de+reclen); count-=reclen; } lkl_sys_close(fd); } }
int lkl_if_set_ipv4(int ifindex, unsigned int addr, unsigned int netmask_len) { struct lkl_ifreq ifr; struct lkl_sockaddr_in *sin; int err, sock; sock = lkl_sys_socket(LKL_AF_INET, LKL_SOCK_DGRAM, 0); if (sock < 0) return sock; err = ifindex_to_name(sock, &ifr, ifindex); if (err < 0) return err; if (netmask_len >= 31) return -LKL_EINVAL; sin = (struct lkl_sockaddr_in *)&ifr.lkl_ifr_addr; set_sockaddr(sin, addr, 0); err = lkl_sys_ioctl(sock, LKL_SIOCSIFADDR, (long)&ifr); if (!err) { int netmask = (((1<<netmask_len)-1))<<(32-netmask_len); sin = (struct lkl_sockaddr_in *)&ifr.lkl_ifr_netmask; set_sockaddr(sin, htonl(netmask), 0); err = lkl_sys_ioctl(sock, LKL_SIOCSIFNETMASK, (long)&ifr); if (!err) { set_sockaddr(sin, htonl(ntohl(addr)|~netmask), 0); err = lkl_sys_ioctl(sock, LKL_SIOCSIFBRDADDR, (long)&ifr); } } lkl_sys_close(sock); return err; }
long lkl_close(unsigned int fd) { return lkl_set_errno(lkl_sys_close(fd)); }