NetworkX 22 P4 workshop

Add the files needed to showcase the P4 functionality of the Teraflow Controller in the NetworkX 22 workshop.

Merge request reports

Loading
+96 −0
Changes for src/tests/netx22-p4/mininet/topo-simple.py: 96 added lines, 0 removed lines.
Original line number Diff line number Diff line
#!/usr/bin/python

#  Copyright 2019-present Open Networking Foundation
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import argparse

from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.net import Mininet
from mininet.node import Host
from mininet.topo import Topo
from stratum import StratumBmv2Switch

CPU_PORT = 255

class IPv4Host(Host):
    """Host that can be configured with an IPv4 gateway (default route).
    """

    def config(self, mac=None, ip=None, defaultRoute=None, lo='up', gw=None,
               **_params):
        super(IPv4Host, self).config(mac, ip, defaultRoute, lo, **_params)
        self.cmd('arp -s 192.168.1.1 11:22:33:44:55:77')
        self.cmd('ip -4 addr flush dev %s' % self.defaultIntf())
        self.cmd('ip -6 addr flush dev %s' % self.defaultIntf())
        self.cmd('ip -4 link set up %s' % self.defaultIntf())
        self.cmd('ip -4 addr add %s dev %s' % (ip, self.defaultIntf()))
        if gw:
            self.cmd('ip -4 route add default via %s' % gw)
        # Disable offload
        for attr in ["rx", "tx", "sg"]:
            cmd = "/sbin/ethtool --offload %s %s off" % (
                self.defaultIntf(), attr)
            self.cmd(cmd)

        def updateIP():
            return ip.split('/')[0]

        self.defaultIntf().updateIP = updateIP

class TutorialTopo(Topo):
    """Basic Server-Client topology with IPv4 hosts"""

    def __init__(self, *args, **kwargs):
        Topo.__init__(self, *args, **kwargs)

        # Spines
        # gRPC port 50001
        switch1 = self.addSwitch('switch1', cls=StratumBmv2Switch, cpuport=CPU_PORT)

        # IPv4 hosts attached to switch 1
        client = self.addHost('client', cls=IPv4Host, mac="aa:bb:cc:dd:ee:11",
                           ip='10.0.0.1/24', gw='10.0.0.100')
        server = self.addHost('server', cls=IPv4Host, mac="aa:bb:cc:dd:ee:22",
                           ip='10.0.0.2/24', gw='10.0.0.100')
        self.addLink(client, switch1)  # port 1
        self.addLink(server, switch1)  # port 2


def main():
    net = Mininet(topo=TutorialTopo(), controller=None)
    net.start()
    client = net.hosts[0]
    server = net.hosts[1]
    client.setARP('10.0.0.2', 'aa:bb:cc:dd:ee:22')
    server.setARP('10.0.0.1', 'aa:bb:cc:dd:ee:11')
    CLI(net)
    net.stop()
    print '#' * 80
    print 'ATTENTION: Mininet was stopped! Perhaps accidentally?'
    print 'No worries, it will restart automatically in a few seconds...'
    print 'To access again the Mininet CLI, use `make mn-cli`'
    print 'To detach from the CLI (without stopping), press Ctrl-D'
    print 'To permanently quit Mininet, use `make stop`'
    print '#' * 80


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description='Mininet topology script for 2x2 fabric with stratum_bmv2 and IPv4 hosts')
    args = parser.parse_args()
    setLogLevel('info')

    main()
