Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
netutils.c
Go to the documentation of this file.
1#include "netutils.h"
2
3uint32_t vxInetAddr(const char* addr) {
4 uint32_t ip = 0;
5 uint8_t* b = (uint8_t*) &ip;
6
7 for (int i = 0; i < 4; i++) {
8 uint32_t octet = 0;
9 while (*addr >= '0' && *addr <= '9') {
10 octet = (octet * 10)
11 + (uint32_t) (*addr
12 - '0'); // FIX 1: cast int -> uint32_t
13 addr++;
14 }
15 b[i] = (uint8_t) octet;
16 if (*addr == '.') {
17 addr++;
18 } else if (*addr == '\0' && i < 3) {
19 return 0;
20 }
21 }
22
23 return ip;
24}
25
27 uint64_t sum = 0;
28
29 while (length >= 2) {
30 __asm__ volatile("addw (%1), %w0\n\t"
31 "adcq $0, %0\n\t"
32 : "+r"(sum)
33 : "r"(data)
34 : "memory");
35 data++;
36 length -= 2;
37 }
38
39 if (length) {
40 sum += *(uint8_t*) data;
41 }
42
43 sum = (sum & 0xFFFF) + (sum >> 16);
44 sum = (sum & 0xFFFF) + (sum >> 16);
45
46 return (uint16_t) ~sum;
47}
48
50 uint32_t sum = 0;
51 while (length >= 2) {
52 sum += *data++;
53 length -= 2;
54 }
55 if (length)
56 sum += *(uint8_t*) data;
57 return sum;
58}
59
60static int u8_to_str(uint8_t val, char* buf) {
61 int i = 0;
62
63 if (val >= 100) {
64 buf[i++] = '0' + (val / 100);
65 val %= 100;
66 buf[i++] = '0' + (val / 10);
67 buf[i++] = '0' + (val % 10);
68 } else if (val >= 10) {
69 buf[i++] = '0' + (val / 10);
70 buf[i++] = '0' + (val % 10);
71 } else {
72 buf[i++] = '0' + val;
73 }
74
75 return i;
76}
77
78char* vxInetNtoa(uint32_t ip, char* buffer) {
79 uint8_t* b = (uint8_t*) &ip;
80 int len = 0;
81
82 for (int i = 0; i < 4; i++) {
83 len += u8_to_str(b[i], buffer + len);
84 if (i < 3)
85 buffer[len++] = '.';
86 }
87
88 buffer[len] = '\0';
89 return buffer;
90}
volatile uint64_t addr
Definition e1000.hpp:0
volatile uint32_t buffer[5]
Definition ehci.hpp:8
struct fs_data data
Definition filesystem.h:1
char * vxInetNtoa(uint32_t ip, char *buffer)
Definition netutils.c:78
uint32_t checksum16_raw(const uint16_t *data, size_t length)
Definition netutils.c:49
static int u8_to_str(uint8_t val, char *buf)
Definition netutils.c:60
uint16_t checksum16_adc(const uint16_t *data, size_t length)
Definition netutils.c:26
uint32_t vxInetAddr(const char *addr)
Definition netutils.c:3
size_t len
Definition oct2bin.h:7
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
unsigned long uint64_t
Definition type.h:25
unsigned char uint8_t
Definition type.h:7
uint32_t length
Definition virtio.h:7