
This commit adds a new TCP/IP service to MINIX 3. As its core, the service uses the lwIP TCP/IP stack for maintenance reasons. The service aims to be compatible with NetBSD userland, including its low-level network management utilities. It also aims to support modern features such as IPv6. In summary, the new LWIP service has support for the following main features: - TCP, UDP, RAW sockets with mostly standard BSD API semantics; - IPv6 support: host mode (complete) and router mode (partial); - most of the standard BSD API socket options (SO_); - all of the standard BSD API message flags (MSG_); - the most used protocol-specific socket and control options; - a default loopback interface and the ability to create one more; - configuration-free ethernet interfaces and driver tracking; - queuing and multiple concurrent requests to each ethernet driver; - standard ioctl(2)-based BSD interface management; - radix tree backed, destination-based routing; - routing sockets for standard BSD route reporting and management; - multicast traffic and multicast group membership tracking; - Berkeley Packet Filter (BPF) devices; - standard and custom sysctl(7) nodes for many internals; - a slab allocation based, hybrid static/dynamic memory pool model. Many of its modules come with fairly elaborate comments that cover many aspects of what is going on. The service is primarily a socket driver built on top of the libsockdriver library, but for BPF devices it is at the same time also a character driver. Change-Id: Ib0c02736234b21143915e5fcc0fda8fe408f046f
28 lines
1.0 KiB
C
28 lines
1.0 KiB
C
#ifndef MINIX_NET_LWIP_UTIL_H
|
|
#define MINIX_NET_LWIP_UTIL_H
|
|
|
|
/* util.c */
|
|
int util_timeval_to_ticks(const struct timeval * tv, clock_t * ticksp);
|
|
void util_ticks_to_timeval(clock_t ticks, struct timeval * tv);
|
|
int util_copy_data(const struct sockdriver_data * data, size_t len, size_t off,
|
|
const struct pbuf * pbuf, size_t skip, int copy_in);
|
|
ssize_t util_coalesce(char * buf, size_t max, const iovec_t * iov,
|
|
unsigned int iovcnt);
|
|
int util_convert_err(err_t err);
|
|
int util_is_root(endpoint_t user_endpt);
|
|
ssize_t util_pcblist(struct rmib_call * call, struct rmib_oldp * oldp,
|
|
const void *(*enum_proc)(const void *),
|
|
void (*get_info_proc)(struct kinfo_pcb *, const void *));
|
|
|
|
/*
|
|
* In our code, pbuf header adjustments should never fail. This wrapper checks
|
|
* that the pbuf_header() call succeeds, and panics otherwise.
|
|
*/
|
|
#define util_pbuf_header(pbuf,incr) \
|
|
do { \
|
|
if (pbuf_header((pbuf), (incr))) \
|
|
panic("unexpected pbuf header adjustment failure"); \
|
|
} while (0)
|
|
|
|
#endif /* !MINIX_NET_LWIP_UTIL_H */
|