FreeBSD Bugzilla – Attachment 92274 Details for
Bug 129881
[patch] net/openospfd: update to 4.3 and fix some bugs
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
openospfd.diff
openospfd.diff (text/x-diff; charset=us-ascii), 20.94 KB, created by
Wesley Shields
on 2009-04-29 20:19:39 UTC
(
hide
)
Description:
openospfd.diff
Filename:
MIME Type:
Creator:
Wesley Shields
Created:
2009-04-29 20:19:39 UTC
Size:
20.94 KB
patch
obsolete
>Index: Makefile >=================================================================== >RCS file: /ncvs/ports/net/openospfd/Makefile,v >retrieving revision 1.14 >diff -u -r1.14 Makefile >--- Makefile 22 Apr 2009 12:44:50 -0000 1.14 >+++ Makefile 29 Apr 2009 19:20:58 -0000 >@@ -6,17 +6,17 @@ > # > > PORTNAME= openospfd >-PORTVERSION= 4.2 >+PORTVERSION= 4.3 > CATEGORIES= net >-MASTER_SITES= ftp://ftp.dkuug.dk/pub/OpenBSD/OpenBGPD/:openbsd \ >+MASTER_SITES= ${MASTER_SITE_OPENBSD:S/$/:openbsd/g} \ > ${MASTER_SITE_LOCAL:S/$/:freebsd/g} >-MASTER_SITE_SUBDIR= flz/openospfd/:freebsd >+MASTER_SITE_SUBDIR= flz/openospfd/:freebsd OpenBGPD/:openbsd > DISTFILES= ${PORTNAME}-${PORTVERSION}.tgz:openbsd \ >- if_media.h:freebsd hash.h:freebsd >+ if_media.h:freebsd > DIST_SUBDIR= ${PORTNAME} > EXTRACT_ONLY= ${PORTNAME}-${PORTVERSION}.tgz > >-MAINTAINER= ports@FreeBSD.org >+MAINTAINER= rea-fbsd@codelabs.ru > COMMENT= Free implementation of the Open Shortest Path First Protocol > > LIB_DEPENDS= event-1.4:${PORTSDIR}/devel/libevent >@@ -43,10 +43,8 @@ > > post-extract: > @${CP} ${DISTDIR}/${DIST_SUBDIR}/if_media.h ${WRKSRC}/ospfctl/ >- @${CP} ${DISTDIR}/${DIST_SUBDIR}/hash.h ${WRKSRC}/ospfd/ > > post-patch: >- @${REINPLACE_CMD} -e "s|sys/hash.h|hash.h|" ${WRKSRC}/ospfd/lsupdate.c > @${REINPLACE_CMD} -e "s|<net/if_media.h>|\"if_media.h\"|" ${WRKSRC}/ospfctl/ospfctl.c > @${REINPLACE_CMD} -e "/rc.conf.local/d" ${WRKSRC}/ospfd/ospfd.conf.5 > @${REINPLACE_CMD} -e "s|SIMPLEQ|STAILQ|" ${WRKSRC}/ospfd/*.[chy] >@@ -54,7 +52,7 @@ > ${WRKSRC}/ospfd/ospfd.h \ > ${WRKSRC}/ospfd/ospfd.8 \ > ${WRKSRC}/ospfd/ospfd.conf.5 >- @${REINPLACE_CMD} -e "s|__dead||" \ >+ @${REINPLACE_CMD} -e "s|__dead|__dead2|" \ > ${WRKSRC}/ospfd/log.h \ > ${WRKSRC}/ospfd/ospfd.c \ > ${WRKSRC}/ospfctl/ospfctl.c >Index: distinfo >=================================================================== >RCS file: /ncvs/ports/net/openospfd/distinfo,v >retrieving revision 1.5 >diff -u -r1.5 distinfo >--- distinfo 27 Nov 2008 20:54:31 -0000 1.5 >+++ distinfo 29 Apr 2009 19:20:58 -0000 >@@ -1,9 +1,6 @@ >-MD5 (openospfd/openospfd-4.2.tgz) = ac919e4883105b28a846106e7c60bb80 >-SHA256 (openospfd/openospfd-4.2.tgz) = 896a9e29447d7da46a1c7c1717e1527b3770425840e8f0180419ec313d3d7b00 >-SIZE (openospfd/openospfd-4.2.tgz) = 93661 >+MD5 (openospfd/openospfd-4.3.tgz) = dffeb5cf21cbd4f15534e658682cb6ee >+SHA256 (openospfd/openospfd-4.3.tgz) = 8fd4ffb393cc06f5936e9eb444b54f72d3fb7ec27285d0d746de5e8050959a66 >+SIZE (openospfd/openospfd-4.3.tgz) = 97515 > MD5 (openospfd/if_media.h) = 4ff9297f5c133425dafe3ca565c0f811 > SHA256 (openospfd/if_media.h) = 58225d0ed363c2beb23426f0f8254089d4541c3334776f3750ba434d4491a1d1 > SIZE (openospfd/if_media.h) = 23762 >-MD5 (openospfd/hash.h) = 0c397692b9b152f1bca968b6248bc09c >-SHA256 (openospfd/hash.h) = 0c5561c6765325f49d82d5c5fd9471dbfadf21f44e554758eb112a23f7c317b1 >-SIZE (openospfd/hash.h) = 3488 >Index: files/patch-RTF_LLINFO-ARP-v2-fix >=================================================================== >RCS file: files/patch-RTF_LLINFO-ARP-v2-fix >diff -N files/patch-RTF_LLINFO-ARP-v2-fix >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ files/patch-RTF_LLINFO-ARP-v2-fix 29 Apr 2009 19:20:58 -0000 >@@ -0,0 +1,26 @@ >+diff --git a/ospfd/kroute.c b/ospfd/kroute.c >+index b46fa30..acc2a32 100644 >+--- ospfd/kroute.c >++++ ospfd/kroute.c >+@@ -1174,8 +1174,10 @@ fetchtable(void) >+ if ((sa = rti_info[RTAX_DST]) == NULL) >+ continue; >+ >++#if defined(RTF_LLINFO) /* FreeBSD dropped RTF_LLINFO after ARP-v2 rework */ >+ if (rtm->rtm_flags & RTF_LLINFO) /* arp cache */ >+ continue; >++#endif /* defined(RTF_LLINFO) */ >+ >+ if ((kr = calloc(1, sizeof(struct kroute_node))) == NULL) { >+ log_warn("fetchtable"); >+@@ -1371,8 +1373,10 @@ dispatch_rtmsg(void) >+ if (rtm->rtm_errno) /* failed attempts... */ >+ continue; >+ >++#if defined(RTF_LLINFO) /* FreeBSD dropped RTF_LLINFO after ARP-v2 rework */ >+ if (rtm->rtm_flags & RTF_LLINFO) /* arp cache */ >+ continue; >++#endif /* defined(RTF_LLINFO) */ >+ >+ #ifdef RTF_MPATH >+ if (rtm->rtm_flags & RTF_MPATH) >Index: files/patch-fix-libevent-READ-WRITE >=================================================================== >RCS file: files/patch-fix-libevent-READ-WRITE >diff -N files/patch-fix-libevent-READ-WRITE >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ files/patch-fix-libevent-READ-WRITE 29 Apr 2009 19:20:58 -0000 >@@ -0,0 +1,271 @@ >+diff --git a/ospfd/libevent_helpers.h b/ospfd/libevent_helpers.h >+new file mode 100644 >+index 0000000..46f743d >+--- /dev/null >++++ ospfd/libevent_helpers.h >+@@ -0,0 +1,81 @@ >++/* >++ * Copyright (c) 2008 Eygene Ryabinkin <rea-fbsd@codelabs.ru> >++ * >++ * Permission to use, copy, modify, and distribute this software for any >++ * purpose with or without fee is hereby granted, provided that the above >++ * copyright notice and this permission notice appear in all copies. >++ * >++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES >++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF >++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR >++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES >++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN >++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF >++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. >++ */ >++ >++#ifndef _LIBEVENT_HELPERS_H_ >++#define _LIBEVENT_HELPERS_H_ >++ >++#include <stdio.h> >++#include <sys/types.h> >++ >++#include "log.h" >++#include "ospfd.h" >++ >++/* Inline functions */ >++ >++/* >++ * A support function that processes libevent notification in the >++ * following way: >++ * - if we are ready to write, we will try to flush the queue; >++ * - if we are ready to read, we will read the input buffer and >++ * prepare variables 'n' and 'shut' accordingly. >++ * >++ * Such handling occurs at least 6 times within the OSPFD sources, >++ * so this inline function is just an alternative to the preprocessor >++ * macros. >++ * >++ * Function returns 0 if everything was handled and no further >++ * processing is needed; it returns EV_READ if the read processing >++ * was prepared to take place. >++ */ >++static inline short >++dispatch_read_write_event(short _event, struct imsgbuf *_ibuf, >++ ssize_t *_n, int *_shut) __attribute__((always_inline)); >++ >++static inline short >++dispatch_read_write_event(short event, struct imsgbuf *ibuf, >++ ssize_t *n, int *shut) >++{ >++ static char errbuf[128]; >++ >++ /* >++ * We can have both EV_READ and EV_WRITE, since we can be >++ * subscribed to both event types. Handle write readiness >++ * first (flush the queue) and then handle reads. >++ */ >++ if ((event & ~(EV_WRITE|EV_READ))) { >++ snprintf(errbuf, sizeof(errbuf), >++ "unknown event 0x%hx", (unsigned short)event); >++ fatalx(errbuf); >++ } >++ >++ if ((event & EV_WRITE)) { >++ if (msgbuf_write(&ibuf->w) == -1) >++ fatal("msgbuf_write"); >++ imsg_event_add(ibuf); >++ } >++ if ((event & EV_READ)) { >++ if ((*n = imsg_read(ibuf)) == -1) >++ fatal("imsg_read error"); >++ if (*n == 0) /* connection closed */ >++ *shut = 1; >++ return EV_READ; >++ } else { >++ return 0; >++ } >++ /* NOTREACHED */ >++} >++ >++#endif /* _LIBEVENT_HELPERS_H_ */ >+diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c >+index be69cab..4e62d09 100644 >+--- ospfd/ospfd.c >++++ ospfd/ospfd.c >+@@ -46,6 +46,7 @@ >+ #include "control.h" >+ #include "log.h" >+ #include "rde.h" >++#include "libevent_helpers.h" >+ >+ void main_sig_handler(int, short, void *); >+ __dead void usage(void); >+@@ -355,21 +356,8 @@ main_dispatch_ospfe(int fd, short event, void *bula) >+ ssize_t n; >+ int shut = 0; >+ >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ for (;;) { >+ if ((n = imsg_get(ibuf, &imsg)) == -1) >+@@ -434,21 +422,8 @@ main_dispatch_rde(int fd, short event, void *bula) >+ ssize_t n; >+ int count, shut = 0; >+ >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ for (;;) { >+ if ((n = imsg_get(ibuf, &imsg)) == -1) >+diff --git a/ospfd/ospfe.c b/ospfd/ospfe.c >+index af7a406..d6a6aa9 100644 >+--- ospfd/ospfe.c >++++ ospfd/ospfe.c >+@@ -42,6 +42,7 @@ >+ #include "rde.h" >+ #include "control.h" >+ #include "log.h" >++#include "libevent_helpers.h" >+ >+ void ospfe_sig_handler(int, short, void *); >+ void ospfe_shutdown(void); >+@@ -257,23 +258,11 @@ ospfe_dispatch_main(int fd, short event, void *bula) >+ struct iface *iface = NULL; >+ struct kif *kif; >+ struct auth_md md; >+- int n, link_ok, stub_changed, shut = 0; >+- >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ int link_ok, stub_changed, shut = 0; >++ ssize_t n; >++ >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ for (;;) { >+ if ((n = imsg_get(ibuf, &imsg)) == -1) >+@@ -401,24 +390,12 @@ ospfe_dispatch_rde(int fd, short event, void *bula) >+ struct lsa_entry *le; >+ struct imsg imsg; >+ struct abr_rtr ar; >+- int n, noack = 0, shut = 0; >++ int noack = 0, shut = 0; >+ u_int16_t l, age; >++ ssize_t n; >+ >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ for (;;) { >+ if ((n = imsg_get(ibuf, &imsg)) == -1) >+diff --git a/ospfd/rde.c b/ospfd/rde.c >+index 5dd0623..faa0c23 100644 >+--- ospfd/rde.c >++++ ospfd/rde.c >+@@ -37,6 +37,7 @@ >+ #include "ospfe.h" >+ #include "log.h" >+ #include "rde.h" >++#include "libevent_helpers.h" >+ >+ void rde_sig_handler(int sig, short, void *); >+ void rde_shutdown(void); >+@@ -239,21 +240,8 @@ rde_dispatch_imsg(int fd, short event, void *bula) >+ int r, state, self, shut = 0; >+ u_int16_t l; >+ >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ clock_gettime(CLOCK_MONOTONIC, &tp); >+ now = tp.tv_sec; >+@@ -584,21 +572,8 @@ rde_dispatch_parent(int fd, short event, void *bula) >+ ssize_t n; >+ int shut = 0; >+ >+- switch (event) { >+- case EV_READ: >+- if ((n = imsg_read(ibuf)) == -1) >+- fatal("imsg_read error"); >+- if (n == 0) /* connection closed */ >+- shut = 1; >+- break; >+- case EV_WRITE: >+- if (msgbuf_write(&ibuf->w) == -1) >+- fatal("msgbuf_write"); >+- imsg_event_add(ibuf); >++ if (dispatch_read_write_event(event, ibuf, &n, &shut) != EV_READ) >+ return; >+- default: >+- fatalx("unknown event"); >+- } >+ >+ for (;;) { >+ if ((n = imsg_get(ibuf, &imsg)) == -1) >Index: files/patch-ospfd_kroute.c >=================================================================== >RCS file: /ncvs/ports/net/openospfd/files/patch-ospfd_kroute.c,v >retrieving revision 1.2 >diff -u -r1.2 patch-ospfd_kroute.c >--- files/patch-ospfd_kroute.c 27 Nov 2008 20:54:31 -0000 1.2 >+++ files/patch-ospfd_kroute.c 29 Apr 2009 19:20:58 -0000 >@@ -1,6 +1,6 @@ >---- ospfd/kroute.c.orig 2008-02-07 18:58:38.000000000 +0300 >-+++ ospfd/kroute.c 2008-02-07 19:09:58.000000000 +0300 >-@@ -955,9 +955,11 @@ >+--- ospfd/kroute.c.orig 2009-04-29 15:07:32.000000000 -0400 >++++ ospfd/kroute.c 2009-04-29 15:07:57.000000000 -0400 >+@@ -1024,9 +1024,11 @@ > struct sockaddr_in prefix; > struct sockaddr_in nexthop; > struct sockaddr_in mask; >@@ -13,7 +13,20 @@ > > if (kr_state.fib_sync == 0) > return (0); >-@@ -1011,6 +1013,7 @@ >+@@ -1035,7 +1037,12 @@ >+ bzero(&hdr, sizeof(hdr)); >+ hdr.rtm_version = RTM_VERSION; >+ hdr.rtm_type = action; >++#if !defined(__FreeBSD__) >+ hdr.rtm_flags = RTF_PROTO2|RTF_MPATH; >++#else >++ /* No multipath routing in FreeBSD yet */ >++ hdr.rtm_flags = RTF_PROTO2; >++#endif /* !defined(__FreeBSD__) */ >+ if (action == RTM_CHANGE) /* force PROTO2 reset the other flags */ >+ hdr.rtm_fmask = RTF_PROTO2|RTF_PROTO1|RTF_REJECT|RTF_BLACKHOLE; >+ hdr.rtm_seq = kr_state.rtseq++; /* overflow doesn't matter */ >+@@ -1080,6 +1087,7 @@ > iov[iovcnt].iov_base = &mask; > iov[iovcnt++].iov_len = sizeof(mask); > >@@ -21,7 +34,7 @@ > if (kroute->rtlabel != 0) { > sa_rl.sr_len = sizeof(sa_rl); > sa_rl.sr_family = AF_UNSPEC; >-@@ -1027,6 +1030,7 @@ >+@@ -1096,6 +1104,7 @@ > iov[iovcnt].iov_base = &sa_rl; > iov[iovcnt++].iov_len = sizeof(sa_rl); > } >@@ -29,7 +42,7 @@ > > > retry: >-@@ -1069,7 +1073,9 @@ >+@@ -1138,7 +1147,9 @@ > struct rt_msghdr *rtm; > struct sockaddr *sa, *rti_info[RTAX_MAX]; > struct sockaddr_in *sa_in; >@@ -39,7 +52,7 @@ > struct kroute_node *kr; > > mib[0] = CTL_NET; >-@@ -1078,9 +1084,13 @@ >+@@ -1147,9 +1158,13 @@ > mib[3] = AF_INET; > mib[4] = NET_RT_DUMP; > mib[5] = 0; >@@ -53,7 +66,7 @@ > log_warn("sysctl"); > return (-1); > } >-@@ -1098,7 +1098,11 @@ >+@@ -1157,7 +1172,11 @@ > log_warn("fetchtable"); > return (-1); > } >@@ -65,7 +78,7 @@ > log_warn("sysctl"); > free(buf); > return (-1); >-@@ -1157,6 +1163,7 @@ >+@@ -1230,6 +1249,7 @@ > send_rtmsg(kr_state.fd, RTM_DELETE, &kr->r); > free(kr); > } else { >@@ -73,7 +86,7 @@ > if ((label = (struct sockaddr_rtlabel *) > rti_info[RTAX_LABEL]) != NULL) { > kr->r.rtlabel = >-@@ -1164,6 +1171,7 @@ >+@@ -1237,6 +1257,7 @@ > kr->r.ext_tag = > rtlabel_id2tag(kr->r.rtlabel); > } >@@ -81,7 +94,7 @@ > kroute_insert(kr); > } > >-@@ -1257,7 +1265,9 @@ >+@@ -1330,7 +1351,9 @@ > struct ifa_msghdr *ifam; > struct sockaddr *sa, *rti_info[RTAX_MAX]; > struct sockaddr_in *sa_in; >@@ -91,7 +104,7 @@ > struct kroute_node *kr, *okr; > struct in_addr prefix, nexthop; > u_int8_t prefixlen; >-@@ -1289,8 +1299,10 @@ >+@@ -1364,8 +1387,10 @@ > sa = (struct sockaddr *)(rtm + 1); > get_rtaddrs(rtm->rtm_addrs, sa, rti_info); > >@@ -102,7 +115,7 @@ > > if (rtm->rtm_pid == kr_state.pid) /* caused by us */ > continue; >-@@ -1385,6 +1397,7 @@ >+@@ -1462,6 +1487,7 @@ > rtlabel_unref(kr->r.rtlabel); > kr->r.rtlabel = 0; > kr->r.ext_tag = 0; >@@ -110,7 +123,7 @@ > if ((label = (struct sockaddr_rtlabel *) > rti_info[RTAX_LABEL]) != NULL) { > kr->r.rtlabel = >-@@ -1392,6 +1405,7 @@ >+@@ -1469,6 +1495,7 @@ > kr->r.ext_tag = > rtlabel_id2tag(kr->r.rtlabel); > } >@@ -118,7 +131,7 @@ > > if (kif_validate(kr->r.ifindex)) > kr->r.flags &= ~F_DOWN; >-@@ -1413,6 +1427,7 @@ >+@@ -1490,6 +1517,7 @@ > kr->r.flags = flags; > kr->r.ifindex = ifindex; > >@@ -126,7 +139,7 @@ > if ((label = (struct sockaddr_rtlabel *) > rti_info[RTAX_LABEL]) != NULL) { > kr->r.rtlabel = >-@@ -1420,6 +1435,7 @@ >+@@ -1497,6 +1525,7 @@ > kr->r.ext_tag = > rtlabel_id2tag(kr->r.rtlabel); > } >Index: files/patch-ospfd_parse.y >=================================================================== >RCS file: /ncvs/ports/net/openospfd/files/patch-ospfd_parse.y,v >retrieving revision 1.1 >diff -u -r1.1 patch-ospfd_parse.y >--- files/patch-ospfd_parse.y 27 Nov 2008 20:54:31 -0000 1.1 >+++ files/patch-ospfd_parse.y 29 Apr 2009 19:20:58 -0000 >@@ -1,6 +1,6 @@ >---- ospfd/parse.y.orig 2008-02-07 18:34:22.000000000 +0300 >-+++ ospfd/parse.y 2008-02-07 18:37:46.000000000 +0300 >-@@ -485,6 +485,11 @@ >+--- ospfd/parse.y.orig 2008-02-26 13:09:58.000000000 +0300 >++++ ospfd/parse.y 2008-12-19 17:52:39.000000000 +0300 >+@@ -503,6 +503,11 @@ > > areaoptsl : interface > | DEMOTE STRING demotecount { >@@ -9,10 +9,10 @@ > + free($2); > + YYERROR; > +#else >- if ($3 > 255) { >- yyerror("demote count too big: max 255"); >+ if ($3 < 1 || $3 > 255) { >+ yyerror("demote count out of range (1-255)"); > free($2); >-@@ -505,6 +510,7 @@ >+@@ -523,6 +528,7 @@ > area->demote_group); > YYERROR; > } >@@ -20,7 +20,7 @@ > } > | defaults > ; >-@@ -581,6 +587,11 @@ >+@@ -599,6 +605,11 @@ > > interfaceoptsl : PASSIVE { iface->passive = 1; } > | DEMOTE STRING { >@@ -32,7 +32,7 @@ > if (strlcpy(iface->demote_group, $2, > sizeof(iface->demote_group)) >= > sizeof(iface->demote_group)) { >-@@ -595,6 +606,7 @@ >+@@ -613,6 +624,7 @@ > iface->demote_group); > YYERROR; > } >Index: files/patch-ospfd_rde_spf.c >=================================================================== >RCS file: files/patch-ospfd_rde_spf.c >diff -N files/patch-ospfd_rde_spf.c >--- files/patch-ospfd_rde_spf.c 27 Nov 2008 20:54:31 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,133 +0,0 @@ >---- ospfd/rde_spf.c 2007/08/06 11:32:34 1.63 >-+++ ospfd/rde_spf.c 2007/09/16 15:00:11 1.64 >-@@ -1,4 +1,4 @@ >--/* $OpenBSD: rde_spf.c,v 1.63 2007/08/06 11:32:34 claudio Exp $ */ >-+/* $OpenBSD: rde_spf.c,v 1.64 2007/09/16 15:00:11 claudio Exp $ */ >- >- /* >- * Copyright (c) 2005 Esben Norby <norby@openbsd.org> >-@@ -37,7 +37,8 @@ >- >- void calc_nexthop_clear(struct vertex *); >- void calc_nexthop_add(struct vertex *, struct vertex *, u_int32_t); >--void calc_nexthop(struct vertex *, struct vertex *); >-+void calc_nexthop(struct vertex *, struct vertex *, >-+ struct area *, struct lsa_rtr_link *); >- void rt_nexthop_clear(struct rt_node *); >- void rt_nexthop_add(struct rt_node *, struct v_nexthead *, >- struct in_addr); >-@@ -134,7 +135,7 @@ >- if (d < w->cost) { >- w->cost = d; >- calc_nexthop_clear(w); >-- calc_nexthop(w, v); >-+ calc_nexthop(w, v, area, rtr_link); >- /* >- * need to readd to candidate list >- * because the list is sorted >-@@ -143,12 +144,12 @@ >- cand_list_add(w); >- } else >- /* equal cost path */ >-- calc_nexthop(w, v); >-+ calc_nexthop(w, v, area, rtr_link); >- } else if (w->cost == LS_INFINITY && d < LS_INFINITY) { >- w->cost = d; >- >- calc_nexthop_clear(w); >-- calc_nexthop(w, v); >-+ calc_nexthop(w, v, area, rtr_link); >- cand_list_add(w); >- } >- } >-@@ -384,54 +385,51 @@ >- } >- >- void >--calc_nexthop(struct vertex *dst, struct vertex *parent) >-+calc_nexthop(struct vertex *dst, struct vertex *parent, >-+ struct area *area, struct lsa_rtr_link *rtr_link) >- { >-- struct lsa_rtr_link *rtr_link = NULL; >- struct v_nexthop *vn; >-+ struct iface *iface; >- int i; >- >- /* case 1 */ >- if (parent == spf_root) { >- switch (dst->type) { >- case LSA_TYPE_ROUTER: >-- for (i = 0; i < lsa_num_links(dst); i++) { >-- rtr_link = get_rtr_link(dst, i); >-- if (rtr_link->type == LINK_TYPE_POINTTOPOINT && >-- ntohl(rtr_link->id) == parent->ls_id) { >-+ if (rtr_link->type != LINK_TYPE_POINTTOPOINT) >-+ fatalx("inconsistent SPF tree"); >-+ LIST_FOREACH(iface, &area->iface_list, entry) { >-+ if (rtr_link->data == iface->addr.s_addr) { >- calc_nexthop_add(dst, parent, >-- rtr_link->data); >-- break; >-+ iface->dst.s_addr); >-+ return; >- } >- } >-- return; >-+ fatalx("no interface found for interface"); >- case LSA_TYPE_NETWORK: >-- for (i = 0; i < lsa_num_links(parent); i++) { >-- rtr_link = get_rtr_link(parent, i); >-- switch (rtr_link->type) { >-- case LINK_TYPE_POINTTOPOINT: >-- /* ignore */ >-- break; >-- case LINK_TYPE_TRANSIT_NET: >-- if ((htonl(dst->ls_id) & >-- dst->lsa->data.net.mask) == >-- (rtr_link->data & >-- dst->lsa->data.net.mask)) { >-- calc_nexthop_add(dst, parent, >-- rtr_link->data); >-- } >-- break; >-- case LINK_TYPE_STUB_NET: >-- break; >-- >-- default: >-- fatalx("calc_nexthop: invalid link " >-- "type"); >-+ switch (rtr_link->type) { >-+ case LINK_TYPE_POINTTOPOINT: >-+ case LINK_TYPE_STUB_NET: >-+ /* ignore */ >-+ break; >-+ case LINK_TYPE_TRANSIT_NET: >-+ if ((htonl(dst->ls_id) & >-+ dst->lsa->data.net.mask) == >-+ (rtr_link->data & >-+ dst->lsa->data.net.mask)) { >-+ calc_nexthop_add(dst, parent, >-+ rtr_link->data); >- } >-+ break; >-+ default: >-+ fatalx("calc_nexthop: invalid link " >-+ "type"); >- } >- return; >- default: >- fatalx("calc_nexthop: invalid dst type"); >- } >-+ return; >- } >- >- /* case 2 */ >-@@ -459,7 +457,7 @@ >- >- /* case 3 */ >- TAILQ_FOREACH(vn, &parent->nexthop, entry) >-- calc_nexthop_add(dst, parent, vn->nexthop.s_addr); >-+ calc_nexthop_add(dst, parent, vn->nexthop.s_addr); >- } >- >- /* candidate list */
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 129881
:
92273
| 92274