Synced Linux sysdeps to new interface.
This commit is contained in:
parent
10d807d000
commit
ed245f967f
3 changed files with 30 additions and 23 deletions
|
@ -20,11 +20,11 @@ CF_ADDTO(kern_proto, kern_proto krt_scan_item ';')
|
||||||
|
|
||||||
krt_scan_item:
|
krt_scan_item:
|
||||||
LEARN bool {
|
LEARN bool {
|
||||||
((struct krt_proto *) this_proto)->scanopt.learn = $2;
|
((struct krt_config *) this_proto)->scanopt.learn = $2;
|
||||||
}
|
}
|
||||||
| ROUTE SCAN TIME expr {
|
| ROUTE SCAN TIME expr {
|
||||||
/* Scan time of 0 means scan on startup only */
|
/* Scan time of 0 means scan on startup only */
|
||||||
((struct krt_proto *) this_proto)->scanopt.scan_time = $4;
|
((struct krt_config *) this_proto)->scanopt.scan_time = $4;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* BIRD -- Linux Routing Table Scanning
|
* BIRD -- Linux Routing Table Scanning
|
||||||
*
|
*
|
||||||
* (c) 1998 Martin Mares <mj@ucw.cz>
|
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
|
@ -23,7 +23,8 @@
|
||||||
#include "lib/unix.h"
|
#include "lib/unix.h"
|
||||||
#include "lib/krt.h"
|
#include "lib/krt.h"
|
||||||
|
|
||||||
#define SCANOPT struct krt_scan_params *p = &x->scanopt
|
#define SCANOPT struct krt_scan_params *p = &(((struct krt_config *)(x->p.cf))->scanopt)
|
||||||
|
#define SCANSTAT struct krt_scan_status *s = &x->scanstat
|
||||||
|
|
||||||
static int krt_scan_fd = -1;
|
static int krt_scan_fd = -1;
|
||||||
|
|
||||||
|
@ -33,15 +34,16 @@ struct iface *
|
||||||
krt_temp_iface(struct krt_proto *x, char *name)
|
krt_temp_iface(struct krt_proto *x, char *name)
|
||||||
{
|
{
|
||||||
SCANOPT;
|
SCANOPT;
|
||||||
|
SCANSTAT;
|
||||||
struct iface *i;
|
struct iface *i;
|
||||||
|
|
||||||
WALK_LIST(i, p->temp_ifs)
|
WALK_LIST(i, s->temp_ifs)
|
||||||
if (!strcmp(i->name, name))
|
if (!strcmp(i->name, name))
|
||||||
return i;
|
return i;
|
||||||
i = mb_alloc(x->p.pool, sizeof(struct iface));
|
i = mb_alloc(x->p.pool, sizeof(struct iface));
|
||||||
bzero(i, sizeof(*i));
|
bzero(i, sizeof(*i));
|
||||||
strcpy(i->name, name);
|
strcpy(i->name, name);
|
||||||
add_tail(&p->temp_ifs, &i->n);
|
add_tail(&s->temp_ifs, &i->n);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,8 +66,9 @@ krt_uptodate(rte *k, rte *e)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
krt_parse_entry(byte *ent, struct krt_proto *p)
|
krt_parse_entry(byte *ent, struct krt_proto *x)
|
||||||
{
|
{
|
||||||
|
SCANOPT;
|
||||||
u32 dest0, gw0, mask0;
|
u32 dest0, gw0, mask0;
|
||||||
ip_addr dest, gw, mask;
|
ip_addr dest, gw, mask;
|
||||||
unsigned int flags, verdict;
|
unsigned int flags, verdict;
|
||||||
|
@ -118,7 +121,7 @@ krt_parse_entry(byte *ent, struct krt_proto *p)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.proto = &p->p;
|
a.proto = &x->p;
|
||||||
a.source = RTS_INHERIT;
|
a.source = RTS_INHERIT;
|
||||||
a.scope = SCOPE_UNIVERSE;
|
a.scope = SCOPE_UNIVERSE;
|
||||||
a.cast = RTC_UNICAST;
|
a.cast = RTC_UNICAST;
|
||||||
|
@ -129,7 +132,7 @@ krt_parse_entry(byte *ent, struct krt_proto *p)
|
||||||
|
|
||||||
if (flags & RTF_GATEWAY)
|
if (flags & RTF_GATEWAY)
|
||||||
{
|
{
|
||||||
neighbor *ng = neigh_find(&p->p, &gw, 0);
|
neighbor *ng = neigh_find(&x->p, &gw, 0);
|
||||||
if (ng)
|
if (ng)
|
||||||
a.iface = ng->iface;
|
a.iface = ng->iface;
|
||||||
else
|
else
|
||||||
|
@ -147,7 +150,7 @@ krt_parse_entry(byte *ent, struct krt_proto *p)
|
||||||
{
|
{
|
||||||
a.dest = RTD_DEVICE;
|
a.dest = RTD_DEVICE;
|
||||||
a.gw = IPA_NONE;
|
a.gw = IPA_NONE;
|
||||||
a.iface = krt_temp_iface(p, iface);
|
a.iface = krt_temp_iface(x, iface);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -167,7 +170,7 @@ krt_parse_entry(byte *ent, struct krt_proto *p)
|
||||||
else
|
else
|
||||||
verdict = KRF_UPDATE;
|
verdict = KRF_UPDATE;
|
||||||
}
|
}
|
||||||
else if (p->scanopt.learn && !net->routes)
|
else if (p->learn && !net->routes)
|
||||||
verdict = KRF_LEARN;
|
verdict = KRF_LEARN;
|
||||||
else
|
else
|
||||||
verdict = KRF_DELETE;
|
verdict = KRF_DELETE;
|
||||||
|
@ -305,33 +308,34 @@ void
|
||||||
krt_scan_ifaces_done(struct krt_proto *x)
|
krt_scan_ifaces_done(struct krt_proto *x)
|
||||||
{
|
{
|
||||||
SCANOPT;
|
SCANOPT;
|
||||||
|
SCANSTAT;
|
||||||
|
|
||||||
p->accum_time += x->ifopt.scan_time;
|
s->accum_time += p->scan_time;
|
||||||
if (p->scan_time && p->accum_time >= p->scan_time)
|
if (p->scan_time && s->accum_time >= p->scan_time)
|
||||||
{
|
{
|
||||||
p->accum_time %= p->scan_time;
|
s->accum_time %= p->scan_time;
|
||||||
if (krt_scan_proc(x))
|
if (krt_scan_proc(x))
|
||||||
krt_prune(x);
|
krt_prune(x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
krt_scan_preconfig(struct krt_proto *x)
|
krt_scan_preconfig(struct krt_config *c)
|
||||||
{
|
{
|
||||||
SCANOPT;
|
c->scanopt.scan_time = 1;
|
||||||
|
c->scanopt.learn = 0;
|
||||||
p->scan_time = 1;
|
|
||||||
p->learn = 0;
|
|
||||||
init_list(&p->temp_ifs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
krt_scan_start(struct krt_proto *x)
|
krt_scan_start(struct krt_proto *x)
|
||||||
{
|
{
|
||||||
SCANOPT;
|
SCANOPT;
|
||||||
|
SCANSTAT;
|
||||||
|
|
||||||
/* Force krt scan after first interface scan */
|
/* Force krt scan after first interface scan */
|
||||||
p->accum_time = p->scan_time - x->ifopt.scan_time;
|
s->accum_time = p->scan_time - ((struct krt_config *) x->p.cf)->ifopt.scan_time;
|
||||||
|
|
||||||
|
init_list(&s->temp_ifs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* BIRD -- Linux Kernel Route Syncer -- Scanning Parameters
|
* BIRD -- Linux Kernel Route Syncer -- Scanning Parameters
|
||||||
*
|
*
|
||||||
* (c) 1998 Martin Mares <mj@ucw.cz>
|
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
|
@ -11,8 +11,11 @@
|
||||||
|
|
||||||
struct krt_scan_params {
|
struct krt_scan_params {
|
||||||
int learn; /* Should we learn routes from the kernel? */
|
int learn; /* Should we learn routes from the kernel? */
|
||||||
list temp_ifs; /* Temporary interfaces */
|
|
||||||
int scan_time; /* How often should we scan krt, 0=only on startup */
|
int scan_time; /* How often should we scan krt, 0=only on startup */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct krt_scan_status {
|
||||||
|
list temp_ifs; /* Temporary interfaces */
|
||||||
int accum_time; /* Accumulated scanning time */
|
int accum_time; /* Accumulated scanning time */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue