Hello, On Sun, 27 Jan 2008, Jarek Poplawski wrote:
> But comment#3 is "ambiguous"... It looks like you don't want to show > us too much... So, apparently you change the route, but it seems this > route exists; you have this: > 10.0.0.0/8 dev eth0 scope link > but probably also something like this: > default via 192.168.1.1 dev eth0 src 10.204.0.116 On replace the problem arises when same fib_info (priority, protocol, prefsrc, metrics, nexthops) is used in another route or routing table. In such cases single copy of structure is used with reference counter, all routes share pointer to such fib_info structure which saves memory when we have many routes using same gateway, for example. > So, I doubt there is any "real" change attempted here. It looks more > like a question if program should allow for changing the form of route > entries even if they mean the same, and if this should be reported as > error at all? But maybe I miss something... No, simply the last change in 2.6.24 is wrong to assume duplication is evident in fib_info reference counter. And such check is only on ip route replace/change. I'm appending brief FIB information for your reference: FIB - Forwarding Information Base - Routes are organized in routing tables - For "fib_hash" algorithm routing tables have 33 zones (for prefix lengths 0..32), routing lookup walks them from 32 to 0 to find a node containing all routing information - Zones are implemented as hash tables where nodes are hashed by key (prefix=network) because there can be lots of prefixes in a zone. - Nodes can be stored with other methods, eg. trie, where nodes are searched (we hope faster) by prefix and length, no zones are used in this case - Nodes have a list of aliases (tos+type+scope+fib_info ptr) sorted by decreasing TOS because TOS=0 must be a last hit when looking for route. type is unicast, local, prohibit, etc. scope is host, link, etc. - fib_info is a structure containing protocol (kernel, boot, zebra, etc), prefsrc, priority (metric), metrics, nexthop(s). Fallback routes have higher value for priority, they are used if more priority routes disappear or their nexthops are dead. - fib_info structures are organized in 2 global hash tables, one keyed by prefsrc and another by nexthop_count+protocol+prefsrc+priority - fib_info is a shared structure, different aliases can point to same fib_info, even aliases from different prefixes, from different routing tables. By this way if fib_info contains multipath route then many aliases share same route path scheduling context. - Nexthop contains gateway, output device, scope and weight. Weight is used for path scheduling where nexthops have relative priority compared to other nexthops in multipath route. - There can be many aliases with same tos, there can be alternative routes (aliases) with same tos and priority (metric) but only one alias with particular tos, type, scope and fib_info can exist to avoid duplicate alternative routes. - The operation to replace route includes replacing of alias. The alias in node (table -> prefix/len) is matched by tos and fib_info priority and they can not be changed. The parameters that are changed are type, scope and fib_info (except priority). * routing table * node (prefix/len) * alias (tos, type, scope) -> fib_info (priority, protocol, prefsrc, metrics) * nexthop (gateway, outdev, scope, weight) read '*' for 'many' and '->' for 'counted reference' Regards -- Julian Anastasov <[EMAIL PROTECTED]> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html