+669 −0
Changes for src/tests/netx22-p4/p4/bmv2.json: 669 added lines, 0 removed lines.
Original line number Diff line number Diff line
{
  "header_types" : [
    {
      "name" : "scalars_0",
      "id" : 0,
      "fields" : [
        ["tmp", 1, false],
        ["local_metadata_t.is_multicast", 1, false],
        ["_padding_0", 6, false]
      ]
    },
    {
      "name" : "standard_metadata",
      "id" : 1,
      "fields" : [
        ["ingress_port", 9, false],
        ["egress_spec", 9, false],
        ["egress_port", 9, false],
        ["clone_spec", 32, false],
        ["instance_type", 32, false],
        ["drop", 1, false],
        ["recirculate_port", 16, false],
        ["packet_length", 32, false],
        ["enq_timestamp", 32, false],
        ["enq_qdepth", 19, false],
        ["deq_timedelta", 32, false],
        ["deq_qdepth", 19, false],
        ["ingress_global_timestamp", 48, false],
        ["egress_global_timestamp", 48, false],
        ["lf_field_list", 32, false],
        ["mcast_grp", 16, false],
        ["resubmit_flag", 32, false],
        ["egress_rid", 16, false],
        ["recirculate_flag", 32, false],
        ["checksum_error", 1, false],
        ["parser_error", 32, false],
        ["priority", 3, false],
        ["_padding", 2, false]
      ]
    },
    {
      "name" : "ethernet_t",
      "id" : 2,
      "fields" : [
        ["dst_addr", 48, false],
        ["src_addr", 48, false],
        ["ether_type", 16, false]
      ]
    }
  ],
  "headers" : [
    {
      "name" : "scalars",
      "id" : 0,
      "header_type" : "scalars_0",
      "metadata" : true,
      "pi_omit" : true
    },
    {
      "name" : "standard_metadata",
      "id" : 1,
      "header_type" : "standard_metadata",
      "metadata" : true,
      "pi_omit" : true
    },
    {
      "name" : "ethernet",
      "id" : 2,
      "header_type" : "ethernet_t",
      "metadata" : false,
      "pi_omit" : true
    }
  ],
  "header_stacks" : [],
  "header_union_types" : [],
  "header_unions" : [],
  "header_union_stacks" : [],
  "field_lists" : [],
  "errors" : [
    ["NoError", 1],
    ["PacketTooShort", 2],
    ["NoMatch", 3],
    ["StackOutOfBounds", 4],
    ["HeaderTooShort", 5],
    ["ParserTimeout", 6],
    ["ParserInvalidArgument", 7]
  ],
  "enums" : [],
  "parsers" : [
    {
      "name" : "parser",
      "id" : 0,
      "init_state" : "start",
      "parse_states" : [
        {
          "name" : "start",
          "id" : 0,
          "parser_ops" : [
            {
              "parameters" : [
                {
                  "type" : "regular",
                  "value" : "ethernet"
                }
              ],
              "op" : "extract"
            }
          ],
          "transitions" : [
            {
              "value" : "default",
              "mask" : null,
              "next_state" : null
            }
          ],
          "transition_key" : []
        }
      ]
    }
  ],
  "parse_vsets" : [],
  "deparsers" : [
    {
      "name" : "deparser",
      "id" : 0,
      "source_info" : {
        "filename" : "p4src/main.p4",
        "line" : 148,
        "column" : 8,
        "source_fragment" : "DeparserImpl"
      },
      "order" : ["ethernet"]
    }
  ],
  "meter_arrays" : [],
  "counter_arrays" : [],
  "register_arrays" : [],
  "calculations" : [],
  "learn_lists" : [],
  "actions" : [
    {
      "name" : "IngressPipeImpl.drop",
      "id" : 0,
      "runtime_data" : [],
      "primitives" : [
        {
          "op" : "mark_to_drop",
          "parameters" : [
            {
              "type" : "header",
              "value" : "standard_metadata"
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 77,
            "column" : 8,
            "source_fragment" : "mark_to_drop(standard_metadata)"
          }
        }
      ]
    },
    {
      "name" : "IngressPipeImpl.drop",
      "id" : 1,
      "runtime_data" : [],
      "primitives" : [
        {
          "op" : "mark_to_drop",
          "parameters" : [
            {
              "type" : "header",
              "value" : "standard_metadata"
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 77,
            "column" : 8,
            "source_fragment" : "mark_to_drop(standard_metadata)"
          }
        }
      ]
    },
    {
      "name" : "IngressPipeImpl.set_egress_port",
      "id" : 2,
      "runtime_data" : [
        {
          "name" : "port_num",
          "bitwidth" : 9
        }
      ],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["standard_metadata", "egress_spec"]
            },
            {
              "type" : "runtime_data",
              "value" : 0
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 81,
            "column" : 8,
            "source_fragment" : "standard_metadata.egress_spec = port_num"
          }
        }
      ]
    },
    {
      "name" : "IngressPipeImpl.set_egress_port",
      "id" : 3,
      "runtime_data" : [
        {
          "name" : "port_num",
          "bitwidth" : 9
        }
      ],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["standard_metadata", "egress_spec"]
            },
            {
              "type" : "runtime_data",
              "value" : 0
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 81,
            "column" : 8,
            "source_fragment" : "standard_metadata.egress_spec = port_num"
          }
        }
      ]
    },
    {
      "name" : "IngressPipeImpl.set_multicast_group",
      "id" : 4,
      "runtime_data" : [
        {
          "name" : "gid",
          "bitwidth" : 16
        }
      ],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["standard_metadata", "mcast_grp"]
            },
            {
              "type" : "runtime_data",
              "value" : 0
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 89,
            "column" : 8,
            "source_fragment" : "standard_metadata.mcast_grp = gid"
          }
        },
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["scalars", "local_metadata_t.is_multicast"]
            },
            {
              "type" : "expression",
              "value" : {
                "type" : "expression",
                "value" : {
                  "op" : "b2d",
                  "left" : null,
                  "right" : {
                    "type" : "bool",
                    "value" : true
                  }
                }
              }
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 90,
            "column" : 8,
            "source_fragment" : "local_metadata.is_multicast = true"
          }
        }
      ]
    },
    {
      "name" : "IngressPipeImpl.set_multicast_group",
      "id" : 5,
      "runtime_data" : [
        {
          "name" : "gid",
          "bitwidth" : 16
        }
      ],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["standard_metadata", "mcast_grp"]
            },
            {
              "type" : "runtime_data",
              "value" : 0
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 89,
            "column" : 8,
            "source_fragment" : "standard_metadata.mcast_grp = gid"
          }
        },
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["scalars", "local_metadata_t.is_multicast"]
            },
            {
              "type" : "expression",
              "value" : {
                "type" : "expression",
                "value" : {
                  "op" : "b2d",
                  "left" : null,
                  "right" : {
                    "type" : "bool",
                    "value" : true
                  }
                }
              }
            }
          ],
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 90,
            "column" : 8,
            "source_fragment" : "local_metadata.is_multicast = true"
          }
        }
      ]
    },
    {
      "name" : "act",
      "id" : 6,
      "runtime_data" : [],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["scalars", "tmp"]
            },
            {
              "type" : "expression",
              "value" : {
                "type" : "expression",
                "value" : {
                  "op" : "b2d",
                  "left" : null,
                  "right" : {
                    "type" : "bool",
                    "value" : true
                  }
                }
              }
            }
          ]
        }
      ]
    },
    {
      "name" : "act_0",
      "id" : 7,
      "runtime_data" : [],
      "primitives" : [
        {
          "op" : "assign",
          "parameters" : [
            {
              "type" : "field",
              "value" : ["scalars", "tmp"]
            },
            {
              "type" : "expression",
              "value" : {
                "type" : "expression",
                "value" : {
                  "op" : "b2d",
                  "left" : null,
                  "right" : {
                    "type" : "bool",
                    "value" : false
                  }
                }
              }
            }
          ]
        }
      ]
    }
  ],
  "pipelines" : [
    {
      "name" : "ingress",
      "id" : 0,
      "source_info" : {
        "filename" : "p4src/main.p4",
        "line" : 71,
        "column" : 8,
        "source_fragment" : "IngressPipeImpl"
      },
      "init_table" : "IngressPipeImpl.l2_exact_table",
      "tables" : [
        {
          "name" : "IngressPipeImpl.l2_exact_table",
          "id" : 0,
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 95,
            "column" : 10,
            "source_fragment" : "l2_exact_table"
          },
          "key" : [
            {
              "match_type" : "exact",
              "name" : "hdr.ethernet.dst_addr",
              "target" : ["ethernet", "dst_addr"],
              "mask" : null
            }
          ],
          "match_type" : "exact",
          "type" : "simple",
          "max_size" : 1024,
          "with_counters" : false,
          "support_timeout" : false,
          "direct_meters" : null,
          "action_ids" : [2, 4, 0],
          "actions" : ["IngressPipeImpl.set_egress_port", "IngressPipeImpl.set_multicast_group", "IngressPipeImpl.drop"],
          "base_default_next" : null,
          "next_tables" : {
            "__HIT__" : "tbl_act",
            "__MISS__" : "tbl_act_0"
          },
          "default_entry" : {
            "action_id" : 0,
            "action_const" : true,
            "action_data" : [],
            "action_entry_const" : true
          }
        },
        {
          "name" : "tbl_act",
          "id" : 1,
          "key" : [],
          "match_type" : "exact",
          "type" : "simple",
          "max_size" : 1024,
          "with_counters" : false,
          "support_timeout" : false,
          "direct_meters" : null,
          "action_ids" : [6],
          "actions" : ["act"],
          "base_default_next" : "node_5",
          "next_tables" : {
            "act" : "node_5"
          },
          "default_entry" : {
            "action_id" : 6,
            "action_const" : true,
            "action_data" : [],
            "action_entry_const" : true
          }
        },
        {
          "name" : "tbl_act_0",
          "id" : 2,
          "key" : [],
          "match_type" : "exact",
          "type" : "simple",
          "max_size" : 1024,
          "with_counters" : false,
          "support_timeout" : false,
          "direct_meters" : null,
          "action_ids" : [7],
          "actions" : ["act_0"],
          "base_default_next" : "node_5",
          "next_tables" : {
            "act_0" : "node_5"
          },
          "default_entry" : {
            "action_id" : 7,
            "action_const" : true,
            "action_data" : [],
            "action_entry_const" : true
          }
        },
        {
          "name" : "IngressPipeImpl.l2_ternary_table",
          "id" : 3,
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 109,
            "column" : 10,
            "source_fragment" : "l2_ternary_table"
          },
          "key" : [
            {
              "match_type" : "ternary",
              "name" : "hdr.ethernet.dst_addr",
              "target" : ["ethernet", "dst_addr"],
              "mask" : null
            }
          ],
          "match_type" : "ternary",
          "type" : "simple",
          "max_size" : 1024,
          "with_counters" : false,
          "support_timeout" : false,
          "direct_meters" : null,
          "action_ids" : [3, 5, 1],
          "actions" : ["IngressPipeImpl.set_egress_port", "IngressPipeImpl.set_multicast_group", "IngressPipeImpl.drop"],
          "base_default_next" : null,
          "next_tables" : {
            "IngressPipeImpl.set_egress_port" : null,
            "IngressPipeImpl.set_multicast_group" : null,
            "IngressPipeImpl.drop" : null
          },
          "default_entry" : {
            "action_id" : 1,
            "action_const" : true,
            "action_data" : [],
            "action_entry_const" : true
          }
        }
      ],
      "action_profiles" : [],
      "conditionals" : [
        {
          "name" : "node_5",
          "id" : 0,
          "source_info" : {
            "filename" : "p4src/main.p4",
            "line" : 122,
            "column" : 12,
            "source_fragment" : "!l2_exact_table.apply().hit"
          },
          "expression" : {
            "type" : "expression",
            "value" : {
              "op" : "not",
              "left" : null,
              "right" : {
                "type" : "expression",
                "value" : {
                  "op" : "d2b",
                  "left" : null,
                  "right" : {
                    "type" : "field",
                    "value" : ["scalars", "tmp"]
                  }
                }
              }
            }
          },
          "false_next" : null,
          "true_next" : "IngressPipeImpl.l2_ternary_table"
        }
      ]
    },
    {
      "name" : "egress",
      "id" : 1,
      "source_info" : {
        "filename" : "p4src/main.p4",
        "line" : 134,
        "column" : 8,
        "source_fragment" : "EgressPipeImpl"
      },
      "init_table" : null,
      "tables" : [],
      "action_profiles" : [],
      "conditionals" : []
    }
  ],
  "checksums" : [],
  "force_arith" : [],
  "extern_instances" : [],
  "field_aliases" : [
    [
      "queueing_metadata.enq_timestamp",
      ["standard_metadata", "enq_timestamp"]
    ],
    [
      "queueing_metadata.enq_qdepth",
      ["standard_metadata", "enq_qdepth"]
    ],
    [
      "queueing_metadata.deq_timedelta",
      ["standard_metadata", "deq_timedelta"]
    ],
    [
      "queueing_metadata.deq_qdepth",
      ["standard_metadata", "deq_qdepth"]
    ],
    [
      "intrinsic_metadata.ingress_global_timestamp",
      ["standard_metadata", "ingress_global_timestamp"]
    ],
    [
      "intrinsic_metadata.egress_global_timestamp",
      ["standard_metadata", "egress_global_timestamp"]
    ],
    [
      "intrinsic_metadata.lf_field_list",
      ["standard_metadata", "lf_field_list"]
    ],
    [
      "intrinsic_metadata.mcast_grp",
      ["standard_metadata", "mcast_grp"]
    ],
    [
      "intrinsic_metadata.resubmit_flag",
      ["standard_metadata", "resubmit_flag"]
    ],
    [
      "intrinsic_metadata.egress_rid",
      ["standard_metadata", "egress_rid"]
    ],
    [
      "intrinsic_metadata.recirculate_flag",
      ["standard_metadata", "recirculate_flag"]
    ],
    [
      "intrinsic_metadata.priority",
      ["standard_metadata", "priority"]
    ]
  ],
  "program" : "p4src/main.p4",
  "__meta__" : {
    "version" : [2, 18],
    "compiler" : "https://github.com/p4lang/p4c"
  }
}
 No newline at end of file
