We are having a BGP configuration problem which looks trivial but is not working the way we expect. I'm going to throw myself on the mercy of the court and ask for help.
There are three routers A, B and C. These are in ASa, ASb and ASc, respectively. B imports 10.1.64/19 from A and 10.1/16 from C. What we were expecting was for B's route to the /19 to be via A, just because this is the more specific route. However, the only route (both in the BGP and routing tables on B) is for the entire /16 via C.
Even if it isn't the best route, you should see the table of choices (in a Crisco) if you do 'sho ip bgp x.y.z.0'. You'll only see the most specific choices that match with that - you could also do a 'sho ip bgp' and watch (presumably 10/8 should be near the top) for 10.1.64.0's range to show up and see what choices are presented.
I have a hunch that what is happening is that B is saying "gee, I can get to the entire /16 by going through C, so why bother with A". If I'm not mistaken, this can be fixed by introducing local_pref for both peers. Could someone please comment on this?
No, what you're describing would be "anti-specificity" (a term I just made up). And there is no such concept. Remember: Routing is combinations of tens or hundreds of extremely simple concepts, hooked together in sometimes strange and wonderious ways. It always helps to play router. Either "ok, I have this packet, now what do I do with it? Well, the router will examine the source address and ..." or "Hmm, obviously the route hasn't made it into the IGP. Well, it's not in the BGP either. But it's in the remote router and that router has no outgoing IP or AS-PATH filter lists. Ah, the local router has an AS-PATH filter list with a mis-typed entry. Bingo".
Thanks,
Michael
Good luck, Avi