FreeBSD Bugzilla – Attachment 115788 Details for
Bug 157645
[maintainer update] net/bird additional patches
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 19.25 KB, created by
Alexander V. Chernikov
on 2011-06-06 01:10:10 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Alexander V. Chernikov
Created:
2011-06-06 01:10:10 UTC
Size:
19.25 KB
patch
obsolete
>diff -urN _bird/Makefile bird/Makefile >--- _bird/Makefile 2011-06-05 20:36:38.000000000 +0400 >+++ bird/Makefile 2011-06-06 03:26:24.000000000 +0400 >@@ -7,6 +7,7 @@ > > PORTNAME= bird > PORTVERSION= 1.3.1 >+PORTREVISION= 1 > CATEGORIES= net > MASTER_SITES= ftp://bird.network.cz/pub/bird/ > >@@ -18,7 +19,7 @@ > GNU_CONFIGURE= yes > > OPTIONS= FIBS "Enable multiple fib support" Off \ >- LEARN_FIX "Support multiple routing daemons" Off >+ CONFIG_INCLUDES "Permit config 'include' keyword" Off > > MAKE_JOBS_UNSAFE= yes > >@@ -30,13 +31,24 @@ > EXTRA_PATCHES+= ${FILESDIR}/fibs.diff > .endif > >-.if defined(WITH_LEARN_FIX) >-EXTRA_PATCHES+= ${FILESDIR}/learn-krt-sock.c >+.if defined(WITH_CONFIG_INCLUDES) >+EXTRA_PATCHES+= ${FILESDIR}/config_includes.diff > .endif > > post-install: > @if [ ! -f ${PREFIX}/etc/bird.conf ]; then \ > ${CP} -p ${PREFIX}/etc/bird.conf.example ${PREFIX}/etc/bird.conf ; \ >+ ${CHMOD} 0640 ${PREFIX}/etc/bird.conf ; \ > fi >+.if defined(WITH_FIBS) >+ @${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} >+ @${ECHO_MSG} ===================================================================== >+ @${ECHO_MSG} >+.endif > > .include <bsd.port.post.mk> >diff -urN _bird/files/config_includes.diff bird/files/config_includes.diff >--- _bird/files/config_includes.diff 1970-01-01 03:00:00.000000000 +0300 >+++ bird/files/config_includes.diff 2011-06-06 02:50:43.000000000 +0400 >@@ -0,0 +1,302 @@ >+Index: conf/conf.c >+=================================================================== >+--- conf/conf.c (revision 4873) >++++ conf/conf.c (revision 4875) >+@@ -108,7 +108,7 @@ >+ cfg_mem = c->mem; >+ if (setjmp(conf_jmpbuf)) >+ return 0; >+- cf_lex_init(0); >++ cf_lex_init(c, 0); >+ sysdep_preconfig(c); >+ protos_preconfig(c); >+ rt_preconfig(c); >+@@ -138,7 +138,7 @@ >+ cfg_mem = c->mem; >+ if (setjmp(conf_jmpbuf)) >+ return 0; >+- cf_lex_init(1); >++ cf_lex_init(c, 1); >+ cf_parse(); >+ return 1; >+ } >+@@ -356,6 +356,7 @@ >+ strcpy(buf, "<bug: error message too long>"); >+ new_config->err_msg = cfg_strdup(buf); >+ new_config->err_lino = conf_lino; >++ new_config->err_fname = conf_fname; >+ longjmp(conf_jmpbuf, 1); >+ } >+ >+Index: conf/cf-lex.l >+=================================================================== >+--- conf/cf-lex.l (revision 4873) >++++ conf/cf-lex.l (revision 4875) >+@@ -30,6 +30,9 @@ >+ #include <errno.h> >+ #include <stdlib.h> >+ #include <stdarg.h> >++#include <unistd.h> >++#include <fcntl.h> >++#include <libgen.h> >+ >+ #define PARSER 1 >+ >+@@ -64,18 +67,36 @@ >+ static struct sym_scope *conf_this_scope; >+ >+ int conf_lino; >++char conf_fname[255]; >++int conf_fd; >+ >++char conf_base[255]; >++ >+ static int cf_hash(byte *c); >+ static struct symbol *cf_find_sym(byte *c, unsigned int h0); >+ >+ linpool *cfg_mem; >+ >+-int (*cf_read_hook)(byte *buf, unsigned int max); >++int (*cf_read_hook)(byte *buf, unsigned int max, int fd); >+ >+-#define YY_INPUT(buf,result,max) result = cf_read_hook(buf, max); >+-#define YY_NO_UNPUT >++#define YY_INPUT(buf,result,max) result = cf_read_hook(buf, max, STACK(conf_fd)); >+ #define YY_FATAL_ERROR(msg) cf_error(msg) >+ >++#define MAX_INCLUDE_DEPTH 42 >++struct include_file_stack { >++ YY_BUFFER_STATE stack; /* Internal lexer state */ >++ unsigned int conf_lino; /* Current file lineno (at include) */ >++ char conf_fname[255]; /* Current file name */ >++ int conf_fd; /* Current file descriptor */ >++}; >++ >++static struct include_file_stack ifs[MAX_INCLUDE_DEPTH]; >++static int ifs_ind; /* Current stack depth */ >++#define STACK(x) ifs[ifs_ind].x >++ >++static void dispatch_include(void); >++static int check_eof(void); >++ >+ %} >+ >+ %option noyywrap >+@@ -90,9 +111,12 @@ >+ XIGIT [0-9a-fA-F] >+ ALNUM [a-zA-Z_0-9] >+ WHITE [ \t] >++include ^{WHITE}*include{WHITE}*\".*\"{WHITE}*; >+ >+ %% >+ >++{include} { dispatch_include(); } >++ >+ {DIGIT}+\.{DIGIT}+\.{DIGIT}+\.{DIGIT}+ { >+ #ifdef IPV6 >+ if (ipv4_pton_u32(yytext, &cf_lval.i32)) >+@@ -184,7 +208,7 @@ >+ >+ ["][^"\n]*\n cf_error("Unterminated string"); >+ >+-<INITIAL,COMMENT><<EOF>> return END; >++<INITIAL,COMMENT><<EOF>> { if (check_eof()) return END; } >+ >+ {WHITE}+ >+ >+@@ -220,7 +244,67 @@ >+ >+ %% >+ >++/* Open included file with properly swapped buffers */ >++static void >++dispatch_include(void) >++{ >++ char *fname, *p = NULL, full_name[255]; >++ int fd; >++ >++ if ((fname = strchr(yytext, '"')) != NULL) { >++ if ((p = strchr(++fname, '"')) != NULL) >++ *p = '\0'; >++ >++ if (*fname == '/') >++ snprintf(full_name, sizeof(full_name), "%s", fname); >++ else >++ snprintf(full_name, sizeof(full_name), "%s/%s", conf_base, fname); >++ >++ if (ifs_ind >= MAX_INCLUDE_DEPTH) >++ cf_error("Max include depth (%d) reached on file %s", MAX_INCLUDE_DEPTH, fname); >++ >++ if ((fd = open(full_name, O_RDONLY)) == -1) >++ cf_error("Error opening included file %s", full_name); >++ >++ /* Save current stack */ >++ STACK(conf_lino) = conf_lino; >++ STACK(stack) = YY_CURRENT_BUFFER; >++ /* Prepare new stack */ >++ ifs_ind++; >++ STACK(conf_lino) = 1; >++ strcpy(STACK(conf_fname), fname); /* XXX: strlcpy should be here */ >++ STACK(conf_fd) = fd; >++ /* Export to global variables */ >++ conf_lino = STACK(conf_lino); >++ conf_fd = STACK(conf_fd); >++ strcpy(conf_fname, STACK(conf_fname)); >++ >++ yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); >++ } >++} >++ >+ static int >++check_eof(void) >++{ >++ if (ifs_ind > 0) >++ close(STACK(conf_fd)); >++ if (--ifs_ind < 0) { >++ /* EOF in main config file */ >++ ifs_ind = 0; >++ conf_lino = 1; >++ return 1; >++ } >++ >++ /* switch buffer */ >++ conf_lino = STACK(conf_lino); >++ conf_fd = STACK(conf_fd); >++ strcpy(conf_fname, STACK(conf_fname)); >++ yy_delete_buffer(YY_CURRENT_BUFFER); >++ yy_switch_to_buffer(STACK(stack)); >++ return 0; >++} >++ >++static int >+ cf_hash(byte *c) >+ { >+ unsigned int h = 13; >+@@ -363,11 +447,28 @@ >+ * parsing of a new input. >+ */ >+ void >+-cf_lex_init(int is_cli) >++cf_lex_init(struct config *c, int is_cli) >+ { >+ if (!kw_hash_inited) >+ cf_lex_init_kh(); >+ conf_lino = 1; >++ /* Zero stack */ >++ memset(ifs, 0, sizeof(ifs)); >++ memset(conf_base, 0, sizeof(conf_base)); >++ ifs_ind = 0; >++ if (!is_cli) { >++ /* Fill in level 0 */ >++ STACK(conf_lino) = 1; >++ STACK(conf_fd) = c->file_fd; >++ strcpy(STACK(conf_fname), c->file_name); >++ /* Save config directory path */ >++ strcpy(conf_base, dirname(STACK(conf_fname))); >++ } >++ /* Export to global variables */ >++ conf_lino = STACK(conf_lino); >++ conf_fd = STACK(conf_fd); >++ strcpy(conf_fname, STACK(conf_fname)); >++ >+ yyrestart(NULL); >+ if (is_cli) >+ BEGIN(CLI); >+Index: conf/conf.h >+=================================================================== >+--- conf/conf.h (revision 4873) >++++ conf/conf.h (revision 4875) >+@@ -38,7 +38,9 @@ >+ int cli_debug; /* Tracing of CLI connections and commands */ >+ char *err_msg; /* Parser error message */ >+ int err_lino; /* Line containing error */ >++ char *err_fname; /* File name containing error */ >+ char *file_name; /* Name of configuration file */ >++ int file_fd; /* Config file descriptor */ >+ struct symbol **sym_hash; /* Lexer: symbol hash table */ >+ struct symbol **sym_fallback; /* Lexer: fallback symbol hash table */ >+ int obstacle_count; /* Number of items blocking freeing of this config */ >+@@ -83,7 +85,7 @@ >+ >+ /* Lexer */ >+ >+-extern int (*cf_read_hook)(byte *buf, unsigned int max); >++extern int (*cf_read_hook)(byte *buf, unsigned int max, int fd); >+ >+ struct symbol { >+ struct symbol *next; >+@@ -107,9 +109,10 @@ >+ #define SYM_VARIABLE 0x100 /* 0x100-0x1ff are variable types */ >+ >+ extern int conf_lino; >++extern char conf_fname[255]; >+ >+ int cf_lex(void); >+-void cf_lex_init(int is_cli); >++void cf_lex_init(struct config *c, int is_cli); >+ struct symbol *cf_find_symbol(byte *c); >+ struct symbol *cf_default_name(char *template, int *counter); >+ struct symbol *cf_define_symbol(struct symbol *symbol, int type, void *def); >+Index: doc/bird.conf.example >+=================================================================== >+--- doc/bird.conf.example (revision 4873) >++++ doc/bird.conf.example (revision 4875) >+@@ -22,6 +22,9 @@ >+ # else reject; >+ #} >+ >++# Write more filters in included config file(s): >++#include "filters.conf"; >++ >+ #filter sink { reject; } >+ #filter okay { accept; } >+ >+Index: sysdep/unix/main.c >+=================================================================== >+--- sysdep/unix/main.c (revision 4873) >++++ sysdep/unix/main.c (revision 4875) >+@@ -122,13 +122,12 @@ >+ #endif // PATH_IPROUTE_DIR >+ >+ >+-static int conf_fd; >+ static char *config_name = PATH_CONFIG; >+ >+ static int >+-cf_read(byte *dest, unsigned int len) >++cf_read(byte *dest, unsigned int len, int fd) >+ { >+- int l = read(conf_fd, dest, len); >++ int l = read(fd, dest, len); >+ if (l < 0) >+ cf_error("Read error"); >+ return l; >+@@ -158,15 +157,15 @@ >+ unix_read_config(struct config **cp, char *name) >+ { >+ struct config *conf = config_alloc(name); >+- int ret; >++ int ret, fd; >+ >+ *cp = conf; >+- conf_fd = open(name, O_RDONLY); >+- if (conf_fd < 0) >++ if ((fd = open(name, O_RDONLY)) == -1) >+ return 0; >++ conf->file_fd = fd; >+ cf_read_hook = cf_read; >+ ret = config_parse(conf); >+- close(conf_fd); >++ close(fd); >+ return ret; >+ } >+ >+@@ -178,7 +177,7 @@ >+ if (!unix_read_config(&conf, config_name)) >+ { >+ if (conf->err_msg) >+- die("%s, line %d: %s", config_name, conf->err_lino, conf->err_msg); >++ die("%s, line %d: %s", conf->err_fname, conf->err_lino, conf->err_msg); >+ else >+ die("Unable to open configuration file %s: %m", config_name); >+ } >diff -urN _bird/files/fibs.diff bird/files/fibs.diff >--- _bird/files/fibs.diff 2011-06-02 23:52:40.000000000 +0400 >+++ bird/files/fibs.diff 2011-06-06 03:30:09.000000000 +0400 >@@ -1,14 +1,32 @@ >-diff -urN sysdep/bsd/Modules sysdep/bsd/Modules >---- sysdep/bsd/Modules 2011-03-31 12:29:42.000000000 +0400 >-+++ sysdep/bsd/Modules 2011-05-10 12:04:30.643950460 +0400 >-@@ -4,3 +4,4 @@ >- krt-set.h >- krt-sock.c >- krt-sock.h >-+fib.Y >-diff -urN sysdep/bsd/fib.Y sysdep/bsd/fib.Y >---- sysdep/bsd/fib.Y 1970-01-01 03:00:00.000000000 +0300 >-+++ sysdep/bsd/fib.Y 2011-05-10 12:04:05.724272679 +0400 >+Index: sysdep/unix/krt.h >+=================================================================== >+--- sysdep/unix/krt.h (revision 4869) >++++ sysdep/unix/krt.h (working copy) >+@@ -67,6 +67,7 @@ >+ #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 */ >+ }; >+ >+Index: sysdep/bsd/krt-sock.h >+=================================================================== >+--- sysdep/bsd/krt-sock.h (revision 4869) >++++ sysdep/bsd/krt-sock.h (working copy) >+@@ -42,5 +42,8 @@ >+ >+ static inline int krt_set_params_same(struct krt_set_params *o UNUSED, struct krt_set_params *n UNUSED) { return 1; } >+ void krt_read_msg(struct proto *p, struct ks_msg *msg, int scan); >++int max_fib_num(void); >++int my_fib_get(void); >++int my_fib_set(int fib); >+ >+ #endif >+Index: sysdep/bsd/fib.Y >+=================================================================== >+--- sysdep/bsd/fib.Y (revision 0) >++++ sysdep/bsd/fib.Y (revision 0) > @@ -0,0 +1,29 @@ > +/* > + * BIRD -- FreeBSD rtsock configuration >@@ -30,7 +48,7 @@ > + > +rtsock_item: > + KERNEL TABLE expr { >-+ if ($3 <= 0 || $3 >= max_fib_num()) >++ if ($3 < 0 || $3 >= max_fib_num()) > + cf_error("Kernel routing table number out of range"); > + THIS_KRT->scan.table_id = $3; > + } >@@ -39,9 +57,19 @@ > +CF_CODE > + > +CF_END >-diff -urN sysdep/bsd/krt-scan.h sysdep/bsd/krt-scan.h >---- sysdep/bsd/krt-scan.h 2011-03-31 12:29:42.000000000 +0400 >-+++ sysdep/bsd/krt-scan.h 2011-05-10 11:58:54.812942887 +0400 >+Index: sysdep/bsd/Modules >+=================================================================== >+--- sysdep/bsd/Modules (revision 4869) >++++ sysdep/bsd/Modules (working copy) >+@@ -4,3 +4,4 @@ >+ krt-set.h >+ krt-sock.c >+ krt-sock.h >++fib.Y >+Index: sysdep/bsd/krt-scan.h >+=================================================================== >+--- sysdep/bsd/krt-scan.h (revision 4869) >++++ sysdep/bsd/krt-scan.h (working copy) > @@ -10,6 +10,7 @@ > #define _BIRD_KRT_SCAN_H_ > >@@ -50,10 +78,20 @@ > }; > > struct krt_scan_status { >-diff -urN sysdep/bsd/krt-sock.c sysdep/bsd/krt-sock.c >---- sysdep/bsd/krt-sock.c 2011-05-02 12:13:18.000000000 +0400 >-+++ sysdep/bsd/krt-sock.c 2011-05-10 12:25:22.075267568 +0400 >-@@ -53,6 +53,21 @@ >+Index: sysdep/bsd/krt-sock.c >+=================================================================== >+--- sysdep/bsd/krt-sock.c (revision 4869) >++++ sysdep/bsd/krt-sock.c (working copy) >+@@ -33,8 +33,6 @@ >+ #include "lib/string.h" >+ #include "lib/socket.h" >+ >+-int rt_sock = 0; >+- >+ int >+ krt_capable(rte *e) >+ { >+@@ -53,6 +51,49 @@ > ); > } > >@@ -68,41 +106,169 @@ > + return 1; > + } > + >-+ log(L_TRACE "Max fibs: %d\n", fibs); >++ //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)) > >-@@ -219,6 +234,7 @@ >+@@ -69,7 +110,7 @@ >+ body += l;} >+ >+ static void >+-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; >+@@ -180,23 +221,23 @@ >+ 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", net->n.prefix, net->n.pxlen); >+ } >+ } >+ >+ void >+-krt_set_notify(struct krt_proto *p UNUSED, net *net, rte *new, rte *old) >++krt_set_notify(struct krt_proto *p, net *net, rte *new, rte *old) >+ { >+ if (old) >+ { >+ DBG("krt_remove_route(%I/%d)\n", net->n.prefix, net->n.pxlen); >+- krt_sock_send(RTM_DELETE, old); >++ krt_sock_send(p, RTM_DELETE, old); >+ } >+ if (new) >+ { >+ DBG("krt_add_route(%I/%d)\n", net->n.prefix, net->n.pxlen); >+- krt_sock_send(RTM_ADD, new); >++ krt_sock_send(p, RTM_ADD, new); >+ } >+ } >+ >+@@ -218,25 +259,34 @@ >+ krt_set_start(struct krt_proto *x, int first UNUSED) > { > sock *sk_rt; >- static int ks_open_tried = 0; >-+ int fib = 0; >+- static int ks_open_tried = 0; >++ struct krt_config *c; >++ int fib = 0, old_fib = 0; >+ >+- if (ks_open_tried) >+- return; >++ if (!strcmp(x->p.proto->name, "Kernel")) >++ { >++ c = (struct krt_config *)x->p.cf; >++ fib = c->scan.table_id; > >- if (ks_open_tried) >- return; >-@@ -230,6 +246,16 @@ >- if( (rt_sock = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) < 0) >+- ks_open_tried = 1; >++ DBG("KRT: Opening kernel route socket to fib %d\n", fib); >++ if (x->p.debug & D_ROUTES) >++ log(L_TRACE "Opening route socket to fib %d", fib); >+ >+- DBG("KRT: Opening kernel socket\n"); >+- >+- if( (rt_sock = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) < 0) >++ old_fib = my_fib_set(fib); >++ } >++ >++ if( (x->rt_sock = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) < 0) > die("Cannot open kernel socket for routes"); > >-+ fib = ((struct krt_config *)x)->scan.table_id; >-+ log(L_TRACE "KRT: Setting fib %d", fib); >-+ >+ sk_rt = sk_new(krt_pool); >+ sk_rt->type = SK_MAGIC; >+ sk_rt->rx_hook = krt_set_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"); > + >-+ if ((fib != 0) && (setsockopt(rt_sock, SOL_SOCKET, SO_SETFIB, &fib, sizeof(fib)) == -1)) >++ /* Rollback fib */ >++ my_fib_set(old_fib); >+ } >+ >+ #define SKIP(ARG...) do { DBG("KRT: Ignoring route - " ARG); return; } while(0) >+@@ -624,6 +674,8 @@ >+ 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; >+@@ -632,6 +684,17 @@ >+ mib[4] = cmd; >+ mib[5] = 0; >+ >++ if (!strcmp(p->proto->name, "Kernel")) > + { >-+ log(L_ERR "KRT: setsockopt() failed for socket %d: %s", rt_sock, strerror(errno)); >-+ die("Cannot set fib for kernel socket"); >++ c = (struct krt_config *)p->cf; >++ fib = c->scan.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"); >+@@ -656,6 +719,7 @@ >+ goto try; >+ >+ log(L_ERR "KRT: Route scan failed"); >++ my_fib_set(old_fib); >+ return; >+ } >+ die("krt_sysctl_scan 2: %m"); >+@@ -666,6 +730,8 @@ >+ m = (struct ks_msg *)next; >+ krt_read_msg(p, m, 1); >+ } > + >- sk_rt = sk_new(krt_pool); >- sk_rt->type = SK_MAGIC; >- sk_rt->rx_hook = krt_set_hook; >-diff -urN sysdep/cf/bsd-v6.h sysdep/cf/bsd-v6.h >---- sysdep/cf/bsd-v6.h 2011-03-31 12:29:42.000000000 +0400 >-+++ sysdep/cf/bsd-v6.h 2011-05-10 11:19:01.394166479 +0400 >++ my_fib_set(old_fib); >+ } >+ >+ static byte *krt_buffer = NULL; >+Index: sysdep/cf/bsd-v6.h >+=================================================================== >+--- sysdep/cf/bsd-v6.h (revision 4869) >++++ sysdep/cf/bsd-v6.h (working copy) > @@ -10,7 +10,7 @@ > > #define CONFIG_AUTO_ROUTES >@@ -112,9 +278,10 @@ > > #undef CONFIG_UNIX_IFACE > #undef CONFIG_UNIX_SET >-diff -urN sysdep/cf/bsd.h sysdep/cf/bsd.h >---- sysdep/cf/bsd.h 2011-03-31 12:29:42.000000000 +0400 >-+++ sysdep/cf/bsd.h 2011-05-10 11:19:01.398182352 +0400 >+Index: sysdep/cf/bsd.h >+=================================================================== >+--- sysdep/cf/bsd.h (revision 4869) >++++ sysdep/cf/bsd.h (working copy) > @@ -8,7 +8,7 @@ > > #define CONFIG_AUTO_ROUTES >diff -urN _bird/files/learn-krt-sock.c bird/files/learn-krt-sock.c >--- _bird/files/learn-krt-sock.c 2011-06-02 23:52:40.000000000 +0400 >+++ bird/files/learn-krt-sock.c 1970-01-01 03:00:00.000000000 +0300 >@@ -1,11 +0,0 @@ >---- sysdep/bsd/krt-sock.c.orig 2011-05-11 10:41:35.432219356 +0400 >-+++ sysdep/bsd/krt-sock.c 2011-05-11 10:42:02.483875083 +0400 >-@@ -320,7 +320,7 @@ >- if ((flags & RTF_GATEWAY) && ipa_zero(igate)) >- { log(L_ERR "%s (%I/%d) - missing gateway", errmsg, idst, pxlen); return; } >- >-- u32 self_mask = RTF_PROTO1; >-+ u32 self_mask = 0; >- u32 alien_mask = RTF_STATIC | RTF_PROTO1 | RTF_GATEWAY; >- >- #ifdef RTF_PROTO2 >diff -urN _bird/files/patch-bgp-packet.c bird/files/patch-bgp-packet.c >--- _bird/files/patch-bgp-packet.c 1970-01-01 03:00:00.000000000 +0300 >+++ bird/files/patch-bgp-packet.c 2011-06-06 02:54:21.000000000 +0400 >@@ -0,0 +1,11 @@ >+--- proto/bgp/packets.c >++++ proto/bgp/packets.c >+@@ -862,7 +862,7 @@ bgp_do_rx_update(struct bgp_conn *conn, >+ if (conn->state != BS_ESTABLISHED) /* fatal error during decoding */ >+ return; >+ >+- if (a0 && bgp_set_next_hop(p, a0)) >++ if (a0 && nlri_len && bgp_set_next_hop(p, a0)) >+ a = rta_lookup(a0); >+ >+ while (nlri_len)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 157645
: 115788