summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvivek <vivek@cumulusnetworks.com>2015-11-20 08:51:48 -0800
committervivek <vivek@cumulusnetworks.com>2015-11-20 08:51:48 -0800
commit922705ecdccad98dcb5eb8dcb37394ec339afe51 (patch)
treeb2db1f62de86768be5edc4658bff5f345282cc89
parent41ec92223a7dfc14eb8cb0b84c73ad09943213eb (diff)
parent8afc891ac75f2b1f17d9190ef8de5378ec55fcd5 (diff)
Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster
-rw-r--r--lib/if.c30
-rw-r--r--lib/if.h7
-rw-r--r--lib/log.c2
-rw-r--r--zebra/connected.c50
-rw-r--r--zebra/interface.c21
-rw-r--r--zebra/interface.h17
-rw-r--r--zebra/main.c6
-rw-r--r--zebra/rib.h17
-rw-r--r--zebra/rtadv.c4
-rw-r--r--zebra/rtadv.h4
10 files changed, 28 insertions, 130 deletions
diff --git a/lib/if.c b/lib/if.c
index b192d48e20..d4bd918e95 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -383,36 +383,6 @@ if_lookup_address (void *matchaddr, int family)
return if_lookup_address_vrf (matchaddr, family, VRF_DEFAULT);
}
-/* Lookup anchor interface by IPv4 address. */
-struct connected *
-if_anchor_lookup_by_address (struct in_addr src)
-{
- struct listnode *node;
- struct listnode *cnode;
- struct interface *ifp;
- struct prefix *p;
- struct connected *c;
-
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
- {
- for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, c))
- {
- if (CHECK_FLAG(c->flags, ZEBRA_IFA_UNNUMBERED) ||
- !CHECK_FLAG(c->conf, ZEBRA_IFC_REAL))
- continue;
-
- p = c->address;
-
- if (p && p->family == AF_INET)
- {
- if (IPV4_ADDR_SAME (&p->u.prefix4, &src))
- return c;
- }
- }
- }
- return NULL;
-}
-
/* Lookup interface by prefix */
struct interface *
if_lookup_prefix_vrf (struct prefix *prefix, vrf_id_t vrf_id)
diff --git a/lib/if.h b/lib/if.h
index 05803d01ad..f7a5a5ceef 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -190,12 +190,6 @@ struct connected
Note: destination may be NULL if ZEBRA_IFA_PEER is not set. */
struct prefix *destination;
- /* A list of unnumbered IFCs borrowing the address from me */
- struct list *unnumbered;
-
- /* Pointer to the anchor IFC if I'm unnumbered */
- struct connected *anchor;
-
/* Label for Linux 2.2.X and upper. */
char *label;
};
@@ -271,7 +265,6 @@ extern struct interface *if_lookup_by_index (unsigned int);
extern struct interface *if_lookup_exact_address (void *matchaddr, int family);
extern struct interface *if_lookup_address (void *matchaddr, int family);
extern struct interface *if_lookup_prefix (struct prefix *prefix);
-extern struct connected *if_anchor_lookup_by_address (struct in_addr src);
extern struct interface *if_create_vrf (const char *name, int namelen,
vrf_id_t vrf_id);
diff --git a/lib/log.c b/lib/log.c
index 3fd62d59cf..13fbc00317 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -1021,7 +1021,7 @@ zlog_hexdump (void *mem, unsigned int len) {
if (j >= len) /* end of block, not really printing */
s += sprintf(s, " ");
- else if(isprint(((char*)mem)[j])) /* printable char */
+ else if(isprint((int)((char*)mem)[j])) /* printable char */
s += sprintf(s, "%c", 0xFF & ((char*)mem)[j]);
else /* other char */
diff --git a/zebra/connected.c b/zebra/connected.c
index 98e0bb84af..41b68d1564 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -79,20 +79,12 @@ connected_announce (struct interface *ifp, struct connected *ifc)
if (!ifc)
return;
- if (ifc->address->family == AF_INET)
+ if (!if_is_loopback(ifp) && ifc->address->family == AF_INET)
{
- if ((ifc->anchor = if_anchor_lookup_by_address(ifc->address->u.prefix4)))
- {
- /* found an anchor, so I'm unnumbered */
+ if (ifc->address->prefixlen == 32)
SET_FLAG (ifc->flags, ZEBRA_IFA_UNNUMBERED);
- listnode_add (ifc->anchor->unnumbered, ifc);
- }
else
- {
- /* I'm numbered */
UNSET_FLAG (ifc->flags, ZEBRA_IFA_UNNUMBERED);
- ifc->unnumbered = list_new();
- }
}
listnode_add (ifp->connected, ifc);
@@ -339,42 +331,6 @@ connected_down_ipv4 (struct interface *ifp, struct connected *ifc)
rib_update_static (ifp->vrf_id);
}
-void
-connected_delete_ipv4_unnumbered (struct connected *ifc)
-{
- struct connected *new_anchor, *iter;
- struct listnode *node;
-
- if (CHECK_FLAG (ifc->flags, ZEBRA_IFA_UNNUMBERED))
- {
- listnode_delete (ifc->anchor->unnumbered, ifc);
- ifc->anchor = NULL;
- }
- else /* I'm a numbered interface */
- {
- if (!list_isempty (ifc->unnumbered))
- {
- new_anchor = listgetdata (listhead (ifc->unnumbered));
- new_anchor->unnumbered = ifc->unnumbered;
- listnode_delete (new_anchor->unnumbered, new_anchor);
- new_anchor->anchor = NULL;
-
- /* new_anchor changed from unnumbered to numbered, notify clients */
- zebra_interface_address_delete_update (new_anchor->ifp, new_anchor);
- UNSET_FLAG (new_anchor->flags, ZEBRA_IFA_UNNUMBERED);
- zebra_interface_address_add_update (new_anchor->ifp, new_anchor);
-
- for (ALL_LIST_ELEMENTS_RO(new_anchor->unnumbered, node, iter))
- iter->anchor = new_anchor;
- }
- else
- {
- list_free (ifc->unnumbered);
- ifc->unnumbered = NULL;
- }
- }
-}
-
/* Delete connected IPv4 route to the interface. */
void
connected_delete_ipv4 (struct interface *ifp, int flags, struct in_addr *addr,
@@ -392,8 +348,6 @@ connected_delete_ipv4 (struct interface *ifp, int flags, struct in_addr *addr,
if (! ifc)
return;
- connected_delete_ipv4_unnumbered (ifc);
-
connected_withdraw (ifc);
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
diff --git a/zebra/interface.c b/zebra/interface.c
index 8d081c0597..bd1e404d23 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -48,11 +48,11 @@
#define ZEBRA_PTM_SUPPORT
-#ifdef RTADV
+#if defined (HAVE_RTADV)
/* Order is intentional. Matches RFC4191. This array is also used for
command matching, so only modify with care. */
const char *rtadv_pref_strs[] = { "medium", "high", "INVALID", "low", 0 };
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
/* Called when new interface is added. */
static int
@@ -66,7 +66,7 @@ if_zebra_new_hook (struct interface *ifp)
zebra_if->shutdown = IF_ZEBRA_SHUTDOWN_OFF;
ifp->ptm_enable = zebra_ptm_get_enable_state();
-#ifdef RTADV
+#if defined (HAVE_RTADV)
{
/* Set default router advertise values. */
struct rtadvconf *rtadv;
@@ -92,7 +92,7 @@ if_zebra_new_hook (struct interface *ifp)
rtadv->AdvPrefixList = list_new ();
}
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
/* Initialize installed address chains tree. */
zebra_if->ipv4_subnets = route_table_init ();
@@ -478,7 +478,6 @@ if_delete_update (struct interface *ifp)
UNSET_FLAG (ifc->conf, ZEBRA_IFC_REAL);
UNSET_FLAG (ifc->conf, ZEBRA_IFC_QUEUED);
- connected_delete_ipv4_unnumbered(ifc);
/* Remove from subnet chain. */
list_delete_node (addr_list, anode);
@@ -753,7 +752,7 @@ nbr_connected_dump_vty (struct vty *vty, struct nbr_connected *connected)
vty_out (vty, "%s", VTY_NEWLINE);
}
-#ifdef RTADV
+#if defined (HAVE_RTADV)
/* Dump interface ND information to vty. */
static void
nd_dump_vty (struct vty *vty, struct interface *ifp)
@@ -814,7 +813,7 @@ nd_dump_vty (struct vty *vty, struct interface *ifp)
VTY_NEWLINE);
}
}
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
/* Interface's information print out to vty interface. */
static void
@@ -924,9 +923,9 @@ if_dump_vty (struct vty *vty, struct interface *ifp)
connected_dump_vty (vty, connected);
}
-#ifdef RTADV
+#if defined (HAVE_RTADV)
nd_dump_vty (vty, ifp);
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
if (listhead(ifp->nbr_connected))
vty_out (vty, " Neighbor address(s):%s", VTY_NEWLINE);
for (ALL_LIST_ELEMENTS_RO (ifp->nbr_connected, node, nbr_connected))
@@ -1912,9 +1911,9 @@ if_config_write (struct vty *vty)
VTY_NEWLINE);
}
-#ifdef RTADV
+#if defined (HAVE_RTADV)
rtadv_config_write (vty, ifp);
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
#ifdef HAVE_IRDP
irdp_config_write (vty, ifp);
diff --git a/zebra/interface.h b/zebra/interface.h
index ba76d3e845..650b62a458 100644
--- a/zebra/interface.h
+++ b/zebra/interface.h
@@ -37,16 +37,7 @@
#define IF_ZEBRA_SHUTDOWN_OFF 0
#define IF_ZEBRA_SHUTDOWN_ON 1
-/* Router advertisement feature. */
-#ifndef RTADV
-#if (defined(LINUX_IPV6) && (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1)) || defined(KAME)
- #ifdef HAVE_RTADV
- #define RTADV
- #endif
-#endif
-#endif
-
-#ifdef RTADV
+#if defined (HAVE_RTADV)
/* Router advertisement parameter. From RFC4861, RFC6275 and RFC4191. */
struct rtadvconf
{
@@ -180,7 +171,7 @@ struct rtadvconf
#define RTADV_PREF_MEDIUM 0x0 /* Per RFC4191. */
};
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
/* `zebra' daemon local interface structure. */
struct zebra_if
@@ -197,9 +188,9 @@ struct zebra_if
/* Installed addresses chains tree. */
struct route_table *ipv4_subnets;
-#ifdef RTADV
+#if defined(HAVE_RTADV)
struct rtadvconf rtadv;
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
#ifdef HAVE_IRDP
struct irdp_interface irdp;
diff --git a/zebra/main.c b/zebra/main.c
index 4b2a89856e..8048eba71e 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -238,7 +238,7 @@ zebra_vrf_enable (vrf_id_t vrf_id, void **info)
assert (zvrf);
-#ifdef RTADV
+#if defined (HAVE_RTADV)
rtadv_init (zvrf);
#endif
kernel_init (zvrf);
@@ -269,7 +269,7 @@ zebra_vrf_disable (vrf_id_t vrf_id, void **info)
if_down (ifp);
}
-#ifdef RTADV
+#if defined (HAVE_RTADV)
rtadv_terminate (zvrf);
#endif
kernel_terminate (zvrf);
@@ -417,7 +417,7 @@ main (int argc, char **argv)
zebra_vty_init ();
access_list_init ();
prefix_list_init ();
-#ifdef RTADV
+#if defined (HAVE_RTADV)
rtadv_cmd_init ();
#endif
#ifdef HAVE_IRDP
diff --git a/zebra/rib.h b/zebra/rib.h
index 3656646c9b..1f045310a5 100644
--- a/zebra/rib.h
+++ b/zebra/rib.h
@@ -259,16 +259,7 @@ struct static_route
: ((tnexthop) = (nexthop)->next)) \
: (((recursing) = 0),((tnexthop) = (tnexthop)->next)))
-/* Router advertisement feature. */
-#ifndef RTADV
-#if (defined(LINUX_IPV6) && (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1)) || defined(KAME)
- #ifdef HAVE_RTADV
- #define RTADV
- #endif
-#endif
-#endif
-
-#if defined (RTADV)
+#if defined (HAVE_RTADV)
/* Structure which hold status of router advertisement. */
struct rtadv
{
@@ -280,7 +271,7 @@ struct rtadv
struct thread *ra_read;
struct thread *ra_timer;
};
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
#ifdef HAVE_NETLINK
/* Socket interface to kernel */
@@ -338,9 +329,9 @@ struct zebra_vrf
struct list *rid_lo_sorted_list;
struct prefix rid_user_assigned;
-#if defined (RTADV)
+#if defined (HAVE_RTADV)
struct rtadv rtadv;
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
};
/*
diff --git a/zebra/rtadv.c b/zebra/rtadv.c
index d48f804f77..29a29c4044 100644
--- a/zebra/rtadv.c
+++ b/zebra/rtadv.c
@@ -41,7 +41,7 @@
extern struct zebra_privs_t zserv_privs;
-#if defined (HAVE_IPV6) && defined (RTADV)
+#if defined (HAVE_IPV6) && defined (HAVE_RTADV)
#ifdef OPEN_BSD
#include <netinet/icmp6.h>
@@ -1863,4 +1863,4 @@ rtadv_cmd_init (void)
{
/* Empty.*/;
}
-#endif /* RTADV && HAVE_IPV6 */
+#endif /* HAVE_RTADV && HAVE_IPV6 */
diff --git a/zebra/rtadv.h b/zebra/rtadv.h
index 76f98cf2c8..160814b209 100644
--- a/zebra/rtadv.h
+++ b/zebra/rtadv.h
@@ -27,7 +27,7 @@
#include "zebra/interface.h"
/* NB: RTADV is defined in zebra/interface.h above */
-#ifdef RTADV
+#if defined (HAVE_RTADV)
/* Router advertisement prefix. */
struct rtadv_prefix
@@ -98,7 +98,7 @@ struct nd_opt_homeagent_info { /* Home Agent info */
extern const char *rtadv_pref_strs[];
-#endif /* RTADV */
+#endif /* HAVE_RTADV */
extern void rtadv_init (struct zebra_vrf *);
extern void rtadv_terminate (struct zebra_vrf *);