You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

ODL中配置库添加的流未在操作库显示,请求排查问题原因

排查ODL Config有流但Operational无对应流的问题

嘿,这个场景我在做ODL OpenFlow项目的时候踩过好几次坑,咱们一步步拆解可能的原因和排查方法:

核心逻辑先明确

首先得记住ODL里两个datastore的区别:

  • Config datastore:存的是你想要下发的「意图配置」,不管设备能不能生效,只要格式合法就能存进去
  • Operational datastore:存的是设备上「实际生效」的配置,只有当ODL把config里的规则成功下发到设备,且设备确认接收后,才会同步到这里

所以问题本质是:你的流规则没有从Config成功同步到设备,或者同步后设备没反馈给ODL。


具体排查方向

1. 设备连接状态异常

如果ODL和设备之间的OpenFlow会话断了,或者会话不稳定,流根本发不出去。

  • 先在ODL的Karaf控制台里执行openflow:show-flows(如果装了openflowplugin),看看能不能看到目标设备的信息;
  • 查看Karaf日志(log:tail),搜设备的DPID,有没有Session closed或者Connection refused这类错误;
  • 直接登录设备,用ovs-ofctl show <bridge-name>(如果是OVS)确认设备和ODL的控制器连接是否正常。

2. 流规则格式/参数不合法

ODL接收了你的配置(所以Config里有),但下发给设备时被拒绝了。

  • 检查流的匹配字段:比如是不是指定了设备不存在的端口号、VLAN ID,或者用了设备不支持的匹配项(比如某些老设备不支持IPv6匹配);
  • 检查动作字段:比如output动作的端口是不是LOCAL或者设备实际存在的端口,有没有用设备不支持的动作(比如set-field的某些参数);
  • 看Karaf日志里的错误信息,通常会明确指出流规则被拒绝的原因,比如Flow mod failed: BAD_ACTION

3. 配置提交的路径错误

你可能把流存在了错误的Yang模型路径下,ODL根本不会把这个路径的配置下发到设备。

  • 正确的流配置路径应该是:
    /restconf/config/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
    
    确认你POST/PUT的路径是不是符合这个格式,有没有写错命名空间(比如漏了opendaylight-inventory:)。

4. OpenFlow版本兼容性问题

ODL的openflowplugin版本和设备的OpenFlow版本不匹配,导致下发失败。

  • 比如你用ODL Neon版本的openflowplugin(默认支持OF13),但设备只开了OF10,这时候流下发会失败;
  • 在Karaf里执行feature:list | grep openflow确认插件版本,同时在设备上用ovs-vsctl set bridge <bridge> protocols=OpenFlow13(如果是OVS)调整协议版本。

5. Operational Datastore刷新延迟

有时候不是没同步,而是ODL的Operational datastore刷新有延迟。

  • 等个10-15秒再重新GET Operational的流;
  • 可以手动触发同步,执行RESTCONF请求:
    POST /restconf/operations/opendaylight-inventory:refresh-operational
    
    (注意需要有对应的权限,且ODL版本支持这个操作)

快速验证步骤

  1. 先确认Config里的流内容和路径完全正确;
  2. 查设备上有没有这个流(用设备自身的命令);
  3. 查ODL日志有没有流下发相关的错误;
  4. 确认设备和ODL的会话正常。

内容的提问来源于stack exchange,提问作者Juan Andrés Martinez

火山引擎 最新活动