diff --git a/unikernel-demo/Makefile b/unikernel-demo/Makefile deleted file mode 100644 index 324dca0b..00000000 --- a/unikernel-demo/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -export ukl-obj-m := fs1.o - -all: - $(MAKE) -C ../whiterose/ UKL=$(PWD) bzImage -qemu: - qemu-system-x86_64 -enable-kvm -m 1G -s -kernel ../whiterose/arch/x86/boot/bzImage -append "console=ttyS0 ukl quiet" -nographic diff --git a/unikernel-demo/fs1/Makefile b/unikernel-demo/fs1/Makefile new file mode 100644 index 00000000..37dc06db --- /dev/null +++ b/unikernel-demo/fs1/Makefile @@ -0,0 +1,9 @@ +export ukl-obj-m := main.o + +all: + $(MAKE) -C ../../whiterose/ UKL=$(PWD) bzImage + +qemu: + qemu-system-x86_64 -enable-kvm -s -m 1G -nographic -cpu host\ + -kernel ../whiterose/arch/x86/boot/bzImage\ + -append "console=ttyS0 ukl quiet"\ diff --git a/unikernel-demo/fs1.c b/unikernel-demo/fs1/main.c similarity index 100% rename from unikernel-demo/fs1.c rename to unikernel-demo/fs1/main.c diff --git a/unikernel-demo/network1/Makefile b/unikernel-demo/network1/Makefile new file mode 100644 index 00000000..4e60eb44 --- /dev/null +++ b/unikernel-demo/network1/Makefile @@ -0,0 +1,26 @@ +PACKAGES = bash coreutils iputils net-tools strace util-linux iproute pciutils +TARGET = min-initrd.d +SMD = supermin.d +bzImage = ../../whiterose/x86/boot/bzImage + +export ukl-obj-m := main.o + +all: $(target)/root + $(MAKE) -C ../../whiterose/ UKL=$(PWD) bzImage + +supermin.d/packages: + supermin --prepare $(PACKAGES) -o $(SMD) + +supermin.d/init.tar.gz: init + tar zcf $@ $^ + +$(TARGET)/root: supermin.d/packages supermin.d/init.tar.gz + supermin --build -v -v -v --size 8G --if-newer --format ext2 supermin.d -o ${@D} + +qemu: + qemu-system-x86_64 -enable-kvm -s -m 1G -nographic -cpu host\ + -kernel $(bzImage)\ + -initrd min-initrd.d/initrd\ + -hda min-initrd.d/root\ + -append "console=ttyS0 ukl quiet"\ + --device virtio-net,netdev=usernet -netdev user,id=usernet,hostfwd=tcp::5555-:5555 diff --git a/unikernel-demo/network1/main.c b/unikernel-demo/network1/main.c new file mode 100644 index 00000000..a1d2a9cf --- /dev/null +++ b/unikernel-demo/network1/main.c @@ -0,0 +1,49 @@ +// https://github.com/mafintosh/echo-servers.c/blob/master/tcp-echo-server.c + +#include +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 1024 + +int main(int argc, char *argv[]) { + + int port = 5555; + + int server_fd, client_fd, err; + struct sockaddr_in server, client; + char buf[BUFFER_SIZE]; + + server_fd = socket(AF_INET, SOCK_STREAM, 0); // ukl_socket + + server.sin_family = AF_INET; + server.sin_port = __builtin_bswap16 (port); + server.sin_addr.s_addr = (uint32_t) 0x00000000; + + int opt_val = 1; + setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt_val, sizeof opt_val); // ukl_ + + err = bind(server_fd, (struct sockaddr *) &server, sizeof(server)); + + err = listen(server_fd, 128); + + while (1) { + socklen_t client_len = sizeof(client); + client_fd = accept(server_fd, (struct sockaddr *) &client, &client_len); // ukl_accept + + while (1) { + int read = recv(client_fd, buf, BUFFER_SIZE, 0); // (recvfrom, fd, buf, len, flags, NULL, NULL); + + if (!read) break; + + err = send(client_fd, buf, read, 0); // (sendto, fd, buf, len, flags, NULL, 0); + + } + } + + return 0; +}