Skip to content

Commit 6b6fc4c

Browse files
committed
servers: moved initialization stub out of main
1 parent 99a1c3f commit 6b6fc4c

File tree

3 files changed

+68
-29
lines changed

3 files changed

+68
-29
lines changed

src/include/kernel/servers.h

+4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <stdint.h>
1313

14+
#define SERVER_MAX_CONNECTIONS 512
1415
#define SERVER_MAX_SIZE 0x80000 // max msg size is 512 KiB
1516
#define SERVER_KERNEL_PATH "lux:///kernel" // not a real file, special path
1617
#define SERVER_LUMEN_PATH "lux:///lumen" // likewise not a real file
@@ -65,3 +66,6 @@ typedef struct {
6566
uint64_t buffer; // pointer
6667
uint16_t w, h, pitch, bpp;
6768
} FramebufferResponse;
69+
70+
void serverInit();
71+
void serverIdle();

src/main.c

+1-29
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,7 @@ void *idleThread(void *args) {
2323

2424
void *kernelThread(void *args) {
2525
// open the kernel socket for server communication
26-
struct sockaddr_un addr;
27-
addr.sun_family = AF_UNIX;
28-
strcpy(addr.sun_path, SERVER_KERNEL_PATH); // this is a special path and not a true file
29-
30-
int sd = socket(NULL, AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
31-
if(sd < 0) {
32-
KERROR("failed to open kernel socket: error code %d\n", -1*sd);
33-
while(1) platformHalt();
34-
}
35-
36-
int status = bind(NULL, sd, (const struct sockaddr *)&addr, sizeof(struct sockaddr_un));
37-
if(status) {
38-
KERROR("failed to bind kernel socket: error code %d\n", -1*status);
39-
while(1) platformHalt();
40-
}
41-
42-
status = listen(NULL, sd, 2048);
43-
if(status) {
44-
KERROR("failed to listen to kernel socket: error code %d\n", -1*status);
45-
while(1) platformHalt();
46-
}
47-
48-
KDEBUG("kernel is listening on socket %d: %s\n", sd, addr.sun_path);
49-
50-
void *buffer = malloc(SERVER_MAX_SIZE);
51-
if(!buffer) {
52-
KERROR("failed to allocate memory for server buffer\n");
53-
while(1) platformHalt();
54-
}
26+
serverInit();
5527

5628
KDEBUG("attempt to load lumen from ramdisk...\n");
5729

src/servers/handle.c

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* lux - a lightweight unix-like operating system
3+
* Omar Elghoul, 2024
4+
*
5+
* Core Microkernel
6+
*/
7+
8+
/* Kernel-Server Communication */
9+
10+
#include <stdlib.h>
11+
#include <string.h>
12+
#include <platform/platform.h>
13+
#include <kernel/logger.h>
14+
#include <kernel/socket.h>
15+
#include <kernel/servers.h>
16+
17+
static int kernelSocket = 0, lumenSocket = 0;
18+
static int *connections; // connected socket descriptors
19+
static struct sockaddr *connaddr; // connected socket addresses
20+
static socklen_t *connlen; // length of connected socket addresses
21+
static void *buffer;
22+
static int connectionCount = 0;
23+
24+
/* serverInit(): initializes the server subsystem
25+
* params: none
26+
* returns: nothing
27+
*/
28+
29+
void serverInit() {
30+
struct sockaddr_un addr;
31+
addr.sun_family = AF_UNIX;
32+
strcpy(addr.sun_path, SERVER_KERNEL_PATH); // this is a special path and not a true file
33+
34+
kernelSocket = socket(NULL, AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
35+
if(kernelSocket < 0) {
36+
KERROR("failed to open kernel socket: error code %d\n", -1*kernelSocket);
37+
while(1) platformHalt();
38+
}
39+
40+
int status = bind(NULL, kernelSocket, (const struct sockaddr *)&addr, sizeof(struct sockaddr_un));
41+
if(status) {
42+
KERROR("failed to bind kernel socket: error code %d\n", -1*status);
43+
while(1) platformHalt();
44+
}
45+
46+
status = listen(NULL, kernelSocket, SERVER_MAX_CONNECTIONS);
47+
if(status) {
48+
KERROR("failed to listen to kernel socket: error code %d\n", -1*status);
49+
while(1) platformHalt();
50+
}
51+
52+
connections = calloc(SERVER_MAX_CONNECTIONS, sizeof(int));
53+
connaddr = calloc(SERVER_MAX_CONNECTIONS, sizeof(struct sockaddr));
54+
connlen = calloc(SERVER_MAX_CONNECTIONS, sizeof(socklen_t));
55+
buffer = malloc(SERVER_MAX_SIZE);
56+
57+
if(!connections || !connaddr || !connlen || !buffer) {
58+
KERROR("failed to allocate memory for incoming connections\n");
59+
while(1) platformHalt();
60+
}
61+
62+
KDEBUG("kernel is listening on socket %d: %s\n", kernelSocket, addr.sun_path);
63+
}

0 commit comments

Comments
 (0)