public void apply(Parsed_packet headers_capture, ref Parsed_packet headers, P4ToCSharp.Library.error parseError, InControl inCtrl, out OutControl outCtrl) { outCtrl = new OutControl(); headers = headers_capture; TopPipe_Args TopPipe_Args = new TopPipe_Args(this, headers, parseError, inCtrl, outCtrl); if ((TopPipe_Args.parseError != error.NoError)) { TopPipe_Args.Instance.Drop_action(TopPipe_Args); return; } TopPipe_Args.Instance.ipv4_match.apply(TopPipe_Args); if ((TopPipe_Args.outCtrl.outputPort == DROP_PORT)) { return; } TopPipe_Args.Instance.check_ttl.apply(TopPipe_Args); if ((TopPipe_Args.outCtrl.outputPort == CPU_OUT_PORT)) { return; } TopPipe_Args.Instance.dmac.apply(TopPipe_Args); if ((TopPipe_Args.outCtrl.outputPort == DROP_PORT)) { return; } TopPipe_Args.Instance.smac.apply(TopPipe_Args); }
//action Set_nhop(out IPv4Address nextHop, // NOTE directioned parameters must be bound in the actions list specification (so not by api?) // IPv4Address ipv4_dest, // NOTE directionless parameters bound by control plane // PortId port) //{ // nextHop = ipv4_dest; // headers.ip.ttl = headers.ip.ttl - 1; // outCtrl.outputPort = port; //} private static void Set_nhop(TopPipe_Args args, ref IPv4Address nextHop, IPv4Address ipv4_dest, PortId port) { nextHop = ipv4_dest; args.headers.ip.ttl = new bit8((byte)(args.headers.ip.ttl.Value - 1)); args.outCtrl.outputPort = port; }
public apply_result apply(TopPipe_Args TopPipe_Args) { apply_result result; ActionBase RA = lookup?[TopPipe_Args.headers.ip.dstAddr]; if (RA == null) { result = new apply_result(false, default_action.Action); RA = default_action; } else { result = new apply_result(true, RA.Action); } RA.OnApply(TopPipe_Args); return(result); }
public apply_result apply(TopPipe_Args TopPipe_Args) { apply_result result; ActionBase RA = lookup?[TopPipe_Args.outCtrl.outputPort]; if (RA == null) { result = new apply_result(false, default_action.Action); RA = default_action; } else { result = new apply_result(true, RA.Action); } RA.OnApply(TopPipe_Args); return(result); }
public apply_result apply(TopPipe_Args args) { apply_result result; ActionBase RA = table.Lookup(args.outCtrl.outputPort); if (RA == null) { result = new apply_result(false, default_action.Action); } else { result = new apply_result(true, RA.Action); } //evaluate_and_copy_in_RA_args(RA); //execute(RA); //copy_out_RA_args(RA); //copy_out_table_args(args); RA.OnApply(args); return(result); }
public void apply(ref Parsed_packet headers, core.error parseError, // parser error InControl inCtrl, // input port out OutControl outCtrl) { outCtrl = new OutControl(); // NOTE instantiate all out params to satisfy csc TopPipe_Args args = new TopPipe_Args(headers, parseError, inCtrl, outCtrl); IPv4Address nextHop = new IPv4Address(); // Have to instantiate ref params, more compact than using out params and instantiating at bottom if (parseError != error.NoError) { Drop_action(args); return; } ipv4_match.apply(args, ref nextHop); if (args.outCtrl.outputPort == DROP_PORT) { return; } check_ttl.apply(args); if (args.outCtrl.outputPort == CPU_OUT_PORT) { return; } dmac.apply(args, nextHop); if (args.outCtrl.outputPort == DROP_PORT) { return; } smac.apply(args); // Copy params back out headers = args.headers; outCtrl = args.outCtrl; }
public apply_result apply(TopPipe_Args args, ref IPv4Address nextHop) { // FIXME sort out copy-semantics for args apply_result result; // Would chain lookups here if multiple fields ActionBase RA = table.Lookup(args.headers.ip.dstAddr); if (RA == null) { result = new apply_result(false, default_action.Action); } else { result = new apply_result(true, RA.Action); } //evaluate_and_copy_in_RA_args(RA); //execute(RA); //copy_out_RA_args(RA); //copy_out_table_args(args); RA.OnApply(args, ref nextHop); return(result); }
void Send_to_cpu(TopPipe_Args TopPipe_Args) { TopPipe_Args.outCtrl.outputPort = CPU_OUT_PORT; }
public override void OnApply(TopPipe_Args TopPipe_Args) { TopPipe_Args.Instance.Set_nhop(TopPipe_Args, ipv4_dest, port); }
public override void OnApply(TopPipe_Args args, ref IPv4Address nextHop) { // FIXME this action doesn't actually set the out param - how do we handle that? Drop_action(args); }
void Set_nhop(TopPipe_Args TopPipe_Args, IPv4Address ipv4_dest, PortId port) { TopPipe_Args.Instance.nextHop = ipv4_dest; TopPipe_Args.headers.ip.ttl = (TopPipe_Args.headers.ip.ttl - 1); TopPipe_Args.outCtrl.outputPort = port; }
public override void OnApply(TopPipe_Args args) { Send_to_cpu(args); }
public abstract void OnApply(TopPipe_Args args, ref IPv4Address nextHop);
void Set_dmac(TopPipe_Args TopPipe_Args, EthernetAddress dmac) { TopPipe_Args.headers.ethernet.dstAddr = dmac; }
public override void OnApply(TopPipe_Args TopPipe_Args) { TopPipe_Args.Instance.Drop_action(TopPipe_Args); }
public override void OnApply(TopPipe_Args args) { Set_smac(args, smac); }
public override void OnApply(TopPipe_Args args) { Drop_action(args); }
//action Set_smac(EthernetAddress smac) // { headers.ethernet.srcAddr = smac; } private static void Set_smac(TopPipe_Args args, EthernetAddress smac) { args.headers.ethernet.srcAddr = smac; }
//action Set_dmac(EthernetAddress dmac) //{ headers.ethernet.dstAddr = dmac; } private static void Set_dmac(TopPipe_Args args, EthernetAddress dmac) { args.headers.ethernet.dstAddr = dmac; }
public override void OnApply(TopPipe_Args args) { NoAction(); // NOTE external action, so doesn't take TopPipe `args` }
public override void OnApply(TopPipe_Args TopPipe_Args) { TopPipe_Args.Instance.Send_to_cpu(TopPipe_Args); }
public override void OnApply(TopPipe_Args TopPipe_Args) { NoAction(); }
public override void OnApply(TopPipe_Args args, ref IPv4Address nextHop) // FIXME need to bind parameters from control plane... { Set_nhop(args, ref nextHop, ipv4_dest, port); }
void Set_smac(TopPipe_Args TopPipe_Args, EthernetAddress smac) { TopPipe_Args.headers.ethernet.srcAddr = smac; }
void Drop_action(TopPipe_Args TopPipe_Args) { TopPipe_Args.outCtrl.outputPort = DROP_PORT; }
public abstract void OnApply(TopPipe_Args TopPipe_Args);
//action Send_to_cpu() // { outCtrl.outputPort = CPU_OUT_PORT; } private static void Send_to_cpu(TopPipe_Args args) { args.outCtrl.outputPort = CPU_OUT_PORT; }
public override void OnApply(TopPipe_Args TopPipe_Args) { TopPipe_Args.Instance.Set_smac(TopPipe_Args, smac); }
//action Drop_action() //{ outCtrl.outputPort = DROP_PORT; } private static void Drop_action(TopPipe_Args TopPipe_Args) // NOTE these params are ALL from TopPipe, not the action itself... { TopPipe_Args.outCtrl.outputPort = DROP_PORT; // NOTE will need to add `arg.` to relevant identifiers }