OpenFastPath(1):快平面接口是否支持多ip
1、配置环境
fp0接口上配置两个IP地址:
fp0 Link encap:Ethernet HWaddr 00:0c:29:30:38:db
inet addr:192.168.56.33 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe30:38db/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:51791 errors:0 dropped:0 overruns:0 frame:0
TX packets:196 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4412183 (4.4 MB) TX bytes:38552 (38.5 KB)
fp0:0 Link encap:Ethernet HWaddr 00:0c:29:30:38:db
inet addr:192.168.57.33 Bcast:192.168.57.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
2、测试现象
启动example/udpecho程序(udp回显,bind的port为2048)。测试现象如下:
1)pc上ping 192.168.56.33,可以ping通;pc上启动udp客户端,向目的ip 192.168.56.33发送udp报文,回显功能正常;
2)pc上ping 192.168.57.34,可以ping通;pc上启动udp客户端,向目的ip 192.168.57.33发送udp报文,回显功能不可用。
3、对测试现象的分析
pc上针对ip地址192.168.56.33发起的ping操作、发送udp报文,均是FP进行处理,这里不再分析。下文只分析针对192.168.57.33地址的操作。
3.1 pc上向ip 192.168.57.34发起的arp请求,是fp回应的,还是sp回应的?
[0] ODP to FP: 627.417
50:7b:9d:a1:ce:27 -> ff:ff:ff:ff:ff:ff
ARP 1 192.168.57.34 -> 192.168.57.33 [0] FP to ODP: 627.418
00:0c:29:30:38:db -> 50:7b:9d:a1:ce:27
ARP 2 192.168.57.33 -> 192.168.57.34
从packet.txt调试信息来看,是FP回应的。
代码确认:
ofp_eth_vlan_processing -> ofp_arp_processing:
当接收到ARP请求后,检查ARP请求的目的IP是否为本机的?如果是,则进行ARP回应。
再看ofp_ifnet_ip_find的具体实现,是检查接口的所有IP,只要有一个匹配,则认为是本机应该回应的。
结论:pc上向ip 192.168.57.34发起的arp请求,是fp回应的。
3.2 pc上ping 192.168.57.34,icmp响应是fp回应的?还是sp回应的?
[0] ODP to FP: 627.418
50:7b:9d:a1:ce:27 -> 00:0c:29:30:38:db
IP ICMP: echo 192.168.57.34 -> 192.168.57.33 id=256 seq=7424
[0] FP to ODP: 627.419
00:0c:29:30:38:db -> 50:7b:9d:a1:ce:27
IP ICMP: echo reply 192.168.57.33 -> 192.168.57.34 id=256 seq=7424
从packet.txt调试信息来看,是FP回应的。
代码确认:
ofp_eth_vlan_processing -> ofp_ipv4_processing:
这段代码的逻辑:判断报文的目的ip是不是接口上的第一个ip,如果是,则需要FP继续处理;如果不是接口上的第一个ip,则查找路由表,如果能查找到路由项,且路由项的flag为OFP_RTF_LOCAL,则需要FP继续处理。
telnet localhost 2345
> route
Destination Gateway Iface Flags
VRF: 0
192.168.56.0/24 0.0.0.0 fp0 gateway
192.168.56.33/32 0.0.0.0 fp0 local
192.168.57.0/24 0.0.0.0 fp0 gateway
192.168.57.33/32 0.0.0.0 fp0 local
通过查找快平面的路由表,发现对应的Local路由存在
结论:pc上ping 192.168.57.34,是FP回应的。
3.3 pc上启动udp客户端,向目的ip 192.168.57.33发送udp报文,此udp报文是进入fp处理,还是sp处理?
[0] ODP to FP: 4198.938
50:7b:9d:a1:ce:27 -> 00:0c:29:30:38:db
IP UDP PKT len=1478 192.168.57.34:52512 -> 192.168.57.33:2048
[0] FP to SP: 4198.940
50:7b:9d:a1:ce:27 -> 00:0c:29:30:38:db
IP UDP PKT len=1478 192.168.57.34:52512 -> 192.168.57.33:2048
[0] SP to ODP: 4198.940
00:0c:29:30:38:db -> 50:7b:9d:a1:ce:27
IP ICMP: dest unreachable 192.168.57.33 -> 192.168.57.34
从packet.txt调试信息来看,udp报文由于FP平面不能处理,进入SP平面,但SP平面也不能处理(没有监听2048端口),所以SP回应ICMP端口不可达报文
代码确认:
ofp_eth_vlan_processing -> ofp_ipv4_processing:
与3.3的流程相同,查找路由后,发现需要本地处理。
ofp_ipv4_processing中调用ipv4_transport_classifier(功能类似于BSD中的协议开关表),进入udp处理,但发现处理不了,返回continue将此报文从FP转发到SP中。SP同样无法处理,回应icmp目的不可达报文。
疑问:example/udpecho程序为什么不能处理针对接口第二个IP的UDP报文?
通过查看代码,socket绑定ip地址时,ofp_port_get_ipv4_addr函数只取下标0对应的IP,即接口上的第一个ip。所以,example/udpecho程序不能处理针对接口第二个IP的UDP报文。
4、结论
OpenFastPath 3.0.0版本已经支持多IP。(说明:2018年1月份的版本是不支持的)
5、SP平面配置的接口ip如何同步到FP平面
通过netlink机制进行同步。
代码线索:start_netlink_nl_server –> route_recv –> route_read
当接收到RTM_NEWADDR/RTM_DELADDR消息时,调用handle_ipv4v6_addr函数进行IP地址同步。
OpenFastPath(1):快平面接口是否支持多ip的更多相关文章
- 上网爱快?EasyRadius FOR 爱快V2接口测试版正式推出,欢迎广大爱迷们测试噢
…… …… 有些人问:为什么上面要打省略号?那些因为此处省略无数字,但是我还是要和大伙们谈谈EasyRadius支持爱快的故事 早在2013年的时候,我们内部就有发布爱快接口,但是由于当时V1的爱快, ...
- 下一代USB接口将支持双向拔插,于明年亮相
近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时 ...
- 关于WinCE流接口驱动支持10以上的端口号(COM10)
一般情况下,WinCE流驱动的索引为0~9.应用程序中,通过CreateFile(_T("XXXN:"),…)打开对应的驱动,N也为0~9.这样看来,似乎在WinCE下同名流驱动个 ...
- 开源:矿Android新闻client,快、小、支持离线阅读、操作简单、内容丰富,形式多样展示、的信息量、全功能 等待(离开码邮箱)
分享:矿Android新闻client.快.小.支持离线阅读.操作简单.内容丰富,形式多样展示.的信息量.全功能 等待(离开码邮箱) 历时30天我为了开发这个新闻clientAPP,下面简称觅闻 ht ...
- Openfire开发广播服务接口,支持离线广播消息
Openfire开发广播服务接口,支持离线广播消息 概要 最近公司要求做一个web端向所有移动端发送公告,所以考虑到即时性就用openfire做服务.不过为了减轻web端的工作量,我们开发一个简单的插 ...
- Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问
Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 关键词: frp内网 ...
- 实战-DRF快速写接口(认证权限频率)
实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestframework3.13 测试工具 Postma ...
- mormot支持TCP/IP
mormot支持TCP/IP http.sys本来就构建于TCP/IP之上,因此HTTP.SYS是支持TCP/IP连接的. 笔者为此特意写了一个测试DEMO.TCP/IP连接成功. 如果客户端过一段时 ...
- 迅为iMX6UL Cortex-A7架构单核ARM开发板接口介绍-支持定制
支持商业级和工业级核心板 1. POWER 电源接口电源输入为 5V/2A+,给核心板提供 5V 电源,给底板供电.原理图部分如下图所示. 电源接口位置如下图所示. 2. SWITCH 电源开关轻触电 ...
随机推荐
- IDEA使用心得整理
[演出模式] 我们可以使用[Presentation Mode],将IDEA弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的coding. 可以使用Alt+V快捷键,弹出View视图,然后选择 ...
- 理解JVM——JVM的结构
这是理解JVM的第一篇文章,这篇文章主要介绍JVM的总体结构和每一个部分的功能.内容比较少,对于每一个部分详细的内容,放到后面的文章中,逐步展开.这个系列总结完,应该会对JVM有一个整体且深入的认识了 ...
- Payment:微信支付配置文件设置说明
项目GitHub地址:https://github.com/helei112g/payment 微信支付个人觉得在帐号设置上有些麻烦,帐号太多啦,支付宝目前就是一个应用基本涵盖了所有的接口开发. 可能 ...
- 如何用代码而非事件触发PBO
通常我们通过抛出事件触发PBO,但若没有事件发生时,我们其实也可以用代码强制发出命令. 写法如下: CL_GUI_CFW=>SET_NEW_OK_CODE( NEW_CODE = <uco ...
- 【转】 Android应用内多进程分析和研究
正常情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行.但是如果需要将某些组件(如Service.A ...
- HashMap实现原理及源码分析之JDK8
继续上回HashMap的学习 HashMap实现原理及源码分析之JDK7 转载 Java8源码-HashMap 基于JDK8的HashMap源码解析 [jdk1.8]HashMap源码分析 一.H ...
- 初识Qt文字绘制
1.新建一个Qt Gui应用,项目名称为myDraw,基类选择为QMainWindow,类名设置为MainWindow. 2.在mainwindow.h头文件中添加void paintEvent(QP ...
- CANopen个人之所见,所想
一直想写一篇关于CANopen的文章,鉴于个人知识能力没有动笔,今天做了一番思想斗争,斗胆发表一下自己对CANOPEN的肤浅认识. 计划从销售人员,技术人员角度都分析一下CANopen的优势,文章可能 ...
- MacOS在Finder中建立快速新建txt的workflow
Mac是不支持右键直接新建txt的,因此有时候需要用到文本文稿的时候会比较麻烦. 因此这里提供一种个人认为比较方便的方法,让Mac也能很简洁的新建txt文件. 工具介绍: Automator ...
- # pc端个性化日历实现
pc端个性化日历实现 技术:vue => v-for.slot-scop 插槽域 需求:需要实现日历上每一天动态显示不同的信息 思路:运用vue 中 slot-scop 插槽域的知识点,将个性化 ...