diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-08-05 13:10:27 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2020-08-14 09:20:09 -0400 |
| commit | f1446f9885573c33bc3805b998dc723b6768da17 (patch) | |
| tree | 915c7d8f76bce418800c14f5daecbb857daddb5f /bfdd/bfd_packet.c | |
| parent | 22c9bfb824dc3601735f8a83a69647fecdbf7fea (diff) | |
bfdd: Allow it to work when V6 is completely turned off
Experimental patch to allow us to discuss if we should
allow bfdd to work when v6 is turned off in the kernel.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'bfdd/bfd_packet.c')
| -rw-r--r-- | bfdd/bfd_packet.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/bfdd/bfd_packet.c b/bfdd/bfd_packet.c index 38855acffc..5cc47d5a44 100644 --- a/bfdd/bfd_packet.c +++ b/bfdd/bfd_packet.c @@ -147,6 +147,8 @@ void ptm_bfd_echo_snd(struct bfd_session *bfd) bep.my_discr = htonl(bfd->discrs.my_discr); if (CHECK_FLAG(bfd->flags, BFD_SESS_FLAG_IPV6)) { + if (bvrf->bg_echov6 == -1) + return; sd = bvrf->bg_echov6; memset(&sin6, 0, sizeof(sin6)); sin6.sin6_family = AF_INET6; @@ -1145,8 +1147,14 @@ int bp_udp6_shop(const struct vrf *vrf) sd = vrf_socket(AF_INET6, SOCK_DGRAM, PF_UNSPEC, vrf->vrf_id, vrf->name); } - if (sd == -1) - zlog_fatal("udp6-shop: socket: %s", strerror(errno)); + if (sd == -1) { + if (errno != EAFNOSUPPORT) + zlog_fatal("udp6-shop: socket: %s", strerror(errno)); + else + zlog_warn("udp6-shop: V6 is not supported, continuing"); + + return -1; + } bp_set_ipv6opts(sd); bp_bind_ipv6(sd, BFD_DEFDESTPORT); @@ -1162,8 +1170,14 @@ int bp_udp6_mhop(const struct vrf *vrf) sd = vrf_socket(AF_INET6, SOCK_DGRAM, PF_UNSPEC, vrf->vrf_id, vrf->name); } - if (sd == -1) - zlog_fatal("udp6-mhop: socket: %s", strerror(errno)); + if (sd == -1) { + if (errno != EAFNOSUPPORT) + zlog_fatal("udp6-mhop: socket: %s", strerror(errno)); + else + zlog_warn("udp6-mhop: V6 is not supported, continuing"); + + return -1; + } bp_set_ipv6opts(sd); bp_bind_ipv6(sd, BFD_DEF_MHOP_DEST_PORT); @@ -1194,8 +1208,15 @@ int bp_echov6_socket(const struct vrf *vrf) frr_with_privs(&bglobal.bfdd_privs) { s = vrf_socket(AF_INET6, SOCK_DGRAM, 0, vrf->vrf_id, vrf->name); } - if (s == -1) - zlog_fatal("echov6-socket: socket: %s", strerror(errno)); + if (s == -1) { + if (errno != EAFNOSUPPORT) + zlog_fatal("echov6-socket: socket: %s", + strerror(errno)); + else + zlog_warn("echov6-socket: V6 is not supported, continuing"); + + return -1; + } bp_set_ipv6opts(s); bp_bind_ipv6(s, BFD_DEF_ECHO_PORT); |
