Exemplo 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);
        }
Exemplo n.º 2
0
            public override void process_packet(int in_port, byte[] packet_data)
            {
                // Provided by the user - NOT generated
                var inCtrl = new InControl()
                {
                    inputPort = (PortId)in_port
                };
                var       outCtrl  = new OutControl();
                packet_in packetIn = new packet_in(packet_data);
                H         headers  = null; // FIXME is this okay?
                error     err      = error.NoError;

                try
                {
                    p.apply(packetIn, out headers); // FIXME where does the error come from? Catch?
                } catch (error ex)
                {
                    err = ex;
                }
                map.apply(ref headers, err, inCtrl, out outCtrl);
                packet_out packetOut = new packet_out();

                d.apply(ref headers, packetOut);

                this.send_packet((int)outCtrl.outputPort, packetOut.RawData, packetOut.Length);
            }
Exemplo n.º 3
0
                }                               // out

                public TopPipe_Args(Parsed_packet headers, core.error parseError, InControl inCtrl, OutControl outCtrl)
                {
                    this.headers    = headers;
                    this.parseError = parseError;
                    this.inCtrl     = inCtrl;
                    this.outCtrl    = outCtrl;
                }
Exemplo n.º 4
0
 public TopPipe_Args(TopPipe Instance, Parsed_packet headers, P4ToCSharp.Library.error parseError, InControl inCtrl, OutControl outCtrl)
 {
     this.Instance   = Instance;
     this.headers    = headers;
     this.parseError = parseError;
     this.inCtrl     = inCtrl;
     this.outCtrl    = outCtrl;
 }
Exemplo n.º 5
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;
            }