summaryrefslogtreecommitdiff
path: root/net/openbgpd/files/patch-bgpd_config.c
diff options
context:
space:
mode:
authorKurt Jaeger <pi@FreeBSD.org>2019-06-03 20:08:36 +0000
committerKurt Jaeger <pi@FreeBSD.org>2019-06-03 20:08:36 +0000
commit713c2289b8d66d3752c1225ca18d740daa50c8fc (patch)
tree26af7b6de4c410d2e2810fec4c81c3ab0b9c5e76 /net/openbgpd/files/patch-bgpd_config.c
parentUpgrade to 0.0.5 (diff)
net/openbgpd: revert upgrade from 6.5p0 to 5.2.20121209
- openbgpd version 6.5p0 was the "portable" version, which specifically does *not* support kernel routing updates. - Therefore this is only suitable for route servers/collectors, not for production use in routers. This significantly violates POLA :) PR: 213445 Submitted by: Oliver H <oliver@watershed.co.uk>
Diffstat (limited to 'net/openbgpd/files/patch-bgpd_config.c')
-rw-r--r--net/openbgpd/files/patch-bgpd_config.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/net/openbgpd/files/patch-bgpd_config.c b/net/openbgpd/files/patch-bgpd_config.c
new file mode 100644
index 000000000000..fbd02e102483
--- /dev/null
+++ b/net/openbgpd/files/patch-bgpd_config.c
@@ -0,0 +1,109 @@
+Index: bgpd/config.c
+===================================================================
+RCS file: /home/cvs/private/hrs/openbgpd/bgpd/config.c,v
+retrieving revision 1.1.1.6
+retrieving revision 1.3
+diff -u -p -r1.1.1.6 -r1.3
+--- bgpd/config.c 14 Feb 2010 20:19:57 -0000 1.1.1.6
++++ bgpd/config.c 13 Oct 2012 18:36:00 -0000 1.3
+@@ -1,4 +1,4 @@
+-/* $OpenBSD: config.c,v 1.51 2009/01/26 23:10:02 claudio Exp $ */
++/* $OpenBSD: config.c,v 1.55 2010/09/02 14:03:21 sobrado Exp $ */
+
+ /*
+ * Copyright (c) 2003, 2004, 2005 Henning Brauer <henning@openbsd.org>
+@@ -20,6 +20,11 @@
+ #include <sys/socket.h>
+ #include <sys/stat.h>
+ #include <sys/mman.h>
++#include <sys/ioctl.h>
++
++#if !defined(__FreeBSD__) /* FreeBSD has no mpls support. */
++#include <netmpls/mpls.h>
++#endif
+
+ #include <errno.h>
+ #include <ifaddrs.h>
+@@ -47,8 +52,6 @@ merge_config(struct bgpd_config *xconf,
+
+ /* preserve cmd line opts */
+ conf->opts = xconf->opts;
+- conf->csock = xconf->csock;
+- conf->rcsock = xconf->rcsock;
+
+ if (!conf->as) {
+ log_warnx("configuration error: AS not given");
+@@ -64,6 +67,9 @@ merge_config(struct bgpd_config *xconf,
+ if ((conf->flags & BGPD_FLAG_REFLECTOR) && conf->clusterid == 0)
+ conf->clusterid = conf->bgpid;
+
++ free(xconf->csock);
++ free(xconf->rcsock);
++
+ conf->listen_addrs = xconf->listen_addrs;
+ memcpy(xconf, conf, sizeof(struct bgpd_config));
+
+@@ -74,7 +80,7 @@ merge_config(struct bgpd_config *xconf,
+ nla->reconf = RECONF_REINIT;
+
+ } else {
+- /*
++ /*
+ * merge new listeners:
+ * -flag all existing ones as to be deleted
+ * -those that are in both new and old: flag to keep
+@@ -208,7 +214,7 @@ host_v4(const char *s, struct bgpd_addr
+ return (0);
+ }
+
+- h->af = AF_INET;
++ h->aid = AID_INET;
+ h->v4.s_addr = ina.s_addr;
+ *len = bits;
+
+@@ -225,13 +231,7 @@ host_v6(const char *s, struct bgpd_addr
+ hints.ai_socktype = SOCK_DGRAM; /*dummy*/
+ hints.ai_flags = AI_NUMERICHOST;
+ if (getaddrinfo(s, "0", &hints, &res) == 0) {
+- h->af = AF_INET6;
+- memcpy(&h->v6,
+- &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr,
+- sizeof(h->v6));
+- h->scope_id =
+- ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id;
+-
++ sa2addr(res->ai_addr, h);
+ freeaddrinfo(res);
+ return (1);
+ }
+@@ -317,3 +317,30 @@ prepare_listeners(struct bgpd_config *co
+ }
+ }
+ }
++
++int
++get_mpe_label(struct rdomain *r)
++{
++#if !defined(__FreeBSD__) /* FreeBSD has no mpls support. */
++ struct ifreq ifr;
++ struct shim_hdr shim;
++ int s;
++
++ s = socket(AF_INET, SOCK_DGRAM, 0);
++ if (s == -1)
++ return (-1);
++
++ bzero(&shim, sizeof(shim));
++ bzero(&ifr, sizeof(ifr));
++ strlcpy(ifr.ifr_name, r->ifmpe, sizeof(ifr.ifr_name));
++ ifr.ifr_data = (caddr_t)&shim;
++
++ if (ioctl(s, SIOCGETLABEL, (caddr_t)&ifr) == -1) {
++ close(s);
++ return (-1);
++ }
++ close(s);
++ r->label = shim.shim_label;
++#endif
++ return (0);
++}