在ns-3原始的Openflow下,困了好久。。。。直到OFswitch13登场
钟帅
@FrankShuai
FrankShuai 发布的帖子
-
MCC简介与试水
MCC是microchip开发的对单片机进行可视化编程的一个插件,可以避开对寄存器的操作带来的麻烦
步骤:-
启动MPLAB X IDE v4.20。
-
如果存在任何已打开的项目,则在“Projects”(项目)窗口中右键单击项目名称,然后选
择“Close”(关闭)将其关闭。 -
使用:File(文件)> Open Project...(打开项目...),打开以下位置中的项目:
MASTERs\C19H02\LAB1\lab1.X。 -
使用Window > MPLAB Code Configurator v3 > MPLAB Code Configurator v3打开
MCC:打开/关闭。或者,可以按屏幕顶部的“MCC”按钮:
-
可能会出现一个让您保存MCC配置文件的窗口。单击“Save”(保存)。
-
底部中间窗口应显示“Pin Manager:Grid View”(“引脚管理器:网格视图”)选项卡。
单击端口B下的引脚4(RB4),以选择用作按钮的输入引脚。该引脚连接到HPC Curiosity
板上的S1按钮。 -
单击端口A下的引脚7(RA7),以选择用于LED的输出引脚。该引脚连接到HPC Curiosity
板上的LED D5。
网格视图窗口现在应如下所示:
-
单击“Resource Manager”(资源管理器)选项卡(左上角)中的Project Resources(项
目资源)> System(系统)> Pin Module(引脚模块),导航至“Pin Module”简单设置
窗口。 -
在RA7的“Custom Name”(自定义名称)字段中输入“LED1”,为RB4输入“S1”。
-
取消选中RA7上的“Analog”(Analog)复选框。“Pin Module”视图应如下所示:
-
单击“Project Resources”选项卡中的“Generate”(生成)按钮,以生成代码。
-
切换至左上角窗口中的“Projects”选项卡并展开“Source Files”(源文件)文件夹,以打
开main.c。 -
将以下代码添加到while(1)循环中:
LED1_LAT = !S1_GetValue();
- 使用屏幕顶部的“Make and Program Device Main Project”(编译并编程器件主项目)按
钮编译和加载项目。
- 按S1按钮并观察LED,对项目进行测试。
-
-
NS-3下的OpenFlow仿真(四)——OpenFlow1.3简介
OpenFlow1.3概述
1 前言:
建议先阅读OpenFlow的WhitePaper,了解OpenFlow基本结构与思想。该概述基于OpenFlow1.3标准,鉴于笔者水平有限,如发现错误,望海涵。下述所有专有名词都使用英文,有利于读者阅读其他文献以及源代码。
2 名词简述:
Flow Table:用于对进入交换机的包转发的表,一个交换机中有允许有多个Flow Table和一个Group Table;
Group Table:算是一种特殊的Flow Table,它可以实现对包的多发,全发等操作。Flow Table不会对包进行复制,只能单转单。
Pipeline:在此处特指包在Flow Table与Group Table中转发的过程。
OpenFlow Channel:特指交换机与Controller的连接通路。
Flow Entry:这是包的转发规则,每一个Flow Table可以有多条Flow Entries。
Metedata:Metadata是用于在Flow Table与Flow Table之间转发包是传递信息的寄存器。
Instruction:当包与Flow Entry匹配成功时,需要执行的操作,一般包括Pipeline Processing和Action。
Pipeline Processing:即包在Pipeline中转发。
Action:即对包执行的操作,例如将包输出到哪个端口,修改包的TTL(生存时间)等。
Action Set:这是与每一个包绑定的,在包与Flow Entry匹配成功后,执行Instruction时,Instruction中的Action会存放在Action Set中,当包结束Pipeline processing时执行。
Meter:用于测量和控制包速率的机制。
Datapath:每一个交换机与controller的连接就是一个Datapath。3 OpenFlow Port:
3.1 Standard Port:
包括Physical Port,Logical Port和Local Port(Local port将不详述);
3.2 Physical Port:
指的是实体交换机存在的结构,它是交换机的出口和入口。
3.3 Logical Port:
是针对Flow Table而言,由于Flow Table可以转发给其他的Flow Table,并不一定是Physical Port,这些的Port选项都称为Logical Port。
3.4 Reserved Port:
是针对OpenFlow协议而言,OpenFlow协议保留一部分字域用于特殊用途,如:多发,全发等;和IP地址的广播,私有地址类似。
下面是OpenFlow的Reserved Port选项:
All:将包复制并转发给所有的Standard Port;
CONTROLLER:将包转发给Controller(注意Controller并不是Port口的一个)
TABLE:将刚进入交换机的包转发给FlowTable,这是PipeLine的开始。
IN_PORT:一般所有转给输入口的包都会被扔掉,除非使用In_Port;
ANY:通配任何Port,即对Port没有要求。
注意:此处只列出部分,以方便读者理解。4 OpenFlow Table:
4.1 Pipeline Processing:
Flow Table用一串用0开始的数字命名,Pipeline Processing开始于Flow Table 0,结束于最后一个Flow Table。
当匹配成功时,将转发给下一个Flow Table,继续匹配,但需要注意,Flow Table的转发是单向的,不能回传,在转发的过程中,所有的Action都会存放在Action Set中,最后结束Pipeline Processing时,执行Action Set中的操作。
当匹配不成功时:产生table miss,table miss的处理取决于配置,可以是:将包丢掉;转发给Controller;转发给下一个Flow Table;4.2 Flow table:
Flow entry如下图所示:
Match Field:用于匹配的包和转发规则的词条,一般包括包头,输入端口(ingress port)和metadata;
Priority:匹配优先级;
Counters:匹配成功时自增;
Instruction:调整action set或者pipeline processing
Timeouts:该Flow Entry的过期时间
Cookie:此处不详述4.3 匹配过程:
如果Flow Entry的Matching Field被设置为ANY,则任何包都可以匹配成功,每个包只会匹配优先级最高的一个Flow Entry,如果出现两个优先级一样的Flow Entry,那么用于匹配是哪一个,将是未知的。4.4 Table-miss:
Table-miss也类似与一个Flow Entry,它可以匹配任何包,且拥有最低优先级0,转发对象为CONTROLLER或者下一级Flow Table,它也有timeout,即它也可能过期,如果一个Flow Table中没有Table-miss那么没有匹配成功的包将会被丢弃。
4.5 Flow Removal:
一个Flow Entry的移除可以是通过controller发送delete,或者Flow Entry的timeout,timeout有两种:一种是hard,即Flow Entry的使用时间,时间过了即过期;另一种为idle,即一段时间改Flow Entry没有被匹配后过期。无论哪种方式产生Flow Removal都必须向controller发送Flow Removal的消息(可配置)
5 OpenFlow Channel:
5.1 OpenFlow Channel:
OpenFlow Channel上的OpenFlow协议支持三种信息:controller-to-switch,asynchronous和symmetric
5.1.1 Controller-to-switch:
即控制器向交换机发出的指令.
Features:要求交换机回复其能力范围,如有几个接口,可以支持哪些指令等。
Configurations:询问并配置交换机。交换机进返回配置结果。
Modify-state:设置Flow Table(增加,删除,调整Flow Entry),设置Port的属性。
Read-state:读取Flow Entry,Configurations等。
Packet-out:给交换机发包或者包的存储ID,让它想某个Port转发。与Packet-in配合。
Barrier:交换机收到Barrier之后,会想Barrier之前的信息全部处理后,回复Controller,在处理之后的信息。(这是由于OpenFlow Channel支持多种协议同时运行,不仅有TCP,还有UDP等其他,而UDP不能保证按序到达,而且还有可能出现多个controller控制一个交换机的情况,这种情况下,有时需要保证信息的先后顺序)
Role-Request:用于多controller时的角色切换。
Asynchronous-Configuration:配置滤除交换机发送的部分Asynchronous信息。5.1.2 Asynchronous:
即switch可以主动发送的消息。
Packet-in:所有传入CONTROLLER的包都由Packet-in输入,可以是携带包本身,或者存在交换机中,发送存储ID。
Flow-Removal:所有Flow Entry的移除都通过该消息发给Controller。
Port-status:告诉controller某个port发生了变化,如断线等。
Error:告诉controller发生配置错误等。5.1.3 Symmetric:
双方都可以主动发送的消息。
Hello:交换机与controller建立连接时使用。
Echo:呼唤对方,以确保连接正常,在controller-to-switch和Asynchronous消息中,如果接收方不用回复消息,也要回复Echo,通知连接正常。
Experimenter:未来用于实验的命令,不详述。5.1.4 链接建立:
除开TCP等各协议自己必须的连接建立通信外,还需要双方互发hello并携带OpenFlow版本信息,最后确认版本后,开始正常通信,controller在建立连接后应该最先发送Features消息来获取交换机的Datapath ID。
5.1.5 链接中断:
当controller与交换机断开连接时:交换机进入两种模式之一:掉线独立模式或者掉线安全模式。掉线独立模式指掉线后,交换机可以执行普通交换机的功能。掉线安全啊模式指掉线后,交换机依旧使用Flow Table转发,并且其中的Flow Entry同样会timeout。
6 OpenFlow标准中补充:
在OpenFlow标准中,还描述了Group Table,Meter Table的具体细节,多controller防止交换机掉线,OpenFlow Channel的多连接通信,以及所有实现中需要用到的结构体数据等,读者需要可自行阅读。
-
PIC32单片机SPI简介与踩坑
SPI(Serial Peripheral Interface)是很常见控制器与其他器件通信的方式。一般来说正常。SPI由四线组成:
1)MOSI – 主器件数据输出,从器件数据输入
2)MISO – 主器件数据输入,从器件数据输出
3)SCLK – 时钟信号,由主器件产生
4)/SS – 从器件使能信号,由主器件控制
在PIC32单片机中SPI的速率甚至能到1.1Mkps,SPI具体协议在这里不具体介绍。
在PIC32的SPI外设中,SCLK不受主动控制,只有当在向传输寄存器写入数据的时候,SCLK才会自动驱动。换言之,在使用SPI的时候,即使你只想接受数据,也必须写数据才能驱动SCLK,接受数据。据某乎上用户说:STM32上的SPI外设也存在这样的问题。