[cmaster-next] [PATCH] bgpd: Fix crashes when no default bgp instance is configured.

Martin Winter mwinter at opensourcerouting.org
Tue Dec 6 18:59:26 EST 2016


I think I haven’t seen a reply to this.

Feature or Bug?

Is this extra line “type=bgp, subtype=0” in “show ip bgp” 
necessary or
intentional or is this leftover debug code?

If needed, can you explain the “subtype=0” and what that means?
(And what other type then “type=bgp” is possible for a bgp route?)

- Martin

On 1 Dec 2016, at 15:02, Martin Winter wrote:

> On 1 Dec 2016, at 12:17, Lou Berger wrote:
>
>> Sigh -- been one of those days - Haven't had time to try to get 
>> Martin's
>> tests running -
>>
>> Martin,
>>     What extra lines are you referring to?
>
> See https://ci1.netdef.org/browse/QUAGGA-CMASTERNEXT66-TOPOU1604-8
>
> On a “show ip bgp” we get the extra line “type=bgp, 
> subtype=0”, i.e.:
>
>     10.101.3.0/24    172.16.1.1             100              0 65001 i
>       type=bgp, subtype=0
>
>
> For me they look like forgotten debug info. (type “bgp” is 
> something I
> assume on “show ip bgp” and subtype=0 means nothing to me)
>
> - Martin
>
>> On 12/1/2016 3:08 PM, Martin Winter wrote:
>>> On 1 Dec 2016, at 6:15, Donald Sharp wrote:
>>>> Lou -
>>>>
>>>> This fixes the crashes that are found by the new topotest testing
>>>> suite that Martin has created.  As stated in the commit note, I 
>>>> have
>>>> done no work to ensure that vnc is going to work correctly without 
>>>> a
>>>> default bgp instance.  We just no longer crash with these tests.
>>>> Additionally I see lots of unguarded debugs in the vnc code.  I
>>>> believe these need to be cleaned up as well in some manner, 
>>>> thoughts?
>>>>
>>>> Martin -
>>>>
>>>> The bgp tests still fail, from what appears to be display output
>>>> change.  How would you like to proceed here?  Send a patch to fix 
>>>> this
>>>> issue to the topotests github doohickey?
>>> I brought up this question before. I can fix the test to ignore 
>>> these
>>> extra lines, but I’m not sure this is the right way to do it.
>>>
>>> Maybe Lou (or someone else) can explain the need/use of this extra
>>> information and if this is intended or something forgotten from
>>> development
>>> and should be removed.
>>> (I worry about many other users doing screen scraping on this 
>>> output)
>>>
>>> - Martin
>>>
>>>
>>>> On Thu, Dec 1, 2016 at 9:11 AM, Donald Sharp
>>>> <sharpd at cumulusnetworks.com> wrote:
>>>>> The vnc code assumes that bgp must have a default instance.
>>>>> This code change checks to make sure that we do before
>>>>> proceeding.  It makes no assurances that vnc will behave
>>>>> correctly without a default instance.
>>>>>
>>>>> Signed-off-by: Donald Sharp <sharpd at cumulusnetworks.com>
>>>>> ---
>>>>>  bgpd/rfapi/rfapi_import.c   |  3 ++-
>>>>>  bgpd/rfapi/vnc_import_bgp.c | 17 +++++++++++++++--
>>>>>  2 files changed, 17 insertions(+), 3 deletions(-)
>>>>>
>>>>> diff --git a/bgpd/rfapi/rfapi_import.c b/bgpd/rfapi/rfapi_import.c
>>>>> index 8783024..77da4f9 100644
>>>>> --- a/bgpd/rfapi/rfapi_import.c
>>>>> +++ b/bgpd/rfapi/rfapi_import.c
>>>>> @@ -4414,7 +4414,8 @@ rfapiProcessPeerDown (struct peer *peer)
>>>>>     */
>>>>>
>>>>>    bgp = bgp_get_default ();     /* assume 1 instance for now */
>>>>> -  assert (bgp);
>>>>> +  if (!bgp)
>>>>> +    return;
>>>>>
>>>>>    h = bgp->rfapi;
>>>>>    assert (h);
>>>>> diff --git a/bgpd/rfapi/vnc_import_bgp.c
>>>>> b/bgpd/rfapi/vnc_import_bgp.c
>>>>> index 4215ce2..dc2640a 100644
>>>>> --- a/bgpd/rfapi/vnc_import_bgp.c
>>>>> +++ b/bgpd/rfapi/vnc_import_bgp.c
>>>>> @@ -208,12 +208,17 @@ prefix_bag_free (void *pb)
>>>>>  static void
>>>>>  print_rhn_list (const char *tag1, const char *tag2)
>>>>>  {
>>>>> -  struct bgp *bgp = bgp_get_default ();
>>>>> -  struct skiplist *sl = bgp->rfapi->resolve_nve_nexthop;
>>>>> +  struct bgp *bgp;
>>>>> +  struct skiplist *sl;
>>>>>    struct skiplistnode *p;
>>>>>    struct prefix_bag *pb;
>>>>>    int count = 0;
>>>>>
>>>>> +  bgp = bgp_get_default ();
>>>>> +  if (!bgp)
>>>>> +    return;
>>>>> +
>>>>> +  sl = bgp->frapi->resolve_nve_nexthop;
>>>>>    if (!sl)
>>>>>      {
>>>>>        zlog_debug ("%s: %s: RHN List is empty", (tag1 ? tag1 : 
>>>>> ""),
>>>>> @@ -251,6 +256,8 @@ vnc_rhnck (char *tag)
>>>>>    struct skiplistnode *p;
>>>>>
>>>>>    bgp = bgp_get_default ();
>>>>> +  if (!bgp)
>>>>> +    return;
>>>>>    sl = bgp->rfapi->resolve_nve_nexthop;
>>>>>
>>>>>    if (!sl)
>>>>> @@ -1798,6 +1805,9 @@ vnc_import_bgp_exterior_add_route_it (
>>>>>    struct bgp *bgp_default = bgp_get_default ();
>>>>>    afi_t afi = family2afi (prefix->family);
>>>>>
>>>>> +  if (!bgp_default)
>>>>> +    return;
>>>>> +
>>>>>    h = bgp_default->rfapi;
>>>>>    hc = bgp_default->rfapi_cfg;
>>>>>
>>>>> @@ -1992,6 +2002,9 @@ vnc_import_bgp_exterior_del_route (
>>>>>    afi_t afi = family2afi (prefix->family);
>>>>>    struct bgp *bgp_default = bgp_get_default ();
>>>>>
>>>>> +  if (!bgp_default)
>>>>> +    return;
>>>>> +
>>>>>    memset (&pfx_orig_nexthop, 0, sizeof (struct prefix));        
>>>>> /*
>>>>> keep valgrind happy */
>>>>>
>>>>>    h = bgp_default->rfapi;
>>>>> --
>>>>> 2.7.4
>>>>>




More information about the dev mailing list