Line data Source code
1 : #include "../fd_config.h" 2 : #include "../fd_action.h" 3 : 4 : #include "../../../waltz/ip/fd_fib4.h" 5 : #include "../../../waltz/mib/fd_dbl_buf.h" 6 : #include "../../../waltz/mib/fd_netdev_tbl.h" 7 : #include "../../../waltz/neigh/fd_neigh4_map.h" 8 : 9 : #include <net/if.h> 10 : #include <stdio.h> 11 : #include <stdlib.h> /* aligned_alloc */ 12 : 13 : void 14 : netconf_cmd_fn( args_t * args, 15 0 : config_t * config ) { 16 0 : (void)args; 17 : 18 0 : fd_topo_t * topo = &config->topo; 19 0 : ulong wksp_id = fd_topo_find_wksp( topo, "netbase" ); 20 0 : if( FD_UNLIKELY( wksp_id==ULONG_MAX ) ) { 21 0 : FD_LOG_ERR(( "netbase workspace not found" )); 22 0 : } 23 0 : fd_topo_wksp_t * netbase = &topo->workspaces[ wksp_id ]; 24 : 25 0 : ulong tile_id = fd_topo_find_tile( topo, "netlnk", 0UL ); 26 0 : if( FD_UNLIKELY( tile_id==ULONG_MAX ) ) { 27 0 : FD_LOG_ERR(( "netlnk tile not found" )); 28 0 : } 29 0 : fd_topo_tile_t * tile = &topo->tiles[ tile_id ]; 30 : 31 0 : fd_topo_join_workspace( topo, netbase, FD_SHMEM_JOIN_MODE_READ_ONLY ); 32 : 33 0 : puts( "\nINTERFACES\n" ); 34 0 : fd_dbl_buf_t * netdev_buf = fd_dbl_buf_join( fd_topo_obj_laddr( topo, tile->netlink.netdev_dbl_buf_obj_id ) ); 35 0 : FD_TEST( netdev_buf ); 36 0 : void * netdev_copy = aligned_alloc( fd_netdev_tbl_align(), fd_dbl_buf_obj_mtu( netdev_buf ) ); 37 0 : fd_dbl_buf_read( netdev_buf, fd_dbl_buf_obj_mtu( netdev_buf ), netdev_copy, NULL ); 38 0 : fd_netdev_tbl_join_t netdev[1]; 39 0 : FD_TEST( fd_netdev_tbl_join( netdev, netdev_copy ) ); 40 0 : fd_netdev_tbl_fprintf( netdev, stdout ); 41 0 : fd_netdev_tbl_leave( netdev ); 42 0 : free( netdev_copy ); 43 0 : fd_dbl_buf_leave( netdev_buf ); 44 : 45 0 : puts( "\nIPv4 ROUTES (main)\n" ); 46 0 : fd_fib4_t * fib4_main = fd_fib4_join( fd_topo_obj_laddr( topo, tile->netlink.fib4_main_obj_id ) ); 47 0 : FD_TEST( fib4_main ); 48 0 : fd_fib4_fprintf( fib4_main, stdout ); 49 0 : fd_fib4_leave( fib4_main ); 50 : 51 0 : puts( "\nIPv4 ROUTES (local)\n" ); 52 0 : fd_fib4_t * fib4_local = fd_fib4_join( fd_topo_obj_laddr( topo, tile->netlink.fib4_local_obj_id ) ); 53 0 : FD_TEST( fib4_local ); 54 0 : fd_fib4_fprintf( fib4_local, stdout ); 55 0 : fd_fib4_leave( fib4_local ); 56 : 57 0 : printf( "\nNEIGHBOR TABLE (%.16s)\n\n", tile->netlink.neigh_if ); 58 0 : fd_neigh4_hmap_t neigh4[1]; 59 0 : FD_TEST( fd_neigh4_hmap_join( neigh4, fd_topo_obj_laddr( topo, tile->netlink.neigh4_obj_id ), fd_topo_obj_laddr( topo, tile->netlink.neigh4_ele_obj_id ) ) ); 60 0 : fd_neigh4_hmap_fprintf( neigh4, stdout ); 61 0 : fd_neigh4_hmap_leave( neigh4 ); 62 : 63 0 : puts( "" ); 64 0 : } 65 : 66 : action_t fd_action_netconf = { 67 : .name = "netconf", 68 : .args = NULL, 69 : .fn = netconf_cmd_fn, 70 : .require_config = 1, 71 : .perm = NULL, 72 : .description = "Print network configuration", 73 : };