def parse_and_run_test(program, pkt, init_state='start', init_ctrl='', debug=0): p4 = compile_string( program=program ) if not p4: print "Hmmm. Syntax error?" sys.exit(1) runtime = Runtime(p4) p4.check_self_consistent() err, bytes_used = runtime.parse_packet(pkt, init_state) if err: return (p4, err, bytes_used) if init_ctrl: run_control_function(p4, pkt, init_ctrl ) return (p4, '', bytes_used )
def process_pkts(p4, runtime, pkts=[], init_state='start', init_ctrl='', debug=0): total_bytes_used = 0 pkts_out = [] for pkt in pkts: err, bytes_used = runtime.parse_packet(pkt, init_state) if err: return (err, bytes_used, pkts_out) if init_ctrl: run_control_function( p4, pkt, init_ctrl ) pkt_out = p4.deparse_packet(pkt, bytes_used) pkts_out.append(pkt_out) total_bytes_used += bytes_used return ('', total_bytes_used, pkts_out )
def setup_tables_parse_and_run_test( program, setup_cmds=[], pkts=[], init_state='start', init_ctrl='', debug=0): p4, runtime = create_P4_and_runtime(program, debug=0) for cmd in setup_cmds: runtime.run_cmd(cmd) total_bytes_used = 0 for pkt in pkts: err, bytes_used = runtime.parse_packet(pkt, init_state) if err: return (p4, err, bytes_used) if init_ctrl: run_control_function(p4, pkt, init_ctrl ) total_bytes_used += bytes_used return (p4, '', total_bytes_used )