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