You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Postman向ODL Nytrogen版REST API推送流失败求助

排查ODL Nitrogen推送MPLS流规则失败的问题

我来帮你一步步排查这个推送MPLS流规则到ODL Nitrogen版本失败的问题,下面是几个常见的排查方向和解决方案:

1. 检查RESTCONF URL路径是否正确

你当前的URL是针对单个指令资源的,但ODL的RESTCONF通常要求针对整个流资源进行PUT/POST操作,而不是单独更新某个指令。正确的路径应该直接指向流节点:

http://192.168.21.144:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/100

单独修改指令的路径在多数场景下不适用,尤其是创建新流的时候,需要把所有流属性(包括instructions)放在请求体中一次性提交。

2. 确认请求头和认证信息是否正确

ODL RESTCONF默认需要基础认证,且要求指定正确的内容类型:

  • 必须携带Authorization: Basic YWRtaW46YWRtaW4=(对应用户名admin,密码admin)
  • 必须设置Content-Type: application/xml或application/yang-data+xml
    如果缺少这些头,会返回401(未授权)或400(请求格式错误)。

3. 检查请求体XML的完整性和语法

你的请求体内容不完整(<order>3</order>...),流规则需要包含所有必填字段,且XML语法必须正确:

  • 必须包含流ID(<id>100</id>)、优先级(<priority>xxx</priority>)、匹配规则(即使是空匹配也要有<match/>)
  • 指令部分需要完整的动作定义,比如推送MPLS标签的动作需要包含<apply-actions>、<push-mpls-action>和对应的参数(如以太网类型、标签值等)
  • 确保所有XML标签闭合,命名空间正确(根节点flow的命名空间urn:opendaylight:flow:inventory不能缺失)

这里给你一个完整的MPLS推送流规则示例:

<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="urn:opendaylight:flow:inventory">
    <flow-name>push-mpls-action</flow-name>
    <id>100</id>
    <priority>1000</priority>
    <match/>
    <instructions>
        <instruction>
            <order>3</order>
            <apply-actions>
                <action>
                    <order>0</order>
                    <push-mpls-action xmlns="urn:opendaylight:action:output">
                        <ethernet-type>0x8847</ethernet-type>
                    </push-mpls-action>
                </action>
                <action>
                    <order>1</order>
                    <set-field>
                        <mpls-label>
                            <label>100</label>
                            <traffic-class>0</traffic-class>
                            <bos>1</bos>
                            <ttl>255</ttl>
                        </mpls-label>
                    </set-field>
                </action>
            </apply-actions>
        </instruction>
    </instructions>
    <hard-timeout>0</hard-timeout>
    <idle-timeout>0</idle-timeout>
    <table_id>0</table_id>
</flow>

4. 查看ODL日志定位具体错误

ODL的Karaf日志会详细记录RESTCONF请求的错误原因,登录到ODL服务器,查看karaf/logs/karaf.log文件:

  • 如果是XML解析错误,会看到类似SAXParseException的日志
  • 如果是流规则冲突(比如流ID重复、优先级问题),会有对应的规则校验失败信息
  • 如果是路径不存在,会返回404并在日志中提示资源未找到

5. 用curl命令测试排除工具问题

用curl发送请求可以明确看到响应状态码和错误信息,避免工具本身的问题:

curl -u admin:admin -X PUT -H "Content-Type: application/xml" -d @flow.xml http://192.168.21.144:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/100

把完整的XML内容保存到flow.xml文件中,执行命令后根据返回的状态码排查:

  • 400:请求体格式错误或必填字段缺失
  • 401:认证失败(用户名密码错误或未携带认证头)
  • 404:URL路径错误(比如节点IDopenflow:1不存在,或表ID错误)
  • 500:ODL内部错误(可能是yang模型加载问题或插件故障)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:00