棋子 · 1 天前

protocol——命令行绘制协议图大杀器

编 者 按

在 github 上看到的一个开源工具 protocol,是采用 python 进行编写,通过打包成命令行的形式,主要用于通过 ASCII 码来绘制网络报文协议,效果颇为不错,在其源代码的基础上进行了改写,以适用于不同的应用场景。

protocol

但凡是接触过网络报文协议的人大概都对于这种类型的图并不陌生:

Image

在各类标准协议里不乏这样的协议字段定义。前段时间逛 github 发现一个比较不错的开源库:luismartingarcia/protocol,其采用 python 进行编写:An ASCII Header Generator for Network Protocols.感兴趣的小伙伴可以自行去 github 上搜索,其上面的说明文档也比较全面。protocol 内部预定义了大量的网络协议类型定义,其通过打包成命令行的形式可以便捷的绘制各种协议类型的字段分布图:

Image

除此之外,其也可以通过命令行传参的形式自定义协议类型:

Image

在使用时非常简单,通过传入字符串的形式来定义协议类型,每个协议字段通过协议名:比特数的形式进行定义,协议字段之间通过,进行分割。

protocol 工具适用起来还是非常便捷的,但其目的主要是为了实现网络报文协议,所以其遵循的是网络字节序,为了实现更通用,在原作者的基础上自行又添加了一些其他功能。

-lsb

由于 protocol 默认字节序为大尾端,为了更通用,扩展了一个命令行参数-lsb 用于实现小尾端:

Image

默认情况下仍为大尾端,通过添加-lsb 参数可以在显示时转换为小尾端,如此更加通用。

-ph

来看下下面的 demo:

Image

由于协议字段名称所用字符过多,导致无法显示完全,故以 BB.形式进行显示。

在 protocol 中,一个 bit 默认会对应两个占位符,这里以两个展位符为一个单位,通过给命令行新增一个-ph 参数用于指定每个字符需要的展位符个数,以便进行调整,使用效果如下:

Image

写在最后

扩展后的 protocol 目前暂存在个人的 github 目录上,感兴趣的小伙伴可以通过“阅读原文”的形式跳转到 github 链接。

END

作者:玉骐
文章来源:Spinal FPGA

推荐阅读

更多 IC 设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
19824
内容数
1305
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息