feat: implement montauk::service_log & add support to system services

This commit is contained in:
daniel committed 2026-08-28 11:56:29 +02:00
1 parent 0d23db8a0e
commit b1f1cfe32b
8 files changed
+117 -62

No files matched your search

+28 -27
View File
@@ -6,6 +6,7 @@
*/
#include <montauk/syscall.h>
#include <montauk/service_log.h>
#include <montauk/string.h>
#include <libc/stdio.h>
@@ -247,7 +248,7 @@ static constexpr uint32_t BROADCAST_IP = 0xFFFFFFFF;
extern "C" void _start() {
char msg[256];
montauk::print("MontaukOS DHCP Client\n");
montauk::service_log("MontaukOS DHCP Client");
// 1. Get MAC address
montauk::abi::NetCfg origCfg;
@@ -255,8 +256,8 @@ extern "C" void _start() {
char macStr[32];
format_mac(macStr, sizeof(macStr), origCfg.macAddress);
snprintf(msg, sizeof(msg), "MAC address: %s\n", macStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), "MAC address: %s", macStr);
montauk::service_log(msg);
// 2. Set IP to 0.0.0.0 to allow broadcast send/receive
montauk::abi::NetCfg zeroCfg;
@@ -268,13 +269,13 @@ extern "C" void _start() {
// 3. Create UDP socket and bind to port 68
int fd = montauk::socket(montauk::abi::SOCK_UDP);
if (fd < 0) {
montauk::print("Error: failed to create UDP socket\n");
montauk::service_log("Error: failed to create UDP socket");
montauk::set_netcfg(&origCfg);
montauk::exit(1);
}
if (montauk::bind(fd, DHCP_CLIENT_PORT) < 0) {
montauk::print("Error: failed to bind to port 68\n");
montauk::service_log("Error: failed to bind to port 68");
montauk::closesocket(fd);
montauk::set_netcfg(&origCfg);
montauk::exit(1);
@@ -284,9 +285,9 @@ extern "C" void _start() {
DhcpPacket pkt;
int pktLen = build_discover(&pkt, origCfg.macAddress);
montauk::print("Sending DHCPDISCOVER...\n");
montauk::service_log("Sending DHCPDISCOVER...");
if (montauk::sendto(fd, (const void*)&pkt, pktLen, BROADCAST_IP, DHCP_SERVER_PORT) < 0) {
montauk::print("Error: failed to send DISCOVER\n");
montauk::service_log("Error: failed to send DISCOVER");
montauk::closesocket(fd);
montauk::set_netcfg(&origCfg);
montauk::exit(1);
@@ -298,7 +299,7 @@ extern "C" void _start() {
uint64_t startMs = montauk::get_milliseconds();
bool gotOffer = false;
montauk::print("Waiting for DHCPOFFER...\n");
montauk::service_log("Waiting for DHCPOFFER...");
while (montauk::get_milliseconds() - startMs < 10000) {
uint32_t srcIp;
uint16_t srcPort;
@@ -318,7 +319,7 @@ extern "C" void _start() {
}
if (!gotOffer) {
montauk::print("Error: no DHCPOFFER received (timeout)\n");
montauk::service_log("Error: no DHCPOFFER received (timeout)");
montauk::closesocket(fd);
montauk::set_netcfg(&origCfg);
montauk::exit(1);
@@ -326,15 +327,15 @@ extern "C" void _start() {
char ipStr[32];
format_ip(ipStr, sizeof(ipStr), offer.offeredIp);
snprintf(msg, sizeof(msg), "Received OFFER: %s\n", ipStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), "Received OFFER: %s", ipStr);
montauk::service_log(msg);
// 6. Send REQUEST
pktLen = build_request(&pkt, origCfg.macAddress, offer.offeredIp, offer.serverId);
montauk::print("Sending DHCPREQUEST...\n");
montauk::service_log("Sending DHCPREQUEST...");
if (montauk::sendto(fd, (const void*)&pkt, pktLen, BROADCAST_IP, DHCP_SERVER_PORT) < 0) {
montauk::print("Error: failed to send REQUEST\n");
montauk::service_log("Error: failed to send REQUEST");
montauk::closesocket(fd);
montauk::set_netcfg(&origCfg);
montauk::exit(1);
@@ -344,7 +345,7 @@ extern "C" void _start() {
bool gotAck = false;
startMs = montauk::get_milliseconds();
montauk::print("Waiting for DHCPACK...\n");
montauk::service_log("Waiting for DHCPACK...");
while (montauk::get_milliseconds() - startMs < 10000) {
uint32_t srcIp;
uint16_t srcPort;
@@ -357,7 +358,7 @@ extern "C" void _start() {
break;
}
if (offer.valid && offer.msgType == DHCPNAK) {
montauk::print("Error: received DHCPNAK from server\n");
montauk::service_log("Error: received DHCPNAK from server");
montauk::closesocket(fd);
montauk::set_netcfg(&origCfg);
montauk::exit(1);
@@ -372,7 +373,7 @@ extern "C" void _start() {
montauk::closesocket(fd);
if (!gotAck) {
montauk::print("Error: no DHCPACK received (timeout)\n");
montauk::service_log("Error: no DHCPACK received (timeout)");
montauk::set_netcfg(&origCfg);
montauk::exit(1);
}
@@ -386,29 +387,29 @@ extern "C" void _start() {
montauk::set_netcfg(&newCfg);
// 9. Print results
montauk::print("\nDHCP configuration applied:\n");
montauk::service_log("DHCP configuration applied:");
format_ip(ipStr, sizeof(ipStr), offer.offeredIp);
snprintf(msg, sizeof(msg), " IP Address: %s\n", ipStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), " IP Address: %s", ipStr);
montauk::service_log(msg);
format_ip(ipStr, sizeof(ipStr), offer.subnetMask);
snprintf(msg, sizeof(msg), " Subnet Mask: %s\n", ipStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), " Subnet Mask: %s", ipStr);
montauk::service_log(msg);
format_ip(ipStr, sizeof(ipStr), offer.router);
snprintf(msg, sizeof(msg), " Gateway: %s\n", ipStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), " Gateway: %s", ipStr);
montauk::service_log(msg);
if (offer.dns != 0) {
format_ip(ipStr, sizeof(ipStr), offer.dns);
snprintf(msg, sizeof(msg), " DNS Server: %s\n", ipStr);
montauk::print(msg);
snprintf(msg, sizeof(msg), " DNS Server: %s", ipStr);
montauk::service_log(msg);
}
if (offer.leaseTime != 0) {
snprintf(msg, sizeof(msg), " Lease Time: %u seconds\n", offer.leaseTime);
montauk::print(msg);
snprintf(msg, sizeof(msg), " Lease Time: %u seconds", offer.leaseTime);
montauk::service_log(msg);
}
montauk::exit(0);