Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 //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;
 }
Esempio n. 3
0
            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);
            }
Esempio n. 4
0
            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);
            }
Esempio n. 5
0
                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);
                }
Esempio n. 6
0
            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;
            }
Esempio n. 7
0
                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);
                }
Esempio n. 8
0
 void Send_to_cpu(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.outCtrl.outputPort = CPU_OUT_PORT;
 }
Esempio n. 9
0
 public override void OnApply(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.Instance.Set_nhop(TopPipe_Args, ipv4_dest, port);
 }
Esempio n. 10
0
 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);
 }
Esempio n. 11
0
 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;
 }
Esempio n. 12
0
 public override void OnApply(TopPipe_Args args)
 {
     Send_to_cpu(args);
 }
Esempio n. 13
0
 public abstract void OnApply(TopPipe_Args args, ref IPv4Address nextHop);
Esempio n. 14
0
 void Set_dmac(TopPipe_Args TopPipe_Args, EthernetAddress dmac)
 {
     TopPipe_Args.headers.ethernet.dstAddr = dmac;
 }
Esempio n. 15
0
 public override void OnApply(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.Instance.Drop_action(TopPipe_Args);
 }
Esempio n. 16
0
 public override void OnApply(TopPipe_Args args)
 {
     Set_smac(args, smac);
 }
Esempio n. 17
0
 public override void OnApply(TopPipe_Args args)
 {
     Drop_action(args);
 }
Esempio n. 18
0
 //action Set_smac(EthernetAddress smac)
 // { headers.ethernet.srcAddr = smac; }
 private static void Set_smac(TopPipe_Args args, EthernetAddress smac)
 {
     args.headers.ethernet.srcAddr = smac;
 }
Esempio n. 19
0
 //action Set_dmac(EthernetAddress dmac)
 //{ headers.ethernet.dstAddr = dmac; }
 private static void Set_dmac(TopPipe_Args args, EthernetAddress dmac)
 {
     args.headers.ethernet.dstAddr = dmac;
 }
Esempio n. 20
0
 public override void OnApply(TopPipe_Args args)
 {
     NoAction(); // NOTE external action, so doesn't take TopPipe `args`
 }
Esempio n. 21
0
 public override void OnApply(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.Instance.Send_to_cpu(TopPipe_Args);
 }
Esempio n. 22
0
 public override void OnApply(TopPipe_Args TopPipe_Args)
 {
     NoAction();
 }
Esempio n. 23
0
 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);
 }
Esempio n. 24
0
 void Set_smac(TopPipe_Args TopPipe_Args, EthernetAddress smac)
 {
     TopPipe_Args.headers.ethernet.srcAddr = smac;
 }
Esempio n. 25
0
 void Drop_action(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.outCtrl.outputPort = DROP_PORT;
 }
Esempio n. 26
0
 public abstract void OnApply(TopPipe_Args TopPipe_Args);
Esempio n. 27
0
 //action Send_to_cpu()
 //    { outCtrl.outputPort = CPU_OUT_PORT; }
 private static void Send_to_cpu(TopPipe_Args args)
 {
     args.outCtrl.outputPort = CPU_OUT_PORT;
 }
Esempio n. 28
0
 public override void OnApply(TopPipe_Args TopPipe_Args)
 {
     TopPipe_Args.Instance.Set_smac(TopPipe_Args, smac);
 }
Esempio n. 29
0
 //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
 }