diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/bird/Makefile | 20 | ||||
-rw-r--r-- | net/bird/distinfo | 4 | ||||
-rw-r--r-- | net/bird/files/bird.in | 2 | ||||
-rw-r--r-- | net/bird/files/fibs.diff | 368 | ||||
-rw-r--r-- | net/bird6/Makefile | 2 | ||||
-rw-r--r-- | net/bird6/distinfo | 4 | ||||
-rw-r--r-- | net/bird6/files/bird6.in | 2 |
7 files changed, 9 insertions, 393 deletions
diff --git a/net/bird/Makefile b/net/bird/Makefile index f72ccb6afac2..56b2e536258e 100644 --- a/net/bird/Makefile +++ b/net/bird/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= bird -PORTVERSION= 1.3.10 +PORTVERSION= 1.3.11 CATEGORIES= net MASTER_SITES= ftp://bird.network.cz/pub/bird/ \ http://bird.mpls.in/distfiles/bird/ @@ -18,8 +18,7 @@ GNU_CONFIGURE= yes CONFIGURE_ARGS= --localstatedir=/var USE_CSTD= gnu89 -OPTIONS_DEFINE= FIBS FIREWALL AGG -FIBS_DESC= Enable multiple fib support +OPTIONS_DEFINE= FIREWALL AGG FIREWALL_DESC= Enable firewall protocol AGG_DESC= Enable aggregation protocol (EXPERIMENTAL) NO_OPTIONS_SORT= yes @@ -30,10 +29,6 @@ USE_RC_SUBR= bird .include <bsd.port.pre.mk> -.if ${PORT_OPTIONS:MFIBS} -EXTRA_PATCHES+= ${FILESDIR}/fibs.diff -.endif - .if ${PORT_OPTIONS:MFIREWALL} EXTRA_PATCHES+= ${FILESDIR}/firewall_support.patch .endif @@ -47,16 +42,5 @@ post-install: ${CP} -p ${PREFIX}/etc/bird.conf.example ${PREFIX}/etc/bird.conf ; \ ${CHMOD} 0640 ${PREFIX}/etc/bird.conf ; \ fi -.if ${PORT_OPTIONS:MFIBS} - @${ECHO_MSG} - @${ECHO_MSG} ===================================================================== - @${ECHO_MSG} - @${ECHO_MSG} " WARNING: Please take a look on kern/134931" - @${ECHO_MSG} " WARNING: before using multiple fibs in production!" - @${ECHO_MSG} " This PR was fixed in r225975(8.2-S) on Oct 4, 2011" - @${ECHO_MSG} - @${ECHO_MSG} ===================================================================== - @${ECHO_MSG} -.endif .include <bsd.port.post.mk> diff --git a/net/bird/distinfo b/net/bird/distinfo index e7188e5eb13b..e133f7c6365c 100644 --- a/net/bird/distinfo +++ b/net/bird/distinfo @@ -1,2 +1,2 @@ -SHA256 (bird-1.3.10.tar.gz) = 4c080001555fe1399920fa251e9394a4f286e2021f07e1d53f232917c2aabfbb -SIZE (bird-1.3.10.tar.gz) = 1003066 +SHA256 (bird-1.3.11.tar.gz) = cad6f58dfd8fef9772d46be3fe51a53420f56ee5fbd79d6993889ae6596a8495 +SIZE (bird-1.3.11.tar.gz) = 1108400 diff --git a/net/bird/files/bird.in b/net/bird/files/bird.in index a222f77f3cfd..fa15ad64dbd5 100644 --- a/net/bird/files/bird.in +++ b/net/bird/files/bird.in @@ -2,7 +2,7 @@ # $FreeBSD$ # -# PROVIDE: bird +# PROVIDE: bird dynamicrouting # REQUIRE: LOGIN # KEYWORD: shutdown # diff --git a/net/bird/files/fibs.diff b/net/bird/files/fibs.diff deleted file mode 100644 index d214541fa3e1..000000000000 --- a/net/bird/files/fibs.diff +++ /dev/null @@ -1,368 +0,0 @@ -From 19148229b1e97175c68afd027f8e9546bea18d57 Mon Sep 17 00:00:00 2001 -From: Alexander V. Chernikov <melifaro@ipfw.ru> -Date: Wed, 15 Aug 2012 18:14:32 +0000 -Subject: [PATCH 1/1] Multifib patch - ---- - sysdep/bsd/Modules | 1 + - sysdep/bsd/fib.Y | 29 ++++++++++++++ - sysdep/bsd/krt-sock.c | 104 +++++++++++++++++++++++++++++++++++++++++------- - sysdep/bsd/krt-sys.h | 2 + - sysdep/cf/bsd-v6.h | 1 + - sysdep/cf/bsd.h | 1 + - sysdep/unix/krt.c | 10 +++-- - sysdep/unix/krt.h | 1 + - 8 files changed, 129 insertions(+), 20 deletions(-) - create mode 100644 sysdep/bsd/fib.Y - -diff --git a/sysdep/bsd/Modules b/sysdep/bsd/Modules -index 3729587..80878a7 100644 ---- sysdep/bsd/Modules -+++ sysdep/bsd/Modules -@@ -1,3 +1,4 @@ - krt-sock.c - krt-sys.h - sysio.h -+fib.Y -diff --git a/sysdep/bsd/fib.Y b/sysdep/bsd/fib.Y -new file mode 100644 -index 0000000..cbb788f ---- /dev/null -+++ sysdep/bsd/fib.Y -@@ -0,0 +1,29 @@ -+/* -+ * BIRD -- FreeBSD rtsock configuration -+ * -+ * (c) 2011 Alexander V. Chernikov -+ * -+ * Can be freely distributed and used under the terms of the GNU GPL. -+ */ -+ -+CF_HDR -+ -+CF_DECLS -+ -+CF_KEYWORDS(ASYNC, KERNEL, TABLE, KRT_PREFSRC, KRT_REALM) -+ -+CF_GRAMMAR -+ -+CF_ADDTO(kern_proto, kern_proto rtsock_item ';') -+ -+rtsock_item: -+ KERNEL TABLE expr { -+ if ($3 < 0 || $3 >= max_fib_num()) -+ cf_error("Kernel routing table number out of range"); -+ THIS_KRT->sys.table_id = $3; -+ } -+ ; -+ -+CF_CODE -+ -+CF_END -diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c -index e970d6b..0c0a66d 100644 ---- sysdep/bsd/krt-sock.c -+++ sysdep/bsd/krt-sock.c -@@ -34,6 +34,9 @@ - #include "lib/socket.h" - - -+int my_fib_get(void); -+int my_fib_set(int); -+ - #ifndef RTAX_MAX - #define RTAX_MAX 8 - #endif -@@ -45,8 +48,6 @@ struct ks_msg - }; - - --static int rt_sock = 0; -- - int - krt_capable(rte *e) - { -@@ -65,6 +66,50 @@ krt_capable(rte *e) - ); - } - -+int -+max_fib_num() -+{ -+ int fibs = 1; -+ size_t fibs_len = sizeof(fibs); -+ if (sysctlbyname("net.fibs", &fibs, &fibs_len, NULL, 0) == -1) -+ { -+ log(L_ERR "KRT: unable to get fib number, assuming 1. error: %s", strerror(errno)); -+ return 1; -+ } -+ -+ log(L_TRACE "Max fibs: %d", fibs); -+ return fibs; -+} -+ -+int -+my_fib_get() -+{ -+ int fib = 0; -+ size_t fib_len = sizeof(fib); -+ if (sysctlbyname("net.my_fibnum", &fib, &fib_len, NULL, 0) == -1) -+ { -+ log(L_ERR "KRT: unable to get fib number, assuming 0. error: %s", strerror(errno)); -+ return 0; -+ } -+ -+ return fib; -+} -+ -+int -+my_fib_set(int fib) -+{ -+ int old_fib = my_fib_get(); -+ -+ if ((fib != old_fib) && (setfib(fib) == -1)) -+ { -+ log(L_ERR "KRT: setfib(%d) failed: %s", fib, strerror(errno)); -+ die("Cannot set fib for kernel socket"); -+ } -+ -+ return old_fib; -+} -+ -+ - #define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) - -@@ -81,7 +126,7 @@ krt_capable(rte *e) - body += l;} - - static int --krt_sock_send(int cmd, rte *e) -+krt_sock_send(struct krt_proto *p, int cmd, rte *e) - { - net *net = e->net; - rta *a = e->attrs; -@@ -192,7 +237,7 @@ krt_sock_send(int cmd, rte *e) - l = body - (char *)&msg; - msg.rtm.rtm_msglen = l; - -- if ((l = write(rt_sock, (char *)&msg, l)) < 0) { -+ if ((l = write(p->rt_sock, (char *)&msg, l)) < 0) { - log(L_ERR "KRT: Error sending route %I/%d to kernel: %m", net->n.prefix, net->n.pxlen); - return -1; - } -@@ -201,16 +246,16 @@ krt_sock_send(int cmd, rte *e) - } - - void --krt_replace_rte(struct krt_proto *p UNUSED, net *n, rte *new, rte *old, -+krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old, - struct ea_list *eattrs UNUSED) - { - int err = 0; - - if (old) -- krt_sock_send(RTM_DELETE, old); -+ krt_sock_send(p, RTM_DELETE, old); - - if (new) -- err = krt_sock_send(RTM_ADD, new); -+ err = krt_sock_send(p, RTM_ADD, new); - - if (err < 0) - n->n.flags |= KRF_SYNC_ERROR; -@@ -629,6 +674,8 @@ krt_sysctl_scan(struct proto *p, pool *pool, byte **buf, size_t *bl, int cmd) - size_t obl, needed; - struct ks_msg *m; - int retries = 3; -+ struct krt_config *c; -+ int fib = 0, old_fib = 0; - - mib[0] = CTL_NET; - mib[1] = PF_ROUTE; -@@ -637,6 +684,18 @@ krt_sysctl_scan(struct proto *p, pool *pool, byte **buf, size_t *bl, int cmd) - mib[4] = cmd; - mib[5] = 0; - -+ if (p->proto == &proto_unix_kernel) -+ { -+ c = (struct krt_config *)p->cf; -+ fib = c->sys.table_id; -+ -+ DBG("KRT: Setting fib to %d for route dump\n", fib); -+ if (p->debug & D_ROUTES) -+ log(L_TRACE "Setting fib to %d for route dump", fib); -+ -+ old_fib = my_fib_set(fib); -+ } -+ - try: - if (sysctl(mib, 6 , NULL , &needed, NULL, 0) < 0) - die("krt_sysctl_scan 1: %m"); -@@ -661,6 +720,7 @@ krt_sysctl_scan(struct proto *p, pool *pool, byte **buf, size_t *bl, int cmd) - goto try; - - log(L_ERR "KRT: Route scan failed"); -+ my_fib_set(old_fib); - return; - } - die("krt_sysctl_scan 2: %m"); -@@ -671,6 +731,8 @@ krt_sysctl_scan(struct proto *p, pool *pool, byte **buf, size_t *bl, int cmd) - m = (struct ks_msg *)next; - krt_read_msg(p, m, 1); - } -+ -+ my_fib_set(old_fib); - } - - static byte *krt_buffer = NULL; -@@ -711,25 +773,32 @@ void - krt_sys_start(struct krt_proto *x, int first UNUSED) - { - sock *sk_rt; -- static int ks_open_tried = 0; -+ struct krt_config *c; -+ int fib = 0, old_fib = 0; - -- if (ks_open_tried) -- return; -+ if (x->p.proto == &proto_unix_kernel) -+ { -+ c = (struct krt_config *)x->p.cf; -+ fib = c->sys.table_id; - -- ks_open_tried = 1; -+ DBG("KRT: Opening kernel socket to fib %d\n", fib); - -- DBG("KRT: Opening kernel socket\n"); -+ old_fib = my_fib_set(fib); -+ } - -- if( (rt_sock = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) < 0) -+ if( (x->rt_sock = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) < 0) - die("Cannot open kernel socket for routes"); - - sk_rt = sk_new(krt_pool); - sk_rt->type = SK_MAGIC; - sk_rt->rx_hook = krt_sock_hook; -- sk_rt->fd = rt_sock; -+ sk_rt->fd = x->rt_sock; - sk_rt->data = x; - if (sk_open(sk_rt)) - bug("krt-sock: sk_open failed"); -+ -+ /* Rollback fib */ -+ my_fib_set(old_fib); - } - - void -@@ -738,8 +807,11 @@ krt_sys_shutdown(struct krt_proto *x UNUSED, int last UNUSED) - if (!krt_buffer) - return; - -- mb_free(krt_buffer); -- krt_buffer = NULL; -+ if (last) -+ { -+ mb_free(krt_buffer); -+ krt_buffer = NULL; -+ } - } - - -diff --git a/sysdep/bsd/krt-sys.h b/sysdep/bsd/krt-sys.h -index 88915dd..8f94b8a 100644 ---- sysdep/bsd/krt-sys.h -+++ sysdep/bsd/krt-sys.h -@@ -31,11 +31,13 @@ static inline void kif_sys_copy_config(struct kif_config *d UNUSED, struct kif_c - /* Kernel routes */ - - struct krt_params { -+ int table_id; - }; - - struct krt_status { - }; - -+int max_fib_num(void); - - static inline void krt_sys_init(struct krt_proto *p UNUSED) { } - static inline int krt_sys_reconfigure(struct krt_proto *p UNUSED, struct krt_config *n UNUSED, struct krt_config *o UNUSED) { return 1; } -diff --git a/sysdep/cf/bsd-v6.h b/sysdep/cf/bsd-v6.h -index b7f25f6..3403299 100644 ---- sysdep/cf/bsd-v6.h -+++ sysdep/cf/bsd-v6.h -@@ -10,6 +10,7 @@ - - #define CONFIG_AUTO_ROUTES - #define CONFIG_SELF_CONSCIOUS -+#define CONFIG_MULTIPLE_TABLES - - #define CONFIG_SKIP_MC_BIND - -diff --git a/sysdep/cf/bsd.h b/sysdep/cf/bsd.h -index e7cc135..1101b22 100644 ---- sysdep/cf/bsd.h -+++ sysdep/cf/bsd.h -@@ -8,6 +8,7 @@ - - #define CONFIG_AUTO_ROUTES - #define CONFIG_SELF_CONSCIOUS -+#define CONFIG_MULTIPLE_TABLES - - #define CONFIG_SKIP_MC_BIND - -diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c -index 2bd1bc4..e5b05c7 100644 ---- sysdep/unix/krt.c -+++ sysdep/unix/krt.c -@@ -561,9 +561,9 @@ krt_dump_attrs(rte *e) - - #ifdef CONFIG_ALL_TABLES_AT_ONCE - static timer *krt_scan_timer; --static int krt_instance_count; - static list krt_instance_list; - #endif -+static int krt_instance_count; - - static void - krt_flush_routes(struct krt_proto *p) -@@ -964,6 +964,7 @@ krt_start(struct proto *P) - add_tail(&krt_instance_list, &p->instance_node); - #else - p->krt_pool = P->pool; -+ krt_instance_count++; - #endif - - #ifdef KRT_ALLOW_LEARN -@@ -992,11 +993,12 @@ krt_shutdown(struct proto *P) - struct krt_proto *p = (struct krt_proto *) P; - int last = 1; - --#ifdef CONFIG_ALL_TABLES_AT_ONCE -- rem_node(&p->instance_node); - if (--krt_instance_count) - last = 0; -- else -+ -+#ifdef CONFIG_ALL_TABLES_AT_ONCE -+ rem_node(&p->instance_node); -+ if (!krt_instance_count) - #endif - tm_stop(p->scan_timer); - -diff --git a/sysdep/unix/krt.h b/sysdep/unix/krt.h -index d6fbf72..6c50126 100644 ---- sysdep/unix/krt.h -+++ sysdep/unix/krt.h -@@ -61,6 +61,7 @@ struct krt_proto { - #ifdef CONFIG_ALL_TABLES_AT_ONCE - node instance_node; /* Node in krt instance list */ - #endif -+ int rt_sock; /* Routing socket descriptor */ - int initialized; /* First scan has already been finished */ - }; - --- -1.7.3.2 - diff --git a/net/bird6/Makefile b/net/bird6/Makefile index 7e82b4f7543d..8216c0aca494 100644 --- a/net/bird6/Makefile +++ b/net/bird6/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= bird6 -PORTVERSION= 1.3.10 +PORTVERSION= 1.3.11 CATEGORIES= net MASTER_SITES= ftp://bird.network.cz/pub/bird/ \ http://bird.mpls.in/distfiles/bird/ diff --git a/net/bird6/distinfo b/net/bird6/distinfo index e7188e5eb13b..e133f7c6365c 100644 --- a/net/bird6/distinfo +++ b/net/bird6/distinfo @@ -1,2 +1,2 @@ -SHA256 (bird-1.3.10.tar.gz) = 4c080001555fe1399920fa251e9394a4f286e2021f07e1d53f232917c2aabfbb -SIZE (bird-1.3.10.tar.gz) = 1003066 +SHA256 (bird-1.3.11.tar.gz) = cad6f58dfd8fef9772d46be3fe51a53420f56ee5fbd79d6993889ae6596a8495 +SIZE (bird-1.3.11.tar.gz) = 1108400 diff --git a/net/bird6/files/bird6.in b/net/bird6/files/bird6.in index 4650516a9e5f..2db7094cd5de 100644 --- a/net/bird6/files/bird6.in +++ b/net/bird6/files/bird6.in @@ -2,7 +2,7 @@ # $FreeBSD$ # -# PROVIDE: bird6 +# PROVIDE: bird6 dynamicrouting # REQUIRE: LOGIN # KEYWORD: shutdown # |