]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: drop IPv6 "broadcast" and "peer" addr code
authorDavid Lamparter <equinox@opensourcerouting.org>
Mon, 28 Aug 2017 02:39:18 +0000 (04:39 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Mon, 28 Aug 2017 03:52:06 +0000 (05:52 +0200)
There is no such thing as an IPv6 "broadcast" or "peer" address.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
zebra/connected.c
zebra/connected.h
zebra/if_ioctl.c
zebra/if_ioctl_solaris.c
zebra/if_netlink.c
zebra/kernel_socket.c

index 1368a1228951298703a7c6c8cc928657846e6998..387ad9c41da3bcdfe234abb671bc016b1137f06f 100644 (file)
@@ -463,8 +463,7 @@ void connected_up_ipv6(struct interface *ifp, struct connected *ifc)
 
 /* Add connected IPv6 route to the interface. */
 void connected_add_ipv6(struct interface *ifp, int flags, struct in6_addr *addr,
-                       u_char prefixlen, struct in6_addr *broad,
-                       const char *label)
+                       u_char prefixlen, const char *label)
 {
        struct prefix_ipv6 *p;
        struct connected *ifc;
@@ -487,29 +486,6 @@ void connected_add_ipv6(struct interface *ifp, int flags, struct in6_addr *addr,
        p->prefixlen = prefixlen;
        ifc->address = (struct prefix *)p;
 
-       /* If there is broadcast or peer address. */
-       if (broad) {
-               if (IN6_IS_ADDR_UNSPECIFIED(broad))
-                       zlog_warn(
-                               "warning: %s called for interface %s with unspecified "
-                               "destination address; ignoring!",
-                               __func__, ifp->name);
-               else {
-                       p = prefix_ipv6_new();
-                       p->family = AF_INET6;
-                       IPV6_ADDR_COPY(&p->prefix, broad);
-                       p->prefixlen = prefixlen;
-                       ifc->destination = (struct prefix *)p;
-               }
-       }
-       if (CHECK_FLAG(ifc->flags, ZEBRA_IFA_PEER) && !ifc->destination) {
-               zlog_warn(
-                       "warning: %s called for interface %s "
-                       "with peer flag set, but no peer address supplied",
-                       __func__, ifp->name);
-               UNSET_FLAG(ifc->flags, ZEBRA_IFA_PEER);
-       }
-
        /* Label of this address. */
        if (label)
                ifc->label = XSTRDUP(MTYPE_CONNECTED_LABEL, label);
@@ -562,7 +538,7 @@ void connected_down_ipv6(struct interface *ifp, struct connected *ifc)
 }
 
 void connected_delete_ipv6(struct interface *ifp, struct in6_addr *address,
-                          u_char prefixlen, struct in6_addr *broad)
+                          u_char prefixlen)
 {
        struct prefix_ipv6 p;
        struct connected *ifc;
index b67442fa3b718f0195809e28dcf97ddb21fd7b48..c6da36956d52892936b54b368d87b634fa792d40 100644 (file)
@@ -43,10 +43,9 @@ extern void connected_down_ipv4(struct interface *, struct connected *);
 
 extern void connected_add_ipv6(struct interface *ifp, int flags,
                               struct in6_addr *address, u_char prefixlen,
-                              struct in6_addr *broad, const char *label);
+                              const char *label);
 extern void connected_delete_ipv6(struct interface *ifp,
-                                 struct in6_addr *address, u_char prefixlen,
-                                 struct in6_addr *broad);
+                                 struct in6_addr *address, u_char prefixlen);
 
 extern void connected_up_ipv6(struct interface *, struct connected *);
 extern void connected_down_ipv6(struct interface *ifp, struct connected *);
index a65fcb2b8c20eb91d74007d64fd2704ca7bdde76..6396911e1b9c8d2db48ad27e2c36e35004c6fa7a 100644 (file)
@@ -214,7 +214,7 @@ static int if_getaddrs(void)
 
                        dest_pnt = NULL;
 
