diff options
author | michele <michele@openbsd.org> | 2009-09-26 18:24:58 +0000 |
---|---|---|
committer | michele <michele@openbsd.org> | 2009-09-26 18:24:58 +0000 |
commit | 0ab89b342df8b1e7ac860a348c6c46bd00355a83 (patch) | |
tree | 8d2648513be4c036fefacc21fc8631e7805e0fc0 /usr.sbin/ripd/kroute.c | |
parent | Whitespace cleanup. (diff) | |
download | wireguard-openbsd-0ab89b342df8b1e7ac860a348c6c46bd00355a83.tar.xz wireguard-openbsd-0ab89b342df8b1e7ac860a348c6c46bd00355a83.zip |
Preliminary rdomain support.
ok claudio@
Diffstat (limited to 'usr.sbin/ripd/kroute.c')
-rw-r--r-- | usr.sbin/ripd/kroute.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/usr.sbin/ripd/kroute.c b/usr.sbin/ripd/kroute.c index 9342f376ac2..cce31b3c755 100644 --- a/usr.sbin/ripd/kroute.c +++ b/usr.sbin/ripd/kroute.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kroute.c,v 1.19 2009/09/24 12:30:36 michele Exp $ */ +/* $OpenBSD: kroute.c,v 1.20 2009/09/26 18:24:58 michele Exp $ */ /* * Copyright (c) 2004 Esben Norby <norby@openbsd.org> @@ -47,6 +47,7 @@ struct { int fib_sync; int fd; struct event ev; + u_int rdomain; } kr_state; struct kroute_node { @@ -111,7 +112,7 @@ kif_init(void) } int -kr_init(int fs) +kr_init(int fs, u_int rdomain) { int opt = 0, rcvbuf, default_rcvbuf; socklen_t optlen; @@ -159,6 +160,7 @@ kr_init(int fs) flag_all_rip_routers = 1; kr_state.fib_sync = fs; /* now set correct sync mode */ + kr_state.rdomain = rdomain; event_set(&kr_state.ev, kr_state.fd, EV_READ | EV_PERSIST, kr_dispatch_msg, NULL); @@ -751,6 +753,7 @@ send_rtmsg(int fd, int action, struct kroute *kroute) hdr.rtm_version = RTM_VERSION; hdr.rtm_type = action; hdr.rtm_priority = RTP_RIP; + hdr.rtm_tableid = kr_state.rdomain; if (action == RTM_CHANGE) hdr.rtm_fmask = RTF_REJECT|RTF_BLACKHOLE; hdr.rtm_seq = kr_state.rtseq++; /* overflow doesn't matter */ @@ -848,7 +851,7 @@ fetchtable(void) mib[3] = AF_INET; mib[4] = NET_RT_DUMP; mib[5] = 0; - mib[6] = 0; /* rtableid */ + mib[6] = kr_state.rdomain; /* rtableid */ if (sysctl(mib, 7, NULL, &len, NULL, 0) == -1) { log_warn("sysctl"); @@ -1079,7 +1082,7 @@ dispatch_rtmsg(void) sa = (struct sockaddr *)(next + rtm->rtm_hdrlen); get_rtaddrs(rtm->rtm_addrs, sa, rti_info); - if (rtm->rtm_tableid != 0) + if (rtm->rtm_tableid != kr_state.rdomain) continue; if (rtm->rtm_pid == kr_state.pid) /* cause by us */ |