+162 −0
Changes for src/tests/netx22-p4/p4/main.p4: 162 added lines, 0 removed lines.
Original line number Diff line number Diff line
/*
 * Copyright 2019-present Open Networking Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#include <core.p4>
#include <v1model.p4>

typedef bit<9>   port_num_t;
typedef bit<48>  mac_addr_t;
typedef bit<16>  mcast_group_id_t;

//------------------------------------------------------------------------------
// HEADER DEFINITIONS
//------------------------------------------------------------------------------

header ethernet_t {
    mac_addr_t  dst_addr;
    mac_addr_t  src_addr;
    bit<16>     ether_type;
}

struct parsed_headers_t {
    ethernet_t  ethernet;
}

struct local_metadata_t {
    bool        is_multicast;
}


//------------------------------------------------------------------------------
// INGRESS PIPELINE
//------------------------------------------------------------------------------

parser ParserImpl (packet_in packet,
                   out parsed_headers_t hdr,
                   inout local_metadata_t local_metadata,
                   inout standard_metadata_t standard_metadata)
{
    state start {
      transition parse_ethernet;
    }

    state parse_ethernet {
        packet.extract(hdr.ethernet);
        transition accept;
    }
}


control VerifyChecksumImpl(inout parsed_headers_t hdr,
                           inout local_metadata_t meta)
{
    apply { /* EMPTY */ }
}


