summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_advertise.c1
-rw-r--r--bgpd/bgp_aspath.c1
-rw-r--r--bgpd/bgp_attr.c1
-rw-r--r--bgpd/bgp_bfd.c2
-rw-r--r--bgpd/bgp_btoa.c1
-rw-r--r--bgpd/bgp_clist.c1
-rw-r--r--bgpd/bgp_damp.c1
-rw-r--r--bgpd/bgp_debug.c1
-rw-r--r--bgpd/bgp_dump.c2
-rw-r--r--bgpd/bgp_ecommunity.c1
-rw-r--r--bgpd/bgp_filter.c9
-rw-r--r--bgpd/bgp_fsm.c1
-rw-r--r--bgpd/bgp_mpath.c1
-rw-r--r--bgpd/bgp_mplsvpn.c1
-rw-r--r--bgpd/bgp_network.c13
-rw-r--r--bgpd/bgp_nexthop.c1
-rw-r--r--bgpd/bgp_nht.c1
-rw-r--r--bgpd/bgp_open.c8
-rw-r--r--bgpd/bgp_packet.c1
-rw-r--r--bgpd/bgp_regex.c1
-rw-r--r--bgpd/bgp_snmp.c1
-rw-r--r--bgpd/bgp_table.c1
-rw-r--r--bgpd/bgp_updgrp_adv.c1
-rw-r--r--bgpd/bgp_vty.c1
-rw-r--r--bgpd/bgp_zebra.c3
-rw-r--r--bgpd/bgpd.c4
-rwxr-xr-xconfigure.ac82
-rw-r--r--cumulus/start-stop-daemon.c7
-rw-r--r--isisd/isis_circuit.c19
-rw-r--r--isisd/isis_events.c2
-rw-r--r--isisd/isis_vty.c27
-rw-r--r--isisd/isisd.c2
-rw-r--r--lib/filter.h5
-rw-r--r--lib/log.c4
-rw-r--r--lib/sockopt.c19
-rw-r--r--lib/sockopt.h3
-rw-r--r--lib/str.c42
-rw-r--r--lib/zebra.h5
-rw-r--r--ospf6d/ospf6_network.c14
-rw-r--r--ospfd/ospf_api.c3
-rw-r--r--ospfd/ospf_apiserver.c3
-rw-r--r--ospfd/ospf_dump.c2
-rw-r--r--ospfd/ospf_flood.c28
-rw-r--r--ospfd/ospf_interface.c8
-rw-r--r--ospfd/ospf_interface.h4
-rw-r--r--ospfd/ospf_ism.c2
-rw-r--r--ospfd/ospf_lsa.c30
-rw-r--r--ospfd/ospf_lsa.h6
-rw-r--r--ospfd/ospf_main.c2
-rw-r--r--ospfd/ospf_neighbor.c2
-rw-r--r--ospfd/ospf_neighbor.h2
-rw-r--r--ospfd/ospf_network.c10
-rw-r--r--ospfd/ospf_nsm.c10
-rw-r--r--ospfd/ospf_opaque.c8
-rw-r--r--ospfd/ospf_packet.c24
-rw-r--r--ospfd/ospf_te.c7
-rw-r--r--ospfd/ospf_vty.c39
-rw-r--r--ospfd/ospfd.c16
-rw-r--r--ospfd/ospfd.h10
-rw-r--r--pimd/pim_cmd.c12
-rw-r--r--pimd/pim_iface.c24
-rw-r--r--pimd/pim_mroute.c9
-rw-r--r--pimd/pim_sock.c6
-rw-r--r--pimd/test_igmpv3_join.c2
-rw-r--r--ripd/rip_interface.c10
-rw-r--r--tests/aspath_test.c1
-rw-r--r--tests/bgp_capability_test.c1
-rw-r--r--tests/bgp_mp_attr_test.c1
-rw-r--r--tests/bgp_mpath_test.c1
-rw-r--r--tests/ecommunity_test.c1
-rw-r--r--vtysh/vtysh.c1
-rw-r--r--zebra/if_ioctl.c2
-rw-r--r--zebra/interface.c4
-rw-r--r--zebra/kernel_null.c2
-rw-r--r--zebra/kernel_socket.c22
-rw-r--r--zebra/rt.h1
-rw-r--r--zebra/rt_netlink.c10
-rw-r--r--zebra/rt_netlink.h3
-rw-r--r--zebra/rt_socket.c7
-rw-r--r--zebra/zebra_ptm.c5
-rw-r--r--zebra/zebra_rib.c12
81 files changed, 281 insertions, 363 deletions
diff --git a/bgpd/bgp_advertise.c b/bgpd/bgp_advertise.c
index de27513a42..da5ab94e97 100644
--- a/bgpd/bgp_advertise.c
+++ b/bgpd/bgp_advertise.c
@@ -26,6 +26,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "hash.h"
#include "thread.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c
index 4161d149fa..eca4441010 100644
--- a/bgpd/bgp_aspath.c
+++ b/bgpd/bgp_aspath.c
@@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "stream.h"
#include "jhash.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_aspath.h"
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index eefdd9e8ec..dc157ba7d0 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -31,6 +31,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "jhash.h"
#include "queue.h"
#include "table.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_attr.h"
diff --git a/bgpd/bgp_bfd.c b/bgpd/bgp_bfd.c
index b8b0053695..b0c812cca9 100644
--- a/bgpd/bgp_bfd.c
+++ b/bgpd/bgp_bfd.c
@@ -34,6 +34,8 @@
#include "vty.h"
#include "bfd.h"
#include "lib/json.h"
+#include "filter.h"
+
#include "bgpd/bgpd.h"
#include "bgp_fsm.h"
#include "bgpd/bgp_bfd.h"
diff --git a/bgpd/bgp_btoa.c b/bgpd/bgp_btoa.c
index a6c16d8c2d..904ae66e10 100644
--- a/bgpd/bgp_btoa.c
+++ b/bgpd/bgp_btoa.c
@@ -27,6 +27,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "command.h"
#include "memory.h"
#include "privs.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_dump.h"
diff --git a/bgpd/bgp_clist.c b/bgpd/bgp_clist.c
index 4beae4391e..12c936b190 100644
--- a/bgpd/bgp_clist.c
+++ b/bgpd/bgp_clist.c
@@ -24,6 +24,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "prefix.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_community.h"
diff --git a/bgpd/bgp_damp.c b/bgpd/bgp_damp.c
index 2e2dc42ad1..f4a83d720b 100644
--- a/bgpd/bgp_damp.c
+++ b/bgpd/bgp_damp.c
@@ -27,6 +27,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "log.h"
#include "thread.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_damp.h"
diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c
index 5b6ee0e070..7427afed7b 100644
--- a/bgpd/bgp_debug.c
+++ b/bgpd/bgp_debug.c
@@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "sockunion.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_aspath.h"
diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c
index 59bb2f8a13..e219d5248e 100644
--- a/bgpd/bgp_dump.c
+++ b/bgpd/bgp_dump.c
@@ -29,9 +29,9 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "linklist.h"
#include "queue.h"
#include "memory.h"
+#include "filter.h"
#include "bgpd/bgp_table.h"
-
#include "bgpd/bgpd.h"
#include "bgpd/bgp_route.h"
#include "bgpd/bgp_attr.h"
diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c
index dc0137fd19..e55ce3528c 100644
--- a/bgpd/bgp_ecommunity.c
+++ b/bgpd/bgp_ecommunity.c
@@ -25,6 +25,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "prefix.h"
#include "command.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_ecommunity.h"
diff --git a/bgpd/bgp_filter.c b/bgpd/bgp_filter.c
index 693c639f75..33877e7258 100644
--- a/bgpd/bgp_filter.c
+++ b/bgpd/bgp_filter.c
@@ -25,6 +25,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "memory.h"
#include "buffer.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_aspath.h"
@@ -66,18 +67,12 @@ struct as_filter
char *reg_str;
};
-enum as_list_type
-{
- ACCESS_TYPE_STRING,
- ACCESS_TYPE_NUMBER
-};
-
/* AS path filter list. */
struct as_list
{
char *name;
- enum as_list_type type;
+ enum access_type type;
struct as_list *next;
struct as_list *prev;
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 9da21fdffd..ae77ac421a 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -32,6 +32,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "plist.h"
#include "workqueue.h"
#include "queue.h"
+#include "filter.h"
#include "lib/json.h"
#include "bgpd/bgpd.h"
diff --git a/bgpd/bgp_mpath.c b/bgpd/bgp_mpath.c
index 8397177f8f..9d742204f6 100644
--- a/bgpd/bgp_mpath.c
+++ b/bgpd/bgp_mpath.c
@@ -29,6 +29,7 @@
#include "sockunion.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index 00f8221bcb..4650495faf 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -26,6 +26,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "memory.h"
#include "stream.h"
#include "queue.h"
+#include "filter.h"
#include "lib/json.h"
#include "bgpd/bgpd.h"
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index 61972aabf1..0caada488b 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -33,6 +33,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "network.h"
#include "queue.h"
#include "hash.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_open.h"
@@ -228,6 +229,17 @@ bgp_set_socket_ttl (struct peer *peer, int bgp_sock)
static int
bgp_get_instance_for_inc_conn (int sock, struct bgp **bgp_inst)
{
+#ifndef SO_BINDTODEVICE
+ /* only Linux has SO_BINDTODEVICE, but we're in Linux-specific code here
+ * anyway since the assumption is that the interface name returned by
+ * getsockopt() is useful in identifying the VRF, particularly with Linux's
+ * VRF l3master device. The whole mechanism is specific to Linux, so...
+ * when other platforms add VRF support, this will need handling here as
+ * well. (or, some restructuring) */
+ *bgp_inst = bgp_get_default ();
+ return !*bgp_inst;
+
+#else
char name[VRF_NAMSIZ + 1];
socklen_t name_len = VRF_NAMSIZ;
struct bgp *bgp;
@@ -275,6 +287,7 @@ bgp_get_instance_for_inc_conn (int sock, struct bgp **bgp_inst)
/* We didn't match to either an instance or an interface. */
return -1;
+#endif
}
/* Accept bgp connection. */
diff --git a/bgpd/bgp_nexthop.c b/bgpd/bgp_nexthop.c
index 80495065b0..d96224c093 100644
--- a/bgpd/bgp_nexthop.c
+++ b/bgpd/bgp_nexthop.c
@@ -32,6 +32,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "jhash.h"
#include "nexthop.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_nht.c b/bgpd/bgp_nht.c
index 9d8d8f3b52..42885165c7 100644
--- a/bgpd/bgp_nht.c
+++ b/bgpd/bgp_nht.c
@@ -31,6 +31,7 @@
#include "memory.h"
#include "nexthop.h"
#include "vrf.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index 947f5c09d4..915757e622 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -28,6 +28,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "command.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "lib/json.h"
#include "bgpd/bgpd.h"
@@ -1473,7 +1474,7 @@ bgp_open_capability (struct stream *s, struct peer *peer)
stream_putc(s, len);
stream_put(s, names.nodename, len);
-#ifdef _GNU_SOURCE
+#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
if ((names.domainname[0] != '\0') &&
(strcmp(names.domainname, "(none)") != 0))
{
@@ -1497,8 +1498,13 @@ bgp_open_capability (struct stream *s, struct peer *peer)
stream_putc_at(s, capp, len);
if (bgp_debug_neighbor_events(peer))
+#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
zlog_debug("%s Sending hostname cap with hn = %s, dn = %s",
peer->host, names.nodename, names.domainname);
+#else
+ zlog_debug("%s Sending hostname cap with hn = %s", peer->host,
+ names.nodename);
+#endif
}
/* Sending base graceful-restart capability irrespective of the config */
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 0236f6777a..937623a30b 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -32,6 +32,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "linklist.h"
#include "plist.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_regex.c b/bgpd/bgp_regex.c
index 15c23c9ff9..ea87633dc0 100644
--- a/bgpd/bgp_regex.c
+++ b/bgpd/bgp_regex.c
@@ -24,6 +24,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "command.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd.h"
#include "bgp_aspath.h"
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c
index fc5a0eb59c..5e6218e8a3 100644
--- a/bgpd/bgp_snmp.c
+++ b/bgpd/bgp_snmp.c
@@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "command.h"
#include "thread.h"
#include "smux.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_table.c b/bgpd/bgp_table.c
index 1df24859f5..114c6ef013 100644
--- a/bgpd/bgp_table.c
+++ b/bgpd/bgp_table.c
@@ -25,6 +25,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "sockunion.h"
#include "vty.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c
index 4b684be1bb..96bcd011ca 100644
--- a/bgpd/bgp_updgrp_adv.c
+++ b/bgpd/bgp_updgrp_adv.c
@@ -36,6 +36,7 @@
#include "thread.h"
#include "queue.h"
#include "routemap.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index f16cf53cbe..bb074dc027 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -32,6 +32,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "memory.h"
#include "hash.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_advertise.h"
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index b4bac840e3..ce5d1b498e 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -33,6 +33,7 @@ Boston, MA 02111-1307, USA. */
#include "memory.h"
#include "lib/json.h"
#include "lib/bfd.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_route.h"
@@ -877,7 +878,7 @@ if_lookup_by_ipv6 (struct in6_addr *addr, unsigned int ifindex, vrf_id_t vrf_id)
if (cp->family == AF_INET6)
if (prefix_match (cp, (struct prefix *)&p))
{
- if (IN6_IS_ADDR_LINKLOCAL(&cp->u.prefix6.s6_addr32[0]))
+ if (IN6_IS_ADDR_LINKLOCAL(&cp->u.prefix6))
{
if (ifindex == ifp->ifindex)
return ifp;
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index a6265ad8ba..71ccf7c90d 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -1315,7 +1315,7 @@ bgp_peer_conf_if_to_su_update_v4 (struct peer *peer, struct interface *ifp)
else if (s_addr % 4 == 2)
peer->su.sin.sin_addr.s_addr = htonl(s_addr-1);
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- peer->su->sin.sin_len = sizeof(struct sockaddr_in);
+ peer->su.sin.sin_len = sizeof(struct sockaddr_in);
#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
return 1;
}
@@ -1328,7 +1328,7 @@ bgp_peer_conf_if_to_su_update_v4 (struct peer *peer, struct interface *ifp)
else
peer->su.sin.sin_addr.s_addr = htonl(s_addr-1);
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- peer->su->sin.sin_len = sizeof(struct sockaddr_in);
+ peer->su.sin.sin_len = sizeof(struct sockaddr_in);
#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
return 1;
}
diff --git a/configure.ac b/configure.ac
index 8fcafbb0f0..f6d7bd33cf 100755
--- a/configure.ac
+++ b/configure.ac
@@ -265,15 +265,11 @@ AC_ARG_WITH(libpam,
AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
AC_ARG_ENABLE(tcp-zebra,
AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
-AC_ARG_ENABLE(opaque-lsa,
- AS_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
AC_ARG_ENABLE(ospfapi,
AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
AC_ARG_ENABLE(ospfclient,
AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
(this is the default if --disable-ospfapi is set)]))
-AC_ARG_ENABLE(ospf-te,
- AS_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
AC_ARG_ENABLE(multipath,
AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
AC_ARG_ENABLE(user,
@@ -326,13 +322,10 @@ AC_ARG_ENABLE(rr-semantics,
AC_CHECK_HEADERS(json-c/json.h)
AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
if test $ac_cv_lib_json_c_json_object_get = no; then
- AC_MSG_ERROR([lib json is needed to compile])
-fi
-
-AC_CHECK_HEADERS(json-c/json.h)
-AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c")
-if test $ac_cv_lib_json_c_json_object_get = no; then
- AC_MSG_ERROR([lib json is needed to compile])
+ AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
+ if test $ac_cv_lib_json_json_object_get = no; then
+ AC_MSG_ERROR([lib json is needed to compile])
+ fi
fi
if test x"${enable_gcc_rdynamic}" != x"no" ; then
@@ -386,15 +379,6 @@ if test "${enable_tcp_zebra}" = "yes"; then
AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
fi
-if test "${enable_opaque_lsa}" != "no"; then
- AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
-fi
-
-if test "${enable_ospf_te}" != "no"; then
- AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
- AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
-fi
-
if test "${enable_linux24_tcp_md5}" = "yes"; then
AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
fi
@@ -999,11 +983,46 @@ dnl figure out how to specify an interface in multicast sockets API
dnl ---------------------------------------------------------------
AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
-AC_CHECK_HEADERS([linux/mroute.h], [], [],
-[
-#if HAVE_NETINET_IN_H
-#include<netinet/in.h>
-#endif])
+AC_CHECK_HEADERS([linux/mroute.h], [], [],[
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_H
+ # include <netinet/in.h>
+ #endif
+ #define _LINUX_IN_H /* For Linux <= 2.6.25 */
+ #include <linux/types.h>
+])
+
+m4_define([QUAGGA_INCLUDES],
+QUAGGA_INCLUDES
+[#if HAVE_LINUX_MROUTE_H
+# include <linux/mroute.h>
+#endif
+])dnl
+
+AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_H
+ # include <netinet/in.h>
+ #endif
+ #ifdef HAVE_NET_ROUTE_H
+ # include <net/route.h>
+ #endif
+])
+
+m4_define([QUAGGA_INCLUDES],
+QUAGGA_INCLUDES
+[#if HAVE_NETINET_IP_MROUTE_H
+# include <netinet/ip_mroute.h>
+#endif
+])dnl
+
AC_MSG_CHECKING([for BSD struct ip_mreq hack])
AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
@@ -1101,6 +1120,11 @@ AC_SUBST(IPFORWARD)
AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
+dnl ----------------------------------------------------------------------------
+dnl figure out if domainname is available in the utsname struct (GNU extension).
+dnl ----------------------------------------------------------------------------
+AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
+
dnl ----------
dnl IPv6 check
dnl ----------
@@ -1208,16 +1232,14 @@ fi
AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
OSPFCLIENT=""
-if test "${enable_opaque_lsa}" != "no"; then
- if test "${enable_ospfapi}" != "no";then
+if test "${enable_ospfapi}" != "no";then
AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
- if test "${enable_ospfclient}" != "no";then
+ if test "${enable_ospfclient}" != "no";then
OSPFCLIENT="ospfclient"
- fi
fi
-
fi
+
AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
case "${enable_ripngd}" in
diff --git a/cumulus/start-stop-daemon.c b/cumulus/start-stop-daemon.c
index ea63fbc217..4d447d9051 100644
--- a/cumulus/start-stop-daemon.c
+++ b/cumulus/start-stop-daemon.c
@@ -56,8 +56,9 @@
#include <limits.h>
#include <assert.h>
#include <ctype.h>
-#include <error.h>
+#ifdef linux
#include <linux/sched.h>
+#endif
static int testmode = 0;
static int quietmode = 0;
@@ -241,6 +242,7 @@ next_dirname(const char *s)
return cur;
}
+#ifdef linux
static void
add_namespace(const char *path)
{
@@ -270,6 +272,7 @@ add_namespace(const char *path)
namespace->nstype = nstype;
LIST_INSERT_HEAD(&namespace_head, namespace, list);
}
+#endif
#ifdef HAVE_LXC
static void
@@ -567,7 +570,9 @@ parse_options(int argc, char * const *argv)
changeroot = optarg;
break;
case 'd': /* --namespace /.../<ipcns>|<netns>|<utsns>/name */
+#ifdef linux
add_namespace(optarg);
+#endif
break;
case 'N': /* --nice */
nicelevel = atoi(optarg);
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index d8ca694d59..728cbdc67d 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -1226,9 +1226,12 @@ isis_interface_config_write (struct vty *vty)
struct isis_circuit *
isis_circuit_create (struct isis_area *area, struct interface *ifp)
{
- struct isis_circuit *circuit;
- circuit = isis_csm_state_change (ISIS_ENABLE, NULL, area);
- assert (circuit->state == C_STATE_CONF || circuit->state == C_STATE_UP);
+ struct isis_circuit *circuit = circuit_scan_by_ifp (ifp);
+ if (circuit && circuit->area)
+ return NULL;
+ circuit = isis_csm_state_change (ISIS_ENABLE, circuit, area);
+ if (circuit->state != C_STATE_CONF && circuit->state != C_STATE_UP)
+ return circuit;
isis_circuit_if_bind (circuit, ifp);
return circuit;
}
@@ -1238,7 +1241,7 @@ isis_circuit_af_set (struct isis_circuit *circuit, bool ip_router, bool ipv6_rou
{
struct isis_area *area = circuit->area;
bool change = circuit->ip_router != ip_router || circuit->ipv6_router != ipv6_router;
- bool was_enabled = circuit->ip_router || circuit->ipv6_router;
+ bool was_enabled = !!circuit->area;
area->ip_circuits += ip_router - circuit->ip_router;
area->ipv6_circuits += ipv6_router - circuit->ipv6_router;
@@ -1282,13 +1285,6 @@ isis_circuit_passive_set (struct isis_circuit *circuit, bool passive)
return 0;
}
-void
-isis_circuit_is_type_set (struct isis_circuit *circuit, int circ_type)
-{
- if (circuit->circ_type != circ_type)
- isis_event_circuit_type_change (circuit, circ_type);
-}
-
int
isis_circuit_metric_set (struct isis_circuit *circuit, int level, int metric)
{
@@ -1356,7 +1352,6 @@ isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type)
* is not supported. */
if (circ_type == CIRCUIT_T_UNKNOWN
|| circ_type == CIRCUIT_T_LOOPBACK
- || circuit->circ_type == CIRCUIT_T_UNKNOWN
|| circuit->circ_type == CIRCUIT_T_LOOPBACK)
{
if (circuit->circ_type != circ_type)
diff --git a/isisd/isis_events.c b/isisd/isis_events.c
index 8fb92fdd39..460b1d25ba 100644
--- a/isisd/isis_events.c
+++ b/isisd/isis_events.c
@@ -145,7 +145,7 @@ circuit_resign_level (struct isis_circuit *circuit, int level)
}
void
-isis_event_circuit_type_change (struct isis_circuit *circuit, int newtype)
+isis_circuit_is_type_set (struct isis_circuit *circuit, int newtype)
{
if (circuit->state != C_STATE_UP)
{
diff --git a/isisd/isis_vty.c b/isisd/isis_vty.c
index 3f218561cc..4148eb55b9 100644
--- a/isisd/isis_vty.c
+++ b/isisd/isis_vty.c
@@ -72,17 +72,13 @@ DEFUN (ip_router_isis,
/* Prevent more than one area per circuit */
circuit = circuit_scan_by_ifp (ifp);
- if (circuit)
+ if (circuit && circuit->area)
{
- if (circuit->ip_router == 1)
+ if (strcmp (circuit->area->area_tag, area_tag))
{
- if (strcmp (circuit->area->area_tag, area_tag))
- {
- vty_out (vty, "ISIS circuit is already defined on %s%s",
- circuit->area->area_tag, VTY_NEWLINE);
- return CMD_ERR_NOTHING_TODO;
- }
- return CMD_SUCCESS;
+ vty_out (vty, "ISIS circuit is already defined on %s%s",
+ circuit->area->area_tag, VTY_NEWLINE);
+ return CMD_ERR_NOTHING_TODO;
}
}
@@ -90,9 +86,16 @@ DEFUN (ip_router_isis,
if (!area)
area = isis_area_create (area_tag);
- if (!circuit)
+ if (!circuit || !circuit->area) {
circuit = isis_circuit_create (area, ifp);
+ if (circuit->state != C_STATE_CONF && circuit->state != C_STATE_UP)
+ {
+ vty_out(vty, "Couldn't bring up interface, please check log.%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
bool ip = circuit->ip_router, ipv6 = circuit->ipv6_router;
if (af[2] != '\0')
ipv6 = true;
@@ -259,7 +262,7 @@ DEFUN (isis_network,
if (!circuit)
return CMD_ERR_NO_MATCH;
- if (!isis_circuit_circ_type_set(circuit, CIRCUIT_T_P2P))
+ if (isis_circuit_circ_type_set(circuit, CIRCUIT_T_P2P))
{
vty_out (vty, "isis network point-to-point "
"is valid only on broadcast interfaces%s",
@@ -282,7 +285,7 @@ DEFUN (no_isis_network,
if (!circuit)
return CMD_ERR_NO_MATCH;
- if (!isis_circuit_circ_type_set(circuit, CIRCUIT_T_BROADCAST))
+ if (isis_circuit_circ_type_set(circuit, CIRCUIT_T_BROADCAST))
{
vty_out (vty, "isis network point-to-point "
"is valid only on broadcast interfaces%s",
diff --git a/isisd/isisd.c b/isisd/isisd.c
index 62c5e26538..0d0b805a20 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -1775,7 +1775,7 @@ isis_area_is_type_set(struct isis_area *area, int is_type)
if (area->is_type != IS_LEVEL_1_AND_2)
{
for (ALL_LIST_ELEMENTS_RO (area->circuit_list, node, circuit))
- isis_event_circuit_type_change (circuit, is_type);
+ isis_circuit_is_type_set (circuit, is_type);
}
spftree_area_init (area);
diff --git a/lib/filter.h b/lib/filter.h
index 37535cb13b..e6ccd33b3a 100644
--- a/lib/filter.h
+++ b/lib/filter.h
@@ -25,6 +25,11 @@
#include "if.h"
+/* Filter direction. */
+#define FILTER_IN 0
+#define FILTER_OUT 1
+#define FILTER_MAX 2
+
/* Filter type is made by `permit', `deny' and `dynamic'. */
enum filter_type
{
diff --git a/lib/log.c b/lib/log.c
index 453a611dcd..ea50ae18cc 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -179,6 +179,7 @@ static void
vzlog (struct zlog *zl, int priority, const char *format, va_list args)
{
char proto_str[32];
+ int original_errno = errno;
struct timestamp_control tsctl;
tsctl.already_rendered = 0;
@@ -197,6 +198,7 @@ vzlog (struct zlog *zl, int priority, const char *format, va_list args)
fflush (stderr);
/* In this case we return at here. */
+ errno = original_errno;
return;
}
tsctl.precision = zl->timestamp_precision;
@@ -249,6 +251,8 @@ vzlog (struct zlog *zl, int priority, const char *format, va_list args)
if (priority <= zl->maxlvl[ZLOG_DEST_MONITOR])
vty_log ((zl->record_priority ? zlog_priority[priority] : NULL),
proto_str, format, &tsctl, args);
+
+ errno = original_errno;
}
static char *
diff --git a/lib/sockopt.c b/lib/sockopt.c
index 257271bc0b..d8204936f9 100644
--- a/lib/sockopt.c
+++ b/lib/sockopt.c
@@ -219,6 +219,7 @@ setsockopt_ipv6_tclass(int sock, int tclass)
int
setsockopt_ipv4_multicast(int sock,
int optname,
+ struct in_addr if_addr,
unsigned int mcast_addr,
unsigned int ifindex)
{
@@ -279,18 +280,20 @@ setsockopt_ipv4_multicast(int sock,
#elif defined(HAVE_BSD_STRUCT_IP_MREQ_HACK) /* #if OS_TYPE */
/* standard BSD API */
- struct in_addr m;
struct ip_mreq mreq;
int ret;
assert(optname == IP_ADD_MEMBERSHIP || optname == IP_DROP_MEMBERSHIP);
- m.s_addr = htonl(ifindex);
memset (&mreq, 0, sizeof(mreq));
mreq.imr_multiaddr.s_addr = mcast_addr;
- mreq.imr_interface = m;
-
+#if !defined __OpenBSD__
+ mreq.imr_interface.s_addr = htonl (ifindex);
+#else
+ mreq.imr_interface.s_addr = if_addr.s_addr;
+#endif
+
ret = setsockopt (sock, IPPROTO_IP, optname, (void *)&mreq, sizeof(mreq));
if ((ret < 0) && (optname == IP_ADD_MEMBERSHIP) && (errno == EADDRINUSE))
{
@@ -318,7 +321,7 @@ setsockopt_ipv4_multicast(int sock,
* Set IP_MULTICAST_IF socket option in an OS-dependent manner.
*/
int
-setsockopt_ipv4_multicast_if(int sock,
+setsockopt_ipv4_multicast_if(int sock, struct in_addr if_addr,
unsigned int ifindex)
{
@@ -336,7 +339,11 @@ setsockopt_ipv4_multicast_if(int sock,
#elif defined(HAVE_BSD_STRUCT_IP_MREQ_HACK)
struct in_addr m;
- m.s_addr = htonl(ifindex);
+#if !defined __OpenBSD__
+ m.s_addr = htonl (ifindex);
+#else
+ m.s_addr = if_addr.s_addr;
+#endif
return setsockopt (sock, IPPROTO_IP, IP_MULTICAST_IF, (void *)&m, sizeof(m));
#else
diff --git a/lib/sockopt.h b/lib/sockopt.h
index cb14efc7ba..a597314c3d 100644
--- a/lib/sockopt.h
+++ b/lib/sockopt.h
@@ -83,9 +83,10 @@ extern int setsockopt_ipv6_tclass (int, int);
(((af) == AF_INET) : SOPT_SIZE_CMSG_IFINDEX_IPV4() \
? SOPT_SIZE_CMSG_PKTINFO_IPV6())
-extern int setsockopt_ipv4_multicast_if(int sock,
+extern int setsockopt_ipv4_multicast_if(int sock, struct in_addr if_addr,
unsigned int ifindex);
extern int setsockopt_ipv4_multicast(int sock, int optname,
+ struct in_addr if_addr,
unsigned int mcast_addr,
unsigned int ifindex);
extern int setsockopt_ipv4_tos(int sock, int tos);
diff --git a/lib/str.c b/lib/str.c
index d8f039a094..16f759c074 100644
--- a/lib/str.c
+++ b/lib/str.c
@@ -54,26 +54,34 @@ snprintf(char *str, size_t size, const char *format, ...)
#endif
#ifndef HAVE_STRLCPY
-/**
- * Like strncpy but does not 0 fill the buffer and always null
- * terminates.
- *
- * @param bufsize is the size of the destination buffer.
- *
- * @return index of the terminating byte.
- **/
+/*
+ * Copy string src to buffer dst of size dsize. At most dsize-1
+ * chars will be copied. Always NUL terminates (unless dsize == 0).
+ * Returns strlen(src); if retval >= dsize, truncation occurred.
+ */
size_t
-strlcpy(char *d, const char *s, size_t bufsize)
+strlcpy(char *dst, const char *src, size_t dsize)
{
- size_t len = strlen(s);
- size_t ret = len;
- if (bufsize > 0) {
- if (len >= bufsize)
- len = bufsize-1;
- memcpy(d, s, len);
- d[len] = 0;
+ const char *osrc = src;
+ size_t nleft = dsize;
+
+ /* Copy as many bytes as will fit. */
+ if (nleft != 0) {
+ while (--nleft != 0) {
+ if ((*dst++ = *src++) == '\0')
+ break;
+ }
}
- return ret;
+
+ /* Not enough room in dst, add NUL and traverse rest of src. */
+ if (nleft == 0) {
+ if (dsize != 0)
+ *dst = '\0'; /* NUL-terminate dst */
+ while (*src++)
+ ;
+ }
+
+ return(src - osrc - 1); /* count does not include NUL */
}
#endif
diff --git a/lib/zebra.h b/lib/zebra.h
index 59c154ba46..b3a814c0d2 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -522,11 +522,6 @@ typedef enum {
#define SAFI_ENCAP 7 /* per IANA */
#define SAFI_MAX 8
-/* Filter direction. */
-#define FILTER_IN 0
-#define FILTER_OUT 1
-#define FILTER_MAX 2
-
/* Default Administrative Distance of each protocol. */
#define ZEBRA_KERNEL_DISTANCE_DEFAULT 0
#define ZEBRA_CONNECT_DISTANCE_DEFAULT 0
diff --git a/ospf6d/ospf6_network.c b/ospf6d/ospf6_network.c
index 7b1cf91932..5e254661f1 100644
--- a/ospf6d/ospf6_network.c
+++ b/ospf6d/ospf6_network.c
@@ -198,14 +198,18 @@ ospf6_sendmsg (struct in6_addr *src, struct in6_addr *dst,
int retval;
struct msghdr smsghdr;
struct cmsghdr *scmsgp;
- u_char cmsgbuf[CMSG_SPACE(sizeof (struct in6_pktinfo))];
+ union
+ {
+ struct cmsghdr hdr;
+ u_char buf[CMSG_SPACE (sizeof (struct in6_pktinfo))];
+ } cmsgbuf;
struct in6_pktinfo *pktinfo;
struct sockaddr_in6 dst_sin6;
assert (dst);
assert (*ifindex);
- scmsgp = (struct cmsghdr *)cmsgbuf;
+ scmsgp = (struct cmsghdr *)&cmsgbuf;
pktinfo = (struct in6_pktinfo *)(CMSG_DATA(scmsgp));
memset (&dst_sin6, 0, sizeof (struct sockaddr_in6));
@@ -222,7 +226,7 @@ ospf6_sendmsg (struct in6_addr *src, struct in6_addr *dst,
dst_sin6.sin6_len = sizeof (struct sockaddr_in6);
#endif /*SIN6_LEN*/
memcpy (&dst_sin6.sin6_addr, dst, sizeof (struct in6_addr));
-#ifdef HAVE_SIN6_SCOPE_ID
+#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
dst_sin6.sin6_scope_id = *ifindex;
#endif
@@ -238,8 +242,8 @@ ospf6_sendmsg (struct in6_addr *src, struct in6_addr *dst,
smsghdr.msg_iovlen = iov_count (message);
smsghdr.msg_name = (caddr_t) &dst_sin6;
smsghdr.msg_namelen = sizeof (struct sockaddr_in6);
- smsghdr.msg_control = (caddr_t) cmsgbuf;
- smsghdr.msg_controllen = scmsgp->cmsg_len;
+ smsghdr.msg_control = (caddr_t) &cmsgbuf.buf;
+ smsghdr.msg_controllen = sizeof(cmsgbuf.buf);
retval = sendmsg (ospf6_sock, &smsghdr, 0);
if (retval != iov_totallen (message))
diff --git a/ospfd/ospf_api.c b/ospfd/ospf_api.c
index 45525f4a2c..9f90f671ce 100644
--- a/ospfd/ospf_api.c
+++ b/ospfd/ospf_api.c
@@ -23,9 +23,6 @@
#include <zebra.h>
#ifdef SUPPORT_OSPF_API
-#ifndef HAVE_OPAQUE_LSA
-#error "Core Opaque-LSA module must be configured."
-#endif /* HAVE_OPAQUE_LSA */
#include "linklist.h"
#include "prefix.h"
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 92f68f75f8..aac8ef4b8b 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -23,9 +23,6 @@
#include <zebra.h>
#ifdef SUPPORT_OSPF_API
-#ifndef HAVE_OPAQUE_LSA
-#error "Core Opaque-LSA module must be configured."
-#endif /* HAVE_OPAQUE_LSA */
#include "linklist.h"
#include "prefix.h"
diff --git a/ospfd/ospf_dump.c b/ospfd/ospf_dump.c
index 65d6e09b6d..ed279f38ff 100644
--- a/ospfd/ospf_dump.c
+++ b/ospfd/ospf_dump.c
@@ -619,13 +619,11 @@ ospf_packet_ls_upd_dump (struct stream *s, u_int16_t length)
case OSPF_AS_NSSA_LSA:
ospf_as_external_lsa_dump (s, length);
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
ospf_opaque_lsa_dump (s, length);
break;
-#endif /* HAVE_OPAQUE_LSA */
default:
break;
}
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index e9f443111a..7f83ddeaae 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -156,9 +156,7 @@ ospf_process_self_originated_lsa (struct ospf *ospf,
ospf_router_lsa_update_area (area);
return;
case OSPF_NETWORK_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
-#endif /* HAVE_OPAQUE_LSA */
/* We must find the interface the LSA could belong to.
If the interface is no more a broadcast type or we are no more
the DR, we flush the LSA otherwise -- create the new instance and
@@ -178,13 +176,11 @@ ospf_process_self_originated_lsa (struct ospf *ospf,
return;
}
-#ifdef HAVE_OPAQUE_LSA
if (new->data->type == OSPF_OPAQUE_LINK_LSA)
{
ospf_opaque_lsa_refresh (new);
return;
}
-#endif /* HAVE_OPAQUE_LSA */
if (oi->network_lsa_self)
oi->network_lsa_self->data->ls_seqnum = new->data->ls_seqnum;
@@ -211,14 +207,12 @@ ospf_process_self_originated_lsa (struct ospf *ospf,
else
ospf_lsa_flush_as (ospf, new);
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AREA_LSA:
ospf_opaque_lsa_refresh (new);
break;
case OSPF_OPAQUE_AS_LSA:
ospf_opaque_lsa_refresh (new); /* Reconsideration may needed. *//* XXX */
break;
-#endif /* HAVE_OPAQUE_LSA */
default:
break;
}
@@ -299,25 +293,17 @@ ospf_flood (struct ospf *ospf, struct ospf_neighbor *nbr,
interface. */
lsa_ack_flag = ospf_flood_through (ospf, nbr, new);
-#ifdef HAVE_OPAQUE_LSA
/* Remove the current database copy from all neighbors' Link state
retransmission lists. AS_EXTERNAL and AS_EXTERNAL_OPAQUE does
^^^^^^^^^^^^^^^^^^^^^^^
not have area ID.
All other (even NSSA's) do have area ID. */
-#else /* HAVE_OPAQUE_LSA */
- /* Remove the current database copy from all neighbors' Link state
- retransmission lists. Only AS_EXTERNAL does not have area ID.
- All other (even NSSA's) do have area ID. */
-#endif /* HAVE_OPAQUE_LSA */
if (current)
{
switch (current->data->type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
ospf_ls_retransmit_delete_nbr_as (ospf, current);
break;
default:
@@ -439,7 +425,6 @@ ospf_flood_through_interface (struct ospf_interface *oi,
}
}
-#ifdef HAVE_OPAQUE_LSA
if (IS_OPAQUE_LSA (lsa->data->type))
{
if (! CHECK_FLAG (onbr->options, OSPF_OPTION_O))
@@ -449,7 +434,6 @@ ospf_flood_through_interface (struct ospf_interface *oi,
continue;
}
}
-#endif /* HAVE_OPAQUE_LSA */
/* If the new LSA was received from this neighbor,
examine the next neighbor. */
@@ -584,7 +568,6 @@ ospf_flood_through_area (struct ospf_area *area,
oi->type == OSPF_IFTYPE_VIRTUALLINK)
continue;
-#ifdef HAVE_OPAQUE_LSA
if ((lsa->data->type == OSPF_OPAQUE_LINK_LSA) && (lsa->oi != oi))
{
/*
@@ -596,7 +579,6 @@ ospf_flood_through_area (struct ospf_area *area,
(void *)lsa->oi, (void *)oi);
continue;
}
-#endif /* HAVE_OPAQUE_LSA */
if (ospf_flood_through_interface (oi, inbr, lsa))
lsa_ack_flag = 1;
@@ -706,16 +688,12 @@ ospf_flood_through (struct ospf *ospf,
case OSPF_NETWORK_LSA:
case OSPF_SUMMARY_LSA:
case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA: /* ospf_flood_through_interface ? */
case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
lsa_ack_flag = ospf_flood_through_area (inbr->oi->area, inbr, lsa);
break;
case OSPF_AS_EXTERNAL_LSA: /* Type-5 */
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
break;
/* Type-7 Only received within NSSA, then flooded */
@@ -745,9 +723,7 @@ ospf_flood_through (struct ospf *ospf,
switch (lsa->data->type)
{
case OSPF_AS_EXTERNAL_LSA: /* Type-5 */
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
lsa_ack_flag = ospf_flood_through_as (ospf, inbr, lsa);
break;
/* Type-7 Only received within NSSA, then flooded */
@@ -1024,16 +1000,12 @@ ospf_lsa_flush (struct ospf *ospf, struct ospf_lsa *lsa)
case OSPF_SUMMARY_LSA:
case OSPF_ASBR_SUMMARY_LSA:
case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
ospf_lsa_flush_area (lsa, lsa->area);
break;
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
ospf_lsa_flush_as (ospf, lsa);
break;
default:
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 5602ebe897..2c8124b93d 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -243,9 +243,7 @@ ospf_if_new (struct ospf *ospf, struct interface *ifp, struct prefix *p)
oi->crypt_seqnum = time (NULL);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type9_lsa_init (oi);
-#endif /* HAVE_OPAQUE_LSA */
oi->ospf = ospf;
@@ -307,9 +305,7 @@ ospf_if_free (struct ospf_interface *oi)
assert (oi->state == ISM_Down);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type9_lsa_term (oi);
-#endif /* HAVE_OPAQUE_LSA */
/* Free Pseudo Neighbour */
ospf_nbr_delete (oi->nbr_self);
@@ -696,9 +692,7 @@ ospf_if_new_hook (struct interface *ifp)
SET_IF_PARAM (IF_DEF_PARAMS (ifp), auth_type);
IF_DEF_PARAMS (ifp)->auth_type = OSPF_AUTH_NOTSET;
-#ifdef HAVE_OPAQUE_LSA
rc = ospf_opaque_new_if (ifp);
-#endif /* HAVE_OPAQUE_LSA */
return rc;
}
@@ -707,9 +701,7 @@ ospf_if_delete_hook (struct interface *ifp)
{
int rc = 0;
struct route_node *rn;
-#ifdef HAVE_OPAQUE_LSA
rc = ospf_opaque_del_if (ifp);
-#endif /* HAVE_OPAQUE_LSA */
route_table_finish (IF_OIFS (ifp));
diff --git a/ospfd/ospf_interface.h b/ospfd/ospf_interface.h
index 68dbf186d2..7a74288bff 100644
--- a/ospfd/ospf_interface.h
+++ b/ospfd/ospf_interface.h
@@ -188,9 +188,7 @@ struct ospf_interface
/* self-originated LSAs. */
struct ospf_lsa *network_lsa_self; /* network-LSA. */
-#ifdef HAVE_OPAQUE_LSA
struct list *opaque_lsa_self; /* Type-9 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
struct route_table *ls_upd_queue;
@@ -211,9 +209,7 @@ struct ospf_interface
struct thread *t_ls_ack; /* timer */
struct thread *t_ls_ack_direct; /* event */
struct thread *t_ls_upd_event; /* event */
-#ifdef HAVE_OPAQUE_LSA
struct thread *t_opaque_lsa_self; /* Type-9 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
int on_write_q;
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index 9649df8dc0..ae6d0cdbc5 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -593,9 +593,7 @@ ism_change_state (struct ospf_interface *oi, int state)
oi->network_lsa_self = NULL;
}
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_ism_change (oi, old_state);
-#endif /* HAVE_OPAQUE_LSA */
/* Check area border status. */
ospf_check_abr_status (oi->ospf);
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c
index 7e34e5dd9e..68a3946b3a 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -2642,11 +2642,9 @@ ospf_discard_from_db (struct ospf *ospf,
ospf_ase_unregister_external_lsa (old, ospf);
ospf_ls_retransmit_delete_nbr_as (ospf, old);
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
ospf_ls_retransmit_delete_nbr_as (ospf, old);
break;
-#endif /* HAVE_OPAQUE_LSA */
case OSPF_AS_NSSA_LSA:
ospf_ls_retransmit_delete_nbr_area (old->area, old);
ospf_ase_unregister_external_lsa (old, ospf);
@@ -2680,9 +2678,7 @@ ospf_lsa_install (struct ospf *ospf, struct ospf_interface *oi,
lsdb = ospf->lsdb;
break;
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
lsdb = ospf->lsdb;
break;
default:
@@ -2794,7 +2790,6 @@ ospf_lsa_install (struct ospf *ospf, struct ospf_interface *oi,
case OSPF_AS_EXTERNAL_LSA:
new = ospf_external_lsa_install (ospf, lsa, rt_recalc);
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
if (IS_LSA_SELF (lsa))
lsa->oi = oi; /* Specify outgoing ospf-interface for this LSA. */
@@ -2807,7 +2802,6 @@ ospf_lsa_install (struct ospf *ospf, struct ospf_interface *oi,
case OSPF_OPAQUE_AS_LSA:
new = ospf_opaque_lsa_install (lsa, rt_recalc);
break;
-#endif /* HAVE_OPAQUE_LSA */
case OSPF_AS_NSSA_LSA:
new = ospf_external_lsa_install (ospf, lsa, rt_recalc);
default: /* type-6,8,9....nothing special */
@@ -2825,9 +2819,7 @@ ospf_lsa_install (struct ospf *ospf, struct ospf_interface *oi,
switch (lsa->data->type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
case OSPF_AS_NSSA_LSA:
zlog_debug ("LSA[%s]: Install %s",
dump_lsa_key (new),
@@ -3061,7 +3053,6 @@ ospf_lsa_maxage_walker_remover (struct ospf *ospf, struct ospf_lsa *lsa)
switch (lsa->data->type)
{
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
@@ -3074,7 +3065,6 @@ ospf_lsa_maxage_walker_remover (struct ospf *ospf, struct ospf_lsa *lsa)
* topology, and thus, routing recalculation is not needed here.
*/
break;
-#endif /* HAVE_OPAQUE_LSA */
case OSPF_AS_EXTERNAL_LSA:
case OSPF_AS_NSSA_LSA:
ospf_ase_incremental_update (ospf, lsa);
@@ -3115,12 +3105,10 @@ ospf_lsa_maxage_walker (struct thread *thread)
ospf_lsa_maxage_walker_remover (ospf, lsa);
LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
}
@@ -3130,10 +3118,8 @@ ospf_lsa_maxage_walker (struct thread *thread)
{
LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
ospf_lsa_maxage_walker_remover (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
}
OSPF_TIMER_ON (ospf->t_maxage_walker, ospf_lsa_maxage_walker,
@@ -3186,15 +3172,11 @@ ospf_lsa_lookup (struct ospf_area *area, u_int32_t type,
case OSPF_SUMMARY_LSA:
case OSPF_ASBR_SUMMARY_LSA:
case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
-#endif /* HAVE_OPAQUE_LSA */
return ospf_lsdb_lookup_by_id (area->lsdb, type, id, adv_router);
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
return ospf_lsdb_lookup_by_id (ospf->lsdb, type, id, adv_router);
default:
break;
@@ -3230,13 +3212,11 @@ ospf_lsa_lookup_by_id (struct ospf_area *area, u_int32_t type,
return ospf_lsdb_lookup_by_id (area->lsdb, type, id, id);
case OSPF_AS_EXTERNAL_LSA:
case OSPF_AS_NSSA_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
/* Currently not used. */
break;
-#endif /* HAVE_OPAQUE_LSA */
default:
break;
}
@@ -3249,14 +3229,12 @@ ospf_lsa_lookup_by_header (struct ospf_area *area, struct lsa_header *lsah)
{
struct ospf_lsa *match;
-#ifdef HAVE_OPAQUE_LSA
/*
* Strictly speaking, the LSA-ID field for Opaque-LSAs (type-9/10/11)
* is redefined to have two subfields; opaque-type and opaque-id.
* However, it is harmless to treat the two sub fields together, as if
* they two were forming a unique LSA-ID.
*/
-#endif /* HAVE_OPAQUE_LSA */
match = ospf_lsa_lookup (area, lsah->type, lsah->id, lsah->adv_router);
@@ -3407,14 +3385,12 @@ ospf_lsa_flush_schedule (struct ospf *ospf, struct ospf_lsa *lsa)
switch (lsa->data->type)
{
-#ifdef HAVE_OPAQUE_LSA
/* Opaque wants to be notified of flushes */
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
ospf_opaque_lsa_refresh (lsa);
break;
-#endif /* HAVE_OPAQUE_LSA */
default:
ospf_refresher_unregister_lsa (ospf, lsa);
ospf_lsa_flush (ospf, lsa);
@@ -3474,22 +3450,18 @@ ospf_flush_self_originated_lsas_now (struct ospf *ospf)
ospf_lsa_flush_schedule (ospf, lsa);
LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
ospf_lsa_flush_schedule (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
ospf_lsa_flush_schedule (ospf, lsa);
LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
ospf_lsa_flush_schedule (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
}
if (need_to_flush_ase)
{
LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
ospf_lsa_flush_schedule (ospf, lsa);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
ospf_lsa_flush_schedule (ospf, lsa);
-#endif /* HAVE_OPAQUE_LSA */
}
/*
@@ -3698,13 +3670,11 @@ ospf_lsa_refresh (struct ospf *ospf, struct ospf_lsa *lsa)
else
ospf_lsa_flush_as (ospf, lsa);
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
new = ospf_opaque_lsa_refresh (lsa);
break;
-#endif /* HAVE_OPAQUE_LSA */
default:
break;
}
diff --git a/ospfd/ospf_lsa.h b/ospfd/ospf_lsa.h
index f2c08b1b93..b3d72109d6 100644
--- a/ospfd/ospf_lsa.h
+++ b/ospfd/ospf_lsa.h
@@ -27,11 +27,7 @@
/* OSPF LSA Range definition. */
#define OSPF_MIN_LSA 1 /* begin range here */
-#if defined (HAVE_OPAQUE_LSA)
#define OSPF_MAX_LSA 12
-#else
-#define OSPF_MAX_LSA 8
-#endif
/* OSPF LSA Type definition. */
#define OSPF_UNKNOWN_LSA 0
@@ -211,9 +207,7 @@ struct as_external_lsa
} e[1];
};
-#ifdef HAVE_OPAQUE_LSA
#include "ospfd/ospf_opaque.h"
-#endif /* HAVE_OPAQUE_LSA */
/* Macros. */
#define GET_METRIC(x) get_metric(x)
diff --git a/ospfd/ospf_main.c b/ospfd/ospf_main.c
index 495ee2fd02..4d7b9d0350 100644
--- a/ospfd/ospf_main.c
+++ b/ospfd/ospf_main.c
@@ -323,9 +323,7 @@ main (int argc, char **argv)
#ifdef HAVE_SNMP
ospf_snmp_init ();
#endif /* HAVE_SNMP */
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_init ();
-#endif /* HAVE_OPAQUE_LSA */
/* Need to initialize the default ospf structure, so the interface mode
commands can be duly processed if they are received before 'router ospf',
diff --git a/ospfd/ospf_neighbor.c b/ospfd/ospf_neighbor.c
index 1954447b64..a573936c18 100644
--- a/ospfd/ospf_neighbor.c
+++ b/ospfd/ospf_neighbor.c
@@ -310,7 +310,6 @@ ospf_nbr_count (struct ospf_interface *oi, int state)
return count;
}
-#ifdef HAVE_OPAQUE_LSA
int
ospf_nbr_count_opaque_capable (struct ospf_interface *oi)
{
@@ -327,7 +326,6 @@ ospf_nbr_count_opaque_capable (struct ospf_interface *oi)
return count;
}
-#endif /* HAVE_OPAQUE_LSA */
/* lookup nbr by address - use this only if you know you must
* otherwise use the ospf_nbr_lookup() wrapper, which deals
diff --git a/ospfd/ospf_neighbor.h b/ospfd/ospf_neighbor.h
index 0e209d2117..d62de44b5e 100644
--- a/ospfd/ospf_neighbor.h
+++ b/ospfd/ospf_neighbor.h
@@ -105,9 +105,7 @@ extern int ospf_nbr_bidirectional (struct in_addr *, struct in_addr *, int);
extern void ospf_nbr_self_reset (struct ospf_interface *, struct in_addr);
extern void ospf_nbr_add_self (struct ospf_interface *, struct in_addr);
extern int ospf_nbr_count (struct ospf_interface *, int);
-#ifdef HAVE_OPAQUE_LSA
extern int ospf_nbr_count_opaque_capable (struct ospf_interface *);
-#endif /* HAVE_OPAQUE_LSA */
extern struct ospf_neighbor *ospf_nbr_get (struct ospf_interface *,
struct ospf_header *,
struct ip *, struct prefix *);
diff --git a/ospfd/ospf_network.c b/ospfd/ospf_network.c
index 2f167a50a5..9f516d7390 100644
--- a/ospfd/ospf_network.c
+++ b/ospfd/ospf_network.c
@@ -53,7 +53,7 @@ ospf_if_add_allspfrouters (struct ospf *top, struct prefix *p,
int ret;
ret = setsockopt_ipv4_multicast (top->fd, IP_ADD_MEMBERSHIP,
- htonl (OSPF_ALLSPFROUTERS),
+ p->u.prefix4, htonl (OSPF_ALLSPFROUTERS),
ifindex);
if (ret < 0)
zlog_warn ("can't setsockopt IP_ADD_MEMBERSHIP (fd %d, addr %s, "
@@ -74,7 +74,7 @@ ospf_if_drop_allspfrouters (struct ospf *top, struct prefix *p,
int ret;
ret = setsockopt_ipv4_multicast (top->fd, IP_DROP_MEMBERSHIP,
- htonl (OSPF_ALLSPFROUTERS),
+ p->u.prefix4, htonl (OSPF_ALLSPFROUTERS),
ifindex);
if (ret < 0)
zlog_warn ("can't setsockopt IP_DROP_MEMBERSHIP (fd %d, addr %s, "
@@ -95,7 +95,7 @@ ospf_if_add_alldrouters (struct ospf *top, struct prefix *p, unsigned int
int ret;
ret = setsockopt_ipv4_multicast (top->fd, IP_ADD_MEMBERSHIP,
- htonl (OSPF_ALLDROUTERS),
+ p->u.prefix4, htonl (OSPF_ALLDROUTERS),
ifindex);
if (ret < 0)
zlog_warn ("can't setsockopt IP_ADD_MEMBERSHIP (fd %d, addr %s, "
@@ -116,7 +116,7 @@ ospf_if_drop_alldrouters (struct ospf *top, struct prefix *p, unsigned int
int ret;
ret = setsockopt_ipv4_multicast (top->fd, IP_DROP_MEMBERSHIP,
- htonl (OSPF_ALLDROUTERS),
+ p->u.prefix4, htonl (OSPF_ALLDROUTERS),
ifindex);
if (ret < 0)
zlog_warn ("can't setsockopt IP_DROP_MEMBERSHIP (fd %d, addr %s, "
@@ -151,7 +151,7 @@ ospf_if_ipmulticast (struct ospf *top, struct prefix *p, unsigned int ifindex)
zlog_warn ("can't setsockopt IP_MULTICAST_TTL(1) for fd %d: %s",
top->fd, safe_strerror (errno));
- ret = setsockopt_ipv4_multicast_if (top->fd, ifindex);
+ ret = setsockopt_ipv4_multicast_if (top->fd, p->u.prefix4, ifindex);
if (ret < 0)
zlog_warn("can't setsockopt IP_MULTICAST_IF(fd %d, addr %s, "
"ifindex %u): %s",
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index 6fc7c266ac..c6b55b0746 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -222,7 +222,6 @@ ospf_db_summary_isempty (struct ospf_neighbor *nbr)
static int
ospf_db_summary_add (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
{
-#ifdef HAVE_OPAQUE_LSA
switch (lsa->data->type)
{
case OSPF_OPAQUE_LINK_LSA:
@@ -240,7 +239,6 @@ ospf_db_summary_add (struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
default:
break;
}
-#endif /* HAVE_OPAQUE_LSA */
/* Stay away from any Local Translated Type-7 LSAs */
if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
@@ -299,7 +297,6 @@ nsm_negotiation_done (struct ospf_neighbor *nbr)
LSDB_LOOP (ASBR_SUMMARY_LSDB (area), rn, lsa)
ospf_db_summary_add (nbr, lsa);
-#ifdef HAVE_OPAQUE_LSA
/* Process only if the neighbor is opaque capable. */
if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
{
@@ -308,7 +305,6 @@ nsm_negotiation_done (struct ospf_neighbor *nbr)
LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
ospf_db_summary_add (nbr, lsa);
}
-#endif /* HAVE_OPAQUE_LSA */
if (CHECK_FLAG (nbr->options, OSPF_OPTION_NP))
{
@@ -321,13 +317,11 @@ nsm_negotiation_done (struct ospf_neighbor *nbr)
LSDB_LOOP (EXTERNAL_LSDB (nbr->oi->ospf), rn, lsa)
ospf_db_summary_add (nbr, lsa);
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (nbr->options, OSPF_OPTION_O)
&& (nbr->oi->type != OSPF_IFTYPE_VIRTUALLINK
&& area->external_routing == OSPF_AREA_DEFAULT))
LSDB_LOOP (OPAQUE_AS_LSDB (nbr->oi->ospf), rn, lsa)
ospf_db_summary_add (nbr, lsa);
-#endif /* HAVE_OPAQUE_LSA */
return 0;
}
@@ -383,10 +377,8 @@ nsm_clear_adj (struct ospf_neighbor *nbr)
if (!ospf_ls_retransmit_isempty (nbr))
ospf_ls_retransmit_clear (nbr);
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
UNSET_FLAG (nbr->options, OSPF_OPTION_O);
-#endif /* HAVE_OPAQUE_LSA */
}
static int
@@ -768,9 +760,7 @@ nsm_change_state (struct ospf_neighbor *nbr, int state)
}
}
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_nsm_change (nbr, old_state);
-#endif /* HAVE_OPAQUE_LSA */
/* State changes from > ExStart to <= ExStart should clear any Exchange
* or Full/LSA Update related lists and state.
diff --git a/ospfd/ospf_opaque.c b/ospfd/ospf_opaque.c
index ff505b6bd3..ee2608b05b 100644
--- a/ospfd/ospf_opaque.c
+++ b/ospfd/ospf_opaque.c
@@ -27,7 +27,6 @@
#define MTYPE_OPAQUE_INFO_PER_ID MTYPE_TMP
#include <zebra.h>
-#ifdef HAVE_OPAQUE_LSA
#include "linklist.h"
#include "prefix.h"
@@ -62,9 +61,7 @@
* Followings are initialize/terminate functions for Opaque-LSAs handling.
*------------------------------------------------------------------------*/
-#ifdef HAVE_OSPF_TE
#include "ospfd/ospf_te.h"
-#endif /* HAVE_OSPF_TE */
#ifdef SUPPORT_OSPF_API
int ospf_apiserver_init (void);
@@ -87,10 +84,8 @@ ospf_opaque_init (void)
ospf_opaque_register_vty ();
ospf_opaque_funclist_init ();
-#ifdef HAVE_OSPF_TE
if (ospf_mpls_te_init () != 0)
exit (1);
-#endif /* HAVE_OSPF_TE */
#ifdef SUPPORT_OSPF_API
if ((ospf_apiserver_enable) && (ospf_apiserver_init () != 0))
@@ -103,9 +98,7 @@ ospf_opaque_init (void)
void
ospf_opaque_term (void)
{
-#ifdef HAVE_OSPF_TE
ospf_mpls_te_term ();
-#endif /* HAVE_OSPF_TE */
#ifdef SUPPORT_OSPF_API
ospf_apiserver_term ();
@@ -2185,4 +2178,3 @@ oi_to_top (struct ospf_interface *oi)
return top;
}
-#endif /* HAVE_OPAQUE_LSA */
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 3f80bf214b..2df1596ee3 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -925,7 +925,6 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
}
#endif /* REJECT_IF_TBIT_ON */
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE)
&& CHECK_FLAG (hello->options, OSPF_OPTION_O))
{
@@ -941,7 +940,6 @@ ospf_hello (struct ip *iph, struct ospf_header *ospfh,
UNSET_FLAG (hello->options, OSPF_OPTION_O); /* Ignore O-bit. */
#endif /* STRICT_OBIT_USAGE_CHECK */
}
-#endif /* HAVE_OPAQUE_LSA */
/* new for NSSA is to ensure that NP is on and E is off */
@@ -1093,7 +1091,6 @@ ospf_db_desc_proc (struct stream *s, struct ospf_interface *oi,
return;
}
-#ifdef HAVE_OPAQUE_LSA
if (IS_OPAQUE_LSA (lsah->type)
&& ! CHECK_FLAG (nbr->options, OSPF_OPTION_O))
{
@@ -1101,14 +1098,11 @@ ospf_db_desc_proc (struct stream *s, struct ospf_interface *oi,
OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_SeqNumberMismatch);
return;
}
-#endif /* HAVE_OPAQUE_LSA */
switch (lsah->type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
/* Check for stub area. Reject if AS-External from stub but
allow if from NSSA. */
if (oi->area->external_routing == OSPF_AREA_STUB)
@@ -1282,7 +1276,6 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh,
}
#endif /* REJECT_IF_TBIT_ON */
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (dd->options, OSPF_OPTION_O)
&& !CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
{
@@ -1292,7 +1285,6 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh,
*/
UNSET_FLAG (dd->options, OSPF_OPTION_O);
}
-#endif /* HAVE_OPAQUE_LSA */
/* Add event to thread. */
OSPF_NSM_EVENT_SCHEDULE (nbr, NSM_PacketReceived);
@@ -1357,7 +1349,6 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh,
/* This is where the real Options are saved */
nbr->options = dd->options;
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
{
if (IS_DEBUG_OSPF_EVENT)
@@ -1375,7 +1366,6 @@ ospf_db_desc (struct ip *iph, struct ospf_header *ospfh,
/* This situation is undesirable, but not a real error. */
}
}
-#endif /* HAVE_OPAQUE_LSA */
OSPF_NSM_EVENT_EXECUTE (nbr, NSM_NegotiationDone);
@@ -1653,7 +1643,6 @@ ospf_ls_upd_list_lsa (struct ospf_neighbor *nbr, struct stream *s,
if (ntohs (lsah->ls_age) > OSPF_LSA_MAXAGE)
lsah->ls_age = htons (OSPF_LSA_MAXAGE);
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (nbr->options, OSPF_OPTION_O))
{
#ifdef STRICT_OBIT_USAGE_CHECK
@@ -1685,7 +1674,6 @@ ospf_ls_upd_list_lsa (struct ospf_neighbor *nbr, struct stream *s,
zlog_warn ("LSA[Type%d:%s]: Opaque capability mismatch?", lsah->type, inet_ntoa (lsah->id));
continue;
}
-#endif /* HAVE_OPAQUE_LSA */
/* Create OSPF LSA instance. */
lsa = ospf_lsa_new ();
@@ -1695,16 +1683,12 @@ ospf_ls_upd_list_lsa (struct ospf_neighbor *nbr, struct stream *s,
switch (lsah->type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
lsa->area = NULL;
break;
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
lsa->oi = oi; /* Remember incoming interface for flooding control. */
/* Fallthrough */
-#endif /* HAVE_OPAQUE_LSA */
default:
lsa->area = oi->area;
break;
@@ -1892,7 +1876,6 @@ ospf_ls_upd (struct ospf *ospf, struct ip *iph, struct ospf_header *ospfh,
DISCARD_LSA (lsa, 3);
}
-#ifdef HAVE_OPAQUE_LSA
if (IS_OPAQUE_LSA (lsa->data->type)
&& IPV4_ADDR_SAME (&lsa->data->adv_router, &oi->ospf->router_id))
{
@@ -1940,7 +1923,6 @@ ospf_ls_upd (struct ospf *ospf, struct ip *iph, struct ospf_header *ospfh,
continue;
}
}
-#endif /* HAVE_OPAQUE_LSA */
/* It might be happen that received LSA is self-originated network LSA, but
* router ID is changed. So, we should check if LSA is a network-LSA whose
@@ -2517,7 +2499,6 @@ ospf_lsa_examin (struct lsa_header * lsah, const u_int16_t lsalen, const u_char
case OSPF_SUMMARY_LSA:
case OSPF_ASBR_SUMMARY_LSA:
/* RFC2328 A.4.4, LSA header + 4 bytes followed by N>=1 4-bytes TOS blocks */
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
@@ -2525,7 +2506,6 @@ ospf_lsa_examin (struct lsa_header * lsah, const u_int16_t lsalen, const u_char
* data) padded to 32-bit alignment." This is considered equivalent
* to 4-byte alignment of all other LSA types, see OSPF-ALIGNMENT.txt
* file for the detailed analysis of this passage. */
-#endif
ret = lsalen % 4 ? MSG_NG : MSG_OK;
break;
default:
@@ -3157,10 +3137,8 @@ ospf_make_db_desc (struct ospf_interface *oi, struct ospf_neighbor *nbr,
/* Set Options. */
options = OPTIONS (oi);
-#ifdef HAVE_OPAQUE_LSA
if (CHECK_FLAG (oi->ospf->config, OSPF_OPAQUE_CAPABLE))
SET_FLAG (options, OSPF_OPTION_O);
-#endif /* HAVE_OPAQUE_LSA */
stream_putc (s, options);
/* DD flags */
@@ -3185,7 +3163,6 @@ ospf_make_db_desc (struct ospf_interface *oi, struct ospf_neighbor *nbr,
for (rn = route_top (table); rn; rn = route_next (rn))
if ((lsa = rn->info) != NULL)
{
-#ifdef HAVE_OPAQUE_LSA
if (IS_OPAQUE_LSA (lsa->data->type)
&& (! CHECK_FLAG (options, OSPF_OPTION_O)))
{
@@ -3194,7 +3171,6 @@ ospf_make_db_desc (struct ospf_interface *oi, struct ospf_neighbor *nbr,
ospf_lsdb_delete (lsdb, lsa);
continue;
}
-#endif /* HAVE_OPAQUE_LSA */
if (!CHECK_FLAG (lsa->flags, OSPF_LSA_DISCARD))
{
diff --git a/ospfd/ospf_te.c b/ospfd/ospf_te.c
index 155a773b33..6dba2d3bee 100644
--- a/ospfd/ospf_te.c
+++ b/ospfd/ospf_te.c
@@ -26,11 +26,6 @@
#include <zebra.h>
-#ifdef HAVE_OSPF_TE
-#ifndef HAVE_OPAQUE_LSA
-#error "Wrong configure option"
-#endif /* HAVE_OPAQUE_LSA */
-
#include "linklist.h"
#include "prefix.h"
#include "vrf.h"
@@ -1928,5 +1923,3 @@ ospf_mpls_te_register_vty (void)
return;
}
-
-#endif /* HAVE_OSPF_TE */
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 16fab68c99..3022a316c6 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -3265,7 +3265,6 @@ show_ip_ospf_area (struct vty *vty, struct ospf_area *area, json_object *json_ar
ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE);
}
-#ifdef HAVE_OPAQUE_LSA
if (use_json)
{
json_object_int_add(json_area, "lsaOpaqueLinkNumber", ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA));
@@ -3282,7 +3281,6 @@ show_ip_ospf_area (struct vty *vty, struct ospf_area *area, json_object *json_ar
ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA),
ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE);
}
-#endif /* HAVE_OPAQUE_LSA */
if (use_json)
json_object_object_add(json_areas, inet_ntoa (area->area_id), json_area);
@@ -3366,7 +3364,6 @@ show_ip_ospf_common (struct vty *vty, struct ospf *ospf, u_char use_json)
"enabled" : "disabled", VTY_NEWLINE);
}
-#ifdef HAVE_OPAQUE_LSA
if (use_json)
{
if (CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))
@@ -3380,7 +3377,6 @@ show_ip_ospf_common (struct vty *vty, struct ospf *ospf, u_char use_json)
CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ? "enabled" : "disabled",
VTY_NEWLINE);
}
-#endif /* HAVE_OPAQUE_LSA */
/* Show stub-router configuration */
if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
@@ -3534,7 +3530,6 @@ show_ip_ospf_common (struct vty *vty, struct ospf *ospf, u_char use_json)
ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE);
}
-#ifdef HAVE_OPAQUE_LSA
if (use_json)
{
json_object_int_add(json, "lsaAsopaqueCounter",
@@ -3548,7 +3543,6 @@ show_ip_ospf_common (struct vty *vty, struct ospf *ospf, u_char use_json)
ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA),
ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE);
}
-#endif /* HAVE_OPAQUE_LSA */
/* Show number of areas attached. */
if (use_json)
@@ -5095,11 +5089,9 @@ show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self)
break;
case OSPF_NETWORK_LSA:
case OSPF_ASBR_SUMMARY_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_LINK_LSA:
case OSPF_OPAQUE_AREA_LSA:
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
default:
break;
}
@@ -5119,12 +5111,10 @@ static const char *show_database_desc[] =
"AS External Link States",
"Group Membership LSA",
"NSSA-external Link States",
-#ifdef HAVE_OPAQUE_LSA
"Type-8 LSA",
"Link-Local Opaque-LSA",
"Area-Local Opaque-LSA",
"AS-external Opaque-LSA",
-#endif /* HAVE_OPAQUE_LSA */
};
static const char *show_database_header[] =
@@ -5137,12 +5127,10 @@ static const char *show_database_header[] =
"Link ID ADV Router Age Seq# CkSum Route",
" --- header for Group Member ----",
"Link ID ADV Router Age Seq# CkSum Route",
-#ifdef HAVE_OPAQUE_LSA
" --- type-8 ---",
"Opaque-Type/Id ADV Router Age Seq# CkSum",
"Opaque-Type/Id ADV Router Age Seq# CkSum",
"Opaque-Type/Id ADV Router Age Seq# CkSum",
-#endif /* HAVE_OPAQUE_LSA */
};
static void
@@ -5414,7 +5402,6 @@ show_func_dummy (struct vty *vty, struct ospf_lsa *lsa)
return 0;
}
-#ifdef HAVE_OPAQUE_LSA
static int
show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
{
@@ -5427,7 +5414,6 @@ show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
}
return 0;
}
-#endif /* HAVE_OPAQUE_LSA */
int (*show_function[])(struct vty *, struct ospf_lsa *) =
{
@@ -5439,12 +5425,10 @@ int (*show_function[])(struct vty *, struct ospf_lsa *) =
show_as_external_lsa_detail,
show_func_dummy,
show_as_nssa_lsa_detail, /* almost same as external */
-#ifdef HAVE_OPAQUE_LSA
NULL, /* type-8 */
show_opaque_lsa_detail,
show_opaque_lsa_detail,
show_opaque_lsa_detail,
-#endif /* HAVE_OPAQUE_LSA */
};
static void
@@ -5503,9 +5487,7 @@ show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,
switch (type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
vty_out (vty, " %s %s%s",
show_database_desc[type],
VTY_NEWLINE, VTY_NEWLINE);
@@ -5552,9 +5534,7 @@ show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,
switch (type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
vty_out (vty, " %s %s%s",
show_database_desc[type],
VTY_NEWLINE, VTY_NEWLINE);
@@ -5590,9 +5570,7 @@ show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)
switch (type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
continue;
default:
break;
@@ -5619,9 +5597,7 @@ show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)
switch (type)
{
case OSPF_AS_EXTERNAL_LSA:
-#ifdef HAVE_OPAQUE_LSA
case OSPF_OPAQUE_AS_LSA:
-#endif /* HAVE_OPAQUE_LSA */
break;
default:
continue;
@@ -5673,17 +5649,10 @@ show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
#define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
#define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
-#ifdef HAVE_OPAQUE_LSA
#define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
#define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
#define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
#define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
-#else /* HAVE_OPAQUE_LSA */
-#define OSPF_LSA_TYPE_OPAQUE_LINK_DESC ""
-#define OSPF_LSA_TYPE_OPAQUE_AREA_DESC ""
-#define OSPF_LSA_TYPE_OPAQUE_AS_DESC ""
-#define OSPF_LSA_TYPE_OPAQUE_CMD_STR ""
-#endif /* HAVE_OPAQUE_LSA */
#define OSPF_LSA_TYPES_CMD_STR \
"asbr-summary|external|network|router|summary" \
@@ -5745,14 +5714,12 @@ show_ip_ospf_database_common (struct vty *vty, struct ospf *ospf,
show_ip_ospf_database_maxage (vty, ospf);
return CMD_SUCCESS;
}
-#ifdef HAVE_OPAQUE_LSA
else if (strncmp (argv[arg_base + 0], "opaque-l", 8) == 0)
type = OSPF_OPAQUE_LINK_LSA;
else if (strncmp (argv[arg_base + 0], "opaque-ar", 9) == 0)
type = OSPF_OPAQUE_AREA_LSA;
else if (strncmp (argv[arg_base + 0], "opaque-as", 9) == 0)
type = OSPF_OPAQUE_AS_LSA;
-#endif /* HAVE_OPAQUE_LSA */
else
return CMD_WARNING;
@@ -5947,14 +5914,12 @@ show_ip_ospf_database_type_adv_router_common (struct vty *vty, struct ospf *ospf
type = OSPF_ASBR_SUMMARY_LSA;
else if (strncmp (argv[arg_base + 0], "e", 1) == 0)
type = OSPF_AS_EXTERNAL_LSA;
-#ifdef HAVE_OPAQUE_LSA
else if (strncmp (argv[arg_base + 0], "opaque-l", 8) == 0)
type = OSPF_OPAQUE_LINK_LSA;
else if (strncmp (argv[arg_base + 0], "opaque-ar", 9) == 0)
type = OSPF_OPAQUE_AREA_LSA;
else if (strncmp (argv[arg_base + 0], "opaque-as", 9) == 0)
type = OSPF_OPAQUE_AS_LSA;
-#endif /* HAVE_OPAQUE_LSA */
else
return CMD_WARNING;
@@ -9489,9 +9454,7 @@ config_write_interface (struct vty *vty)
}
} while (rn);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_config_write_if (vty, ifp);
-#endif /* HAVE_OPAQUE_LSA */
}
return write;
@@ -9987,9 +9950,7 @@ ospf_config_write (struct vty *vty)
/* Distance configuration. */
config_write_ospf_distance (vty, ospf);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_config_write_router (vty, ospf);
-#endif /* HAVE_OPAQUE_LSA */
}
return write;
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 6d6bf12873..9d0e4b9e87 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -351,9 +351,7 @@ ospf_get ()
if (ospf->router_id_static.s_addr == 0)
ospf_router_id_update (ospf);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type11_lsa_init (ospf);
-#endif /* HAVE_OPAQUE_LSA */
}
return ospf;
@@ -373,9 +371,7 @@ ospf_get_instance (u_short instance)
if (ospf->router_id_static.s_addr == 0)
ospf_router_id_update (ospf);
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type11_lsa_init (ospf);
-#endif /* HAVE_OPAQUE_LSA */
}
return ospf;
@@ -513,9 +509,7 @@ ospf_finish_final (struct ospf *ospf)
int i;
u_short instance = 0;
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type11_lsa_term (ospf);
-#endif /* HAVE_OPAQUE_LSA */
/* be nice if this worked, but it doesn't */
/*ospf_flush_self_originated_lsas_now (ospf);*/
@@ -611,17 +605,13 @@ ospf_finish_final (struct ospf *ospf)
OSPF_TIMER_OFF (ospf->t_lsa_refresher);
OSPF_TIMER_OFF (ospf->t_read);
OSPF_TIMER_OFF (ospf->t_write);
-#ifdef HAVE_OPAQUE_LSA
OSPF_TIMER_OFF (ospf->t_opaque_lsa_self);
-#endif
close (ospf->fd);
stream_free(ospf->ibuf);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_AS_LSDB (ospf), rn, lsa)
ospf_discard_from_db (ospf, ospf->lsdb, lsa);
-#endif /* HAVE_OPAQUE_LSA */
LSDB_LOOP (EXTERNAL_LSDB (ospf), rn, lsa)
ospf_discard_from_db (ospf, ospf->lsdb, lsa);
@@ -733,9 +723,7 @@ ospf_area_new (struct ospf *ospf, struct in_addr area_id)
/* Self-originated LSAs initialize. */
new->router_lsa_self = NULL;
-#ifdef HAVE_OPAQUE_LSA
ospf_opaque_type10_lsa_init (new);
-#endif /* HAVE_OPAQUE_LSA */
new->oiflist = list_new ();
new->ranges = route_table_init ();
@@ -764,12 +752,10 @@ ospf_area_free (struct ospf_area *area)
LSDB_LOOP (NSSA_LSDB (area), rn, lsa)
ospf_discard_from_db (area->ospf, area->lsdb, lsa);
-#ifdef HAVE_OPAQUE_LSA
LSDB_LOOP (OPAQUE_AREA_LSDB (area), rn, lsa)
ospf_discard_from_db (area->ospf, area->lsdb, lsa);
LSDB_LOOP (OPAQUE_LINK_LSDB (area), rn, lsa)
ospf_discard_from_db (area->ospf, area->lsdb, lsa);
-#endif /* HAVE_OPAQUE_LSA */
ospf_lsdb_delete_all (area->lsdb);
ospf_lsdb_free (area->lsdb);
@@ -787,9 +773,7 @@ ospf_area_free (struct ospf_area *area)
/* Cancel timer. */
OSPF_TIMER_OFF (area->t_stub_router);
-#ifdef HAVE_OPAQUE_LSA
OSPF_TIMER_OFF (area->t_opaque_lsa_self);
-#endif /* HAVE_OPAQUE_LSA */
if (OSPF_IS_AREA_BACKBONE (area))
area->ospf->backbone = NULL;
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index 1a925c2c6a..5f0a7bf113 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -162,11 +162,9 @@ struct ospf
#define OSPF_LOG_ADJACENCY_CHANGES (1 << 3)
#define OSPF_LOG_ADJACENCY_DETAIL (1 << 4)
-#ifdef HAVE_OPAQUE_LSA
/* Opaque-LSA administrative flags. */
u_char opaque;
#define OPAQUE_OPERATION_READY_BIT (1 << 0)
-#endif /* HAVE_OPAQUE_LSA */
/* RFC3137 stub router. Configured time to stay stub / max-metric */
unsigned int stub_router_startup_time; /* seconds */
@@ -209,9 +207,7 @@ struct ospf
int external_origin; /* AS-external-LSA origin flag. */
int ase_calc; /* ASE calculation flag. */
-#ifdef HAVE_OPAQUE_LSA
struct list *opaque_lsa_self; /* Type-11 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
/* Routing tables. */
struct route_table *old_table; /* Old routing table. */
@@ -240,9 +236,7 @@ struct ospf
struct thread *t_spf_calc; /* SPF calculation timer. */
struct thread *t_ase_calc; /* ASE calculation timer. */
struct thread *t_external_lsa; /* AS-external-LSA origin timer. */
-#ifdef HAVE_OPAQUE_LSA
struct thread *t_opaque_lsa_self; /* Type-11 Opaque-LSAs origin event. */
-#endif /* HAVE_OPAQUE_LSA */
unsigned int maxage_delay; /* Delay on Maxage remover timer, sec */
struct thread *t_maxage; /* MaxAge LSA remover timer. */
@@ -365,9 +359,7 @@ struct ospf_area
/* Self-originated LSAs. */
struct ospf_lsa *router_lsa_self;
-#ifdef HAVE_OPAQUE_LSA
struct list *opaque_lsa_self; /* Type-10 Opaque-LSAs */
-#endif /* HAVE_OPAQUE_LSA */
/* Area announce list. */
struct
@@ -409,9 +401,7 @@ struct ospf_area
/* Threads. */
struct thread *t_stub_router; /* Stub-router timer */
-#ifdef HAVE_OPAQUE_LSA
struct thread *t_opaque_lsa_self; /* Type-10 Opaque-LSAs origin. */
-#endif /* HAVE_OPAQUE_LSA */
/* Statistics field. */
u_int32_t spf_calculation; /* SPF Calculation Count. */
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 13cc305274..54ed11da81 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -2462,9 +2462,9 @@ DEFUN (ip_pim_rp,
ip_pim_rp_cmd,
"ip pim rp A.B.C.D",
IP_STR
- "pim multicast routing"
- "Rendevous Point"
- "ip address of RP")
+ "pim multicast routing\n"
+ "Rendevous Point\n"
+ "ip address of RP\n")
{
int result;
@@ -2487,9 +2487,9 @@ DEFUN (no_ip_pim_rp,
"no ip pim rp {A.B.C.D}",
NO_STR
IP_STR
- "pim multicast routing"
- "Rendevous Point"
- "ip address of RP")
+ "pim multicast routing\n"
+ "Rendevous Point\n"
+ "ip address of RP\n")
{
qpim_rp.rpf_addr.s_addr = INADDR_NONE;
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 14c8c7262e..3c60275027 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -41,19 +41,6 @@
#include "pim_time.h"
#include "pim_ssmpingd.h"
-#ifndef VIFF_USE_IFINDEX
-# ifdef linux
-/* make it work compile-time - whether it works runtime depends on the user
- * having 2.6.32 or newer */
-# define VIFF_USE_IFINDEX 0x8
-# else
-# error no VIFF_USE_IFINDEX on this system, code needs porting
-/* NB: without VIFF_USE_IFINDEX, the local IP address is used to identify
- * interfaces, which means it's impossible to support multiple interfaces that
- * have the same or no IP address (e.g. unnumbered) */
-# endif
-#endif
-
struct interface *pim_regiface = NULL;
static void pim_if_igmp_join_del_all(struct interface *ifp);
@@ -645,7 +632,7 @@ int pim_if_add_vif(struct interface *ifp)
{
struct pim_interface *pim_ifp = ifp->info;
struct in_addr ifaddr;
- unsigned char flags;
+ unsigned char flags = 0;
zassert(pim_ifp);
@@ -681,8 +668,13 @@ int pim_if_add_vif(struct interface *ifp)
return -3;
}
- flags = (ifp->ifindex == PIM_OIF_PIM_REGISTER_VIF) ?
- VIFF_REGISTER : VIFF_USE_IFINDEX;
+ if (ifp->ifindex == PIM_OIF_PIM_REGISTER_VIF)
+ flags = VIFF_REGISTER;
+#ifdef VIFF_USE_IFINDEX
+ else
+ flags = VIFF_USE_IFINDEX;
+#endif
+
if (pim_mroute_add_vif(ifp, ifaddr, flags)) {
/* pim_mroute_add_vif reported error */
return -5;
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c
index ab3742438d..56f49d62f5 100644
--- a/pimd/pim_mroute.c
+++ b/pimd/pim_mroute.c
@@ -501,7 +501,16 @@ int pim_mroute_add_vif(struct interface *ifp, struct in_addr ifaddr, unsigned ch
memset(&vc, 0, sizeof(vc));
vc.vifc_vifi = pim_ifp->mroute_vif_index;
+#ifdef VIFF_USE_IFINDEX
vc.vifc_lcl_ifindex = ifp->ifindex;
+#else
+ if (ifaddr.s_addr == INADDR_ANY) {
+ zlog_warn("%s: unnumbered interfaces are not supported on this platform",
+ __PRETTY_FUNCTION__);
+ return -1;
+ }
+ memcpy(&vc.vifc_lcl_addr, &ifaddr, sizeof(vc.vifc_lcl_addr));
+#endif
vc.vifc_flags = flags;
vc.vifc_threshold = PIM_MROUTE_MIN_TTL;
vc.vifc_rate_limit = 0;
diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c
index a2e166f796..e04cd41575 100644
--- a/pimd/pim_sock.c
+++ b/pimd/pim_sock.c
@@ -79,6 +79,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, int loop)
return PIM_SOCK_ERR_SOCKET;
}
+#ifdef SO_BINDTODEVICE
if (protocol == IPPROTO_PIM)
{
int ret;
@@ -104,7 +105,10 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, int loop)
return PIM_SOCK_ERR_BIND;
}
}
-
+#else
+ /* XXX: use IP_PKTINFO / IP_RECVIF to emulate behaviour? Or change to
+ * only use 1 socket for all interfaces? */
+#endif
/* Needed to obtain destination address from recvmsg() */
{
diff --git a/pimd/test_igmpv3_join.c b/pimd/test_igmpv3_join.c
index fe64fbc005..7fcf38bcec 100644
--- a/pimd/test_igmpv3_join.c
+++ b/pimd/test_igmpv3_join.c
@@ -20,6 +20,8 @@
$QuaggaId: $Format:%an, %ai, %h$ $
*/
+#include <zebra.h>
+
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index 6748e197da..4499966ad0 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -80,6 +80,7 @@ ipv4_multicast_join (int sock,
ret = setsockopt_ipv4_multicast (sock,
IP_ADD_MEMBERSHIP,
+ ifa,
group.s_addr,
ifindex);
@@ -101,6 +102,7 @@ ipv4_multicast_leave (int sock,
ret = setsockopt_ipv4_multicast (sock,
IP_DROP_MEMBERSHIP,
+ ifa,
group.s_addr,
ifindex);
@@ -136,9 +138,13 @@ rip_interface_new (void)
void
rip_interface_multicast_set (int sock, struct connected *connected)
{
+ struct in_addr addr;
+
assert (connected != NULL);
-
- if (setsockopt_ipv4_multicast_if (sock, connected->ifp->ifindex) < 0)
+
+ addr = CONNECTED_ID(connected)->u.prefix4;
+
+ if (setsockopt_ipv4_multicast_if (sock, addr, connected->ifp->ifindex) < 0)
{
zlog_warn ("Can't setsockopt IP_MULTICAST_IF on fd %d to "
"ifindex %d for interface %s",
diff --git a/tests/aspath_test.c b/tests/aspath_test.c
index fde12c41c4..9d595807fe 100644
--- a/tests/aspath_test.c
+++ b/tests/aspath_test.c
@@ -25,6 +25,7 @@
#include "stream.h"
#include "privs.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_aspath.h"
diff --git a/tests/bgp_capability_test.c b/tests/bgp_capability_test.c
index ecabc2f19f..73f46b59a0 100644
--- a/tests/bgp_capability_test.c
+++ b/tests/bgp_capability_test.c
@@ -26,6 +26,7 @@
#include "privs.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_open.h"
diff --git a/tests/bgp_mp_attr_test.c b/tests/bgp_mp_attr_test.c
index ba619916d4..928d69752a 100644
--- a/tests/bgp_mp_attr_test.c
+++ b/tests/bgp_mp_attr_test.c
@@ -26,6 +26,7 @@
#include "privs.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_attr.h"
diff --git a/tests/bgp_mpath_test.c b/tests/bgp_mpath_test.c
index bafbef75fb..66a718cbe2 100644
--- a/tests/bgp_mpath_test.c
+++ b/tests/bgp_mpath_test.c
@@ -30,6 +30,7 @@
#include "memory.h"
#include "zclient.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_table.h"
diff --git a/tests/ecommunity_test.c b/tests/ecommunity_test.c
index 1d4f6a1860..9166af6142 100644
--- a/tests/ecommunity_test.c
+++ b/tests/ecommunity_test.c
@@ -25,6 +25,7 @@
#include "privs.h"
#include "memory.h"
#include "queue.h"
+#include "filter.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_ecommunity.h"
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index ad43f41fd9..80ee0acc3e 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -37,6 +37,7 @@
#include "linklist.h"
#include "command.h"
#include "memory.h"
+#include "filter.h"
#include "vtysh/vtysh.h"
#include "log.h"
#include "bgpd/bgp_vty.h"
diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c
index 88fea3427f..0a9807b8b9 100644
--- a/zebra/if_ioctl.c
+++ b/zebra/if_ioctl.c
@@ -427,7 +427,7 @@ interface_info_ioctl ()
struct listnode *node, *nnode;
struct interface *ifp;
- for (ALL_LIST_ELEMENTS (iflist, node, nnode, ifp))
+ for (ALL_LIST_ELEMENTS (vrf_iflist (VRF_DEFAULT), node, nnode, ifp))
{
if_get_index (ifp);
#ifdef SIOCGIFHWADDR
diff --git a/zebra/interface.c b/zebra/interface.c
index c3ce83dd4a..ca10387a84 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -39,6 +39,7 @@
#include "zebra_vrf.h"
#include "zebra/interface.h"
#include "zebra/rib.h"
+#include "zebra/rt.h"
#include "zebra/zserv.h"
#include "zebra/redistribute.h"
#include "zebra/debug.h"
@@ -744,8 +745,7 @@ if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
inet_pton (AF_INET, buf, &ipv4_ll);
ipv6_ll_address_to_mac(address, (u_char *)mac);
- netlink_neigh_update (add ? RTM_NEWNEIGH : RTM_DELNEIGH,
- ifp->ifindex, ipv4_ll.s_addr, mac, 6);
+ kernel_neigh_update (add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
}
static void
diff --git a/zebra/kernel_null.c b/zebra/kernel_null.c
index 5efc1e2a55..b90c6f57f9 100644
--- a/zebra/kernel_null.c
+++ b/zebra/kernel_null.c
@@ -60,7 +60,7 @@ int kernel_address_delete_ipv4 (struct interface *a, struct connected *b)
return 0;
}
-int netlink_neigh_update (int cmd, int ifindex, __u32 addr, char *lla, int llalen)
+int kernel_neigh_update (int a, int b, uint32_t c, char *d, int e)
{
return 0;
}
diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c
index b47ee787e8..23224dc241 100644
--- a/zebra/kernel_socket.c
+++ b/zebra/kernel_socket.c
@@ -240,7 +240,9 @@ static const struct message rtm_flag_str[] =
#ifdef RTF_CLONING
{RTF_CLONING, "CLONING"},
#endif /* RTF_CLONING */
+#ifdef RTF_XRESOLVE
{RTF_XRESOLVE, "XRESOLVE"},
+#endif /* RTF_XRESOLVE */
#ifdef RTF_LLINFO
{RTF_LLINFO, "LLINFO"},
#endif /* RTF_LLINFO */
@@ -925,7 +927,7 @@ rtm_read (struct rt_msghdr *rtm)
case ZEBRA_RIB_FOUND_EXACT: /* RIB RR == FIB RR */
zlog_debug ("%s: %s %s: done Ok",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p);
+ rib_lookup_and_dump (&p, VRF_DEFAULT);
return;
break;
}
@@ -938,18 +940,18 @@ rtm_read (struct rt_msghdr *rtm)
case ZEBRA_RIB_FOUND_EXACT:
zlog_debug ("%s: %s %s: desync: RR is still in RIB, while already not in FIB",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p);
+ rib_lookup_and_dump (&p, VRF_DEFAULT);
break;
case ZEBRA_RIB_FOUND_CONNECTED:
case ZEBRA_RIB_FOUND_NOGATE:
zlog_debug ("%s: %s %s: desync: RR is still in RIB, plus gate differs",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p);
+ rib_lookup_and_dump (&p, VRF_DEFAULT);
break;
case ZEBRA_RIB_NOTFOUND: /* RIB RR == FIB RR */
zlog_debug ("%s: %s %s: done Ok",
__func__, lookup (rtm_type_str, rtm->rtm_type), buf);
- rib_lookup_and_dump (&p);
+ rib_lookup_and_dump (&p, VRF_DEFAULT);
return;
break;
}
@@ -966,7 +968,7 @@ rtm_read (struct rt_msghdr *rtm)
*/
if (rtm->rtm_type == RTM_CHANGE)
rib_delete_ipv4 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags, &p,
- NULL, 0, VRF_DEFAULT, SAFI_UNICAST);
+ NULL, 0, VRF_DEFAULT, 0, SAFI_UNICAST);
if (rtm->rtm_type == RTM_GET
|| rtm->rtm_type == RTM_ADD
@@ -974,8 +976,8 @@ rtm_read (struct rt_msghdr *rtm)
rib_add_ipv4 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags,
&p, &gate.sin.sin_addr, NULL, 0, VRF_DEFAULT, 0, 0, 0, SAFI_UNICAST);
else
- rib_delete_ipv4 (ZEBRA_ROUTE_KERNEL, 0 zebra_flags,
- &p, &gate.sin.sin_addr, 0, VRF_DEFAULT, SAFI_UNICAST);
+ rib_delete_ipv4 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags,
+ &p, &gate.sin.sin_addr, 0, VRF_DEFAULT, 0, SAFI_UNICAST);
}
#ifdef HAVE_IPV6
if (dest.sa.sa_family == AF_INET6)
@@ -1008,16 +1010,16 @@ rtm_read (struct rt_msghdr *rtm)
*/
if (rtm->rtm_type == RTM_CHANGE)
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags, &p,
- NULL, 0, VRF_DEFAULT, SAFI_UNICAST);
+ NULL, 0, VRF_DEFAULT, 0, SAFI_UNICAST);
if (rtm->rtm_type == RTM_GET
|| rtm->rtm_type == RTM_ADD
|| rtm->rtm_type == RTM_CHANGE)
rib_add_ipv6 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags,
- &p, &gate.sin6.sin6_addr, ifindex, VRF_DEFAULT, 0, 0, SAFI_UNICAST);
+ &p, &gate.sin6.sin6_addr, ifindex, VRF_DEFAULT, 0, 0, 0, SAFI_UNICAST);
else
rib_delete_ipv6 (ZEBRA_ROUTE_KERNEL, 0, zebra_flags,
- &p, &gate.sin6.sin6_addr, ifindex, VRF_DEFAULT, SAFI_UNICAST);
+ &p, &gate.sin6.sin6_addr, ifindex, VRF_DEFAULT, 0, SAFI_UNICAST);
}
#endif /* HAVE_IPV6 */
}
diff --git a/zebra/rt.h b/zebra/rt.h
index 331df45c47..4515d56a38 100644
--- a/zebra/rt.h
+++ b/zebra/rt.h
@@ -33,6 +33,7 @@ extern int kernel_delete_ipv4 (struct prefix *, struct rib *);
extern int kernel_add_route (struct prefix_ipv4 *, struct in_addr *, int, int);
extern int kernel_address_add_ipv4 (struct interface *, struct connected *);
extern int kernel_address_delete_ipv4 (struct interface *, struct connected *);
+extern int kernel_neigh_update (int, int, uint32_t, char *, int);
#ifdef HAVE_IPV6
extern int kernel_add_ipv6 (struct prefix *, struct rib *);
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 0549900650..bd1c923506 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -1973,8 +1973,8 @@ _netlink_route_debug(
}
}
-int
-netlink_neigh_update (int cmd, int ifindex, __u32 addr, char *lla, int llalen)
+static int
+netlink_neigh_update (int cmd, int ifindex, uint32_t addr, char *lla, int llalen)
{
struct {
struct nlmsghdr n;
@@ -2392,6 +2392,12 @@ kernel_address_delete_ipv4 (struct interface *ifp, struct connected *ifc)
return netlink_address (RTM_DELADDR, AF_INET, ifp, ifc);
}
+int
+kernel_neigh_update (int add, int ifindex, uint32_t addr, char *lla, int llalen)
+{
+ return netlink_neigh_update(add ? RTM_NEWNEIGH : RTM_DELNEIGH, ifindex, addr,
+ lla, llalen);
+}
extern struct thread_master *master;
diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h
index 1d9280a295..80d035e839 100644
--- a/zebra/rt_netlink.h
+++ b/zebra/rt_netlink.h
@@ -41,9 +41,6 @@ nl_msg_type_to_str (uint16_t msg_type);
extern const char *
nl_rtproto_to_str (u_char rtproto);
-int
-netlink_neigh_update (int cmd, int ifindex, __u32 addr, char *lla, int llalen);
-
extern int interface_lookup_netlink (struct zebra_ns *zns);
extern int netlink_route_read (struct zebra_ns *zns);
diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c
index abeb87a427..ffb0d088a7 100644
--- a/zebra/rt_socket.c
+++ b/zebra/rt_socket.c
@@ -428,3 +428,10 @@ kernel_delete_ipv6 (struct prefix *p, struct rib *rib)
return route;
}
#endif /* HAVE_IPV6 */
+
+int
+kernel_neigh_update (int add, int ifindex, uint32_t addr, char *lla, int llalen)
+{
+ /* TODO */
+ return 0;
+}
diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c
index 931fc73e43..133b0fc2e9 100644
--- a/zebra/zebra_ptm.c
+++ b/zebra/zebra_ptm.c
@@ -31,6 +31,7 @@
#include "command.h"
#include "stream.h"
#include "ptm_lib.h"
+#include "network.h"
#include "buffer.h"
#include "zebra/zebra_ptm_redistribute.h"
#include "bfd.h"
@@ -383,9 +384,11 @@ zebra_ptm_socket_init (void)
ptm_cb.ptm_sock = -1;
- sock = socket (PF_UNIX, (SOCK_STREAM | SOCK_NONBLOCK), 0);
+ sock = socket (PF_UNIX, SOCK_STREAM, 0);
if (sock < 0)
return -1;
+ if (set_nonblocking(sock) < 0)
+ return -1;
/* Make server socket. */
memset (&addr, 0, sizeof (struct sockaddr_un));
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 8a2728a890..3aa9356fe6 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -119,13 +119,17 @@ _rnode_zlog(const char *_func, vrf_id_t vrf_id, struct route_node *rn, int prior
int
is_zebra_valid_kernel_table(u_int32_t table_id)
{
- if ((table_id > ZEBRA_KERNEL_TABLE_MAX) ||
- (table_id == RT_TABLE_UNSPEC) ||
+ if ((table_id > ZEBRA_KERNEL_TABLE_MAX))
+ return 0;
+
+#ifdef linux
+ if ((table_id == RT_TABLE_UNSPEC) ||
(table_id == RT_TABLE_LOCAL) ||
(table_id == RT_TABLE_COMPAT))
return 0;
- else
- return 1;
+#endif
+
+ return 1;
}
int