radish
struct radish *cur = head->rdh_top, *parent, *new;
R_Malloc(new, struct radish *, sizeof(*new) + slen);
rd_glue(struct radish *cur, struct radish *new, int misbyte,
struct radish *parent = cur->rd_p, *glue;
R_Malloc(glue, struct radish *, sizeof(*glue) + slen);
rd_match(struct sockaddr *d_arg, struct radish_head *head, struct radish **rdp)
struct radish **rdp, struct radish *cur)
struct radish *target = NULL;
struct radish *cur = head->rdh_top;
struct radish *cur = head->rdh_top;
rd_unlink(struct radish *cur, struct radish *top)
struct radish *parent, *child;
rd_walktree(struct radish_head *h, register int (*f)(struct radish *, void *),
struct radish *par = NULL, *cur, *top = h->rdh_top;
struct radish *new;
new = (struct radish *)(head + 1);
struct radish *rd_p; /* parent */
struct radish *rd_l; /* left child */
struct radish *rd_r; /* right child */
struct radish *rdh_top;
int rd_glue(struct radish *, struct radish *, int, struct radish_head *);
int rd_match(struct sockaddr *, struct radish_head *, struct radish **);
int rd_match_next(struct sockaddr *, struct radish_head *, struct radish **, struct radish *);
void rd_unlink(struct radish *, struct radish *);
int rd_walktree(struct radish_head *, int (*)(struct radish *, void *), void *);
static int rd2slist_walk (struct radish *, void *);
rtlist_remove(slist *prtlist, struct radish *radish)
struct radish *r;
if (!sockaddr_npppd_match(radish->rd_route, r->rd_route) ||
!sockaddr_npppd_match(radish->rd_mask, r->rd_mask))
struct radish *radish, *r;
radish = slist_itr_next(&rtlist0);
snp = radish->rd_rtent;
if (rd_lookup(radish->rd_route, radish->rd_mask,
rtlist_remove(&rtlist1, radish);
radish->rd_route, r->rd_route) &&
radish->rd_mask, r->rd_mask)) {
rtlist_remove(&rtlist1, radish);
rval = rd_insert(radish->rd_route, radish->rd_mask,
radish = slist_itr_next(&rtlist0);
in_route_delete(&SIN(radish->rd_route)->sin_addr,
&SIN(radish->rd_mask)->sin_addr, &loop,
radish = slist_itr_next(&rtlist1);
in_route_add(&(SIN(radish->rd_route)->sin_addr),
&SIN(radish->rd_mask)->sin_addr, &loop,
struct radish *rd;
rd2slist_walk(struct radish *rd, void *list0)
struct radish *rd;
struct radish *rd;
struct radish *rdp;
(int (*)(struct radish *, void *))rd_unlink,
npppd_ctl_who_walk_rd(struct radish *rd, void *ctx)
static int npppd_ctl_who_walk_rd(struct radish *, void *);
npppd_iface_network_input_delegate(struct radish *radish, void *args0)
snp = radish->rd_rtent;
struct radish *radish;
if (rd_match(SA(&sin4), _this->npppd->rd, &radish)) {
snp = radish->rd_rtent;
} while (rd_match_next(SA(&sin4), _this->npppd->rd, &radish,
radish));