diff options
Diffstat (limited to 'sysdep/bsd')
-rw-r--r-- | sysdep/bsd/krt-sock.c | 3 | ||||
-rw-r--r-- | sysdep/bsd/sysio.h | 4 |
2 files changed, 5 insertions, 2 deletions
diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c index 26710375..621f7309 100644 --- a/sysdep/bsd/krt-sock.c +++ b/sysdep/bsd/krt-sock.c @@ -261,6 +261,7 @@ krt_send_route(struct krt_proto *p, int cmd, rte *e) msg.rtm.rtm_flags |= RTF_GATEWAY; msg.rtm.rtm_addrs |= RTA_GATEWAY; break; + #ifdef RTF_REJECT case RTD_UNREACHABLE: #endif @@ -280,7 +281,7 @@ krt_send_route(struct krt_proto *p, int cmd, rte *e) return -1; } - sockaddr_fill(&dst, BIRD_AF, i->addr->ip, NULL, 0); + sockaddr_fill(&gate, BIRD_AF, i->addr->ip, NULL, 0); msg.rtm.rtm_addrs |= RTA_GATEWAY; } break; diff --git a/sysdep/bsd/sysio.h b/sysdep/bsd/sysio.h index fa3969bd..df5e0236 100644 --- a/sysdep/bsd/sysio.h +++ b/sysdep/bsd/sysio.h @@ -141,6 +141,7 @@ sk_prepare_cmsgs4(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen) #ifdef IP_SENDSRCADDR struct cmsghdr *cm; struct in_addr *sa; + int controllen = 0; msg->msg_control = cbuf; msg->msg_controllen = cbuflen; @@ -149,11 +150,12 @@ sk_prepare_cmsgs4(sock *s, struct msghdr *msg, void *cbuf, size_t cbuflen) cm->cmsg_level = IPPROTO_IP; cm->cmsg_type = IP_SENDSRCADDR; cm->cmsg_len = CMSG_LEN(sizeof(*sa)); + controllen += CMSG_SPACE(sizeof(*sa)); sa = (struct in_addr *) CMSG_DATA(cm); *sa = ipa_to_in4(s->saddr); - msg->msg_controllen = cm->cmsg_len; + msg->msg_controllen = controllen; #endif } |