
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
71 lines
3.3 KiB
C
71 lines
3.3 KiB
C
#ifndef MINIX_NET_LWIP_IFADDR_H
|
|
#define MINIX_NET_LWIP_IFADDR_H
|
|
|
|
/* Possible values of ifdev_v6flags[] elements. */
|
|
#define IFADDR_V6F_AUTOCONF 0x01 /* autoconfigured address, no subnet */
|
|
#define IFADDR_V6F_TEMPORARY 0x02 /* temporary (privacy) address */
|
|
#define IFADDR_V6F_HWBASED 0x04 /* auto-derived from MAC address */
|
|
|
|
typedef int ifaddr_v4_num_t; /* interface IPv4 address number */
|
|
typedef int ifaddr_v6_num_t; /* interface IPv6 address number */
|
|
typedef int ifaddr_dl_num_t; /* interface link address number */
|
|
|
|
extern int ifaddr_auto_linklocal;
|
|
extern int ifaddr_accept_rtadv;
|
|
|
|
void ifaddr_init(struct ifdev * ifdev);
|
|
|
|
int ifaddr_v4_find(struct ifdev * ifdev, const struct sockaddr_in * addr,
|
|
ifaddr_v4_num_t * num);
|
|
int ifaddr_v4_enum(struct ifdev * ifdev, ifaddr_v4_num_t * num);
|
|
int ifaddr_v4_get(struct ifdev * ifdev, ifaddr_v4_num_t num,
|
|
struct sockaddr_in * addr, struct sockaddr_in * mask,
|
|
struct sockaddr_in * bcast, struct sockaddr_in * dest);
|
|
int ifaddr_v4_get_flags(struct ifdev * ifdev, ifaddr_v4_num_t num);
|
|
int ifaddr_v4_add(struct ifdev * ifdev, const struct sockaddr_in * addr,
|
|
const struct sockaddr_in * mask, const struct sockaddr_in * bcast,
|
|
const struct sockaddr_in * dest, int flags);
|
|
void ifaddr_v4_del(struct ifdev * ifdev, ifaddr_v4_num_t num);
|
|
void ifaddr_v4_clear(struct ifdev * ifdev);
|
|
struct ifdev *ifaddr_v4_map_by_addr(const ip4_addr_t * ip4addr);
|
|
|
|
int ifaddr_v6_find(struct ifdev * ifdev, const struct sockaddr_in6 * addr6,
|
|
ifaddr_v6_num_t * num);
|
|
int ifaddr_v6_enum(struct ifdev * ifdev, ifaddr_v6_num_t * num);
|
|
void ifaddr_v6_get(struct ifdev * ifdev, ifaddr_v6_num_t num,
|
|
struct sockaddr_in6 * addr6, struct sockaddr_in6 * mask6,
|
|
struct sockaddr_in6 * dest6);
|
|
int ifaddr_v6_get_flags(struct ifdev * ifdev, ifaddr_v6_num_t num);
|
|
void ifaddr_v6_get_lifetime(struct ifdev * ifdev, ifaddr_v6_num_t num,
|
|
struct in6_addrlifetime * lifetime);
|
|
int ifaddr_v6_add(struct ifdev * ifdev, const struct sockaddr_in6 * addr6,
|
|
const struct sockaddr_in6 * mask6, const struct sockaddr_in6 * dest6,
|
|
int flags, const struct in6_addrlifetime * lifetime);
|
|
void ifaddr_v6_del(struct ifdev * ifdev, ifaddr_v6_num_t num);
|
|
void ifaddr_v6_clear(struct ifdev * ifdev);
|
|
void ifaddr_v6_check(struct ifdev * ifdev);
|
|
void ifaddr_v6_set_up(struct ifdev * ifdev);
|
|
void ifaddr_v6_set_linklocal(struct ifdev * ifdev);
|
|
struct ifdev *ifaddr_v6_map_by_addr(const ip6_addr_t * ip6addr);
|
|
|
|
struct ifdev *ifaddr_map_by_addr(const ip_addr_t * ipaddr);
|
|
struct ifdev *ifaddr_map_by_subnet(const ip_addr_t * ipaddr);
|
|
const ip_addr_t *ifaddr_select(const ip_addr_t * dst_addr,
|
|
struct ifdev * ifdev, struct ifdev ** ifdevp);
|
|
int ifaddr_is_zone_mismatch(const ip6_addr_t * ipaddr, struct ifdev * ifdev);
|
|
|
|
int ifaddr_dl_find(struct ifdev * ifdev, const struct sockaddr_dlx * addr,
|
|
socklen_t addr_len, ifaddr_dl_num_t * num);
|
|
int ifaddr_dl_enum(struct ifdev * ifdev, ifaddr_dl_num_t * num);
|
|
void ifaddr_dl_get(struct ifdev * ifdev, ifaddr_dl_num_t num,
|
|
struct sockaddr_dlx * addr);
|
|
int ifaddr_dl_get_flags(struct ifdev * ifdev, ifaddr_dl_num_t num);
|
|
int ifaddr_dl_add(struct ifdev * ifdev, const struct sockaddr_dlx * addr,
|
|
socklen_t addr_len, int flags);
|
|
int ifaddr_dl_del(struct ifdev * ifdev, ifaddr_dl_num_t num);
|
|
void ifaddr_dl_clear(struct ifdev * ifdev);
|
|
void ifaddr_dl_update(struct ifdev * ifdev, const uint8_t * hwaddr,
|
|
int is_factory);
|
|
|
|
#endif /* !MINIX_NET_LWIP_IFADDR_H */
|