xref: /minix3/minix/net/lwip/ifaddr.h (revision ef8d499e2d2af900e9b2ab297171d7b088652482)
1*ef8d499eSDavid van Moolenbroek #ifndef MINIX_NET_LWIP_IFADDR_H
2*ef8d499eSDavid van Moolenbroek #define MINIX_NET_LWIP_IFADDR_H
3*ef8d499eSDavid van Moolenbroek 
4*ef8d499eSDavid van Moolenbroek /* Possible values of ifdev_v6flags[] elements. */
5*ef8d499eSDavid van Moolenbroek #define IFADDR_V6F_AUTOCONF	0x01	/* autoconfigured address, no subnet */
6*ef8d499eSDavid van Moolenbroek #define IFADDR_V6F_TEMPORARY	0x02	/* temporary (privacy) address */
7*ef8d499eSDavid van Moolenbroek #define IFADDR_V6F_HWBASED	0x04	/* auto-derived from MAC address */
8*ef8d499eSDavid van Moolenbroek 
9*ef8d499eSDavid van Moolenbroek typedef int ifaddr_v4_num_t;		/* interface IPv4 address number */
10*ef8d499eSDavid van Moolenbroek typedef int ifaddr_v6_num_t;		/* interface IPv6 address number */
11*ef8d499eSDavid van Moolenbroek typedef int ifaddr_dl_num_t;		/* interface link address number */
12*ef8d499eSDavid van Moolenbroek 
13*ef8d499eSDavid van Moolenbroek extern int ifaddr_auto_linklocal;
14*ef8d499eSDavid van Moolenbroek extern int ifaddr_accept_rtadv;
15*ef8d499eSDavid van Moolenbroek 
16*ef8d499eSDavid van Moolenbroek void ifaddr_init(struct ifdev * ifdev);
17*ef8d499eSDavid van Moolenbroek 
18*ef8d499eSDavid van Moolenbroek int ifaddr_v4_find(struct ifdev * ifdev, const struct sockaddr_in * addr,
19*ef8d499eSDavid van Moolenbroek 	ifaddr_v4_num_t * num);
20*ef8d499eSDavid van Moolenbroek int ifaddr_v4_enum(struct ifdev * ifdev, ifaddr_v4_num_t * num);
21*ef8d499eSDavid van Moolenbroek int ifaddr_v4_get(struct ifdev * ifdev, ifaddr_v4_num_t num,
22*ef8d499eSDavid van Moolenbroek 	struct sockaddr_in * addr, struct sockaddr_in * mask,
23*ef8d499eSDavid van Moolenbroek 	struct sockaddr_in * bcast, struct sockaddr_in * dest);
24*ef8d499eSDavid van Moolenbroek int ifaddr_v4_get_flags(struct ifdev * ifdev, ifaddr_v4_num_t num);
25*ef8d499eSDavid van Moolenbroek int ifaddr_v4_add(struct ifdev * ifdev, const struct sockaddr_in * addr,
26*ef8d499eSDavid van Moolenbroek 	const struct sockaddr_in * mask, const struct sockaddr_in * bcast,
27*ef8d499eSDavid van Moolenbroek 	const struct sockaddr_in * dest, int flags);
28*ef8d499eSDavid van Moolenbroek void ifaddr_v4_del(struct ifdev * ifdev, ifaddr_v4_num_t num);
29*ef8d499eSDavid van Moolenbroek void ifaddr_v4_clear(struct ifdev * ifdev);
30*ef8d499eSDavid van Moolenbroek struct ifdev *ifaddr_v4_map_by_addr(const ip4_addr_t * ip4addr);
31*ef8d499eSDavid van Moolenbroek 
32*ef8d499eSDavid van Moolenbroek int ifaddr_v6_find(struct ifdev * ifdev, const struct sockaddr_in6 * addr6,
33*ef8d499eSDavid van Moolenbroek 	ifaddr_v6_num_t * num);
34*ef8d499eSDavid van Moolenbroek int ifaddr_v6_enum(struct ifdev * ifdev, ifaddr_v6_num_t * num);
35*ef8d499eSDavid van Moolenbroek void ifaddr_v6_get(struct ifdev * ifdev, ifaddr_v6_num_t num,
36*ef8d499eSDavid van Moolenbroek 	struct sockaddr_in6 * addr6, struct sockaddr_in6 * mask6,
37*ef8d499eSDavid van Moolenbroek 	struct sockaddr_in6 * dest6);
38*ef8d499eSDavid van Moolenbroek int ifaddr_v6_get_flags(struct ifdev * ifdev, ifaddr_v6_num_t num);
39*ef8d499eSDavid van Moolenbroek void ifaddr_v6_get_lifetime(struct ifdev * ifdev, ifaddr_v6_num_t num,
40*ef8d499eSDavid van Moolenbroek 	struct in6_addrlifetime * lifetime);
41*ef8d499eSDavid van Moolenbroek int ifaddr_v6_add(struct ifdev * ifdev, const struct sockaddr_in6 * addr6,
42*ef8d499eSDavid van Moolenbroek 	const struct sockaddr_in6 * mask6, const struct sockaddr_in6 * dest6,
43*ef8d499eSDavid van Moolenbroek 	int flags, const struct in6_addrlifetime * lifetime);
44*ef8d499eSDavid van Moolenbroek void ifaddr_v6_del(struct ifdev * ifdev, ifaddr_v6_num_t num);
45*ef8d499eSDavid van Moolenbroek void ifaddr_v6_clear(struct ifdev * ifdev);
46*ef8d499eSDavid van Moolenbroek void ifaddr_v6_check(struct ifdev * ifdev);
47*ef8d499eSDavid van Moolenbroek void ifaddr_v6_set_up(struct ifdev * ifdev);
48*ef8d499eSDavid van Moolenbroek void ifaddr_v6_set_linklocal(struct ifdev * ifdev);
49*ef8d499eSDavid van Moolenbroek struct ifdev *ifaddr_v6_map_by_addr(const ip6_addr_t * ip6addr);
50*ef8d499eSDavid van Moolenbroek 
51*ef8d499eSDavid van Moolenbroek struct ifdev *ifaddr_map_by_addr(const ip_addr_t * ipaddr);
52*ef8d499eSDavid van Moolenbroek struct ifdev *ifaddr_map_by_subnet(const ip_addr_t * ipaddr);
53*ef8d499eSDavid van Moolenbroek const ip_addr_t *ifaddr_select(const ip_addr_t * dst_addr,
54*ef8d499eSDavid van Moolenbroek 	struct ifdev * ifdev, struct ifdev ** ifdevp);
55*ef8d499eSDavid van Moolenbroek int ifaddr_is_zone_mismatch(const ip6_addr_t * ipaddr, struct ifdev * ifdev);
56*ef8d499eSDavid van Moolenbroek 
57*ef8d499eSDavid van Moolenbroek int ifaddr_dl_find(struct ifdev * ifdev, const struct sockaddr_dlx * addr,
58*ef8d499eSDavid van Moolenbroek 	socklen_t addr_len, ifaddr_dl_num_t * num);
59*ef8d499eSDavid van Moolenbroek int ifaddr_dl_enum(struct ifdev * ifdev, ifaddr_dl_num_t * num);
60*ef8d499eSDavid van Moolenbroek void ifaddr_dl_get(struct ifdev * ifdev, ifaddr_dl_num_t num,
61*ef8d499eSDavid van Moolenbroek 	struct sockaddr_dlx * addr);
62*ef8d499eSDavid van Moolenbroek int ifaddr_dl_get_flags(struct ifdev * ifdev, ifaddr_dl_num_t num);
63*ef8d499eSDavid van Moolenbroek int ifaddr_dl_add(struct ifdev * ifdev, const struct sockaddr_dlx * addr,
64*ef8d499eSDavid van Moolenbroek 	socklen_t addr_len, int flags);
65*ef8d499eSDavid van Moolenbroek int ifaddr_dl_del(struct ifdev * ifdev, ifaddr_dl_num_t num);
66*ef8d499eSDavid van Moolenbroek void ifaddr_dl_clear(struct ifdev * ifdev);
67*ef8d499eSDavid van Moolenbroek void ifaddr_dl_update(struct ifdev * ifdev, const uint8_t * hwaddr,
68*ef8d499eSDavid van Moolenbroek 	int is_factory);
69*ef8d499eSDavid van Moolenbroek 
70*ef8d499eSDavid van Moolenbroek #endif /* !MINIX_NET_LWIP_IFADDR_H */
71