int index;
struct ether_addr mac_addr;
uint32_t mtu;
- NDiscPrefix *expired_prefix;
LIST_HEAD(NDiscPrefix, prefixes);
int fd;
sd_event_source *recv;
LIST_REMOVE(prefixes, nd->prefixes, prefix);
- nd->expired_prefix = prefix;
- ndisc_notify(nd,
- SD_NDISC_EVENT_ROUTER_ADVERTISMENT_PREFIX_EXPIRED);
- nd->expired_prefix = NULL;
-
prefix = ndisc_prefix_unref(prefix);
break;
return 0;
}
-int sd_ndisc_get_expired_prefix(sd_ndisc *nd, struct in6_addr **addr, uint8_t *prefixlen) {
- assert_return(nd, -EINVAL);
- assert_return(addr, -EINVAL);
- assert_return(prefixlen, -EINVAL);
-
- if (!nd->expired_prefix)
- return -EADDRNOTAVAIL;
-
- *addr = &nd->expired_prefix->addr;
- *prefixlen = nd->expired_prefix->len;
-
- return 0;
-}
-
static int ndisc_prefix_update(sd_ndisc *nd, ssize_t len,
const struct nd_opt_prefix_info *prefix_opt) {
int r;
SD_NDISC_EVENT_ROUTER_ADVERTISMENT_TIMEOUT = 1,
SD_NDISC_EVENT_ROUTER_ADVERTISMENT_OTHER = 2,
SD_NDISC_EVENT_ROUTER_ADVERTISMENT_MANAGED = 3,
- SD_NDISC_EVENT_ROUTER_ADVERTISMENT_PREFIX_EXPIRED = 4,
};
typedef struct sd_ndisc sd_ndisc;
int sd_ndisc_get_mtu(sd_ndisc *nd, uint32_t *mtu);
int sd_ndisc_get_prefixlen(sd_ndisc *nd, const struct in6_addr *addr,
uint8_t *prefixlen);
-int sd_ndisc_get_expired_prefix(sd_ndisc *nd, struct in6_addr **addr,
- uint8_t *prefixlen);
int sd_ndisc_stop(sd_ndisc *nd);
int sd_ndisc_router_discovery_start(sd_ndisc *nd);