diff options
author | 2004-01-14 12:33:30 +0000 | |
---|---|---|
committer | 2004-01-14 12:33:30 +0000 | |
commit | 450358d691e16016afc6541ffe99649a9f7a04d9 (patch) | |
tree | 2fce92ed811f002619124f6ace6fc81dbd7bb205 | |
parent | Remove as many unnecessary includes from the include mess in this file, in (diff) | |
download | wireguard-openbsd-450358d691e16016afc6541ffe99649a9f7a04d9.tar.xz wireguard-openbsd-450358d691e16016afc6541ffe99649a9f7a04d9.zip |
add soon-needed kif_remove()
ok claudio@
-rw-r--r-- | usr.sbin/bgpd/kroute.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/usr.sbin/bgpd/kroute.c b/usr.sbin/bgpd/kroute.c index bebb9f2f2ba..a6f071bcc08 100644 --- a/usr.sbin/bgpd/kroute.c +++ b/usr.sbin/bgpd/kroute.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kroute.c,v 1.67 2004/01/11 22:08:04 henning Exp $ */ +/* $OpenBSD: kroute.c,v 1.68 2004/01/14 12:33:30 henning Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -80,7 +80,8 @@ int knexthop_insert(struct knexthop_node *); int knexthop_remove(struct knexthop_node *); struct kif_node *kif_find(int); -int kif_insert(struct kif_node *kif); +int kif_insert(struct kif_node *); +int kif_remove(struct kif_node *); int kif_kr_insert(struct kroute_node *); int kif_kr_remove(struct kroute_node *); @@ -547,6 +548,26 @@ kif_insert(struct kif_node *kif) return (0); } +int +kif_remove(struct kif_node *kif) +{ + struct kif_kr *kkr; + + if (RB_REMOVE(kif_tree, &kit, kif) == NULL) { + logit(LOG_CRIT, "RB_REMOVE(kif_tree, &kit, kif)"); + return (-1); + } + + while ((kkr = LIST_FIRST(&kif->kroute_l)) != NULL) { + LIST_REMOVE(kkr, entry); + kkr->kr->r.flags &= ~F_NEXTHOP; + kroute_remove(kkr->kr); + free(kkr); + } + + free(kif); + return (0); +} int kif_kr_insert(struct kroute_node *kr) |