diff options
author | Neale Ranns <neale.ranns@cisco.com> | 2018-05-01 05:17:55 -0700 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-06-18 13:31:39 +0000 |
commit | 097fa66b986f06281f603767d321ab13ab6c88c3 (patch) | |
tree | ed052819615d08ee4bd0afbc34de7e64e4598105 /src/vnet/mpls/mpls.api | |
parent | 39baa32186fd3e4b20d9f58afbbfe7b8daebed62 (diff) |
fib: fib api updates
Enhance the route add/del APIs to take a set of paths rather than just one.
Most unicast routing protocols calcualte all the available paths in one
run of the algorithm so updating all the paths at once is beneficial for the client.
two knobs control the behaviour:
is_multipath - if set the the set of paths passed will be added to those
that already exist, otherwise the set will replace them.
is_add - add or remove the set
is_add=0, is_multipath=1 and an empty set, results in deleting the route.
It is also considerably faster to add multiple paths at once, than one at a time:
vat# ip_add_del_route 1.1.1.1/32 count 100000 multipath via 10.10.10.11
100000 routes in .572240 secs, 174751.80 routes/sec
vat# ip_add_del_route 1.1.1.1/32 count 100000 multipath via 10.10.10.12
100000 routes in .528383 secs, 189256.54 routes/sec
vat# ip_add_del_route 1.1.1.1/32 count 100000 multipath via 10.10.10.13
100000 routes in .757131 secs, 132077.52 routes/sec
vat# ip_add_del_route 1.1.1.1/32 count 100000 multipath via 10.10.10.14
100000 routes in .878317 secs, 113854.12 routes/sec
vat# ip_route_add_del 1.1.1.1/32 count 100000 multipath via 10.10.10.11 via 10.10.10.12 via 10.10.10.13 via 10.10.10.14
100000 routes in .900212 secs, 111084.93 routes/sec
Change-Id: I416b93f7684745099c1adb0b33edac58c9339c1a
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Signed-off-by: Ole Troan <ot@cisco.com>
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
Diffstat (limited to 'src/vnet/mpls/mpls.api')
-rw-r--r-- | src/vnet/mpls/mpls.api | 129 |
1 files changed, 60 insertions, 69 deletions
diff --git a/src/vnet/mpls/mpls.api b/src/vnet/mpls/mpls.api index ca1aa3a8513..5d85812807a 100644 --- a/src/vnet/mpls/mpls.api +++ b/src/vnet/mpls/mpls.api @@ -15,6 +15,7 @@ option version = "1.1.0"; import "vnet/fib/fib_types.api"; +import "vnet/ip/ip_types.api"; /** \brief Bind/Unbind an MPLS local label to an IP prefix. i.e. create a per-prefix label entry. @@ -36,28 +37,24 @@ autoreply define mpls_ip_bind_unbind u32 mb_label; u32 mb_ip_table_id; u8 mb_is_bind; - u8 mb_is_ip4; - u8 mb_address_length; - u8 mb_address[16]; + vl_api_prefix_t mb_prefix; }; +typeonly define mpls_tunnel +{ + u32 mt_sw_if_index; + u32 mt_tunnel_index; + u8 mt_l2_only; + u8 mt_is_multicast; + u8 mt_n_paths; + vl_api_fib_path_t mt_paths[mt_n_paths]; +}; define mpls_tunnel_add_del { u32 client_index; u32 context; - u32 mt_sw_if_index; u8 mt_is_add; - u8 mt_l2_only; - u8 mt_is_multicast; - u8 mt_next_hop_proto_is_ip4; - u8 mt_next_hop_weight; - u8 mt_next_hop_preference; - u8 mt_next_hop[16]; - u8 mt_next_hop_n_out_labels; - u32 mt_next_hop_via_label; - u32 mt_next_hop_sw_if_index; - u32 mt_next_hop_table_id; - vl_api_fib_mpls_label_t mt_next_hop_out_label_stack[mt_next_hop_n_out_labels]; + vl_api_mpls_tunnel_t mt_tunnel; }; /** \brief Reply for MPLS tunnel add / del request @@ -90,12 +87,7 @@ define mpls_tunnel_dump manual_endian manual_print define mpls_tunnel_details { u32 context; - u32 mt_sw_if_index; - u32 mt_tunnel_index; - u8 mt_l2_only; - u8 mt_is_multicast; - u32 mt_count; - vl_api_fib_path_t mt_paths[mt_count]; + vl_api_mpls_tunnel_t mt_tunnel; }; /** \brief MPLS Route Add / del route @@ -107,68 +99,71 @@ manual_endian manual_print define mpls_tunnel_details is not set by the client, then VPP will generate something meaningfull. */ +typeonly define mpls_table +{ + u32 mt_table_id; + u8 mt_name[64]; +}; autoreply define mpls_table_add_del { u32 client_index; u32 context; - u32 mt_table_id; u8 mt_is_add; - u8 mt_name[64]; + vl_api_mpls_table_t mt_table; }; -/** \brief MPLS Route Add / del route +/** \brief Dump MPLS fib table @param client_index - opaque cookie to identify the sender - @param context - sender context, to match reply w/ request +*/ +define mpls_table_dump +{ + u32 client_index; + u32 context; +}; + +define mpls_table_details +{ + u32 context; + vl_api_mpls_table_t mt_table; +}; + +/** \brief MPLS Route @param mr_label - The MPLS label value @param mr_eos - The End of stack bit + @param mr_eos_proto - If EOS then this is the DPO packect's proto post pop @param mr_table_id - The MPLS table-id the route is added in - @param mr_classify_table_index - If this is a classify route, - this is the classify table index - create them @param mr_is_add - Is this a route add or delete - @param mr_is_classify - Is this route result a classify @param mr_is_multicast - Is this a multicast route + @param mr_n_paths - The number of paths + @param mr_paths - The paths +*/ +typeonly define mpls_route +{ + u32 mr_table_id; + u32 mr_label; + u8 mr_eos; + u8 mr_eos_proto; + u8 mr_is_multicast; + u8 mr_n_paths; + vl_api_fib_path_t mr_paths[mr_n_paths]; +}; + +/** \brief MPLS Route Add / del route + @param client_index - opaque cookie to identify the sender + @param context - sender context, to match reply w/ request + @param mr_table_id - The MPLS table-id the route is added in + @param mr_is_add - Is this a route add or delete @param mr_is_multipath - Is this route update a multipath - i.e. is this a path addition to an existing route - @param mr_is_resolve_host - Recurse resolution constraint via a host prefix - @param mr_is_resolve_attached - Recurse resolution constraint via attached prefix - @param mr_is_interface_rx - Interface Receive path - @param mr_is_interface_rx - RPF-ID Receive path. The next-hop interface - is used as the RPF-ID - @param mr_next_hop_proto - The next-hop protocol, of type dpo_proto_t - @param mr_next_hop_weight - The weight, for UCMP - @param mr_next_hop[16] - the nextop address - @param mr_next_hop_sw_if_index - the next-hop SW interface - @param mr_next_hop_table_id - the next-hop table-id (if appropriate) - @param mr_next_hop_n_out_labels - the number of labels in the label stack - @param mr_next_hop_out_label_stack - the next-hop output label stack, outer most first - @param next_hop_via_label - The next-hop is a resolved via a local label + @param mr_route - The Route */ define mpls_route_add_del { u32 client_index; u32 context; - u32 mr_label; - u8 mr_eos; - u32 mr_table_id; - u32 mr_classify_table_index; u8 mr_is_add; - u8 mr_is_classify; - u8 mr_is_multicast; u8 mr_is_multipath; - u8 mr_is_resolve_host; - u8 mr_is_resolve_attached; - u8 mr_is_interface_rx; - u8 mr_is_rpf_id; - u8 mr_next_hop_proto; - u8 mr_next_hop_weight; - u8 mr_next_hop_preference; - u8 mr_next_hop[16]; - u8 mr_next_hop_n_out_labels; - u32 mr_next_hop_sw_if_index; - u32 mr_next_hop_table_id; - u32 mr_next_hop_via_label; - vl_api_fib_mpls_label_t mr_next_hop_out_label_stack[mr_next_hop_n_out_labels]; + vl_api_mpls_route_t mr_route; }; define mpls_route_add_del_reply @@ -181,10 +176,11 @@ define mpls_route_add_del_reply /** \brief Dump MPLS fib table @param client_index - opaque cookie to identify the sender */ -define mpls_fib_dump +define mpls_route_dump { u32 client_index; u32 context; + vl_api_mpls_table_t table; }; /** \brief mpls FIB table response @@ -194,15 +190,10 @@ define mpls_fib_dump @param count - the number of fib_path in path @param path - array of of fib_path structures */ -manual_endian manual_print define mpls_fib_details +manual_endian manual_print define mpls_route_details { u32 context; - u32 table_id; - u8 table_name[64]; - u8 eos_bit; - u32 label; - u32 count; - vl_api_fib_path_t path[count]; + vl_api_mpls_route_t mr_route; }; /** \brief Enable or Disable MPLS on and interface |