60 likes | 151 Views
http://www.cl.cam.ac.uk/~tgg22/metarouting. Metarouting. Suppose You Need a New Interior Routing Protocol?. Cross between OSPF and BGP Arbitrary inter-area topology Area-level distances Complete Path lengths Area paths. Wait until IETF and vendors NEVER define and implement it.
E N D
http://www.cl.cam.ac.uk/~tgg22/metarouting Metarouting
Suppose You Need a New Interior Routing Protocol? • Cross between OSPF and BGP • Arbitrary inter-area topology • Area-level distances • Complete Path lengths • Area paths • Wait until IETF and vendors NEVER define and implement it. • Use BGP as an IGP and hack something up that sort of approximates what you want and hope for the best. What can you do?
Or Use Metarouting! let path_vector_algebra : kind = {StrictlyIncreasing} algebra let dijkstra_algebra : kind = {StrictlyMonotonic, StrictlyIncreasing} algebra let shortest_path : dijkstra_algebra = int_addition<lower=1, upper=1000> let area_paths : path_vector_algebra = simple_paths< max_length=100, elements = strings<max_length = 50> > let destinations : {CopyOnly} algebra = copy_only(prefix<afi=ipv4, safi=unicast>)
… the interesting bits. let intra_area : dijkstra_algebra = lex < nlri : destinations, adistance : copy_only(shortest_paths), weight,distance : shortest_paths, path : copy_only(area_paths) > let inter_area : path_vector_algebra = route_maps( add_reject ( lex < nlri : destinations, aweight,adistance : shortest_paths, weight,distance : shortest_paths, link_info,path : area_paths > ) ) let my_igp : path_vector_algebra = label_union < outside : intra_area, inside : inter_area >
Now, configure the protocol… router london_linx { routing { algebra my_igp { neigbor 10.10.10.01 { import = inside { weight = 17; } mechanism = link_state{method=dijkstra}; } neigbor 10.10.20.01 { import = inside { weight = 21; } mechanism = path_vector{method=soft_state}; } neigbor 10.10.30.01 { import = outside { link_info = <local = "UK", peer = "EMEA">; if ("NYCdata_center" in path and adistance < 1000 ) then { aweight = 100; weight = 1; } else { aweight = 1; weight = 100; } } mechanism = path_vector{method=hard_state}; } } } }
Let Operators Decide • We don't know how to define generic IGPs for every network ----let the operators decide. • We don't know how to define IBGPs for every network ---let the operators decide. • We don't know how to fix EBGP or how to evolve it for changing requirements ---let the operators decide. • Operators can decide, if only they are given the right tools.