p4学习笔记-2

继续官网的教程

实施基本隧道

介绍

在本练习中,我们将为您在上一个分配中完成的IP路由器添加对基本隧道协议的支持。为此,我们将定义一个新的头类型来封装IP数据包并修改交换机以使用我们的新头执行路由。

新的头类型将包含一个协议ID,它指示要封装的数据包的类型,以及用于路由的目标ID。

第1步:运行(不完整的)入门代码


与之前的步骤相同,在shell中运行

make run

这里有一个问题,如果使用原始的basic_tunnel.p4来运行,编译时就会报错

AttributeError: Could not find 'MyIngress.myTunnel_exact' of type tables

../../utils/Makefile:27: recipe for target 'run' failed

说在运行../../utils/Makefile的27行时的run失败

我们来看看这一行让run什么了

run: build

        sudo python $(RUN_SCRIPT) -t $(TOPO) $(run_args)

好像看不出来什么,那报错的第一句说找不到MyIngress.myTunnel_exact

我们看到这个中间有个.的结构非常眼熟,应该是某个函数,也就是说缺失这个函数,那么我就去找了找原始版本的basic_tunnel.p4,里面确实没有这个函数。

ok那么接下来我们就把函数写出来,参考solution里的脚本,运行新的basic_tunnel.p4,就编译成功出现mininet的界面了。


每台交换机都根据目的IP地址进行转发。您的工作是更改交换机功能,以便他们使用我们的新隧道头来决定目标端口。

第2步:实施基本隧道

该basic_tunnel.p4文件包含基本IP路由器的实现。它还包含标记的注释TODO,指示您需要实现的功能。basic_tunnel.p4 如果数据包中不存在封装头,则交换机的完整实现将能够基于自定义封装头的内容转发以及执行正常的IP转发。

你的工作是做以下事情:

注意:添加了一个新的头类型myTunnel_t,其中包含两个16位字段:proto_id和dst_id。

注:该myTunnel_t头已被添加到headers结构。

TODO:更新解析器,根据以太网头中的字段提取myTunnel头或头。与myTunnel标头对应的etherType是。如果== (即0x0800),解析器还应该在头部之后提取头部。ipv4etherType0x1212ipv4myTunnelproto_idTYPE_IPV4

TODO:定义一个名为的新操作myTunnel_forward,它只是将出口端口(即总线的egress_spec字段standard_metadata)设置为控制平面提供的端口号。

TODO:定义一个名为的新表myTunnel_exact,它dst_id在myTunnel标题的字段上执行完全匹配。如果表中myTunnel_forward存在匹配项,则此表应调用该drop操作,否则应调用该操作。

TODO:如果标头有效,则更新控制块中的apply语句MyIngress以应用新定义的myTunnel_exact表myTunnel。否则,ipv4_lpm如果ipv4标头有效,则调用该表。

TODO:更新逆解析器发出的ethernet,然后myTunnel,然后ipv4头。请记住,如果解析器有效,则只会发出标头。标头的隐式有效性位由解析器在提取时设置。因此,无需在此处检查标头有效性。

TODO:为新定义的表添加静态规则,以便交换机为每个可能的值正确转发dst_id。请参阅下图,了解拓扑的端口配置以及我们如何为主机分配ID。对于此步骤,您需要将转发规则添加到sX-runtime.json文件中。


第3步:运行您的解决方案

按照步骤1中的说明进行操作。这次发送数据包 h1时h2尝试使用以下命令发送使用新myTunnel标头的数据包。

./send.py 10.0.2.2 "P4 is cool!" --dst_id 2

您应该看到h2包含MyTunnel标头的数据包到达。另请注意,更改目标IP地址不会阻止数据包到达h2。这是因为当MyTunnel报头在数据包中时,交换机不再使用IP报头进行路由。

Python Scapy本身不支持myTunnel头类型,因此我们提供了一个文件myTunnel_header.py,该文件为我们的新自定义头添加了对Scapy的支持。如果您有兴趣学习如何操作,请随意检查此文件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,176评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,928评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,252评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,700评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,717评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,231评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,608评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,572评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,117评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,137评论 3 344
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,280评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,908评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,597评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,067评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,202评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,784评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,308评论 2 365

推荐阅读更多精彩内容

  • 准备工作 在官网下载p4的虚拟机之后在virtualbox上运行 虚拟机是在https://p4.org/even...
    SmartSloth阅读 2,354评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,735评论 18 139
  • 夜半难入眠 岂是人不倦 奈何梦扰之 忆起从前事
    麦麦侠阅读 270评论 0 1
  • 权小王i阅读 229评论 0 0
  • 想远离妇科炎症怎么办? 妇科炎症是一种很难预防的疾病,初期都没有明显的症状,只有通过妇检才能发现,而一旦出现此现象...
    叫我7阅读 143评论 0 0