static void dump_filter_strict( void ) { oxm_matches *match = create_oxm_matches(); append_oxm_match_in_port( match, 1 ); append_oxm_match_eth_type( match, 0x0800 ); append_oxm_match_vlan_vid( match, 0, 0 ); append_oxm_match_ipv4_src( match, 0x0a000001, 0 ); append_oxm_match_ipv4_dst( match, 0x0a000002, 0 ); append_oxm_match_ip_dscp( match, 0 ); append_oxm_match_ip_ecn( match, 0 ); append_oxm_match_ip_proto( match, 0x6 ); append_oxm_match_tcp_src( match, 1024 ); append_oxm_match_tcp_dst( match, 2048 ); static handler_data data; data.match = match; snprintf( data.service_name, sizeof( data.service_name ), "dumper" ); data.service_name[ sizeof( data.service_name ) - 1 ] = '\0'; data.strict = true; bool ret = dump_packetin_filter( data.match, OFP_HIGH_PRIORITY, data.service_name, data.strict, dump_filters, &data ); if ( ret == false ) { error( "Failed to dump packetin filters ( ret = %d ).", ret ); } else { add_periodic_event_callback( 5, timeout, &data ); } }
static void dump_filter_strict( void ) { struct ofp_match match; memset( &match, 0, sizeof( struct ofp_match ) ); match.wildcards = OFPFW_DL_SRC | OFPFW_DL_DST; match.in_port = 1; match.dl_type = 0x0800; match.dl_vlan = 0xffff; match.dl_vlan_pcp = 0; match.nw_src = 0x0a000001; match.nw_dst = 0x0a000002; match.nw_tos = 0; match.nw_proto = 0x0a; match.tp_src = 1024; match.tp_dst = 2048; static handler_data data; data.match = match; snprintf( data.service_name, sizeof( data.service_name ), "dumper" ); data.service_name[ sizeof( data.service_name ) - 1 ] = '\0'; data.strict = true; bool ret = dump_packetin_filter( data.match, UINT16_MAX, data.service_name, data.strict, dump_filters, &data ); if ( ret == false ) { error( "Failed to dump packetin filters ( ret = %d ).", ret ); } else { add_periodic_event_callback( 5, timeout, &data ); } }
static void add_filter_completed( int status, void *user_data ) { if ( status != PACKETIN_FILTER_OPERATION_SUCCEEDED ) { error( "Failed to add a packetin filter." ); } info( "A packetin filter was added successfully." ); struct ofp_match *match = user_data; char *service_name = xstrdup( get_trema_name() ); bool ret = dump_packetin_filter( *match, UINT16_MAX, service_name, true, dump_filters, user_data ); xfree( service_name ); if ( ret == false ) { error( "Failed to dump a packetin filter." ); } ret = dump_packetin_filter( *match, UINT16_MAX, NULL, false, dump_and_delete_filters, user_data ); if ( ret == false ) { error( "Failed to dump all packetin filters." ); } }
static void dump_filter( void ) { oxm_matches *match = create_oxm_matches(); static handler_data data; data.match = match; snprintf( data.service_name, sizeof( data.service_name ), "dumper" ); data.service_name[ sizeof( data.service_name ) - 1 ] = '\0'; data.strict = false; bool ret = dump_packetin_filter( data.match, UINT16_MAX, data.service_name, data.strict, dump_filters, &data ); if ( ret == false ) { error( "Failed to dump packetin filters ( ret = %d ).", ret ); } else { add_periodic_event_callback( 5, timeout, &data ); } }