]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/rtadv.c
zebra: Fix tracepoint changes for lttng
[mirror_frr.git] / zebra / rtadv.c
index 5d4ed1e424c48f80f85d4578467e7453a3950460..a8ec60844cdaf5fc340caf3053cc79474caba17a 100644 (file)
@@ -51,9 +51,7 @@ static uint32_t interfaces_configured_for_ra_from_bgp;
 
 #if defined(HAVE_RTADV)
 
-#ifndef VTYSH_EXTRACT_PL
 #include "zebra/rtadv_clippy.c"
-#endif
 
 DEFINE_MTYPE_STATIC(ZEBRA, RTADV_PREFIX, "Router Advertisement Prefix");
 DEFINE_MTYPE_STATIC(ZEBRA, ADV_IF, "Advertised Interface");
@@ -227,8 +225,7 @@ static void rtadv_send_packet(int sock, struct interface *ifp,
                adata = calloc(1, CMSG_SPACE(sizeof(struct in6_pktinfo)));
 
                if (adata == NULL) {
-                       zlog_debug(
-                               "rtadv_send_packet: can't malloc control data");
+                       zlog_debug("%s: can't malloc control data", __func__);
                        exit(-1);
                }
        }
@@ -665,8 +662,9 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len,
             zif->rtadv.lastadvcurhoplimit.tv_sec == 0)) {
                flog_warn(
                        EC_ZEBRA_RA_PARAM_MISMATCH,
-                       "%s(%u): Rx RA - our AdvCurHopLimit doesn't agree with %s",
-                       ifp->name, ifp->ifindex, addr_str);
+                       "%s(%u): Rx RA - our AdvCurHopLimit (%u) doesn't agree with %s (%u)",
+                       ifp->name, ifp->ifindex, zif->rtadv.AdvCurHopLimit,
+                       addr_str, radvert->nd_ra_curhoplimit);
                monotime(&zif->rtadv.lastadvcurhoplimit);
        }
 
@@ -677,8 +675,11 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len,
             zif->rtadv.lastadvmanagedflag.tv_sec == 0)) {
                flog_warn(
                        EC_ZEBRA_RA_PARAM_MISMATCH,
-                       "%s(%u): Rx RA - our AdvManagedFlag doesn't agree with %s",
-                       ifp->name, ifp->ifindex, addr_str);
+                       "%s(%u): Rx RA - our AdvManagedFlag (%u) doesn't agree with %s (%u)",
+                       ifp->name, ifp->ifindex, zif->rtadv.AdvManagedFlag,
+                       addr_str,
+                       !!CHECK_FLAG(radvert->nd_ra_flags_reserved,
+                                    ND_RA_FLAG_MANAGED));
                monotime(&zif->rtadv.lastadvmanagedflag);
        }
 
@@ -689,8 +690,11 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len,
             zif->rtadv.lastadvotherconfigflag.tv_sec == 0)) {
                flog_warn(
                        EC_ZEBRA_RA_PARAM_MISMATCH,
-                       "%s(%u): Rx RA - our AdvOtherConfigFlag doesn't agree with %s",
-                       ifp->name, ifp->ifindex, addr_str);
+                       "%s(%u): Rx RA - our AdvOtherConfigFlag (%u) doesn't agree with %s (%u)",
+                       ifp->name, ifp->ifindex, zif->rtadv.AdvOtherConfigFlag,
+                       addr_str,
+                       !!CHECK_FLAG(radvert->nd_ra_flags_reserved,
+                                    ND_RA_FLAG_OTHER));
                monotime(&zif->rtadv.lastadvotherconfigflag);
        }
 
@@ -701,20 +705,23 @@ static void rtadv_process_advert(uint8_t *msg, unsigned int len,
             zif->rtadv.lastadvreachabletime.tv_sec == 0)) {
                flog_warn(
                        EC_ZEBRA_RA_PARAM_MISMATCH,
-                       "%s(%u): Rx RA - our AdvReachableTime doesn't agree with %s",
-                       ifp->name, ifp->ifindex, addr_str);
+                       "%s(%u): Rx RA - our AdvReachableTime (%u) doesn't agree with %s (%u)",
+                       ifp->name, ifp->ifindex, zif->rtadv.AdvReachableTime,
+                       addr_str, ntohl(radvert->nd_ra_reachable));
                monotime(&zif->rtadv.lastadvreachabletime);
        }
 
-       if ((ntohl(radvert->nd_ra_retransmit) !=
+       if ((radvert->nd_ra_retransmit && zif->rtadv.AdvRetransTimer) &&
+           (ntohl(radvert->nd_ra_retransmit) !=
             (unsigned int)zif->rtadv.AdvRetransTimer) &&
            (monotime_since(&zif->rtadv.lastadvretranstimer, NULL) >
                     SIXHOUR2USEC ||
             zif->rtadv.lastadvretranstimer.tv_sec == 0)) {
                flog_warn(
                        EC_ZEBRA_RA_PARAM_MISMATCH,
-                       "%s(%u): Rx RA - our AdvRetransTimer doesn't agree with %s",
-                       ifp->name, ifp->ifindex, addr_str);
+                       "%s(%u): Rx RA - our AdvRetransTimer (%u) doesn't agree with %s (%u)",
+                       ifp->name, ifp->ifindex, zif->rtadv.AdvRetransTimer,
+                       addr_str, ntohl(radvert->nd_ra_retransmit));
                monotime(&zif->rtadv.lastadvretranstimer);
        }
 
@@ -830,39 +837,51 @@ static int rtadv_make_socket(ns_id_t ns_id)
        int sock = -1;
        int ret = 0;
        struct icmp6_filter filter;
+       int error;
 
        frr_with_privs(&zserv_privs) {
 
                sock = ns_socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6, ns_id);
-
+               /*
+                * with privs might set errno too if it fails save
+                * to the side
+                */
+               error = errno;
        }
 
        if (sock < 0) {
+               zlog_warn("RTADV socket for ns: %u failure to create: %s(%u)",
+                         ns_id, safe_strerror(error), error);
                return -1;
        }
 
        ret = setsockopt_ipv6_pktinfo(sock, 1);
        if (ret < 0) {
+               zlog_warn("RTADV failure to set Packet Information");
                close(sock);
                return ret;
        }
        ret = setsockopt_ipv6_multicast_loop(sock, 0);
        if (ret < 0) {
+               zlog_warn("RTADV failure to set multicast Loop detection");
                close(sock);
                return ret;
        }
        ret = setsockopt_ipv6_unicast_hops(sock, 255);
        if (ret < 0) {
+               zlog_warn("RTADV failure to set maximum unicast hops");
                close(sock);
                return ret;
        }
        ret = setsockopt_ipv6_multicast_hops(sock, 255);
        if (ret < 0) {
+               zlog_warn("RTADV failure to set maximum multicast hops");
                close(sock);
                return ret;
        }
        ret = setsockopt_ipv6_hoplimit(sock, 1);
        if (ret < 0) {
+               zlog_warn("RTADV failure to set maximum incoming hop limit");
                close(sock);
                return ret;
        }