首页 > 其他分享 >P4 tutorials实验 - Qos, multicast

P4 tutorials实验 - Qos, multicast

时间:2023-03-11 16:23:31浏览次数:65  
标签:Qos hdr action multicast ipv4 tutorials TODO diffserv

P4 tutorials实验 - Qos, multicast

QoS

背景知识

  • Differentiated Services,区分服务,是基于类的、实现QoS的一种技术,diffserv对网络流量进行分类和管理

实验部分

实验链接:https://github.com/p4lang/tutorials/tree/master/exercises/qos

TODO1:将tos字段划分为6bit的diffserv字段和2bit的ecn字段

TODO 2:为不同的流类型,实现不同的action

/* TODO: Implement actions for different traffic classes */
    action default_forwarding(){
    	hdr.ipv4.diffserv = 0;//default forwarding type
    }
    action tcp_forwarding(){
    	hdr.ipv4.diffserv = 44;//Expedited Forwarding type
    }
    action udp_forwarding(){
    	hdr.ipv4.diffserv = 46;//Voice Admit type
    }
//还可以有其他的action,详见tips

TODO 3:在协议的基础上,设置hdr.ipv4.diffserv

/* TODO: set hdr.ipv4.diffserv on the basis of protocol */
    apply {
        if (hdr.ipv4.isValid()) {
            if(hdr.ipv4.protocol == IP_PROTOCOLS_TCP){
            	tcp_forwarding();
            }
            else if (hdr.ipv4.protocol == IP_PROTOCOLS_UDP){
            	udp_forwarding();
            }
            ipv4_lpm.apply();
        }
    }

TODO 4:将tos替换成diffserv和ecn

hdr.ipv4.diffserv,
hdr.ipv4.ecn,

重新编译运行,在h2处可以看到IP数据包中的tos值发生变化

UDP:tos字段为0xb9

TCP:tos字段为0xb1

tips

关于solution中各种action及其diffserv字段取值的来源:区分服务的各种类型以及对应数值

multicast

背景知识

  • multicast,多播,将单个消息发送至所有的多播组成员
  • 在多播组中,如果出现了ingress端口,那么数据包会在该端口的egress pipeline中被丢弃

实验部分

TODO 1:定义multicast操作,以将数据包多播至多播组1

    // TODO: define `multicast` action to multicast packets to group 1
    // Hint: Check v1model for multicast group
    action multicast(){
    	standard_metadata.mcast_grp = 1;
    }

分析:查阅v1model.p4代码,在100行处,可查看到关于多播组id所使用的元数据:

    /// multicast group id (key for the mcast replication table)
    @alias("intrinsic_metadata.mcast_grp")
    bit<16> mcast_grp;

同时,查看/exercises/multicast/sig-topo下的s1-runtime.json文件,可以看到原始对多播组的设置,即多播组id为1,组内成员的出端口分别为1,2,3

  "multicast_group_entries" : [
    {
      "multicast_group_id" : 1,
      "replicas" : [
        {
          "egress_port" : 1,
          "instance" : 1
        },
        {
          "egress_port" : 2,
          "instance" : 1
        },
        {
          "egress_port" : 3,
          "instance" : 1
        }
      ]
    }
  ]

TODO 2:在可用操作中添加multicast操作,TODO 3:将默认的丢包操作替换为multicast操作

		actions = {
            // TODO: add `multicast` action to the list of available actions
            multicast;
            mac_forward;
            drop;
        }
        size = 1024;
        // TODO : replace default drop action by multicast
        default_action = multicast;

此时执行pingall操作可以看到h1, h2, h3之间能互相通信,但无法与h4通信

TODO 4:在sig-topo/s1-runtime.json文件中,将4端口添加至多播组中

        {
          "egress_port" : 4,
          "instance" : 1
        }//注意上方需要添加“,”符号

再次编译运行,可以看到h4也可以进行通信:

tips

查看v1model的standard_metadata:https://github.com/p4lang/p4c/blob/main/p4include/v1model.p4

further observation

default_action被设置为multicast之后,原本的mac_forward对主机通信不起作用。具体验证方法为,将multicast.p4文件中的mac_forward操作删除,同时将mac_lookup表中,action部分的mac_forward;也删除,最后将sig-topo/s1-runtime.json文件中的"table_entries"内容全部清空后,重新编译运行,可以发现四台主机之间的通信不受影响。

标签:Qos,hdr,action,multicast,ipv4,tutorials,TODO,diffserv
From: https://www.cnblogs.com/CCchaos/p/17206316.html

相关文章

  • QOS(Quality of Service|服务质量)
    分类、标记、流量调节、拥塞管理、拥塞避免7、网络协议保留使用6、网络协议保留使用5、音频流量4、振铃流量3、视频流量2、高优先级1、中优先级0、BE(BestEffort|尽力而为)优......
  • webrtc QOS笔记二 音频buffer数据不足生成很多gap的问题
    webrtcQOS笔记二音频buffer数据不足生成很多gap的问题目录webrtcQOS笔记二音频buffer数据不足生成很多gap的问题记录个iusse.插入音频数据后,GetAudioInternal进......
  • ICMPv6 Multicast Listener Report Message v2
    No.TimeSourceDestinationProtocolInfo70.164795fe80::f8ae:aae:ee9a:bdc0ff02::16ICMPv6MulticastListenerReportMessagev2Frame......
  • 【QostgreSql】不同用户下数据库合并到新库
    场景根据业务需求,需要将user1下的dev数据库和user2下的auth数据库整合到user1的新库prod。经过PostgreSql服务器root用户登录上去发现没有postgres用户。进入home目录......
  • Linux PM QoS framework(2)_PM QoS class
    1.前言回顾上一篇文章(LinuxPMQoSframework(1)_概述和软件架构),PMQoSframework抽象出4个系统级别的QoSconstraint(统称为PMQoSclass),分别是cpu&dmalatency、network......
  • Linux PM QoS framework(3)_per-device PM QoS
    1.前言per-devicePMQoS是针对指定设备的QoSframework,背后的思考如下:1)resume_latency在RuntimePM的框架下,当device的引用计数减为0的时候,RPM会suspend该device。不......
  • Linux PM QoS framework(1)_概述和软件架构
    1.前言QOS为QualityOfService(服务质量)的简称,对PMQoS而言,表示Linuxkernel电源管理相关的服务质量。那到底什么是服务质量呢?我们知道,LinuxPM的主要功能,是节省功耗,但......
  • Coursera & free video Tutorials All In One
    Coursera&freevideoTutorialsAllInOne免费视频教程https://www.coursera.org/专业证书认证免费旁听https://www.coursera.org/in-progresshttps://ww......
  • c c++函数指针 Tutorials
    ​​http://www.newty.de/fpt/index.html​​Callbacks,functionpointersTheFunctionPointerTutorialsbyLarsHaendel:​​http://www.newty.de/fpt/index.html​......
  • RTL8380M/82M管理型交换机系统软件操作指南四:QoS/服务质量
    接下来对QoS进行详细的描述,主要包括以下七大内容:QoS概述、功能简介、拥塞管理、策略分类、调度方式、优先级映射配置、QoS端口配置.1.1QoS概述QoS(QualityofService,服务......