summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhenning <henning@openbsd.org>2004-01-11 21:32:56 +0000
committerhenning <henning@openbsd.org>2004-01-11 21:32:56 +0000
commiteaddc7a2f4cdcaf4ac08eb3395acd0304334c11f (patch)
tree66846f89ce82ac3dd090e9ba5d8576f62405b0bd
parent$OpenBSD$ tags (diff)
downloadwireguard-openbsd-eaddc7a2f4cdcaf4ac08eb3395acd0304334c11f.tar.xz
wireguard-openbsd-eaddc7a2f4cdcaf4ac08eb3395acd0304334c11f.zip
in the nexthop imsgs use struct bgpd_addr for the data part instead of
in_addr_t ok claudio@
-rw-r--r--usr.sbin/bgpd/bgpd.c28
-rw-r--r--usr.sbin/bgpd/rde.c20
2 files changed, 28 insertions, 20 deletions
diff --git a/usr.sbin/bgpd/bgpd.c b/usr.sbin/bgpd/bgpd.c
index 5961b9844cd..462e180ef3d 100644
--- a/usr.sbin/bgpd/bgpd.c
+++ b/usr.sbin/bgpd/bgpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bgpd.c,v 1.64 2004/01/11 19:14:43 henning Exp $ */
+/* $OpenBSD: bgpd.c,v 1.65 2004/01/11 21:32:56 henning Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -365,9 +365,8 @@ reconfigure(char *conffile, struct bgpd_config *conf, struct mrt_head *mrtc,
int
dispatch_imsg(struct imsgbuf *ibuf, int idx, struct mrt_head *mrtc)
{
- struct imsg imsg;
- int n;
- in_addr_t ina;
+ struct imsg imsg;
+ int n;
if ((n = imsg_read(ibuf)) == -1)
return (-1);
@@ -405,19 +404,24 @@ dispatch_imsg(struct imsgbuf *ibuf, int idx, struct mrt_head *mrtc)
case IMSG_NEXTHOP_ADD:
if (idx != PFD_PIPE_ROUTE)
logit(LOG_CRIT, "nexthop request not from RDE");
- else {
- memcpy(&ina, imsg.data, sizeof(ina));
- if (kr_nexthop_add(ina) == -1)
+ else
+ if (imsg.hdr.len != IMSG_HEADER_SIZE +
+ sizeof(struct bgpd_addr))
+ logit(LOG_CRIT, "wrong imsg len");
+ else if (kr_nexthop_add(
+ ((struct bgpd_addr *)imsg.data)->v4.s_addr)
+ == -1)
return (-1);
- }
break;
case IMSG_NEXTHOP_REMOVE:
if (idx != PFD_PIPE_ROUTE)
logit(LOG_CRIT, "nexthop request not from RDE");
- else {
- memcpy(&ina, imsg.data, sizeof(ina));
- kr_nexthop_delete(ina);
- }
+ else
+ if (imsg.hdr.len != IMSG_HEADER_SIZE +
+ sizeof(struct bgpd_addr))
+ logit(LOG_CRIT, "wrong imsg len");
+ else kr_nexthop_delete(
+ ((struct bgpd_addr *)imsg.data)->v4.s_addr);
break;
case IMSG_CTL_RELOAD:
if (idx != PFD_PIPE_SESSION)
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 5e7d8794b65..1ef5c9980a1 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.54 2004/01/11 20:13:00 claudio Exp $ */
+/* $OpenBSD: rde.c,v 1.55 2004/01/11 21:32:56 henning Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -402,8 +402,8 @@ rde_update_get_prefix(u_char *p, u_int16_t len, struct in_addr *prefix,
u_int8_t pfxlen;
u_int16_t plen;
union {
- struct in_addr addr32;
- u_int8_t addr8[4];
+ struct in_addr a32;
+ u_int8_t a8[4];
} addr;
if (len < 1)
@@ -413,16 +413,16 @@ rde_update_get_prefix(u_char *p, u_int16_t len, struct in_addr *prefix,
p += 1;
plen = 1;
- addr.addr32.s_addr = 0;
+ addr.a32.s_addr = 0;
for (i = 0; i <= 3; i++) {
if (pfxlen > i * 8) {
if (len - plen < 1)
return (-1);
- memcpy(&addr.addr8[i], p++, 1);
+ memcpy(&addr.a8[i], p++, 1);
plen++;
}
}
- prefix->s_addr = addr.addr32.s_addr;
+ prefix->s_addr = addr.a32.s_addr;
*prefixlen = pfxlen;
return (plen);
@@ -607,14 +607,18 @@ rde_send_kroute(struct prefix *new, struct prefix *old)
void
rde_send_nexthop(in_addr_t next, int valid)
{
- int type;
+ int type;
+ struct bgpd_addr addr;
if (valid)
type = IMSG_NEXTHOP_ADD;
else
type = IMSG_NEXTHOP_REMOVE;
- if (imsg_compose(&ibuf_main, type, 0, &next, sizeof(next)) == -1)
+ addr.af = AF_INET;
+ addr.v4.s_addr = next;
+
+ if (imsg_compose(&ibuf_main, type, 0, &addr, sizeof(addr)) == -1)
fatal("imsg_compose error");
}