summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhenning <henning@openbsd.org>2004-01-14 12:33:30 +0000
committerhenning <henning@openbsd.org>2004-01-14 12:33:30 +0000
commit450358d691e16016afc6541ffe99649a9f7a04d9 (patch)
tree2fce92ed811f002619124f6ace6fc81dbd7bb205
parentRemove as many unnecessary includes from the include mess in this file, in (diff)
downloadwireguard-openbsd-450358d691e16016afc6541ffe99649a9f7a04d9.tar.xz
wireguard-openbsd-450358d691e16016afc6541ffe99649a9f7a04d9.zip
add soon-needed kif_remove()
ok claudio@
-rw-r--r--usr.sbin/bgpd/kroute.c25
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)