HNHacker News
TopNewBestAskShowJobs

cihangir

21 karma · joined July 6, 2016

submissionscomments
cihangir··on Let’s code a TCP/IP stack, 1: Ethernet and ARP (2016)
Years ago, I attempted to build a user-space network stack in C [0] that processes raw packets through the TUN interface and got it working to a certain point. It currently includes a simple shell that allows configuring IP addresses, routes, and such. A hybrid structure reminiscent of both mbuf and sk_buf is used to hold the network packets. However, after completing the UDP implementation I didn't find the time or motivation to implement TCP. If you want to check it out, here's the link:

[0] https://github.com/cakturk/unet

cihangir··on getopt() but smaller
Plan 9’s ARG(2) [0] macros are worth a look too. No dependencies at all, just plain macros, super lightweight and easy to use.

[0] https://9fans.github.io/plan9port/man/man3/arg.html

cihangir··on OOP in C
Last time I checked, C++ used function pointers behind the scenes to achieve virtual method dispatch.
cihangir··on OOP in C
Linux kernel code makes heavy use of object-oriented design patterns [0]. It's not the best of its kind, but still provides a reasonable example of how OOP can be achieved in C: https://gist.github.com/cakturk/cd75d0ca588151c86d641cb6d5a1...

[0] https://lwn.net/Articles/444910/

cihangir··on Why doesn’t Windows use 64-bit virtual address space below 0x00000000`7ffe0000?
> That is a special page of memory that is mapped read-only into user mode from kernel mode, and it contains things like the current time, so that applications can get this information quickly without having to take a kernel transition. This page is at a fixed location for performance reasons.

I didn't know there was a vdso-like mechanism in Windows as in Linux.