summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ospf6d/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ospf6d/packet.c')
-rw-r--r--usr.sbin/ospf6d/packet.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/usr.sbin/ospf6d/packet.c b/usr.sbin/ospf6d/packet.c
index be1f5ef862a..8c30b41cdba 100644
--- a/usr.sbin/ospf6d/packet.c
+++ b/usr.sbin/ospf6d/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.15 2019/05/10 01:29:31 guenther Exp $ */
+/* $OpenBSD: packet.c,v 1.16 2019/12/11 21:33:56 denis Exp $ */
/*
* Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
@@ -78,10 +78,12 @@ upd_ospf_hdr(struct ibuf *buf, struct iface *iface)
/* send and receive packets */
int
-send_packet(struct iface *iface, void *pkt, size_t len,
+send_packet(struct iface *iface, struct ibuf *buf,
struct in6_addr *dst)
{
- struct sockaddr_in6 sa6;
+ struct sockaddr_in6 sa6;
+ struct msghdr msg;
+ struct iovec iov[1];
/* setup buffer */
bzero(&sa6, sizeof(sa6));
@@ -102,8 +104,15 @@ send_packet(struct iface *iface, void *pkt, size_t len,
return (-1);
}
- if (sendto(iface->fd, pkt, len, 0, (struct sockaddr *)&sa6,
- sizeof(sa6)) == -1) {
+ bzero(&msg, sizeof(msg));
+ msg.msg_name = &sa6;
+ msg.msg_namelen = sizeof(sa6);
+ iov[0].iov_base = buf->buf;
+ iov[0].iov_len = ibuf_size(buf);
+ msg.msg_iov = iov;
+ msg.msg_iovlen = 1;
+
+ if (sendmsg(iface->fd, &msg, 0) == -1) {
log_warn("send_packet: error sending packet on interface %s",
iface->name);
return (-1);