-                       if (ifap->ifa_dstaddr
+                       if (if_is_pointopoint(ifp) && ifap->ifa_dstaddr
                            && !IPV4_ADDR_SAME(&addr->sin_addr,
                                               &((struct sockaddr_in *)
                                                         ifap->ifa_dstaddr)
@@ -239,35 +239,12 @@ static int if_getaddrs(void)
                if (ifap->ifa_addr->sa_family == AF_INET6) {
                        struct sockaddr_in6 *addr;
                        struct sockaddr_in6 *mask;
-                       struct sockaddr_in6 *dest;
-                       struct in6_addr *dest_pnt;
                        int flags = 0;
 
                        addr = (struct sockaddr_in6 *)ifap->ifa_addr;
                        mask = (struct sockaddr_in6 *)ifap->ifa_netmask;
                        prefixlen = ip6_masklen(mask->sin6_addr);
 
-                       dest_pnt = NULL;
-
-                       if (ifap->ifa_dstaddr
-                           && !IPV6_ADDR_SAME(&addr->sin6_addr,
-                                              &((struct sockaddr_in6 *)
-                                                        ifap->ifa_dstaddr)
-                                                       ->sin6_addr)) {
-                               dest = (struct sockaddr_in6 *)ifap->ifa_dstaddr;
-                               dest_pnt = &dest->sin6_addr;
-                               flags = ZEBRA_IFA_PEER;
-                       } else if (ifap->ifa_broadaddr
-                                  && !IPV6_ADDR_SAME(
-                                             &addr->sin6_addr,
-                                             &((struct sockaddr_in6 *)
-                                                       ifap->ifa_broadaddr)
-                                                      ->sin6_addr)) {
-                               dest = (struct sockaddr_in6 *)
-                                              ifap->ifa_broadaddr;
-                               dest_pnt = &dest->sin6_addr;
-                       }
-
 #if defined(KAME)
                        if (IN6_IS_ADDR_LINKLOCAL(&addr->sin6_addr)) {
                                addr->sin6_scope_id =
@@ -279,7 +256,7 @@ static int if_getaddrs(void)
 #endif
 
                        connected_add_ipv6(ifp, flags, &addr->sin6_addr,
-                                          prefixlen, dest_pnt, NULL);
+                                          prefixlen, NULL);
                }
        }
 
index 3d53194593c640a432b9737cf58512f3de967b06..9ec575b5b01d7be6197250bb6c8a7c916f67a4e9 100644 (file)
@@ -317,8 +317,7 @@ static int if_get_addr(struct interface *ifp, struct sockaddr *addr,
                                   (struct in_addr *)dest_pnt, label);
        else if (af == AF_INET6)
                connected_add_ipv6(ifp, flags, &SIN6(addr)->sin6_addr,
-                                  prefixlen, (struct in6_addr *)dest_pnt,
-                                  label);
+                                  prefixlen, label);
 
        return 0;
 }
index 329f7ee5789fa8069884ce2f4f77affc9c96e296..9aa560bfa167282c05bc337ea1bef403849a3194 100644 (file)
@@ -1001,12 +1001,10 @@ int netlink_interface_addr(struct sockaddr_nl *snl, struct nlmsghdr *h,
                              & (IFA_F_DADFAILED | IFA_F_TENTATIVE)))
                                connected_add_ipv6(
                                        ifp, flags, (struct in6_addr *)addr,
-                                       ifa->ifa_prefixlen,
-                                       (struct in6_addr *)broad, label);
+                                       ifa->ifa_prefixlen, label);
                } else
                        connected_delete_ipv6(ifp, (struct in6_addr *)addr,
-                                             ifa->ifa_prefixlen,
-                                             (struct in6_addr *)broad);
+                                             ifa->ifa_prefixlen);
        }
 
        return 0;
index e2a1deb9ac691e11d16fe08446250e2f0c6a1166..c6fb34562f52287606246d5562f79450533a3e9f 100644 (file)
@@ -762,12 +762,10 @@ int ifam_read(struct ifa_msghdr *ifam)
                if (ifam->ifam_type == RTM_NEWADDR)
                        connected_add_ipv6(ifp, flags, &addr.sin6.sin6_addr,
                                           ip6_masklen(mask.sin6.sin6_addr),
-                                          &brd.sin6.sin6_addr,
                                           (isalias ? ifname : NULL));
                else
                        connected_delete_ipv6(ifp, &addr.sin6.sin6_addr,
-                                             ip6_masklen(mask.sin6.sin6_addr),
-                                             &brd.sin6.sin6_addr);
+                                             ip6_masklen(mask.sin6.sin6_addr));
                break;
        default:
                /* Unsupported family silently ignore... */