zoukankan      html  css  js  c++  java
  • P4factory <Integration with Mininet>

    在终端A进入simple_router目录,make bm之后,执行

    ./run_demo.bash
    

    成功和Mininet进行协作:

    *** Creating network
    *** Adding hosts:
    h1 h2 
    *** Adding switches:
    s1 
    *** Adding links:
    (h1, s1) (h2, s1) 
    *** Configuring hosts
    h1 h2 
    *** Starting controller
    
    *** Starting 1 switches
    s1 Starting P4 switch s1
    /home/sdn/p4factory/targets/simple_router/behavioral-model --name s1 --dpid 0000000000000001 -i s1-eth1 -i s1-eth2 --listener 127.0.0.1:11111 --pd-server 127.0.0.1:22222 
    switch has been started
    
    **********
    h1
    default interface: eth0	10.0.0.10	00:04:00:00:00:00
    **********
    **********
    h2
    default interface: eth0	10.0.1.10	00:04:00:00:00:01
    **********
    Ready !
    *** Starting CLI:
    mininet> 
    

    同时,打开另外一个终端B,进入相同目录,安装下流表:

    Inserted entry with handle 0
    Inserted entry with handle 1
    Inserted entry with handle 0
    Inserted entry with handle 1
    Inserted entry with handle 0
    Inserted entry with handle 1
    

    在终端A下执行pingall命令及h1 ping h2命令:

    mininet> pingall
    *** Ping: testing ping reachability
    h1 -> h2 
    h2 -> h1 
    *** Results: 0% dropped (2/2 received)
    mininet> h1 ping h2
    PING 10.0.1.10 (10.0.1.10) 56(84) bytes of data.
    64 bytes from 10.0.1.10: icmp_seq=1 ttl=63 time=0.361 ms
    64 bytes from 10.0.1.10: icmp_seq=2 ttl=63 time=0.577 ms
    64 bytes from 10.0.1.10: icmp_seq=3 ttl=63 time=0.488 ms
    64 bytes from 10.0.1.10: icmp_seq=4 ttl=63 time=0.321 ms
    64 bytes from 10.0.1.10: icmp_seq=5 ttl=63 time=0.481 ms
    ^C
    --- 10.0.1.10 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4000ms
    rtt min/avg/max/mdev = 0.321/0.445/0.577/0.095 ms
    mininet> 
    

    成功!

    附simple_router p4src内容:
    simple_router.p4:

    /*
    Copyright 2013-present Barefoot Networks, Inc. 
    
    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 "includes/headers.p4"
    #include "includes/parser.p4"
    
    action _drop() {
        drop();
    }
    
    header_type routing_metadata_t {
        fields {
            nhop_ipv4 : 32;
        }
    }
    
    metadata routing_metadata_t routing_metadata;
    
    action set_nhop(nhop_ipv4, port) {
        modify_field(routing_metadata.nhop_ipv4, nhop_ipv4);
        modify_field(standard_metadata.egress_spec, port);
        add_to_field(ipv4.ttl, -1);
    }
    
    table ipv4_lpm {
        reads {
            ipv4.dstAddr : lpm;
        }
        actions {
            set_nhop;
            _drop;
        }
        size: 1024;
    }
    
    action set_dmac(dmac) {
        modify_field(ethernet.dstAddr, dmac);
    }
    
    table forward {
        reads {
            routing_metadata.nhop_ipv4 : exact;
        }
        actions {
            set_dmac;
            _drop;
        }
        size: 512;
    }
    
    action rewrite_mac(smac) {
        modify_field(ethernet.srcAddr, smac);
    }
    
    table send_frame {
        reads {
            standard_metadata.egress_port: exact;
        }
        actions {
            rewrite_mac;
            _drop;
        }
        size: 256;
    }
    
    control ingress {
        apply(ipv4_lpm);
        apply(forward);
    }
    
    control egress {
        apply(send_frame);
    }
    
    

    headers.p4:

    /*
    Copyright 2013-present Barefoot Networks, Inc. 
    
    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.
    */
    
    header_type ethernet_t {
        fields {
            dstAddr : 48;
            srcAddr : 48;
            etherType : 16;
        }
    }
    
    header_type ipv4_t {
        fields {
            version : 4;
            ihl : 4;
            diffserv : 8;
            totalLen : 16;
            identification : 16;
            flags : 3;
            fragOffset : 13;
            ttl : 8;
            protocol : 8;
            hdrChecksum : 16;
            srcAddr : 32;
            dstAddr: 32;
        }
    }
    

    parser.p4:

    /*
    Copyright 2013-present Barefoot Networks, Inc. 
    
    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.
    */
    
    parser start {
        return parse_ethernet;
    }
    
    #define ETHERTYPE_IPV4 0x0800
    
    header ethernet_t ethernet;
    
    parser parse_ethernet {
        extract(ethernet);
        return select(latest.etherType) {
            ETHERTYPE_IPV4 : parse_ipv4;
            default: ingress;
        }
    }
    
    header ipv4_t ipv4;
    
    field_list ipv4_checksum_list {
            ipv4.version;
            ipv4.ihl;
            ipv4.diffserv;
            ipv4.totalLen;
            ipv4.identification;
            ipv4.flags;
            ipv4.fragOffset;
            ipv4.ttl;
            ipv4.protocol;
            ipv4.srcAddr;
            ipv4.dstAddr;
    }
    
    field_list_calculation ipv4_checksum {
        input {
            ipv4_checksum_list;
        }
        algorithm : csum16;
        output_width : 16;
    }
    
    calculated_field ipv4.hdrChecksum  {
        verify ipv4_checksum;
        update ipv4_checksum;
    }
    
    parser parse_ipv4 {
        extract(ipv4);
        return ingress;
    }
    

    2016/10/14

  • 相关阅读:
    Redis基本数据类型与持久化
    Jpa创建筛选器自动忽略nul值进行搜索
    layui单元格换行
    form多个name相同表单处理
    layui合并单元格
    关于jpa example使用
    mui下拉菜单
    img在div中居中
    高德地图定位api使用
    【剑指offer】20.表示数值的字符串
  • 原文地址:https://www.cnblogs.com/qq952693358/p/5961783.html
Copyright © 2011-2022 走看看