rainfo
make_packet(struct rainfo *rainfo)
if (rainfo->advlinkopt) {
if ((lladdroptlen = lladdropt_length(rainfo->sdl)) == 0) {
__func__, rainfo->ifname);
rainfo->advlinkopt = 0;
if (TAILQ_FIRST(&rainfo->prefix) != NULL)
packlen += sizeof(struct nd_opt_prefix_info) * rainfo->pfxs;
if (rainfo->linkmtu)
TAILQ_FOREACH(rti, &rainfo->route, next)
TAILQ_FOREACH(rdns, &rainfo->rdnss, next) {
TAILQ_FOREACH(dnsl, &rainfo->dnssl, next) {
free_rainfo(struct rainfo *rai)
if ((buf = realloc(rainfo->ra_data, packlen)) == NULL) {
rainfo->ra_data = buf;
rainfo->ra_datalen = packlen;
if (buf + size > rainfo->ra_data + packlen) { \
ra->nd_ra_curhoplimit = (uint8_t)(0xff & rainfo->hoplimit);
ra->nd_ra_flags_reserved = 0xff & rainfo->rtpref;
rainfo->managedflg ? ND_RA_FLAG_MANAGED : 0;
rainfo->otherflg ? ND_RA_FLAG_OTHER : 0;
ra->nd_ra_router_lifetime = htons(rainfo->lifetime);
ra->nd_ra_reachable = htonl(rainfo->reachabletime);
ra->nd_ra_retransmit = htonl(rainfo->retranstimer);
if (rainfo->advlinkopt) {
lladdropt_fill(rainfo->sdl, (struct nd_opt_hdr *)buf);
if (rainfo->linkmtu) {
ndopt_mtu->nd_opt_mtu_mtu = htonl(rainfo->linkmtu);
TAILQ_FOREACH(pfx, &rainfo->prefix, next) {
TAILQ_FOREACH(rti, &rainfo->route, next) {
TAILQ_FOREACH(rdns, &rainfo->rdnss, next) {
TAILQ_FOREACH(dnsl, &rainfo->dnssl, next) {
memset(buf, 0, packlen - (buf - rainfo->ra_data));
struct rainfo *tmp, *rai;
pfx->rainfo = tmp;
get_prefix(struct rainfo *rai)
pp->rainfo = rai;
struct rainfo *rai = prefix->rainfo;
struct rainfo *rai = prefix->rainfo;
struct rainfo *rai = prefix->rainfo;
add_prefix(struct rainfo *rai, int ifindex, const struct in6_addr *addr,
prefix->rainfo = rai;
extern void free_rainfo(struct rainfo *);
extern void add_prefix(struct rainfo *, int, const struct in6_addr *, int);
extern void make_packet(struct rainfo *);
extern void get_prefix(struct rainfo *);
struct rainfo *rai;
struct rainfo *rai;
struct rainfo *rai, struct sockaddr_in6 *from)
find_prefix(struct rainfo *rai, const struct in6_addr *prefix, int plen)
struct rainfo *ra;
struct rainfo *
struct rainfo *rai;
struct rainfo *
ra_output(struct rainfo *rai, bool solicited)
static struct rainfo *ra_output(struct rainfo *, bool);
static int prefix_check(struct nd_opt_prefix_info *, struct rainfo *,
struct rainfo *rai = (struct rainfo *)data;
struct rainfo *rai = (struct rainfo *)data;
struct rainfo *rai = (struct rainfo *)data;
struct rainfo *rai, *ran;
ra_timer_reset(struct rainfo *rai)
struct rainfo *rai;
struct rainfo *rai;
struct rainfo *rai;
ra_timer_set_short_delay(struct rainfo *rai, struct rtadvd_timer *timer)
TAILQ_ENTRY(rainfo) next;
struct rainfo *leaving; /* the config which is leaving */
struct rainfo *leaving_for; /* the new config to activate */
extern TAILQ_HEAD(ralist_head_t, rainfo) ralist;
void ra_timer_set_short_delay(struct rainfo *, struct rtadvd_timer *);
struct rainfo *if_indextorainfo(unsigned int);
struct prefix *find_prefix(struct rainfo *, const struct in6_addr *, int);
struct rainfo *rainfo; /* back pointer to the interface */
struct rainfo *rai;