diff options
author | Neale Ranns <nranns@cisco.com> | 2016-11-22 17:07:28 +0000 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-01-27 19:53:46 +0000 |
commit | 32e1c010b0c34fd0984f7fc45fae648a182025c5 (patch) | |
tree | 06a440bdc9dc039ad0dcf866acc9e10a6ea5e2e7 /src/vnet/mcast/mcast_test.c | |
parent | 6f692d6e5a8ffc920a728372ef773199bc5466c0 (diff) |
IP Multicast FIB (mfib)
- IPv[46] mfib tables with support for (*,G/m), (*,G) and (S,G) exact and longest prefix match
- Replication represented via a new replicate DPO.
- RPF configuration and data-plane checking
- data-plane signals sent to listening control planes.
The functions of multicast forwarding entries differ from their unicast conterparts, so we introduce a new mfib_table_t and mfib_entry_t objects. However, we re-use the fib_path_list to resolve and build the entry's output list. the fib_path_list provides the service to construct a replicate DPO for multicast.
'make tests' is added to with two new suites; TEST=mfib, this is invocation of the CLI command 'test mfib' which deals with many path add/remove, flag set/unset scenarios, TEST=ip-mcast, data-plane forwarding tests.
Updated applications to use the new MIFB functions;
- IPv6 NS/RA.
- DHCPv6
unit tests for these are undated accordingly.
Change-Id: I49ec37b01f1b170335a5697541c8fd30e6d3a961
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/mcast/mcast_test.c')
-rw-r--r-- | src/vnet/mcast/mcast_test.c | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/src/vnet/mcast/mcast_test.c b/src/vnet/mcast/mcast_test.c deleted file mode 100644 index be80c9fc..00000000 --- a/src/vnet/mcast/mcast_test.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2015 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include <vnet/mcast/mcast.h> - -#include <vlib/vlib.h> -#include <vnet/vnet.h> -#include <vnet/pg/pg.h> -#include <vppinfra/error.h> -#include <vnet/ip/lookup.h> -#include <vnet/ip/ip4_packet.h> -#include <vnet/ip/icmp46_packet.h> -#include <vnet/ip/ip4.h> -#include <vnet/mcast/mcast.h> - -typedef struct { - /* convenience */ - vlib_main_t * vlib_main; - vnet_main_t * vnet_main; - mcast_main_t * mcast_main; -} mcast_test_main_t; - -mcast_test_main_t mcast_test_main; -vlib_node_registration_t mcast_prep_node; -vlib_node_registration_t mcast_recycle_node; - -static clib_error_t * -mcast_test_command_fn (vlib_main_t * vm, - unformat_input_t * input, - vlib_cli_command_t * cmd) -{ - /* u8 *rewrite_data; */ - /* mcast_test_main_t * mtm = &mcast_test_main; */ - /* mcast_main_t * mcm = mtm->mcast_main; */ - /* ip_adjacency_t adj; */ - /* u32 adj_index; */ - /* mcast_group_t * g; */ - /* mcast_group_member_t * member; */ - /* unformat_input_t _line_input, * line_input = &_line_input; */ - /* ip4_address_t dst_addr, zero; */ - /* ip4_main_t * im = &ip4_main; */ - /* ip_lookup_main_t * lm = &im->lookup_main; */ - - /* /\* Get a line of input. *\/ */ - /* if (! unformat_user (input, unformat_line_input, line_input)) */ - /* return 0; */ - - /* pool_get (mcm->groups, g); */ - /* memset (g, 0, sizeof (*g)); */ - - /* while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT) */ - /* { */ - /* vnet_hw_interface_t *hw; */ - /* u32 next, sw_if_index; */ - - /* if (unformat (line_input, "%U", unformat_vnet_sw_interface, */ - /* mtm->vnet_main, &sw_if_index)) */ - /* { */ - /* vec_add2 (g->members, member, 1); */ - /* member->tx_sw_if_index = sw_if_index; */ - - /* hw = vnet_get_sup_hw_interface (mtm->vnet_main, */ - /* sw_if_index); */ - - /* next = vlib_node_add_next (mtm->vlib_main, */ - /* mcast_prep_node.index, */ - /* hw->output_node_index); */ - - /* /\* Required to be the same next index... *\/ */ - /* vlib_node_add_next_with_slot (mtm->vlib_main, */ - /* mcast_recycle_node.index, */ - /* hw->output_node_index, next); */ - /* member->prep_and_recycle_node_next_index = next; */ - /* } */ - /* else */ - /* { */ - /* return unformat_parse_error (line_input); */ - /* } */ - /* } */ - - /* if (vec_len (g->members) == 0) */ - /* { */ - /* pool_put (mcm->groups, g); */ - /* vlib_cli_output (vm, "no group members specified"); */ - /* return 0; */ - /* } */ - - - /* adj.lookup_next_index = IP_LOOKUP_NEXT_REWRITE; */ - /* adj.mcast_group_index = g - mcm->groups; */ - /* rewrite_data = format (0, "abcdefg"); */ - - /* vnet_rewrite_for_tunnel */ - /* (mtm->vnet_main, */ - /* (u32)~0, /\* tx_sw_if_index, we dont know yet *\/ */ - /* ip4_rewrite_node.index, */ - /* mcast_prep_node.index, */ - /* &adj.rewrite_header, */ - /* rewrite_data, vec_len(rewrite_data)); */ - - /* ip_add_adjacency (lm, &adj, 1 /\* one adj *\/, */ - /* &adj_index); */ - - /* dst_addr.as_u32 = clib_host_to_net_u32 (0x0a000002); */ - /* zero.as_u32 = 0; */ - - /* ip4_add_del_route_next_hop (im, */ - /* IP4_ROUTE_FLAG_ADD, */ - /* &dst_addr, */ - /* 24 /\* mask width *\/, */ - /* &zero /\* no next hop *\/, */ - - /* 0, // next hop sw if index */ - /* 1, // weight */ - /* adj_index, */ - /* 0 /\* explicit fib 0 *\/); */ - - return 0; -} - -static VLIB_CLI_COMMAND (mcast_test_command) = { - .path = "test mc", - .short_help = "test mc", - .function = mcast_test_command_fn, -}; - -clib_error_t *mcast_test_init (vlib_main_t *vm) -{ - mcast_test_main_t * mtm = &mcast_test_main; - - mtm->vlib_main = vm; - mtm->vnet_main = vnet_get_main(); - mtm->mcast_main = &mcast_main; - - return 0; -} - -VLIB_INIT_FUNCTION (mcast_test_init); |