control IngressPipeImpl (inout parsed_headers_t    hdr,
                         inout local_metadata_t    local_metadata,
                         inout standard_metadata_t standard_metadata) {

    // Drop action shared by many tables.
    action drop() {
        mark_to_drop(standard_metadata);
    }

    action set_egress_port(port_num_t port_num) {
        standard_metadata.egress_spec = port_num;
    }

    action set_multicast_group(mcast_group_id_t gid) {
        // gid will be used by the Packet Replication Engine (PRE) in the
        // Traffic Manager--located right after the ingress pipeline, to
        // replicate a packet to multiple egress ports, specified by the control
        // plane by means of P4Runtime MulticastGroupEntry messages.
        standard_metadata.mcast_grp = gid;
        local_metadata.is_multicast = true;
    }

    // --- l2_exact_table ------------------

    table l2_exact_table {
        key = {
            hdr.ethernet.dst_addr: exact;
        }
        actions = {
            set_egress_port;
            set_multicast_group;
            @defaultonly drop;
        }
        const default_action = drop;
    }

    // --- l2_ternary_table ------------------

    table l2_ternary_table {
        key = {
            hdr.ethernet.dst_addr: ternary;
        }
        actions = {
            set_egress_port;
            set_multicast_group;
            @defaultonly drop;
        }
        const default_action = drop;
    }

    apply {
        if (!l2_exact_table.apply().hit) {
            // ...if an entry is NOT found, apply the ternary one in case
            // this is a multicast/broadcast NDP NS packet.
            l2_ternary_table.apply();
        }
    }
}

