Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
B
babeld
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
babeld
Commits
10d8b2fb
Commit
10d8b2fb
authored
Feb 11, 2008
by
Juliusz Chroboczek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adapt rest of babel to new filtering, xroute and kernel interfaces.
parent
e9e2537c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
74 additions
and
56 deletions
+74
-56
babel.c
babel.c
+43
-25
babel.h
babel.h
+0
-1
message.c
message.c
+17
-14
message.h
message.h
+0
-1
network.c
network.c
+6
-10
request.c
request.c
+3
-2
route.c
route.c
+5
-3
No files found.
babel.c
View file @
10d8b2fb
...
...
@@ -49,11 +49,11 @@ THE SOFTWARE.
#include "xroute.h"
#include "message.h"
#include "request.h"
#include "filter.h"
struct
timeval
now
;
unsigned
char
myid
[
16
];
int
do_ipv4
=
0
;
int
debug
=
0
;
static
int
maxmtu
;
...
...
@@ -96,11 +96,12 @@ main(int argc, char **argv)
static
unsigned
char
*
buf
;
struct
timeval
check_neighbours_time
;
int
expiry_time
,
kernel_dump_time
;
char
*
config_file
=
NULL
;
void
*
vrc
;
unsigned
int
seed
;
char
**
arg
;
parse_address
(
"ff02::cca6:c0f9:e182:5373"
,
protocol_group
);
parse_address
(
"ff02::cca6:c0f9:e182:5373"
,
protocol_group
,
NULL
);
protocol_port
=
8475
;
#define SHIFT() do { arg++; } while(0)
...
...
@@ -116,7 +117,7 @@ main(int argc, char **argv)
break
;
}
else
if
(
strcmp
(
*
arg
,
"-m"
)
==
0
)
{
SHIFTE
();
rc
=
parse_address
(
*
arg
,
protocol_group
);
rc
=
parse_address
(
*
arg
,
protocol_group
,
NULL
);
if
(
rc
<
0
)
goto
syntax
;
if
(
protocol_group
[
0
]
!=
0xff
)
{
...
...
@@ -132,8 +133,7 @@ main(int argc, char **argv)
}
else
if
(
strcmp
(
*
arg
,
"-p"
)
==
0
)
{
SHIFTE
();
protocol_port
=
atoi
(
*
arg
);
}
else
if
(
strcmp
(
*
arg
,
"-x"
)
==
0
||
strcmp
(
*
arg
,
"-X"
)
==
0
)
{
int
force
=
(
strcmp
(
*
arg
,
"-X"
)
==
0
);
}
else
if
(
strcmp
(
*
arg
,
"-X"
)
==
0
)
{
if
(
numxroutes
>=
MAXXROUTES
)
{
fprintf
(
stderr
,
"Too many exported routes.
\n
"
);
exit
(
1
);
...
...
@@ -141,7 +141,7 @@ main(int argc, char **argv)
SHIFTE
();
rc
=
parse_net
(
*
arg
,
xroutes
[
numxroutes
].
prefix
,
&
xroutes
[
numxroutes
].
plen
);
&
xroutes
[
numxroutes
].
plen
,
NULL
);
if
(
rc
<
0
)
goto
syntax
;
SHIFTE
();
...
...
@@ -153,7 +153,8 @@ main(int argc, char **argv)
goto
syntax
;
xroutes
[
numxroutes
].
metric
=
metric
;
}
xroutes
[
numxroutes
].
exported
=
force
?
2
:
0
;
xroutes
[
numxroutes
].
forced
=
1
;
xroutes
[
numxroutes
].
ifindex
=
0
;
numxroutes
++
;
}
else
if
(
strcmp
(
*
arg
,
"-h"
)
==
0
)
{
SHIFTE
();
...
...
@@ -174,11 +175,6 @@ main(int argc, char **argv)
goto
syntax
;
}
else
if
(
strcmp
(
*
arg
,
"-P"
)
==
0
)
{
parasitic
=
1
;
}
else
if
(
strcmp
(
*
arg
,
"-c"
)
==
0
)
{
SHIFTE
();
add_cost
=
atoi
(
*
arg
);
if
(
add_cost
<
0
||
add_cost
>
INFINITY
)
goto
syntax
;
}
else
if
(
strcmp
(
*
arg
,
"-s"
)
==
0
)
{
split_horizon
=
0
;
}
else
if
(
strcmp
(
*
arg
,
"-S"
)
==
0
)
{
...
...
@@ -187,8 +183,6 @@ main(int argc, char **argv)
}
else
if
(
strcmp
(
*
arg
,
"-d"
)
==
0
)
{
SHIFTE
();
debug
=
atoi
(
*
arg
);
}
else
if
(
strcmp
(
*
arg
,
"-4"
)
==
0
)
{
do_ipv4
=
1
;
}
else
if
(
strcmp
(
*
arg
,
"-l"
)
==
0
)
{
link_detect
=
1
;
}
else
if
(
strcmp
(
*
arg
,
"-w"
)
==
0
)
{
...
...
@@ -203,12 +197,38 @@ main(int argc, char **argv)
import_table
=
atoi
(
*
arg
);
if
(
import_table
<
0
||
import_table
>
0xFFFF
)
goto
syntax
;
}
else
if
(
strcmp
(
*
arg
,
"-c"
)
==
0
)
{
SHIFTE
();
config_file
=
*
arg
;
}
else
if
(
strcmp
(
*
arg
,
"-C"
)
==
0
)
{
int
rc
;
SHIFTE
();
rc
=
parse_config_from_string
(
*
arg
);
if
(
rc
<
0
)
{
fprintf
(
stderr
,
"Couldn't parse configuration from command line.
\n
"
);
exit
(
1
);
}
}
else
{
goto
syntax
;
}
SHIFTE
();
}
if
(
!
config_file
)
{
if
(
access
(
"/etc/babel.conf"
,
R_OK
)
>=
0
)
config_file
=
"/etc/babel.conf"
;
}
if
(
config_file
)
{
rc
=
parse_config_from_file
(
config_file
);
if
(
rc
<
0
)
{
fprintf
(
stderr
,
"Couldn't parse configuration from file %s.
\n
"
,
*
arg
);
exit
(
1
);
}
}
if
(
wireless_hello_interval
<=
0
)
wireless_hello_interval
=
6
;
...
...
@@ -223,7 +243,7 @@ main(int argc, char **argv)
if
(
seqno_interval
<=
0
)
seqno_interval
=
MAX
(
wireless_hello_interval
-
1
,
2
);
rc
=
parse_address
(
*
arg
,
myid
);
rc
=
parse_address
(
*
arg
,
myid
,
NULL
);
if
(
rc
<
0
)
goto
syntax
;
SHIFTE
();
...
...
@@ -271,7 +291,7 @@ main(int argc, char **argv)
rc
=
sscanf
(
buf
,
"%99s %d %ld
\n
"
,
buf2
,
&
s
,
&
t
);
if
(
rc
==
3
&&
s
>=
0
&&
s
<=
0xFFFF
)
{
unsigned
char
sid
[
16
];
rc
=
parse_address
(
buf2
,
sid
);
rc
=
parse_address
(
buf2
,
sid
,
NULL
);
if
(
rc
<
0
)
{
fprintf
(
stderr
,
"Couldn't parse babel-state.
\n
"
);
}
else
{
...
...
@@ -295,7 +315,7 @@ main(int argc, char **argv)
fprintf
(
stderr
,
"Respecting %ld second silent time.
\n
"
,
(
long
int
)(
reboot_time
+
silent_time
-
now
.
tv_sec
));
rc
=
kernel_setup
(
1
,
do_ipv4
);
rc
=
kernel_setup
(
1
);
if
(
rc
<
0
)
{
fprintf
(
stderr
,
"kernel_setup failed.
\n
"
);
exit
(
1
);
...
...
@@ -601,7 +621,7 @@ main(int argc, char **argv)
kernel_setup_interface
(
0
,
nets
[
i
].
ifname
,
nets
[
i
].
ifindex
);
}
kernel_setup_socket
(
0
);
kernel_setup
(
0
,
do_ipv4
);
kernel_setup
(
0
);
fd
=
open
(
state_file
,
O_WRONLY
|
O_TRUNC
|
O_CREAT
,
0644
);
if
(
fd
<
0
)
{
...
...
@@ -632,11 +652,11 @@ main(int argc, char **argv)
"Syntax: %s "
"[-m multicast_address] [-p port] [-S state-file]
\n
"
" "
"[-h hello] [-H wired_hello] [-i idle_hello]
\n
"
"[-h hello] [-H wired_hello] [-i idle_hello]
[-u update]
\n
"
" "
"[-
u update] [-k metric] [-4] [-s] [-P] [-c cost] [-l] [-w
]
\n
"
"[-
k metric] [-s] [-P] [-l] [-w] [-d level
]
\n
"
" "
"[-
d level] [-t table] [-T table] [-x net cost] [-X net cos
t]
\n
"
"[-
t table] [-T table] [-X net cost] [-c file] [-C statemen
t]
\n
"
" "
"id interface...
\n
"
,
argv
[
0
]);
...
...
@@ -649,7 +669,7 @@ main(int argc, char **argv)
kernel_setup_interface
(
0
,
nets
[
i
].
ifname
,
nets
[
i
].
ifindex
);
}
kernel_setup_socket
(
0
);
kernel_setup
(
0
,
do_ipv4
);
kernel_setup
(
0
);
exit
(
1
);
}
...
...
@@ -728,9 +748,7 @@ dump_tables(FILE *out)
fprintf
(
out
,
"%s metric %d (%s)
\n
"
,
format_prefix
(
xroutes
[
i
].
prefix
,
xroutes
[
i
].
plen
),
xroutes
[
i
].
metric
,
xroutes
[
i
].
exported
?
xroutes
[
i
].
exported
>
1
?
"forced"
:
"exported"
:
"not exported"
);
xroutes
[
i
].
forced
?
"forced"
:
"exported"
);
}
for
(
i
=
0
;
i
<
numroutes
;
i
++
)
{
int
id
=
...
...
babel.h
View file @
10d8b2fb
...
...
@@ -63,7 +63,6 @@ THE SOFTWARE.
extern
struct
timeval
now
;
extern
int
debug
;
extern
int
reboot_time
;
extern
int
do_ipv4
;
extern
int
wireless_hello_interval
,
wired_hello_interval
,
idle_hello_interval
;
extern
int
idle_time
;
extern
int
link_detect
;
...
...
message.c
View file @
10d8b2fb
...
...
@@ -43,7 +43,6 @@ struct timeval update_flush_time = {0, 0};
const
unsigned
char
packet_header
[
8
]
=
{
42
,
1
};
int
add_cost
=
0
;
int
parasitic
=
0
;
int
silent_time
=
30
;
int
split_horizon
=
1
;
...
...
@@ -259,7 +258,7 @@ handle_request(struct neighbour *neigh, const unsigned char *prefix,
return
;
}
xroute
=
find_
exported_
xroute
(
prefix
,
plen
);
xroute
=
find_xroute
(
prefix
,
plen
);
if
(
xroute
)
{
if
(
router_hash
==
hash_id
(
myid
)
&&
seqno_compare
(
seqno
,
myseqno
)
>
0
)
update_myseqno
(
1
);
...
...
@@ -550,7 +549,11 @@ really_send_update(struct network *net,
const
unsigned
char
*
prefix
,
unsigned
char
plen
,
unsigned
short
seqno
,
unsigned
short
metric
)
{
if
(
!
export_filter
(
address
,
prefix
,
plen
))
{
int
add_metric
;
add_metric
=
output_filter
(
address
,
prefix
,
plen
,
net
->
ifindex
);
if
(
add_metric
<
INFINITY
)
{
if
(
plen
>=
96
&&
v4mapped
(
prefix
))
{
const
unsigned
char
*
sid
;
unsigned
char
v4route
[
16
];
...
...
@@ -563,7 +566,8 @@ really_send_update(struct network *net,
sid
=
message_source_id
(
net
);
if
(
sid
==
NULL
||
memcmp
(
address
,
sid
,
16
)
!=
0
)
send_message
(
net
,
3
,
0xFF
,
0
,
0
,
0xFFFF
,
address
);
send_message
(
net
,
5
,
plen
-
96
,
0
,
seqno
,
metric
,
v4route
);
send_message
(
net
,
5
,
plen
-
96
,
0
,
seqno
,
metric
+
add_metric
,
v4route
);
}
else
{
if
(
in_prefix
(
address
,
prefix
,
plen
))
{
send_message
(
net
,
3
,
plen
,
0
,
seqno
,
metric
,
address
);
...
...
@@ -573,7 +577,8 @@ really_send_update(struct network *net,
sid
=
message_source_id
(
net
);
if
(
sid
==
NULL
||
memcmp
(
address
,
sid
,
16
)
!=
0
)
send_message
(
net
,
3
,
0xFF
,
0
,
0
,
0xFFFF
,
address
);
send_message
(
net
,
4
,
plen
,
0
,
seqno
,
metric
,
prefix
);
send_message
(
net
,
4
,
plen
,
0
,
seqno
,
metric
+
add_metric
,
prefix
);
}
}
}
...
...
@@ -600,8 +605,8 @@ flushupdates(void)
struct
source
*
src
;
unsigned
short
seqno
;
unsigned
short
metric
;
xroute
=
find_
exported_
xroute
(
buffered_updates
[
i
].
prefix
,
buffered_updates
[
i
].
plen
);
xroute
=
find_xroute
(
buffered_updates
[
i
].
prefix
,
buffered_updates
[
i
].
plen
);
if
(
xroute
)
{
really_send_update
(
net
,
myid
,
xroute
->
prefix
,
xroute
->
plen
,
...
...
@@ -615,7 +620,7 @@ flushupdates(void)
net
->
wired
&&
route
->
neigh
->
network
==
net
)
continue
;
seqno
=
route
->
seqno
;
metric
=
MIN
((
int
)
route
->
metric
+
add_cost
,
INFINITY
)
;
metric
=
route
->
metric
;
really_send_update
(
net
,
route
->
src
->
address
,
route
->
src
->
prefix
,
route
->
src
->
plen
,
...
...
@@ -712,7 +717,7 @@ send_update(struct network *net, int urgent,
if
(
prefix
==
NULL
)
{
send_self_update
(
net
,
0
);
net
->
update_time
=
now
.
tv_sec
;
}
else
if
(
find_
exported_
xroute
(
prefix
,
plen
))
{
}
else
if
(
find_xroute
(
prefix
,
plen
))
{
buffer_update
(
net
,
prefix
,
plen
);
}
return
;
...
...
@@ -772,8 +777,7 @@ send_self_update(struct network *net, int force_seqno)
net
->
self_update_time
=
now
.
tv_sec
;
for
(
i
=
0
;
i
<
numxroutes
;
i
++
)
{
if
(
xroutes
[
i
].
exported
)
send_update
(
net
,
0
,
xroutes
[
i
].
prefix
,
xroutes
[
i
].
plen
);
send_update
(
net
,
0
,
xroutes
[
i
].
prefix
,
xroutes
[
i
].
plen
);
}
}
...
...
@@ -799,9 +803,8 @@ send_self_retract(struct network *net)
seqno_time
=
now
.
tv_sec
;
net
->
self_update_time
=
now
.
tv_sec
;
for
(
i
=
0
;
i
<
numxroutes
;
i
++
)
{
if
(
xroutes
[
i
].
exported
)
really_send_update
(
net
,
myid
,
xroutes
[
i
].
prefix
,
xroutes
[
i
].
plen
,
myseqno
,
0xFFFF
);
really_send_update
(
net
,
myid
,
xroutes
[
i
].
prefix
,
xroutes
[
i
].
plen
,
myseqno
,
0xFFFF
);
}
schedule_update_flush
(
net
,
1
);
}
...
...
message.h
View file @
10d8b2fb
...
...
@@ -26,7 +26,6 @@ extern unsigned short myseqno;
extern
int
seqno_time
;
extern
int
seqno_interval
;
extern
int
add_cost
;
extern
int
parasitic
;
extern
int
silent_time
;
extern
int
broadcast_ihu
;
...
...
network.c
View file @
10d8b2fb
...
...
@@ -51,13 +51,11 @@ add_network(char *ifname, int ifindex, int mtu, int wired, unsigned int cost)
nets
[
numnets
].
up
=
(
kernel_interface_operational
(
ifname
,
ifindex
)
>
0
);
nets
[
numnets
].
ifindex
=
ifindex
;
nets
[
numnets
].
ipv4
=
NULL
;
if
(
do_ipv4
)
{
rc
=
kernel_interface_ipv4
(
ifname
,
ifindex
,
ipv4
);
if
(
rc
>=
0
)
{
nets
[
numnets
].
ipv4
=
malloc
(
4
);
if
(
nets
[
numnets
].
ipv4
)
memcpy
(
nets
[
numnets
].
ipv4
,
ipv4
,
4
);
}
rc
=
kernel_interface_ipv4
(
ifname
,
ifindex
,
ipv4
);
if
(
rc
>=
0
)
{
nets
[
numnets
].
ipv4
=
malloc
(
4
);
if
(
nets
[
numnets
].
ipv4
)
memcpy
(
nets
[
numnets
].
ipv4
,
ipv4
,
4
);
}
nets
[
numnets
].
wired
=
wired
;
...
...
@@ -148,9 +146,7 @@ check_networks(void)
unsigned
char
ipv4
[
4
];
for
(
i
=
0
;
i
<
numnets
;
i
++
)
{
rc
=
do_ipv4
?
kernel_interface_ipv4
(
nets
[
i
].
ifname
,
nets
[
i
].
ifindex
,
ipv4
)
:
0
;
rc
=
kernel_interface_ipv4
(
nets
[
i
].
ifname
,
nets
[
i
].
ifindex
,
ipv4
);
if
(
rc
>
0
)
{
if
(
!
nets
[
i
].
ipv4
||
memcmp
(
ipv4
,
nets
[
i
].
ipv4
,
4
)
!=
0
)
{
if
(
!
nets
[
i
].
ipv4
)
...
...
request.c
View file @
10d8b2fb
...
...
@@ -30,6 +30,7 @@ THE SOFTWARE.
#include "neighbour.h"
#include "request.h"
#include "message.h"
#include "network.h"
#include "filter.h"
int
request_resend_time
=
0
;
...
...
@@ -70,8 +71,8 @@ record_request(const unsigned char *prefix, unsigned char plen,
{
struct
request
*
request
;
if
(
i
mport_filter
(
NULL
,
prefix
,
plen
,
NULL
)
||
export_filter
(
NULL
,
prefix
,
plen
)
)
if
(
i
nput_filter
(
NULL
,
prefix
,
plen
,
NULL
,
network
->
ifindex
)
>=
INFINITY
||
output_filter
(
NULL
,
prefix
,
plen
,
network
->
ifindex
)
>=
INFINITY
)
return
0
;
request
=
find_request
(
prefix
,
plen
,
NULL
);
...
...
route.c
View file @
10d8b2fb
...
...
@@ -329,6 +329,7 @@ update_route(const unsigned char *a, const unsigned char *p, unsigned char plen,
struct
route
*
route
;
struct
source
*
src
;
int
metric
,
feasible
;
int
add_metric
;
if
(
martian_prefix
(
p
,
plen
))
{
fprintf
(
stderr
,
"Rejecting martian route to %s through %s.
\n
"
,
...
...
@@ -336,7 +337,8 @@ update_route(const unsigned char *a, const unsigned char *p, unsigned char plen,
return
NULL
;
}
if
(
import_filter
(
a
,
p
,
plen
,
neigh
->
id
))
add_metric
=
input_filter
(
a
,
p
,
plen
,
neigh
->
id
,
neigh
->
network
->
ifindex
);
if
(
add_metric
>=
INFINITY
)
return
NULL
;
src
=
find_source
(
a
,
p
,
plen
,
1
,
seqno
);
...
...
@@ -345,7 +347,7 @@ update_route(const unsigned char *a, const unsigned char *p, unsigned char plen,
feasible
=
update_feasible
(
a
,
p
,
plen
,
seqno
,
refmetric
);
route
=
find_route
(
p
,
plen
,
neigh
,
nexthop
);
metric
=
MIN
((
int
)
refmetric
+
neighbour_cost
(
neigh
),
INFINITY
);
metric
=
MIN
((
int
)
refmetric
+
neighbour_cost
(
neigh
)
+
add_metric
,
INFINITY
);
if
(
route
)
{
struct
source
*
oldsrc
;
...
...
@@ -426,7 +428,7 @@ consider_route(struct route *route)
if
(
!
route_feasible
(
route
))
return
;
if
(
find_
exported_
xroute
(
route
->
src
->
prefix
,
route
->
src
->
plen
))
if
(
find_xroute
(
route
->
src
->
prefix
,
route
->
src
->
plen
))
return
;
installed
=
find_installed_route
(
route
->
src
->
prefix
,
route
->
src
->
plen
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment