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