diff options
author | 2004-01-11 21:32:56 +0000 | |
---|---|---|
committer | 2004-01-11 21:32:56 +0000 | |
commit | eaddc7a2f4cdcaf4ac08eb3395acd0304334c11f (patch) | |
tree | 66846f89ce82ac3dd090e9ba5d8576f62405b0bd | |
parent | $OpenBSD$ tags (diff) | |
download | wireguard-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.c | 28 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde.c | 20 |
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"); } |