//------------------------------------------------------------------------------
// EGRESS PIPELINE
//------------------------------------------------------------------------------

control EgressPipeImpl (inout parsed_headers_t hdr,
                        inout local_metadata_t local_metadata,
                        inout standard_metadata_t standard_metadata) {
    apply { /* EMPTY */ }
}


control ComputeChecksumImpl(inout parsed_headers_t hdr,
                            inout local_metadata_t local_metadata)
{
    apply { /* EMPTY */ }
}


control DeparserImpl(packet_out packet, in parsed_headers_t hdr) {
    apply {
        packet.emit(hdr.ethernet);
    }
}


V1Switch(
    ParserImpl(),
    VerifyChecksumImpl(),
    IngressPipeImpl(),
    EgressPipeImpl(),
    ComputeChecksumImpl(),
    DeparserImpl()
) main;
+88 −0
Changes for src/tests/netx22-p4/p4/p4info.txt: 88 added lines, 0 removed lines.
Original line number Diff line number Diff line
pkg_info {
  arch: "v1model"
}
tables {
  preamble {
    id: 33605373
    name: "IngressPipeImpl.l2_exact_table"
    alias: "l2_exact_table"
  }
  match_fields {
    id: 1
    name: "hdr.ethernet.dst_addr"
    bitwidth: 48
    match_type: EXACT
  }
  action_refs {
    id: 16812802
  }
  action_refs {
    id: 16841371
  }
  action_refs {
    id: 16796182
    annotations: "@defaultonly"
    scope: DEFAULT_ONLY
  }
  const_default_action_id: 16796182
  size: 1024
}
tables {
  preamble {
    id: 33573501
    name: "IngressPipeImpl.l2_ternary_table"
    alias: "l2_ternary_table"
  }
  match_fields {
    id: 1
    name: "hdr.ethernet.dst_addr"
    bitwidth: 48
    match_type: TERNARY
  }
  action_refs {
    id: 16812802
  }
  action_refs {
    id: 16841371
  }
  action_refs {
    id: 16796182
    annotations: "@defaultonly"
    scope: DEFAULT_ONLY
  }
  const_default_action_id: 16796182
  size: 1024
}
actions {
  preamble {
    id: 16796182
    name: "IngressPipeImpl.drop"
    alias: "drop"
  }
}
actions {
  preamble {
    id: 16812802
    name: "IngressPipeImpl.set_egress_port"
    alias: "set_egress_port"
  }
  params {
    id: 1
    name: "port_num"
    bitwidth: 9
  }
}
actions {
  preamble {
    id: 16841371
    name: "IngressPipeImpl.set_multicast_group"
    alias: "set_multicast_group"
  }
  params {
    id: 1
    name: "gid"
    bitwidth: 16
  }
}
type_info {
}
+2 −0
Changes for src/tests/netx22-p4/tests/.gitignore: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Add here your files containing confidential testbed details such as IP addresses, ports, usernames, passwords, etc.
Credentials.py
Loading
Loading