Age | Commit message (Collapse) | Author |
|
heasley: I've used this for a while to track usage.
|
|
It seems that there is a bug in ospf6d in ospf6_lsa_compare(): If LSA A
has sequence number smaller than 0x80000000 and LSA B has sequence
number larger than 0x80000000, ospf6_lsa_compare() returns that B is
more recent than A, although RFC says that sequence numbers should be
compared as signed numbers (0x8000001 smallest and 0x7FFFFFFF largest).
In ospfd, the function ospf_lsa_more_recent() has it right.
The problem appears when Quagga is used together with OSPFv3 in
development version of BIRD daemon ( http://bird.network.cz/ ),
which creates LSAs with maximum sequence number (0x7FFFFFFF)
as a part of flushing/premature aging LSA from OSPF area.
Because both daemons has different idea of which LSA instance
is more recent, it would lead to LSA storm.
|
|
|
|
The RTF_CLONING flag has been removed in FreeBSD 8.0 with arp-v2 (see
http://svn.freebsd.org/viewvc/base/stable/8/UPDATING?view=markup),
since it no longer has any meaning. This patch checks if RTF_CLONING
exists before using it.
|
|
|
|
|
|
Avoid a potential conflict with the C99 defines 'true' and 'false'
found in <stdbool.h> by choosing better variable names.
Also fix the calls to these ioctls, as described in <net/bpf.h>
in FreeBSD, NetBSD, and OpenBSD:
* BIOCGBLEN, BIOCIMMEDIATE, BIOCSSEESENT (the parameter should be
of type 'u_int')
* BIOCPROMISC (there should be no parameters)
|
|
|
|
Several bits of text can be local or are unused.
|
|
|
|
This code is only used one place and can be made local.
Gcc is smart enough to inline local functions if it wants to.
The function also has a big chunk of compatiablity code that
is no longer used; since quagga is now in a version control system
the source does not need to be used as a historical reference.
|
|
Apply changes from commit f304cb48f0d7d0ff8f36e7aca8293141a9fa9e60
to rib_queue_add.
Also includes spelling fixes.
|
|
* kernel_socket.c: (rtm_flag_dump) Use a const message pointer to be
in sync with commit ce0db9cb11c0bc2e7f89a7d042e50afa495556b4.
|
|
* ospf6_lsdb.c: (ospf6_new_ls_id) Unlock the current LSA when breaking
out of the ospf6_lsdb_*_head() / ospf6_lsdb_*_next() loop early. No
explicit unlocking is needed when all LSAs are looped through
because ospf6_lsdb_*_next() manages everything in that case.
|
|
|
|
The following syntax forms were not historically supported
by Quagga, although IOS accepted them w/o a problem:
no ip ospf cost <1-65535>
no ospf cost <1-65535>
no ip ospf cost <1-65535> A.B.C.D
no ospf cost <1-65535> A.B.C.D
From now on Quagga also supports these variants.
|
|
* rtadv.c: round up when calculating the link-layer address option length;
add padding to the option if needed to end on an octet boundary
|
|
* configure.ac: Bump to 0.99.15
|
|
* ospf6_lsa.c: (ospf6_lsa_age_current) arithmetical compares make no sense
in non-host order..
|
|
* bgp_network.c: (bgp_md5_set) Missing piece from earlier listener change
did not get ported from Vyatta code into upstream. The list
listener_sockets changed from (int *) to (struct bgp_listener *).
|
|
* prefix.c: (str2prefix_ipv6) inet_pton succesful return is presumed to be
1, rather than the "not zero" the man page describes - seemed fragile.
|
|
* testrib.conf: Example config file for testzebra
|
|
* test_main.c: If required arguments are missing, say that.
|
|
* if.c: (if_lookup_by_name) shouldn't crash just cause we got a NULL name
|
|
* ospf_ism.c (ospf_dr_eligible_routers) should test for priority > 0 instead
of != 0 as ospf_nbr_new () initially sets prio to -1
|
|
* ospf_zebra.c: (ospf_distribute_check_connected) check to make filter out
routes matching connected routes was matching against OSPF networks, which
can be far more general than the actual connected interfaces. Fix.
|
|
* */*main.c: (main) Current versions of Gcc warn if the return value for
daemon() is not checked. So add a simple test and exit on failure.
|
|
* bgp_network.c: (bgp_accept) The code in current git will crash as part of
the revised listener code is missing. The new listener thread code passes
a pointer to a bgp_listener structure, not the bgp pointer. The old code
always got a NULL for bgp pointer, so that is now hard coded.
|
|
* bgp_filter.h: Gcc complains the function prototype is not correct because
the function argument is using old K&R style.
|
|
Doing redistribute delete with full BGP table was taking
30 minutes, this drops it down to less than a second.
* ospf_lsa.c: (ospf_lsa_maxage) When flushing lots of entries the
performance is terrible because it looks up each LSA entry through
ospf_lsa_maxage_exist before deleting causing O(N^2) performance. Use a
new OSPF_LSA_MAXAGE flag instead of scan - and maintain it.
(ospf_lsa_maxage_exist) removed
(ospf_lsa_maxage_delete) maintain OSPF_LSA_MAXAGE flag
|
|
In some cases ospfd does not recalc the route table. This
happens when ospfd receives an old LSA which will trigger
recalc but the this recalc will fail because all interfaces
isn't up yet. Next LSA that is originated matches the old one
so no recalc will be performed. This problem has been observed
when there are only 2 ppp I/Fs in an area, both go down at the
same time, then they come up again with a few seconds apart.
* ospf_lsa.c: (ospf_{router,network}_lsa_install) avoid a needless scheduling
of SPF.
(ospf_lsa_different) fix bug in LSA comparison that would lead to the
described failure to schedule SPF.
|
|
* ospf_packet.c: make this message conditional on 'debug ospf event', as it
be easily triggered with, e.g., multiple subnets sharing same physical
network. E.g, see bug #532.
|
|
* bgpd.c: (peer_lookup_with_open) Bodged application of previous patch
meant the second loop around bgp->peer wasn't included in the loop
around bm->bgp as it was supposed to be. Fix..
|
|
* ospf_lsa.c: (link_info_set) Use %zd for size_t - C99 is old enough now.
Lots of similar warnings all over the code.
(ospf_lsa_translated_nssa_compare) Unused func - delete.
|
|
* ospf_{spf,lsa}.c: remove out of date comment; add comment on some
non-obvious code; Make note of a possible scaling problem.
|
|
* global: In struct ospf_path, change struct ospf_interface *oi to int
ifindex. It is unsafe to reference *oi as an ospf interface can be
deleted under your feet. Use a weak reference instead.
|
|
* ospf_spf.c: (ospf_get_next_link) One must check the vertex type, Router or
Network, to select type link to match against. Link type 1 has neighbour
router ID in link_id and link type 2 has IP address of DR. Since router
id may have same value as an existing IP address one risks matching a
router ID against a DR.
|
|
|
|
* bgp_attr.c: (bgp_mp_reach_parse) There are some interoperability issues
for MBGP (particularly IPv4 multicast NLRI) between different
implementations. In order to get some next hops to install correctly in
the BGP tables, it appears to be necessary to copy the multiprotocol next
hop into the base next hop field. This is related to differences in RFC
2283 and RFC 2858.
|
|
* HACKING: Update to reflect git stripping []'s, and to allow for more
discretion to avoid redundancy in commit messages.
|
|
This function will return the interface for the first matching
remote address for PtP i/f's. That won't work for multiple
unnumbered i/f's as these may all have the same address.
Pass in the struct interface pointer, ifp, to find the
correct set of oi's to search in. This also reduces the
size of the search list, making it faster.
* ospfd/ospf_interface.c: Add struct interface * param to
ospf_if_lookup_recv_if() to select the right list to search in.
* ospfd/ospf_interface.h: ditto.
* ospfd/ospf_packet.c: Pass new ifp argument to ospf_if_lookup_recv_if()
|
|
Makes it possible to run OSPF on multiple PtP interfaces
with the same remote address.
* ospfd/ospf_interface.c: Export ospf_if_table_lookup().
* ospfd/ospf_interface.h: ditto.
* ospfd/ospfd.c: (ospf_network_run_interface) Use ospf_if_table_lookup() to
determine whether OSPF is already configured for a subnet and interface.
|
|
|
|
* bgpd.c: (peer_lookup) Search through all BGP instances for matches, not just
the default instance, if no specific instance is given.
(peer_lookup_with_open) same.
|
|
* bgp_fsm.c: I have found an fd leak in bgpd that is caused by the 'new'
Clearing state. I've been seeing it from hold timer failures, but it can
also be triggered by other things.
When Hold_Timer_expired fires in Established state, a notify is sent and
BGP_Stop event queued. The fsm then transitions into Clearing state.
That is the problem; When the BGP_Stop event is serviced, the state table
says to ignore it while in Clearing. Thus bgp_stop is not called and the
fd leaks. Previously the peer would be in Idle state, which correctly
handles the BGP_Stop event.
Fix by making bgp_stop safe to call from Clearing state, without losing
ClearingCompleted events, and then ensuring it is called prior to
transition from Clearing->Idle.
|
|
* kernel_null.c: we're pretending to add an address, so
set IFC_REAL. If this isn't done, calling into the 'got address
from kernel' half of zebra will implicitly-withdraw the ifc, which
could cause a crash in test_zebra.c.
|
|
|
|
AS_CONFED_SEQUENCE segment should always be deleted when prepending
(e.g. with a route-map) an AS_SEQUENCE segment to an AS path. Otherwise,
AS_CONFED_SEQUENCE will not be deleted later when updating EBGP peers (since
it is not the leftmost segment) and will leak outside the confederation.
|
|
This patch implements BGP confederation error handling in Quagga as described
in RFC5065, paragraph 5.
* bgp_aspath.c: (aspath_confed_check, aspath_left_confed_check) new functions
* bgp_attr.c: (bgp_attr_aspath_check) apply previous and NOTIFY if there's
a problem.
|
|
*/*: ifp->flags is 64 bit unsigned which can not be handled by %l on 32
bit architectures - requires %ll and the appropriate cast.
|